summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2014-11-06 09:35:54 +0100
committerGeorg Brandl <georg@python.org>2014-11-06 09:35:54 +0100
commit30813f6b4f5e8e8590e0b3206b43c14730900506 (patch)
treefa94f60938acc1f0ee410e32e51c95b459e17bb7 /scripts
parentc6df9d02e6e7f269d0e74906fd9b3cad72d9c1e4 (diff)
downloadpygments-30813f6b4f5e8e8590e0b3206b43c14730900506.tar.gz
Remove obsolete script to find "codetags".
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/find_codetags.py211
1 files changed, 0 insertions, 211 deletions
diff --git a/scripts/find_codetags.py b/scripts/find_codetags.py
deleted file mode 100755
index 5063f61f..00000000
--- a/scripts/find_codetags.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- Codetags finder
- ~~~~~~~~~~~~~~~
-
- Find code tags in specified files and/or directories
- and create a report in HTML format.
-
- :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
- :license: BSD, see LICENSE for details.
-"""
-
-from __future__ import print_function
-
-import os
-import re
-import sys
-import getopt
-from os.path import join, abspath, isdir, isfile
-
-
-TAGS = set(('XXX', 'TODO', 'FIXME', 'HACK'))
-
-tag_re = re.compile(
- r'(?P<tag>\b' + r'\b|\b'.join(TAGS) + r'\b)\s*'
- r'(?: \( (?P<who> .*? ) \) )?'
- r'\s*:?\s* (?P<what> .*? ) \s* $',
- re.X)
-
-binary_re = re.compile('[\x00-\x06\x0E-\x1F]')
-
-
-def escape_html(text):
- return text.replace('&', '&amp;'). \
- replace('<', '&lt;'). \
- replace('>', '&gt;'). \
- replace('"', '&quot;')
-
-def process_file(store, filename):
- try:
- fp = open(filename, 'r')
- except (IOError, OSError):
- return False
- llmatch = 0
- with fp:
- for lno, line in enumerate(fp):
- # just some random heuristics to filter out binary files
- if lno < 100 and binary_re.search(line):
- return False
- m = tag_re.search(line)
- if m:
- store.setdefault(filename, []).append({
- 'lno': lno+1,
- 'tag': m.group('tag'),
- 'who': m.group('who') or '',
- 'what': escape_html(m.group('what')),
- })
- # 'what' cannot start at column 0
- llmatch = m.start('what')
- elif llmatch:
- # continuation lines
- # XXX: this is Python centric, doesn't work for
- # JavaScript, for example.
- if line[:llmatch].replace('#', '').isspace():
- cont = line[llmatch:].strip()
- if cont:
- store[filename][-1]['what'] += ' ' + escape_html(cont)
- continue
- llmatch = 0
- return True
-
-
-def main():
- try:
- gopts, args = getopt.getopt(sys.argv[1:], "vo:i:")
- except getopt.GetoptError:
- print(("Usage: %s [-v] [-i ignoredir]* [-o reportfile.html] "
- "path ..." % sys.argv[0]))
- return 2
- opts = {}
- for opt, val in gopts:
- if opt == '-i':
- val = abspath(val)
- opts.setdefault(opt, []).append(val)
-
- if not args:
- args = ['.']
-
- if '-o' in opts:
- output = abspath(opts['-o'][-1])
- else:
- output = abspath('tags.html')
-
- verbose = '-v' in opts
-
- store = {}
- gnum = 0
- num = 0
-
- for path in args:
- print("Searching for code tags in %s, please wait." % path)
-
- if isfile(path):
- gnum += 1
- if process_file(store, path):
- if verbose:
- print(path + ": found %d tags" % \
- (path in store and len(store[path]) or 0))
- num += 1
- else:
- if verbose:
- print(path + ": binary or not readable")
- continue
- elif not isdir(path):
- continue
-
- for root, dirs, files in os.walk(path):
- if '-i' in opts and abspath(root) in opts['-i']:
- del dirs[:]
- continue
- if '.hg' in dirs:
- dirs.remove('.hg')
- if 'examplefiles' in dirs:
- dirs.remove('examplefiles')
- if 'dist' in dirs:
- dirs.remove('dist')
- for fn in files:
- gnum += 1
- if gnum % 25 == 0 and not verbose:
- sys.stdout.write('.')
- sys.stdout.flush()
-
- fn = join(root, fn)
-
- if fn.endswith('.pyc') or fn.endswith('.pyo'):
- continue
- elif '-i' in opts and abspath(fn) in opts['-i']:
- continue
- elif abspath(fn) == output:
- continue
-
- if fn[:2] == './': fn = fn[2:]
- if process_file(store, fn):
- if verbose:
- print(fn + ": found %d tags" % \
- (fn in store and len(store[fn]) or 0))
- num += 1
- else:
- if verbose:
- print(fn + ": binary or not readable")
- print()
-
- print("Processed %d of %d files. Found %d tags in %d files." % (
- num, gnum, sum(len(fitem) for fitem in store.values()), len(store)))
-
- if not store:
- return 0
-
- HTML = '''\
-<html>
-<head>
-<title>Code tags report</title>
-<style type="text/css">
-body { font-family: Trebuchet MS,Verdana,sans-serif;
- width: 80%%; margin-left: auto; margin-right: auto; }
-table { width: 100%%; border-spacing: 0;
- border: 1px solid #CCC; }
-th { font-weight: bold; background-color: #DDD }
-td { padding: 2px 5px 2px 5px;
- vertical-align: top; }
-.tr0 { background-color: #EEEEEE; }
-.tr1 { background-color: #F6F6F6; }
-.tag { text-align: center; font-weight: bold; }
-.tr0 .tag { background-color: #FFEEEE; }
-.tr1 .tag { background-color: #FFDDDD; }
-.head { padding-top: 10px; font-size: 100%%; font-weight: bold }
-.XXX { color: #500; }
-.FIXME { color: red; }
-.TODO { color: #880; }
-</style>
-</head>
-<body>
-<h1>Code tags report for %s</h1>
-<table>
-<tr><th>Line</th><th>Tag</th><th>Who</th><th>Description</th></tr>
-%s
-</table>
-</body>
-</html>
-'''
-
- TABLE = '\n<tr><td class="head" colspan="4">File: %s</td>\n'
-
- TR = ('<tr class="tr%d"><td class="lno">%%(lno)d</td>'
- '<td class="tag %%(tag)s">%%(tag)s</td>'
- '<td class="who">%%(who)s</td><td class="what">%%(what)s</td></tr>')
-
- table = '\n'.join(TABLE % fname +
- '\n'.join(TR % (no % 2,) % entry
- for no, entry in enumerate(store[fname]))
- for fname in sorted(store))
-
- with open(output, 'w') as fp:
- fp.write(HTML % (', '.join(map(abspath, args)), table))
-
- print("Report written to %s." % output)
- return 0
-
-if __name__ == '__main__':
- sys.exit(main())