|  | # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """ Error and information logging for IDL """ | 
|  |  | 
|  | import sys | 
|  |  | 
|  |  | 
|  | class IDLLog(object): | 
|  | """Captures and routes logging output. | 
|  |  | 
|  | Caputres logging output and/or sends out via a file handle, typically | 
|  | stdout or stderr. | 
|  | """ | 
|  | def __init__(self, name, out): | 
|  | if name: | 
|  | self._name = '%s : ' % name | 
|  | else: | 
|  | self._name = '' | 
|  |  | 
|  | self._out = out | 
|  | self._capture = False | 
|  | self._console = True | 
|  | self._log = [] | 
|  |  | 
|  | def Log(self, msg): | 
|  | if self._console: | 
|  | line = "%s\n" % (msg) | 
|  | self._out.write(line) | 
|  | if self._capture: | 
|  | self._log.append(msg) | 
|  |  | 
|  | def LogLine(self, filename, lineno, pos, msg): | 
|  | if self._console: | 
|  | line = "%s(%d) : %s%s\n" % (filename, lineno, self._name, msg) | 
|  | self._out.write(line) | 
|  | if self._capture: | 
|  | self._log.append(msg) | 
|  |  | 
|  | def SetConsole(self, enable): | 
|  | self._console = enable | 
|  |  | 
|  | def SetCapture(self, enable): | 
|  | self._capture = enable | 
|  |  | 
|  | def DrainLog(self): | 
|  | out = self._log | 
|  | self._log = [] | 
|  | return out | 
|  |  | 
|  | ErrOut  = IDLLog('Error', sys.stderr) | 
|  | WarnOut = IDLLog('Warning', sys.stdout) | 
|  | InfoOut = IDLLog('', sys.stdout) |