pygments.rb 0.5.4 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +40 -0
- data/README.md +3 -0
- data/lexers +0 -0
- data/lib/pygments/popen.rb +3 -2
- data/lib/pygments/version.rb +1 -1
- data/pygments.rb.gemspec +2 -1
- data/vendor/pygments-main/AUTHORS +20 -1
- data/vendor/pygments-main/CHANGES +55 -3
- data/vendor/pygments-main/LICENSE +1 -1
- data/vendor/pygments-main/MANIFEST.in +1 -1
- data/vendor/pygments-main/Makefile +5 -8
- data/vendor/pygments-main/REVISION +1 -1
- data/vendor/pygments-main/doc/Makefile +153 -0
- data/vendor/pygments-main/doc/_static/favicon.ico +0 -0
- data/vendor/pygments-main/doc/_static/logo_new.png +0 -0
- data/vendor/pygments-main/doc/_static/logo_only.png +0 -0
- data/vendor/pygments-main/doc/_templates/docssidebar.html +3 -0
- data/vendor/pygments-main/doc/_templates/indexsidebar.html +25 -0
- data/vendor/pygments-main/doc/_themes/pygments14/layout.html +98 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/bodybg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/docbg.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/listitem.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/logo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pocoo.png +0 -0
- data/vendor/pygments-main/doc/_themes/pygments14/static/pygments14.css_t +401 -0
- data/vendor/pygments-main/doc/_themes/pygments14/theme.conf +15 -0
- data/vendor/pygments-main/doc/conf.py +249 -0
- data/vendor/pygments-main/doc/docs/api.rst +316 -0
- data/vendor/pygments-main/doc/docs/authors.rst +4 -0
- data/vendor/pygments-main/doc/docs/changelog.rst +1 -0
- data/vendor/pygments-main/{docs/src/cmdline.txt → doc/docs/cmdline.rst} +9 -11
- data/vendor/pygments-main/{docs/src/filterdevelopment.txt → doc/docs/filterdevelopment.rst} +1 -1
- data/vendor/pygments-main/{docs/src/filters.txt → doc/docs/filters.rst} +4 -5
- data/vendor/pygments-main/{docs/src/formatterdevelopment.txt → doc/docs/formatterdevelopment.rst} +1 -1
- data/vendor/pygments-main/{docs/src/formatters.txt → doc/docs/formatters.rst} +6 -6
- data/vendor/pygments-main/doc/docs/index.rst +66 -0
- data/vendor/pygments-main/{docs/src/integrate.txt → doc/docs/integrate.rst} +3 -7
- data/vendor/pygments-main/{docs/src/java.txt → doc/docs/java.rst} +0 -0
- data/vendor/pygments-main/{docs/src/lexerdevelopment.txt → doc/docs/lexerdevelopment.rst} +13 -14
- data/vendor/pygments-main/{docs/src/lexers.txt → doc/docs/lexers.rst} +7 -5
- data/vendor/pygments-main/{docs/src/moinmoin.txt → doc/docs/moinmoin.rst} +0 -0
- data/vendor/pygments-main/{docs/src/plugins.txt → doc/docs/plugins.rst} +0 -0
- data/vendor/pygments-main/{docs/src/quickstart.txt → doc/docs/quickstart.rst} +22 -19
- data/vendor/pygments-main/{docs/src/rstdirective.txt → doc/docs/rstdirective.rst} +0 -0
- data/vendor/pygments-main/{docs/src/styles.txt → doc/docs/styles.rst} +2 -2
- data/vendor/pygments-main/{docs/src/tokens.txt → doc/docs/tokens.rst} +10 -7
- data/vendor/pygments-main/{docs/src/unicode.txt → doc/docs/unicode.rst} +8 -7
- data/vendor/pygments-main/doc/download.rst +41 -0
- data/vendor/pygments-main/doc/faq.rst +143 -0
- data/vendor/pygments-main/doc/index.rst +53 -0
- data/vendor/pygments-main/doc/languages.rst +151 -0
- data/vendor/pygments-main/doc/make.bat +190 -0
- data/vendor/pygments-main/{docs → doc}/pygmentize.1 +0 -0
- data/vendor/pygments-main/external/autopygmentize +65 -48
- data/vendor/pygments-main/external/markdown-processor.py +15 -15
- data/vendor/pygments-main/external/moin-parser.py +1 -1
- data/vendor/pygments-main/external/rst-directive.py +2 -3
- data/vendor/pygments-main/ez_setup.py +340 -234
- data/vendor/pygments-main/pygments/__init__.py +4 -4
- data/vendor/pygments-main/pygments/cmdline.py +81 -68
- data/vendor/pygments-main/pygments/console.py +1 -1
- data/vendor/pygments-main/pygments/filter.py +1 -1
- data/vendor/pygments-main/pygments/filters/__init__.py +11 -9
- data/vendor/pygments-main/pygments/formatter.py +3 -3
- data/vendor/pygments-main/pygments/formatters/__init__.py +5 -3
- data/vendor/pygments-main/pygments/formatters/_mapping.py +16 -5
- data/vendor/pygments-main/pygments/formatters/bbcode.py +1 -1
- data/vendor/pygments-main/pygments/formatters/html.py +44 -26
- data/vendor/pygments-main/pygments/formatters/img.py +21 -14
- data/vendor/pygments-main/pygments/formatters/latex.py +104 -12
- data/vendor/pygments-main/pygments/formatters/other.py +53 -6
- data/vendor/pygments-main/pygments/formatters/rtf.py +30 -16
- data/vendor/pygments-main/pygments/formatters/svg.py +2 -2
- data/vendor/pygments-main/pygments/formatters/terminal.py +41 -1
- data/vendor/pygments-main/pygments/formatters/terminal256.py +2 -2
- data/vendor/pygments-main/pygments/lexer.py +59 -39
- data/vendor/pygments-main/pygments/lexers/__init__.py +38 -15
- data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +15 -15
- data/vendor/pygments-main/pygments/lexers/_cocoabuiltins.py +73 -0
- data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +11 -1
- data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +14 -8
- data/vendor/pygments-main/pygments/lexers/_mapping.py +81 -30
- data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +1067 -95
- data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +7 -7
- data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +5 -4
- data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +12 -7
- data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +112 -18
- data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +1 -1
- data/vendor/pygments-main/pygments/lexers/agile.py +644 -382
- data/vendor/pygments-main/pygments/lexers/asm.py +66 -29
- data/vendor/pygments-main/pygments/lexers/compiled.py +1643 -174
- data/vendor/pygments-main/pygments/lexers/dalvik.py +27 -6
- data/vendor/pygments-main/pygments/lexers/dotnet.py +45 -33
- data/vendor/pygments-main/pygments/lexers/foxpro.py +3 -3
- data/vendor/pygments-main/pygments/lexers/functional.py +1510 -570
- data/vendor/pygments-main/pygments/lexers/graph.py +81 -0
- data/vendor/pygments-main/pygments/lexers/hdl.py +29 -30
- data/vendor/pygments-main/pygments/lexers/inferno.py +96 -0
- data/vendor/pygments-main/pygments/lexers/jvm.py +622 -207
- data/vendor/pygments-main/pygments/lexers/math.py +438 -70
- data/vendor/pygments-main/pygments/lexers/other.py +885 -171
- data/vendor/pygments-main/pygments/lexers/parsers.py +24 -24
- data/vendor/pygments-main/pygments/lexers/qbasic.py +157 -0
- data/vendor/pygments-main/pygments/lexers/rdf.py +99 -0
- data/vendor/pygments-main/pygments/lexers/shell.py +28 -25
- data/vendor/pygments-main/pygments/lexers/special.py +7 -8
- data/vendor/pygments-main/pygments/lexers/sql.py +56 -23
- data/vendor/pygments-main/pygments/lexers/templates.py +377 -59
- data/vendor/pygments-main/pygments/lexers/text.py +208 -46
- data/vendor/pygments-main/pygments/lexers/web.py +729 -264
- data/vendor/pygments-main/pygments/modeline.py +1 -1
- data/vendor/pygments-main/pygments/plugin.py +1 -1
- data/vendor/pygments-main/pygments/scanner.py +1 -1
- data/vendor/pygments-main/pygments/sphinxext.py +153 -0
- data/vendor/pygments-main/pygments/style.py +3 -2
- data/vendor/pygments-main/pygments/styles/__init__.py +5 -1
- data/vendor/pygments-main/pygments/styles/autumn.py +1 -1
- data/vendor/pygments-main/pygments/styles/borland.py +1 -1
- data/vendor/pygments-main/pygments/styles/bw.py +1 -1
- data/vendor/pygments-main/pygments/styles/colorful.py +1 -1
- data/vendor/pygments-main/pygments/styles/default.py +1 -1
- data/vendor/pygments-main/pygments/styles/emacs.py +1 -1
- data/vendor/pygments-main/pygments/styles/friendly.py +1 -1
- data/vendor/pygments-main/pygments/styles/fruity.py +1 -1
- data/vendor/pygments-main/pygments/styles/igor.py +29 -0
- data/vendor/pygments-main/pygments/styles/manni.py +1 -1
- data/vendor/pygments-main/pygments/styles/monokai.py +4 -4
- data/vendor/pygments-main/pygments/styles/murphy.py +1 -1
- data/vendor/pygments-main/pygments/styles/native.py +1 -1
- data/vendor/pygments-main/pygments/styles/paraiso_dark.py +125 -0
- data/vendor/pygments-main/pygments/styles/paraiso_light.py +125 -0
- data/vendor/pygments-main/pygments/styles/pastie.py +1 -1
- data/vendor/pygments-main/pygments/styles/perldoc.py +1 -1
- data/vendor/pygments-main/pygments/styles/rrt.py +1 -1
- data/vendor/pygments-main/pygments/styles/tango.py +1 -1
- data/vendor/pygments-main/pygments/styles/trac.py +1 -1
- data/vendor/pygments-main/pygments/styles/vim.py +1 -1
- data/vendor/pygments-main/pygments/styles/vs.py +1 -1
- data/vendor/pygments-main/pygments/styles/xcode.py +51 -0
- data/vendor/pygments-main/pygments/token.py +4 -1
- data/vendor/pygments-main/pygments/unistring.py +6 -5
- data/vendor/pygments-main/pygments/util.py +35 -21
- data/vendor/pygments-main/scripts/check_sources.py +28 -44
- data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +5 -4
- data/vendor/pygments-main/scripts/find_codetags.py +27 -19
- data/vendor/pygments-main/scripts/find_error.py +16 -13
- data/vendor/pygments-main/scripts/get_vimkw.py +3 -3
- data/vendor/pygments-main/scripts/vim2pygments.py +9 -7
- data/vendor/pygments-main/setup.py +19 -19
- data/vendor/pygments-main/tests/examplefiles/99_bottles_of_beer.chpl +118 -0
- data/vendor/pygments-main/tests/examplefiles/Error.pmod +38 -0
- data/vendor/pygments-main/tests/examplefiles/FakeFile.pike +360 -0
- data/vendor/pygments-main/tests/examplefiles/{ANTLRv3.g → antlr_ANTLRv3.g} +0 -0
- data/vendor/pygments-main/tests/examplefiles/clojure-weird-keywords.clj +5 -0
- data/vendor/pygments-main/tests/examplefiles/core.cljs +52 -0
- data/vendor/pygments-main/tests/examplefiles/demo.cfm +13 -1
- data/vendor/pygments-main/tests/examplefiles/demo.hbs +12 -0
- data/vendor/pygments-main/tests/examplefiles/ember.handlebars +33 -0
- data/vendor/pygments-main/tests/examplefiles/example.als +217 -0
- data/vendor/pygments-main/tests/examplefiles/example.c +1 -1
- data/vendor/pygments-main/tests/examplefiles/example.chai +6 -0
- data/vendor/pygments-main/tests/examplefiles/example.coffee +27 -0
- data/vendor/pygments-main/tests/examplefiles/example.e +124 -0
- data/vendor/pygments-main/tests/examplefiles/example.f90 +8 -0
- data/vendor/pygments-main/tests/examplefiles/example.feature +16 -0
- data/vendor/pygments-main/tests/examplefiles/example.gd +23 -0
- data/vendor/pygments-main/tests/examplefiles/example.gi +64 -0
- data/vendor/pygments-main/tests/examplefiles/example.groovy +2 -0
- data/vendor/pygments-main/tests/examplefiles/example.hs +27 -0
- data/vendor/pygments-main/tests/examplefiles/example.hx +44 -1
- data/vendor/pygments-main/tests/examplefiles/example.i6t +32 -0
- data/vendor/pygments-main/tests/examplefiles/example.i7x +45 -0
- data/vendor/pygments-main/tests/examplefiles/example.inf +374 -0
- data/vendor/pygments-main/tests/examplefiles/example.j +564 -0
- data/vendor/pygments-main/tests/examplefiles/example.java +16 -0
- data/vendor/pygments-main/tests/examplefiles/example.kal +75 -0
- data/vendor/pygments-main/tests/examplefiles/example.liquid +42 -0
- data/vendor/pygments-main/tests/examplefiles/example.ma +8 -0
- data/vendor/pygments-main/tests/examplefiles/example.mq4 +187 -0
- data/vendor/pygments-main/tests/examplefiles/example.mqh +123 -0
- data/vendor/pygments-main/tests/examplefiles/example.ni +57 -0
- data/vendor/pygments-main/tests/examplefiles/example.nix +80 -0
- data/vendor/pygments-main/tests/examplefiles/example.pp +8 -0
- data/vendor/pygments-main/tests/examplefiles/example.red +257 -0
- data/vendor/pygments-main/tests/examplefiles/example.reds +150 -0
- data/vendor/pygments-main/tests/examplefiles/example.rkt +677 -29
- data/vendor/pygments-main/tests/examplefiles/example.sh +22 -0
- data/vendor/pygments-main/tests/examplefiles/example.slim +31 -0
- data/vendor/pygments-main/tests/examplefiles/example.sls +51 -0
- data/vendor/pygments-main/tests/examplefiles/example.stan +2 -0
- data/vendor/pygments-main/tests/examplefiles/example.todotxt +9 -0
- data/vendor/pygments-main/tests/examplefiles/exampleScript.cfc +241 -0
- data/vendor/pygments-main/tests/examplefiles/exampleTag.cfc +18 -0
- data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +192 -350
- data/vendor/pygments-main/tests/examplefiles/hash_syntax.rb +5 -0
- data/vendor/pygments-main/tests/examplefiles/hello.at +6 -0
- data/vendor/pygments-main/tests/examplefiles/hello.golo +5 -0
- data/vendor/pygments-main/tests/examplefiles/hello.lsl +12 -0
- data/vendor/pygments-main/tests/examplefiles/{File.hy → hybris_File.hy} +0 -0
- data/vendor/pygments-main/tests/examplefiles/{mg_sample.pro → idl_sample.pro} +0 -0
- data/vendor/pygments-main/tests/examplefiles/iex_example +23 -0
- data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +24 -24
- data/vendor/pygments-main/tests/examplefiles/language.hy +165 -0
- data/vendor/pygments-main/tests/examplefiles/limbo.b +456 -0
- data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +3 -1
- data/vendor/pygments-main/tests/examplefiles/main.cmake +2 -0
- data/vendor/pygments-main/tests/examplefiles/objc_example.m +163 -16
- data/vendor/pygments-main/tests/examplefiles/{example.p → openedge_example} +0 -0
- data/vendor/pygments-main/tests/examplefiles/pawn_example +25 -0
- data/vendor/pygments-main/tests/examplefiles/qbasic_example +2 -0
- data/vendor/pygments-main/tests/examplefiles/r6rs-comments.scm +23 -0
- data/vendor/pygments-main/tests/examplefiles/{robotframework.txt → robotframework_test.txt} +0 -0
- data/vendor/pygments-main/tests/examplefiles/rql-queries.rql +34 -0
- data/vendor/pygments-main/tests/examplefiles/scope.cirru +43 -0
- data/vendor/pygments-main/tests/examplefiles/sparql.rq +23 -0
- data/vendor/pygments-main/tests/examplefiles/test.R +37 -5
- data/vendor/pygments-main/tests/examplefiles/test.apl +26 -0
- data/vendor/pygments-main/tests/examplefiles/test.cyp +123 -0
- data/vendor/pygments-main/tests/examplefiles/test.idr +93 -0
- data/vendor/pygments-main/tests/examplefiles/test.mask +41 -0
- data/vendor/pygments-main/tests/examplefiles/test.pan +54 -0
- data/vendor/pygments-main/tests/examplefiles/test.php +3 -1
- data/vendor/pygments-main/tests/examplefiles/test.pig +148 -0
- data/vendor/pygments-main/tests/examplefiles/test.pwn +253 -0
- data/vendor/pygments-main/tests/examplefiles/test.r3 +27 -7
- data/vendor/pygments-main/tests/examplefiles/test.rsl +111 -0
- data/vendor/pygments-main/tests/examplefiles/test.swift +65 -0
- data/vendor/pygments-main/tests/examplefiles/test.zep +33 -0
- data/vendor/pygments-main/tests/examplefiles/unicode.go +10 -0
- data/vendor/pygments-main/tests/examplefiles/{test.bas → vbnet_test.bas} +0 -0
- data/vendor/pygments-main/tests/examplefiles/vctreestatus_hg +4 -0
- data/vendor/pygments-main/tests/examplefiles/vimrc +21 -0
- data/vendor/pygments-main/tests/run.py +14 -19
- data/vendor/pygments-main/tests/string_asserts.py +22 -0
- data/vendor/pygments-main/tests/test_basic_api.py +28 -14
- data/vendor/pygments-main/tests/test_cfm.py +46 -0
- data/vendor/pygments-main/tests/test_clexer.py +208 -3
- data/vendor/pygments-main/tests/test_cmdline.py +6 -5
- data/vendor/pygments-main/tests/test_examplefiles.py +30 -19
- data/vendor/pygments-main/tests/test_html_formatter.py +15 -13
- data/vendor/pygments-main/tests/test_latex_formatter.py +4 -2
- data/vendor/pygments-main/tests/test_lexers_other.py +11 -11
- data/vendor/pygments-main/tests/test_objectiveclexer.py +81 -0
- data/vendor/pygments-main/tests/test_perllexer.py +1 -1
- data/vendor/pygments-main/tests/test_qbasiclexer.py +43 -0
- data/vendor/pygments-main/tests/test_regexlexer.py +8 -1
- data/vendor/pygments-main/tests/test_rtf_formatter.py +109 -0
- data/vendor/pygments-main/tests/test_string_asserts.py +39 -0
- data/vendor/pygments-main/tests/test_token.py +3 -3
- data/vendor/pygments-main/tests/test_using_api.py +1 -1
- data/vendor/pygments-main/tests/test_util.py +1 -1
- metadata +138 -51
- data/vendor/pygments-main/docs/generate.py +0 -472
- data/vendor/pygments-main/docs/src/api.txt +0 -270
- data/vendor/pygments-main/docs/src/authors.txt +0 -5
- data/vendor/pygments-main/docs/src/changelog.txt +0 -5
- data/vendor/pygments-main/docs/src/index.txt +0 -69
- data/vendor/pygments-main/docs/src/installation.txt +0 -71
- data/vendor/pygments-main/external/rst-directive-old.py +0 -77
- data/vendor/pygments-main/scripts/reindent.py +0 -291
- data/vendor/pygments-main/tests/examplefiles/import.hs +0 -4
- data/vendor/pygments-main/tests/examplefiles/objc_example2.m +0 -24
- data/vendor/pygments-main/tests/old_run.py +0 -138
@@ -5,16 +5,16 @@
|
|
5
5
|
|
6
6
|
Other formatters: NullFormatter, RawTokenFormatter.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
12
12
|
from pygments.formatter import Formatter
|
13
|
-
from pygments.util import OptionError, get_choice_opt
|
13
|
+
from pygments.util import OptionError, get_choice_opt
|
14
14
|
from pygments.token import Token
|
15
15
|
from pygments.console import colorize
|
16
16
|
|
17
|
-
__all__ = ['NullFormatter', 'RawTokenFormatter']
|
17
|
+
__all__ = ['NullFormatter', 'RawTokenFormatter', 'TestcaseFormatter']
|
18
18
|
|
19
19
|
|
20
20
|
class NullFormatter(Formatter):
|
@@ -40,7 +40,7 @@ class RawTokenFormatter(Formatter):
|
|
40
40
|
|
41
41
|
The format is ``tokentype<TAB>repr(tokenstring)\n``. The output can later
|
42
42
|
be converted to a token stream with the `RawTokenLexer`, described in the
|
43
|
-
|
43
|
+
:doc:`lexer list <lexers>`.
|
44
44
|
|
45
45
|
Only two options are accepted:
|
46
46
|
|
@@ -50,7 +50,8 @@ class RawTokenFormatter(Formatter):
|
|
50
50
|
`error_color`
|
51
51
|
If set to a color name, highlight error tokens using that color. If
|
52
52
|
set but with no value, defaults to ``'red'``.
|
53
|
-
|
53
|
+
|
54
|
+
.. versionadded:: 0.11
|
54
55
|
|
55
56
|
"""
|
56
57
|
name = 'Raw tokens'
|
@@ -79,7 +80,7 @@ class RawTokenFormatter(Formatter):
|
|
79
80
|
|
80
81
|
def format(self, tokensource, outfile):
|
81
82
|
try:
|
82
|
-
outfile.write(b
|
83
|
+
outfile.write(b'')
|
83
84
|
except TypeError:
|
84
85
|
raise TypeError('The raw tokens formatter needs a binary '
|
85
86
|
'output file')
|
@@ -113,3 +114,49 @@ class RawTokenFormatter(Formatter):
|
|
113
114
|
for ttype, value in tokensource:
|
114
115
|
write("%s\t%r\n" % (ttype, value))
|
115
116
|
flush()
|
117
|
+
|
118
|
+
TESTCASE_BEFORE = u'''\
|
119
|
+
def testNeedsName(self):
|
120
|
+
fragment = %r
|
121
|
+
tokens = [
|
122
|
+
'''
|
123
|
+
TESTCASE_AFTER = u'''\
|
124
|
+
]
|
125
|
+
self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
|
126
|
+
'''
|
127
|
+
|
128
|
+
|
129
|
+
class TestcaseFormatter(Formatter):
|
130
|
+
"""
|
131
|
+
Format tokens as appropriate for a new testcase.
|
132
|
+
|
133
|
+
.. versionadded:: 2.0
|
134
|
+
"""
|
135
|
+
name = 'Testcase'
|
136
|
+
aliases = ['testcase']
|
137
|
+
|
138
|
+
def __init__(self, **options):
|
139
|
+
Formatter.__init__(self, **options)
|
140
|
+
#if self.encoding != 'utf-8':
|
141
|
+
# print >>sys.stderr, "NOTICE: Forcing encoding to utf-8, as all Pygments source is"
|
142
|
+
if self.encoding is not None and self.encoding != 'utf-8':
|
143
|
+
raise ValueError("Only None and utf-u are allowed encodings.")
|
144
|
+
|
145
|
+
def format(self, tokensource, outfile):
|
146
|
+
indentation = ' ' * 12
|
147
|
+
rawbuf = []
|
148
|
+
outbuf = []
|
149
|
+
for ttype, value in tokensource:
|
150
|
+
rawbuf.append(value)
|
151
|
+
outbuf.append('%s(%s, %r),\n' % (indentation, ttype, value))
|
152
|
+
|
153
|
+
before = TESTCASE_BEFORE % (u''.join(rawbuf),)
|
154
|
+
during = u''.join(outbuf)
|
155
|
+
after = TESTCASE_AFTER
|
156
|
+
if self.encoding is None:
|
157
|
+
outfile.write(before + during + after)
|
158
|
+
else:
|
159
|
+
outfile.write(before.encode('utf-8'))
|
160
|
+
outfile.write(during.encode('utf-8'))
|
161
|
+
outfile.write(after.encode('utf-8'))
|
162
|
+
outfile.flush()
|
@@ -5,11 +5,12 @@
|
|
5
5
|
|
6
6
|
A formatter that generates RTF files.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
12
12
|
from pygments.formatter import Formatter
|
13
|
+
from pygments.util import get_int_opt, _surrogatepair
|
13
14
|
|
14
15
|
|
15
16
|
__all__ = ['RtfFormatter']
|
@@ -21,7 +22,11 @@ class RtfFormatter(Formatter):
|
|
21
22
|
documents with color information and other useful stuff. Perfect for Copy and
|
22
23
|
Paste into Microsoft® Word® documents.
|
23
24
|
|
24
|
-
|
25
|
+
Please note that ``encoding`` and ``outencoding`` options are ignored.
|
26
|
+
The RTF format is ASCII natively, but handles unicode characters correctly
|
27
|
+
thanks to escape sequences.
|
28
|
+
|
29
|
+
.. versionadded:: 0.6
|
25
30
|
|
26
31
|
Additional options accepted:
|
27
32
|
|
@@ -32,6 +37,12 @@ class RtfFormatter(Formatter):
|
|
32
37
|
`fontface`
|
33
38
|
The used font famliy, for example ``Bitstream Vera Sans``. Defaults to
|
34
39
|
some generic font which is supposed to have fixed width.
|
40
|
+
|
41
|
+
`fontsize`
|
42
|
+
Size of the font used. Size is specified in half points. The
|
43
|
+
default is 24 half-points, giving a size 12 font.
|
44
|
+
|
45
|
+
.. versionadded:: 2.0
|
35
46
|
"""
|
36
47
|
name = 'RTF'
|
37
48
|
aliases = ['rtf']
|
@@ -49,9 +60,11 @@ class RtfFormatter(Formatter):
|
|
49
60
|
specification claims that ``\fmodern`` are "Fixed-pitch serif
|
50
61
|
and sans serif fonts". Hope every RTF implementation thinks
|
51
62
|
the same about modern...
|
63
|
+
|
52
64
|
"""
|
53
65
|
Formatter.__init__(self, **options)
|
54
66
|
self.fontface = options.get('fontface') or ''
|
67
|
+
self.fontsize = get_int_opt(options, 'fontsize', 0)
|
55
68
|
|
56
69
|
def _escape(self, text):
|
57
70
|
return text.replace('\\', '\\\\') \
|
@@ -65,28 +78,27 @@ class RtfFormatter(Formatter):
|
|
65
78
|
|
66
79
|
# escape text
|
67
80
|
text = self._escape(text)
|
68
|
-
if self.encoding in ('utf-8', 'utf-16', 'utf-32'):
|
69
|
-
encoding = 'iso-8859-15'
|
70
|
-
else:
|
71
|
-
encoding = self.encoding or 'iso-8859-15'
|
72
81
|
|
73
82
|
buf = []
|
74
83
|
for c in text:
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
ansic = '\\\'%x' % ord(ansic)
|
79
|
-
else:
|
80
|
-
ansic = c
|
81
|
-
buf.append(r'\ud{\u%d%s}' % (ord(c), ansic))
|
82
|
-
else:
|
84
|
+
cn = ord(c)
|
85
|
+
if cn < (2**7):
|
86
|
+
# ASCII character
|
83
87
|
buf.append(str(c))
|
88
|
+
elif (2**7) <= cn < (2**16):
|
89
|
+
# single unicode escape sequence
|
90
|
+
buf.append(r'{\u%d}' % cn)
|
91
|
+
elif (2**16) <= cn:
|
92
|
+
# RTF limits unicode to 16 bits.
|
93
|
+
# Force surrogate pairs
|
94
|
+
h,l = _surrogatepair(cn)
|
95
|
+
buf.append(r'{\u%d}{\u%d}' % (h,l))
|
84
96
|
|
85
97
|
return ''.join(buf).replace('\n', '\\par\n')
|
86
98
|
|
87
99
|
def format_unencoded(self, tokensource, outfile):
|
88
100
|
# rtf 1.8 header
|
89
|
-
outfile.write(r'{\rtf1\ansi\deff0'
|
101
|
+
outfile.write(r'{\rtf1\ansi\uc0\deff0'
|
90
102
|
r'{\fonttbl{\f0\fmodern\fprq1\fcharset0%s;}}'
|
91
103
|
r'{\colortbl;' % (self.fontface and
|
92
104
|
' ' + self._escape(self.fontface) or
|
@@ -105,7 +117,9 @@ class RtfFormatter(Formatter):
|
|
105
117
|
int(color[4:6], 16)
|
106
118
|
))
|
107
119
|
offset += 1
|
108
|
-
outfile.write(r'}\f0')
|
120
|
+
outfile.write(r'}\f0 ')
|
121
|
+
if self.fontsize:
|
122
|
+
outfile.write(r'\fs%d' % (self.fontsize))
|
109
123
|
|
110
124
|
# highlight stream
|
111
125
|
for ttype, value in tokensource:
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Formatter for SVG output.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
@@ -35,7 +35,7 @@ class SvgFormatter(Formatter):
|
|
35
35
|
By default, this formatter outputs a full SVG document including doctype
|
36
36
|
declaration and the ``<svg>`` root element.
|
37
37
|
|
38
|
-
|
38
|
+
.. versionadded:: 0.9
|
39
39
|
|
40
40
|
Additional options accepted:
|
41
41
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Formatter for terminal output with ANSI sequences.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
|
@@ -73,6 +73,10 @@ class TerminalFormatter(Formatter):
|
|
73
73
|
`colorscheme`
|
74
74
|
A dictionary mapping token types to (lightbg, darkbg) color names or
|
75
75
|
``None`` (default: ``None`` = use builtin colorscheme).
|
76
|
+
|
77
|
+
`linenos`
|
78
|
+
Set to ``True`` to have line numbers on the terminal output as well
|
79
|
+
(default: ``False`` = no line numbers).
|
76
80
|
"""
|
77
81
|
name = 'Terminal'
|
78
82
|
aliases = ['terminal', 'console']
|
@@ -83,6 +87,8 @@ class TerminalFormatter(Formatter):
|
|
83
87
|
self.darkbg = get_choice_opt(options, 'bg',
|
84
88
|
['light', 'dark'], 'light') == 'dark'
|
85
89
|
self.colorscheme = options.get('colorscheme', None) or TERMINAL_COLORS
|
90
|
+
self.linenos = options.get('linenos', False)
|
91
|
+
self._lineno = 0
|
86
92
|
|
87
93
|
def format(self, tokensource, outfile):
|
88
94
|
# hack: if the output is a terminal and has an encoding set,
|
@@ -93,7 +99,40 @@ class TerminalFormatter(Formatter):
|
|
93
99
|
self.encoding = outfile.encoding
|
94
100
|
return Formatter.format(self, tokensource, outfile)
|
95
101
|
|
102
|
+
def _write_lineno(self, outfile):
|
103
|
+
self._lineno += 1
|
104
|
+
outfile.write("\n%04d: " % self._lineno)
|
105
|
+
|
106
|
+
def _format_unencoded_with_lineno(self, tokensource, outfile):
|
107
|
+
self._write_lineno(outfile)
|
108
|
+
|
109
|
+
for ttype, value in tokensource:
|
110
|
+
if value.endswith("\n"):
|
111
|
+
self._write_lineno(outfile)
|
112
|
+
value = value[:-1]
|
113
|
+
color = self.colorscheme.get(ttype)
|
114
|
+
while color is None:
|
115
|
+
ttype = ttype[:-1]
|
116
|
+
color = self.colorscheme.get(ttype)
|
117
|
+
if color:
|
118
|
+
color = color[self.darkbg]
|
119
|
+
spl = value.split('\n')
|
120
|
+
for line in spl[:-1]:
|
121
|
+
self._write_lineno(outfile)
|
122
|
+
if line:
|
123
|
+
outfile.write(ansiformat(color, line[:-1]))
|
124
|
+
if spl[-1]:
|
125
|
+
outfile.write(ansiformat(color, spl[-1]))
|
126
|
+
else:
|
127
|
+
outfile.write(value)
|
128
|
+
|
129
|
+
outfile.write("\n")
|
130
|
+
|
96
131
|
def format_unencoded(self, tokensource, outfile):
|
132
|
+
if self.linenos:
|
133
|
+
self._format_unencoded_with_lineno(tokensource, outfile)
|
134
|
+
return
|
135
|
+
|
97
136
|
for ttype, value in tokensource:
|
98
137
|
color = self.colorscheme.get(ttype)
|
99
138
|
while color is None:
|
@@ -110,3 +149,4 @@ class TerminalFormatter(Formatter):
|
|
110
149
|
outfile.write(ansiformat(color, spl[-1]))
|
111
150
|
else:
|
112
151
|
outfile.write(value)
|
152
|
+
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
Formatter version 1.
|
13
13
|
|
14
|
-
:copyright: Copyright 2006-
|
14
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
15
15
|
:license: BSD, see LICENSE for details.
|
16
16
|
"""
|
17
17
|
|
@@ -76,7 +76,7 @@ class Terminal256Formatter(Formatter):
|
|
76
76
|
and converts them to nearest ANSI 256-color escape sequences. Bold and
|
77
77
|
underline attributes from the style are preserved (and displayed).
|
78
78
|
|
79
|
-
|
79
|
+
.. versionadded:: 0.9
|
80
80
|
|
81
81
|
Options accepted:
|
82
82
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Base lexer classes.
|
7
7
|
|
8
|
-
:copyright: Copyright 2006-
|
8
|
+
:copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
|
9
9
|
:license: BSD, see LICENSE for details.
|
10
10
|
"""
|
11
11
|
import re, itertools
|
@@ -14,18 +14,18 @@ from pygments.filter import apply_filters, Filter
|
|
14
14
|
from pygments.filters import get_filter_by_name
|
15
15
|
from pygments.token import Error, Text, Other, _TokenType
|
16
16
|
from pygments.util import get_bool_opt, get_int_opt, get_list_opt, \
|
17
|
-
make_analysator
|
17
|
+
make_analysator, text_type, add_metaclass, iteritems
|
18
18
|
|
19
19
|
|
20
20
|
__all__ = ['Lexer', 'RegexLexer', 'ExtendedRegexLexer', 'DelegatingLexer',
|
21
|
-
'LexerContext', 'include', 'inherit', 'bygroups', 'using', 'this']
|
21
|
+
'LexerContext', 'include', 'inherit', 'bygroups', 'using', 'this', 'default']
|
22
22
|
|
23
23
|
|
24
|
-
_encoding_map = [('\xef\xbb\xbf', 'utf-8'),
|
25
|
-
('\xff\xfe\0\0', 'utf-32'),
|
26
|
-
('\0\0\xfe\xff', 'utf-32be'),
|
27
|
-
('\xff\xfe', 'utf-16'),
|
28
|
-
('\xfe\xff', 'utf-16be')]
|
24
|
+
_encoding_map = [(b'\xef\xbb\xbf', 'utf-8'),
|
25
|
+
(b'\xff\xfe\0\0', 'utf-32'),
|
26
|
+
(b'\0\0\xfe\xff', 'utf-32be'),
|
27
|
+
(b'\xff\xfe', 'utf-16'),
|
28
|
+
(b'\xfe\xff', 'utf-16be')]
|
29
29
|
|
30
30
|
_default_analyse = staticmethod(lambda x: 0.0)
|
31
31
|
|
@@ -42,6 +42,7 @@ class LexerMeta(type):
|
|
42
42
|
return type.__new__(cls, name, bases, d)
|
43
43
|
|
44
44
|
|
45
|
+
@add_metaclass(LexerMeta)
|
45
46
|
class Lexer(object):
|
46
47
|
"""
|
47
48
|
Lexer for a specific language.
|
@@ -55,7 +56,9 @@ class Lexer(object):
|
|
55
56
|
``ensurenl``
|
56
57
|
Make sure that the input ends with a newline (default: True). This
|
57
58
|
is required for some lexers that consume input linewise.
|
58
|
-
|
59
|
+
|
60
|
+
.. versionadded:: 1.3
|
61
|
+
|
59
62
|
``tabsize``
|
60
63
|
If given and greater than 0, expand tabs in the input (default: 0).
|
61
64
|
``encoding``
|
@@ -84,8 +87,6 @@ class Lexer(object):
|
|
84
87
|
#: Priority, should multiple lexers match and no content is provided
|
85
88
|
priority = 0
|
86
89
|
|
87
|
-
__metaclass__ = LexerMeta
|
88
|
-
|
89
90
|
def __init__(self, **options):
|
90
91
|
self.options = options
|
91
92
|
self.stripnl = get_bool_opt(options, 'stripnl', True)
|
@@ -136,7 +137,7 @@ class Lexer(object):
|
|
136
137
|
Also preprocess the text, i.e. expand tabs and strip it if
|
137
138
|
wanted and applies registered filters.
|
138
139
|
"""
|
139
|
-
if not isinstance(text,
|
140
|
+
if not isinstance(text, text_type):
|
140
141
|
if self.encoding == 'guess':
|
141
142
|
try:
|
142
143
|
text = text.decode('utf-8')
|
@@ -155,17 +156,18 @@ class Lexer(object):
|
|
155
156
|
decoded = None
|
156
157
|
for bom, encoding in _encoding_map:
|
157
158
|
if text.startswith(bom):
|
158
|
-
decoded =
|
159
|
-
errors='replace')
|
159
|
+
decoded = text[len(bom):].decode(encoding, 'replace')
|
160
160
|
break
|
161
161
|
# no BOM found, so use chardet
|
162
162
|
if decoded is None:
|
163
163
|
enc = chardet.detect(text[:1024]) # Guess using first 1KB
|
164
|
-
decoded =
|
165
|
-
|
164
|
+
decoded = text.decode(enc.get('encoding') or 'utf-8',
|
165
|
+
'replace')
|
166
166
|
text = decoded
|
167
167
|
else:
|
168
168
|
text = text.decode(self.encoding)
|
169
|
+
if text.startswith(u'\ufeff'):
|
170
|
+
text = text[len(u'\ufeff'):]
|
169
171
|
else:
|
170
172
|
if text.startswith(u'\ufeff'):
|
171
173
|
text = text[len(u'\ufeff'):]
|
@@ -192,7 +194,9 @@ class Lexer(object):
|
|
192
194
|
|
193
195
|
def get_tokens_unprocessed(self, text):
|
194
196
|
"""
|
195
|
-
Return an iterable of (tokentype, value) pairs
|
197
|
+
Return an iterable of (index, tokentype, value) pairs where "index"
|
198
|
+
is the starting position of the token within the input text.
|
199
|
+
|
196
200
|
In subclasses, implement this method as a generator to
|
197
201
|
maximize effectiveness.
|
198
202
|
"""
|
@@ -379,6 +383,16 @@ def using(_other, **kwargs):
|
|
379
383
|
return callback
|
380
384
|
|
381
385
|
|
386
|
+
class default:
|
387
|
+
"""
|
388
|
+
Indicates a state or state action (e.g. #pop) to apply.
|
389
|
+
For example default('#pop') is equivalent to ('', Token, '#pop')
|
390
|
+
Note that state tuples may be used as well
|
391
|
+
"""
|
392
|
+
def __init__(self, state):
|
393
|
+
self.state = state
|
394
|
+
|
395
|
+
|
382
396
|
class RegexLexerMeta(LexerMeta):
|
383
397
|
"""
|
384
398
|
Metaclass for RegexLexer, creates the self._tokens attribute from
|
@@ -448,12 +462,16 @@ class RegexLexerMeta(LexerMeta):
|
|
448
462
|
if isinstance(tdef, _inherit):
|
449
463
|
# processed already
|
450
464
|
continue
|
465
|
+
if isinstance(tdef, default):
|
466
|
+
new_state = cls._process_new_state(tdef.state, unprocessed, processed)
|
467
|
+
tokens.append((re.compile('').match, None, new_state))
|
468
|
+
continue
|
451
469
|
|
452
470
|
assert type(tdef) is tuple, "wrong rule def %r" % tdef
|
453
471
|
|
454
472
|
try:
|
455
473
|
rex = cls._process_regex(tdef[0], rflags)
|
456
|
-
except Exception
|
474
|
+
except Exception as err:
|
457
475
|
raise ValueError("uncompilable regex %r in state %r of %r: %s" %
|
458
476
|
(tdef[0], state, cls, err))
|
459
477
|
|
@@ -472,7 +490,7 @@ class RegexLexerMeta(LexerMeta):
|
|
472
490
|
"""Preprocess a dictionary of token definitions."""
|
473
491
|
processed = cls._all_tokens[name] = {}
|
474
492
|
tokendefs = tokendefs or cls.tokens[name]
|
475
|
-
for state in tokendefs
|
493
|
+
for state in list(tokendefs):
|
476
494
|
cls._process_state(tokendefs, processed, state)
|
477
495
|
return processed
|
478
496
|
|
@@ -493,7 +511,7 @@ class RegexLexerMeta(LexerMeta):
|
|
493
511
|
for c in itertools.chain((cls,), cls.__mro__):
|
494
512
|
toks = c.__dict__.get('tokens', {})
|
495
513
|
|
496
|
-
for state, items in
|
514
|
+
for state, items in iteritems(toks):
|
497
515
|
curitems = tokens.get(state)
|
498
516
|
if curitems is None:
|
499
517
|
tokens[state] = items
|
@@ -533,13 +551,13 @@ class RegexLexerMeta(LexerMeta):
|
|
533
551
|
return type.__call__(cls, *args, **kwds)
|
534
552
|
|
535
553
|
|
554
|
+
@add_metaclass(RegexLexerMeta)
|
536
555
|
class RegexLexer(Lexer):
|
537
556
|
"""
|
538
557
|
Base for simple stateful regular expression-based lexers.
|
539
558
|
Simplifies the lexing process so that you need only
|
540
559
|
provide a list of states and regular expressions.
|
541
560
|
"""
|
542
|
-
__metaclass__ = RegexLexerMeta
|
543
561
|
|
544
562
|
#: Flags for compiling the regular expressions.
|
545
563
|
#: Defaults to MULTILINE.
|
@@ -578,11 +596,12 @@ class RegexLexer(Lexer):
|
|
578
596
|
for rexmatch, action, new_state in statetokens:
|
579
597
|
m = rexmatch(text, pos)
|
580
598
|
if m:
|
581
|
-
if
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
599
|
+
if action is not None:
|
600
|
+
if type(action) is _TokenType:
|
601
|
+
yield pos, action, m.group()
|
602
|
+
else:
|
603
|
+
for item in action(self, m):
|
604
|
+
yield item
|
586
605
|
pos = m.end()
|
587
606
|
if new_state is not None:
|
588
607
|
# state transition
|
@@ -656,15 +675,16 @@ class ExtendedRegexLexer(RegexLexer):
|
|
656
675
|
for rexmatch, action, new_state in statetokens:
|
657
676
|
m = rexmatch(text, ctx.pos, ctx.end)
|
658
677
|
if m:
|
659
|
-
if
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
678
|
+
if action is not None:
|
679
|
+
if type(action) is _TokenType:
|
680
|
+
yield ctx.pos, action, m.group()
|
681
|
+
ctx.pos = m.end()
|
682
|
+
else:
|
683
|
+
for item in action(self, m, ctx):
|
684
|
+
yield item
|
685
|
+
if not new_state:
|
686
|
+
# altered the state stack?
|
687
|
+
statetokens = tokendefs[ctx.stack[-1]]
|
668
688
|
# CAUTION: callback must set ctx.pos!
|
669
689
|
if new_state is not None:
|
670
690
|
# state transition
|
@@ -673,7 +693,7 @@ class ExtendedRegexLexer(RegexLexer):
|
|
673
693
|
if state == '#pop':
|
674
694
|
ctx.stack.pop()
|
675
695
|
elif state == '#push':
|
676
|
-
ctx.stack.append(
|
696
|
+
ctx.stack.append(ctx.stack[-1])
|
677
697
|
else:
|
678
698
|
ctx.stack.append(state)
|
679
699
|
elif isinstance(new_state, int):
|
@@ -718,7 +738,7 @@ def do_insertions(insertions, tokens):
|
|
718
738
|
"""
|
719
739
|
insertions = iter(insertions)
|
720
740
|
try:
|
721
|
-
index, itokens =
|
741
|
+
index, itokens = next(insertions)
|
722
742
|
except StopIteration:
|
723
743
|
# no insertions
|
724
744
|
for item in tokens:
|
@@ -744,7 +764,7 @@ def do_insertions(insertions, tokens):
|
|
744
764
|
realpos += len(it_value)
|
745
765
|
oldi = index - i
|
746
766
|
try:
|
747
|
-
index, itokens =
|
767
|
+
index, itokens = next(insertions)
|
748
768
|
except StopIteration:
|
749
769
|
insleft = False
|
750
770
|
break # not strictly necessary
|
@@ -759,7 +779,7 @@ def do_insertions(insertions, tokens):
|
|
759
779
|
yield realpos, t, v
|
760
780
|
realpos += len(v)
|
761
781
|
try:
|
762
|
-
index, itokens =
|
782
|
+
index, itokens = next(insertions)
|
763
783
|
except StopIteration:
|
764
784
|
insleft = False
|
765
785
|
break # not strictly necessary
|