| Index: docs/src/filter_demo_output.py
 | 
| diff --git a/docs/src/filter_demo_output.py b/docs/src/filter_demo_output.py
 | 
| new file mode 100755
 | 
| index 0000000000000000000000000000000000000000..3d11b52f738195463183b11d11f6362e76d6144c
 | 
| --- /dev/null
 | 
| +++ b/docs/src/filter_demo_output.py
 | 
| @@ -0,0 +1,137 @@
 | 
| +#!/usr/bin/env python
 | 
| +# Copyright (c) 2014 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.
 | 
| +
 | 
| +import collections
 | 
| +import os
 | 
| +import re
 | 
| +import sys
 | 
| +
 | 
| +from xml.sax.saxutils import escape
 | 
| +
 | 
| +from cStringIO import StringIO
 | 
| +
 | 
| +if not os.path.exists('ansi2html'):
 | 
| +  print 'You must run ./make_docs.sh once before running this script.'
 | 
| +  sys.exit(1)
 | 
| +
 | 
| +# This dependency is pulled in by make_docs.sh
 | 
| +# if it doesn't exist, run ./make_docs.sh first
 | 
| +sys.path.insert(0, 'ansi2html')
 | 
| +
 | 
| +import ansi2html            # pylint: disable=F0401, W0611
 | 
| +import ansi2html.converter  # pylint: disable=F0401, W0611
 | 
| +
 | 
| +def simpleXML(string):
 | 
| +  BRIGHT = 1
 | 
| +  DIM    = 2
 | 
| +  NORMAL = 22
 | 
| +  RESET  = 0
 | 
| +  ESC_RE = re.compile('(\x1B\\[[^m]*?)m')
 | 
| +
 | 
| +  ret = StringIO()
 | 
| +  boldstate = False
 | 
| +
 | 
| +  for tok in ESC_RE.split(string):
 | 
| +    if not tok:
 | 
| +      continue
 | 
| +    if tok[0] == '\x1b':
 | 
| +      codes = map(int, filter(bool, tok[2:].split(';')))
 | 
| +      if not codes:
 | 
| +        codes = [RESET]
 | 
| +      for code in codes:
 | 
| +        # only care about Bright
 | 
| +        if code == BRIGHT and boldstate is False:
 | 
| +          boldstate = True
 | 
| +          ret.write('<emphasis role="strong">')
 | 
| +        elif code in (DIM, NORMAL, RESET) and boldstate:
 | 
| +          boldstate = False
 | 
| +          ret.write('</emphasis>')
 | 
| +    else:
 | 
| +      ret.write(escape(tok))
 | 
| +
 | 
| +  if boldstate:
 | 
| +    ret.write('</emphasis>')
 | 
| +
 | 
| +  return ret.getvalue()
 | 
| +
 | 
| +
 | 
| +def main():
 | 
| +  ansi2html.converter.SCHEME['custom'] = (
 | 
| +      "#000000", "#e42e16", "#19c518", "#e7e71c", "#492ee1",
 | 
| +      "#d338d3", "#33d6e5", "#ffffff",
 | 
| +  )
 | 
| +
 | 
| +  backend = sys.argv[1]
 | 
| +  output = sys.stdin.read().rstrip()
 | 
| +
 | 
| +  callout_re = re.compile('\x1b\[(\d+)c\n')
 | 
| +  callouts = collections.defaultdict(int)
 | 
| +  for i, line in enumerate(output.splitlines(True)):
 | 
| +    m = callout_re.match(line)
 | 
| +    if m:
 | 
| +      callouts[i + int(m.group(1)) - len(callouts)] += 1
 | 
| +
 | 
| +  output = callout_re.sub('', output)
 | 
| +
 | 
| +  w = sys.stdout.write
 | 
| +
 | 
| +  callout_counter = 1
 | 
| +  if backend == 'xhtml11':
 | 
| +    preamble = (
 | 
| +        '</p></div><div class="listingblock"><div class="content"><pre><code>'
 | 
| +    )
 | 
| +    postamble = '</code></pre></div></div><p><div class="paragraph">'
 | 
| +    c = ansi2html.Ansi2HTMLConverter(inline=True, scheme='custom')
 | 
| +
 | 
| +    in_code = False
 | 
| +    body = c.convert(output, full=False)
 | 
| +    for i, line in enumerate(body.splitlines()):
 | 
| +      if line.startswith('# '):
 | 
| +        if in_code:
 | 
| +          w(postamble)
 | 
| +          in_code = False
 | 
| +        w(line[1:])
 | 
| +      else:
 | 
| +        if not in_code:
 | 
| +          w(preamble)
 | 
| +          in_code = True
 | 
| +        ext = ''
 | 
| +        for _ in xrange(callouts[i]):
 | 
| +          if not ext:
 | 
| +            ext += '</span>'
 | 
| +          ext += ' <b><%d></b>' % callout_counter
 | 
| +          callout_counter += 1
 | 
| +        if ext:
 | 
| +          ext += '<span>'
 | 
| +        w(line + ext + '\n')
 | 
| +    if in_code:
 | 
| +      w(postamble)
 | 
| +  else:
 | 
| +    preamble = '</simpara><literallayout class="monospaced">'
 | 
| +    postamble = '</literallayout><simpara>'
 | 
| +
 | 
| +    in_code = False
 | 
| +    body = simpleXML(output)
 | 
| +    for i, line in enumerate(body.splitlines()):
 | 
| +      if line.startswith('# '):
 | 
| +        if in_code:
 | 
| +          w(postamble)
 | 
| +          in_code = False
 | 
| +        w(line[1:])
 | 
| +      else:
 | 
| +        if not in_code:
 | 
| +          w(preamble)
 | 
| +          in_code = True
 | 
| +        ext = ''
 | 
| +        for _ in xrange(callouts[i]):
 | 
| +          ext += '  <emphasis role="strong">(%d)</emphasis>' % callout_counter
 | 
| +          callout_counter += 1
 | 
| +        w(line + ext + '\n')
 | 
| +    if in_code:
 | 
| +      w(postamble)
 | 
| +
 | 
| +
 | 
| +if __name__ == '__main__':
 | 
| +  main()
 | 
| 
 |