diff options
Diffstat (limited to 'source-builder/sb/asciidoc/filters/code')
4 files changed, 0 insertions, 299 deletions
diff --git a/source-builder/sb/asciidoc/filters/code/code-filter-readme.txt b/source-builder/sb/asciidoc/filters/code/code-filter-readme.txt deleted file mode 100644 index 2a35f86..0000000 --- a/source-builder/sb/asciidoc/filters/code/code-filter-readme.txt +++ /dev/null @@ -1,37 +0,0 @@ -AsciiDoc Code Filter -==================== - -This simple minded filter highlights source code keywords and -comments. - -NOTE: The filter is to demonstrate how to write a filter -- it's much -to simplistic to be passed off as a code syntax highlighter. If you -want a full featured highlighter use the 'source highlighter filter. - - -Files ------ -code-filter.py:: - The filter Python script. -code-filter.conf:: - The AsciiDoc filter configuration file. -code-filter-test.txt:: - Short AsciiDoc document to test the filter. - - -Installation ------------- -The code filter is installed in the distribution `filters` directory -as part of the standard AsciiDoc install. - -Test it on the `code-filter-test.txt` file: - - $ asciidoc -v code-filter-test.txt - $ firefox code-filter-test.txt & - - -Help ----- -Execute the filter with the help option: - - $ ./code-filter.py --help diff --git a/source-builder/sb/asciidoc/filters/code/code-filter-test.txt b/source-builder/sb/asciidoc/filters/code/code-filter-test.txt deleted file mode 100644 index c9e8192..0000000 --- a/source-builder/sb/asciidoc/filters/code/code-filter-test.txt +++ /dev/null @@ -1,15 +0,0 @@ -Code Filter Test -================ - -[python] -code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -''' A multi-line - comment.''' -def sub_word(mo): - ''' Single line comment.''' - word = mo.group('word') # Inline comment - if word in keywords[language]: - return quote + word + quote - else: - return word -code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source-builder/sb/asciidoc/filters/code/code-filter.conf b/source-builder/sb/asciidoc/filters/code/code-filter.conf deleted file mode 100644 index 5cdab96..0000000 --- a/source-builder/sb/asciidoc/filters/code/code-filter.conf +++ /dev/null @@ -1,8 +0,0 @@ -# -# AsciiDoc code filter configuration file. -# -# Documented in code-filter-readme.txt -# - -[blockdef-listing] -code-style=template="listingblock",presubs=(),postsubs=("callouts",),posattrs=("style","language"),filter="code-filter.py -b {basebackend} -l {language}" diff --git a/source-builder/sb/asciidoc/filters/code/code-filter.py b/source-builder/sb/asciidoc/filters/code/code-filter.py deleted file mode 100755 index 473fd6e..0000000 --- a/source-builder/sb/asciidoc/filters/code/code-filter.py +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env python -''' -NAME - code-filter - AsciiDoc filter to highlight language keywords - -SYNOPSIS - code-filter -b backend -l language [ -t tabsize ] - [ --help | -h ] [ --version | -v ] - -DESCRIPTION - This filter reads source code from the standard input, highlights language - keywords and comments and writes to the standard output. - - The purpose of this program is to demonstrate how to write an AsciiDoc - filter -- it's much to simplistic to be passed off as a code syntax - highlighter. Use the 'source-highlight-filter' instead. - - -OPTIONS - --help, -h - Print this documentation. - - -b - Backend output file format: 'docbook', 'linuxdoc', 'html', 'css'. - - -l - The name of the source code language: 'python', 'ruby', 'c++', 'c'. - - -t tabsize - Expand source tabs to tabsize spaces. - - --version, -v - Print program version number. - -BUGS - - Code on the same line as a block comment is treated as comment. - Keywords inside literal strings are highlighted. - - There doesn't appear to be an easy way to accomodate linuxdoc so - just pass it through without markup. - -AUTHOR - Written by Stuart Rackham, <srackham@gmail.com> - -URLS - http://sourceforge.net/projects/asciidoc/ - http://www.methods.co.nz/asciidoc/ - -COPYING - Copyright (C) 2002-2006 Stuart Rackham. Free use of this software is - granted under the terms of the GNU General Public License (GPL). -''' - -import os, sys, re, string - -VERSION = '1.1.2' - -# Globals. -language = None -backend = None -tabsize = 8 -keywordtags = { - 'html': - ('<strong>','</strong>'), - 'css': - ('<strong>','</strong>'), - 'docbook': - ('<emphasis role="strong">','</emphasis>'), - 'linuxdoc': - ('','') -} -commenttags = { - 'html': - ('<i>','</i>'), - 'css': - ('<i>','</i>'), - 'docbook': - ('<emphasis>','</emphasis>'), - 'linuxdoc': - ('','') -} -keywords = { - 'python': - ('and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', - 'lambda', 'return', 'break', 'else', 'global', 'not', 'try', 'class', - 'except', 'if', 'or', 'while', 'continue', 'exec', 'import', 'pass', - 'yield', 'def', 'finally', 'in', 'print'), - 'ruby': - ('__FILE__', 'and', 'def', 'end', 'in', 'or', 'self', 'unless', - '__LINE__', 'begin', 'defined?' 'ensure', 'module', 'redo', 'super', - 'until', 'BEGIN', 'break', 'do', 'false', 'next', 'rescue', 'then', - 'when', 'END', 'case', 'else', 'for', 'nil', 'retry', 'true', 'while', - 'alias', 'class', 'elsif', 'if', 'not', 'return', 'undef', 'yield'), - 'c++': - ('asm', 'auto', 'bool', 'break', 'case', 'catch', 'char', 'class', - 'const', 'const_cast', 'continue', 'default', 'delete', 'do', 'double', - 'dynamic_cast', 'else', 'enum', 'explicit', 'export', 'extern', - 'false', 'float', 'for', 'friend', 'goto', 'if', 'inline', 'int', - 'long', 'mutable', 'namespace', 'new', 'operator', 'private', - 'protected', 'public', 'register', 'reinterpret_cast', 'return', - 'short', 'signed', 'sizeof', 'static', 'static_cast', 'struct', - 'switch', 'template', 'this', 'throw', 'true', 'try', 'typedef', - 'typeid', 'typename', 'union', 'unsigned', 'using', 'virtual', 'void', - 'volatile', 'wchar_t', 'while') -} -block_comments = { - 'python': ("'''","'''"), - 'ruby': None, - 'c++': ('/*','*/') -} -inline_comments = { - 'python': '#', - 'ruby': '#', - 'c++': '//' -} - -def print_stderr(line): - sys.stderr.write(line+os.linesep) - -def sub_keyword(mo): - '''re.subs() argument to tag keywords.''' - word = mo.group('word') - if word in keywords[language]: - stag,etag = keywordtags[backend] - return stag+word+etag - else: - return word - -def code_filter(): - '''This function does all the work.''' - global language, backend - inline_comment = inline_comments[language] - blk_comment = block_comments[language] - if blk_comment: - blk_comment = (re.escape(block_comments[language][0]), - re.escape(block_comments[language][1])) - stag,etag = commenttags[backend] - in_comment = 0 # True if we're inside a multi-line block comment. - tag_comment = 0 # True if we should tag the current line as a comment. - line = sys.stdin.readline() - while line: - line = string.rstrip(line) - line = string.expandtabs(line,tabsize) - # Escape special characters. - line = string.replace(line,'&','&') - line = string.replace(line,'<','<') - line = string.replace(line,'>','>') - # Process block comment. - if blk_comment: - if in_comment: - if re.match(r'.*'+blk_comment[1]+r'$',line): - in_comment = 0 - else: - if re.match(r'^\s*'+blk_comment[0]+r'.*'+blk_comment[1],line): - # Single line block comment. - tag_comment = 1 - elif re.match(r'^\s*'+blk_comment[0],line): - # Start of multi-line block comment. - tag_comment = 1 - in_comment = 1 - else: - tag_comment = 0 - if tag_comment: - if line: line = stag+line+etag - else: - if inline_comment: - pos = string.find(line,inline_comment) - else: - pos = -1 - if pos >= 0: - # Process inline comment. - line = re.sub(r'\b(?P<word>\w+)\b',sub_keyword,line[:pos]) \ - + stag + line[pos:] + etag - else: - line = re.sub(r'\b(?P<word>\w+)\b',sub_keyword,line) - sys.stdout.write(line + os.linesep) - line = sys.stdin.readline() - -def usage(msg=''): - if msg: - print_stderr(msg) - print_stderr('Usage: code-filter -b backend -l language [ -t tabsize ]') - print_stderr(' [ --help | -h ] [ --version | -v ]') - -def main(): - global language, backend, tabsize - # Process command line options. - import getopt - opts,args = getopt.getopt(sys.argv[1:], - 'b:l:ht:v', - ['help','version']) - if len(args) > 0: - usage() - sys.exit(1) - for o,v in opts: - if o in ('--help','-h'): - print __doc__ - sys.exit(0) - if o in ('--version','-v'): - print('code-filter version %s' % (VERSION,)) - sys.exit(0) - if o == '-b': backend = v - if o == '-l': - v = string.lower(v) - if v == 'c': v = 'c++' - language = v - if o == '-t': - try: - tabsize = int(v) - except: - usage('illegal tabsize') - sys.exit(1) - if tabsize <= 0: - usage('illegal tabsize') - sys.exit(1) - if backend is None: - usage('backend option is mandatory') - sys.exit(1) - if not keywordtags.has_key(backend): - usage('illegal backend option') - sys.exit(1) - if language is None: - usage('language option is mandatory') - sys.exit(1) - if not keywords.has_key(language): - usage('illegal language option') - sys.exit(1) - # Do the work. - code_filter() - -if __name__ == "__main__": - try: - main() - except (KeyboardInterrupt, SystemExit): - pass - except: - print_stderr("%s: unexpected exit status: %s" % - (os.path.basename(sys.argv[0]), sys.exc_info()[1])) - # Exit with previous sys.exit() status or zero if no sys.exit(). - sys.exit(sys.exc_info()[1]) |