Home | History | Annotate | Download | only in generators
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """ Error and information logging for IDL """
      6 
      7 #
      8 # IDL Log
      9 #
     10 # And IDLLog object provides a mechanism for capturing logging output
     11 # and/or sending out via a file handle (usually stdout or stderr).
     12 #
     13 import sys
     14 
     15 
     16 class IDLLog(object):
     17   def __init__(self, name, out):
     18     if name:
     19       self.name = '%s : ' % name
     20     else:
     21       self.name = ''
     22 
     23     self.out = out
     24     self.capture = False
     25     self.console = True
     26     self.log = []
     27 
     28   def Log(self, msg):
     29     line = "%s\n" % (msg)
     30     if self.console: self.out.write(line)
     31     if self.capture:
     32       self.log.append(msg)
     33 
     34   def LogTag(self, msg):
     35     line = "%s%s\n" % (self.name, msg)
     36     if self.console: self.out.write(line)
     37     if self.capture:
     38       self.log.append(msg)
     39 
     40   def LogLine(self, filename, lineno, pos, msg):
     41     line = "%s(%d) : %s%s\n" % (filename, lineno, self.name, msg)
     42     if self.console: self.out.write(line)
     43     if self.capture: self.log.append(msg)
     44 
     45   def SetConsole(self, enable, out = None):
     46     self.console = enable
     47     if out: self.out = out
     48 
     49   def SetCapture(self, enable):
     50     self.capture = enable
     51 
     52   def DrainLog(self):
     53     out = self.log
     54     self.log = []
     55     return out
     56 
     57 ErrOut  = IDLLog('Error', sys.stderr)
     58 WarnOut = IDLLog('Warning', sys.stdout)
     59 InfoOut = IDLLog('', sys.stdout)
     60