rouge_ecl 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +26 -0
- data/LICENSE +186 -0
- data/bin/rougify +17 -0
- data/lib/rouge.rb +82 -0
- data/lib/rouge/cli.rb +429 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/awk +4 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/bsl +7 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/ceylon +7 -0
- data/lib/rouge/demos/cfscript +18 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/console +6 -0
- data/lib/rouge/demos/coq +13 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/d +16 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/digdag +19 -0
- data/lib/rouge/demos/docker +9 -0
- data/lib/rouge/demos/dot +5 -0
- data/lib/rouge/demos/ecl +1 -0
- data/lib/rouge/demos/eiffel +30 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/elm +4 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/fsharp +12 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/gradle +10 -0
- data/lib/rouge/demos/graphql +17 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/hack +5 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/hylang +10 -0
- data/lib/rouge/demos/idlang +8 -0
- data/lib/rouge/demos/igorpro +9 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/irb +4 -0
- data/lib/rouge/demos/irb_output +2 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/jinja +9 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/jsonnet +28 -0
- data/lib/rouge/demos/jsx +17 -0
- data/lib/rouge/demos/julia +11 -0
- data/lib/rouge/demos/kotlin +3 -0
- data/lib/rouge/demos/lasso +12 -0
- data/lib/rouge/demos/liquid +11 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/mosel +10 -0
- data/lib/rouge/demos/mxml +22 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/nix +19 -0
- data/lib/rouge/demos/objective_c +18 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/pascal +14 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/plist +142 -0
- data/lib/rouge/demos/pony +17 -0
- data/lib/rouge/demos/powershell +49 -0
- data/lib/rouge/demos/praat +26 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/prometheus +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/protobuf +5 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/q +2 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/sieve +10 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/smarty +12 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tap +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tsx +17 -0
- data/lib/rouge/demos/tulip +13 -0
- data/lib/rouge/demos/turtle +26 -0
- data/lib/rouge/demos/twig +9 -0
- data/lib/rouge/demos/typescript +1 -0
- data/lib/rouge/demos/vala +8 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/verilog +27 -0
- data/lib/rouge/demos/vhdl +23 -0
- data/lib/rouge/demos/viml +14 -0
- data/lib/rouge/demos/vue +11 -0
- data/lib/rouge/demos/wollok +11 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +75 -0
- data/lib/rouge/formatters/html.rb +37 -0
- data/lib/rouge/formatters/html_inline.rb +30 -0
- data/lib/rouge/formatters/html_legacy.rb +44 -0
- data/lib/rouge/formatters/html_linewise.rb +27 -0
- data/lib/rouge/formatters/html_pygments.rb +16 -0
- data/lib/rouge/formatters/html_table.rb +61 -0
- data/lib/rouge/formatters/null.rb +19 -0
- data/lib/rouge/formatters/terminal256.rb +180 -0
- data/lib/rouge/guesser.rb +55 -0
- data/lib/rouge/guessers/disambiguation.rb +101 -0
- data/lib/rouge/guessers/filename.rb +25 -0
- data/lib/rouge/guessers/glob_mapping.rb +43 -0
- data/lib/rouge/guessers/mimetype.rb +14 -0
- data/lib/rouge/guessers/modeline.rb +44 -0
- data/lib/rouge/guessers/source.rb +29 -0
- data/lib/rouge/guessers/util.rb +32 -0
- data/lib/rouge/lexer.rb +461 -0
- data/lib/rouge/lexers/abap.rb +238 -0
- data/lib/rouge/lexers/actionscript.rb +195 -0
- data/lib/rouge/lexers/apache.rb +71 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apiblueprint.rb +47 -0
- data/lib/rouge/lexers/apple_script.rb +367 -0
- data/lib/rouge/lexers/awk.rb +161 -0
- data/lib/rouge/lexers/biml.rb +41 -0
- data/lib/rouge/lexers/bsl.rb +81 -0
- data/lib/rouge/lexers/c.rb +212 -0
- data/lib/rouge/lexers/ceylon.rb +123 -0
- data/lib/rouge/lexers/cfscript.rb +153 -0
- data/lib/rouge/lexers/clojure.rb +112 -0
- data/lib/rouge/lexers/cmake.rb +206 -0
- data/lib/rouge/lexers/coffeescript.rb +174 -0
- data/lib/rouge/lexers/common_lisp.rb +345 -0
- data/lib/rouge/lexers/conf.rb +24 -0
- data/lib/rouge/lexers/console.rb +136 -0
- data/lib/rouge/lexers/coq.rb +187 -0
- data/lib/rouge/lexers/cpp.rb +78 -0
- data/lib/rouge/lexers/csharp.rb +114 -0
- data/lib/rouge/lexers/css.rb +273 -0
- data/lib/rouge/lexers/d.rb +176 -0
- data/lib/rouge/lexers/dart.rb +104 -0
- data/lib/rouge/lexers/diff.rb +31 -0
- data/lib/rouge/lexers/digdag.rb +68 -0
- data/lib/rouge/lexers/docker.rb +50 -0
- data/lib/rouge/lexers/dot.rb +68 -0
- data/lib/rouge/lexers/ecl.rb +138 -0
- data/lib/rouge/lexers/eiffel.rb +65 -0
- data/lib/rouge/lexers/elixir.rb +133 -0
- data/lib/rouge/lexers/elm.rb +89 -0
- data/lib/rouge/lexers/erb.rb +52 -0
- data/lib/rouge/lexers/erlang.rb +114 -0
- data/lib/rouge/lexers/factor.rb +302 -0
- data/lib/rouge/lexers/fortran.rb +176 -0
- data/lib/rouge/lexers/fsharp.rb +118 -0
- data/lib/rouge/lexers/gherkin.rb +137 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
- data/lib/rouge/lexers/glsl.rb +135 -0
- data/lib/rouge/lexers/go.rb +174 -0
- data/lib/rouge/lexers/gradle.rb +37 -0
- data/lib/rouge/lexers/graphql.rb +243 -0
- data/lib/rouge/lexers/groovy.rb +112 -0
- data/lib/rouge/lexers/hack.rb +48 -0
- data/lib/rouge/lexers/haml.rb +229 -0
- data/lib/rouge/lexers/handlebars.rb +79 -0
- data/lib/rouge/lexers/haskell.rb +182 -0
- data/lib/rouge/lexers/html.rb +139 -0
- data/lib/rouge/lexers/http.rb +80 -0
- data/lib/rouge/lexers/hylang.rb +93 -0
- data/lib/rouge/lexers/idlang.rb +310 -0
- data/lib/rouge/lexers/igorpro.rb +408 -0
- data/lib/rouge/lexers/ini.rb +53 -0
- data/lib/rouge/lexers/io.rb +68 -0
- data/lib/rouge/lexers/irb.rb +66 -0
- data/lib/rouge/lexers/java.rb +87 -0
- data/lib/rouge/lexers/javascript.rb +281 -0
- data/lib/rouge/lexers/jinja.rb +137 -0
- data/lib/rouge/lexers/json.rb +29 -0
- data/lib/rouge/lexers/json_doc.rb +23 -0
- data/lib/rouge/lexers/jsonnet.rb +151 -0
- data/lib/rouge/lexers/jsx.rb +102 -0
- data/lib/rouge/lexers/julia.rb +172 -0
- data/lib/rouge/lexers/kotlin.rb +79 -0
- data/lib/rouge/lexers/lasso.rb +214 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/liquid.rb +287 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
- data/lib/rouge/lexers/literate_haskell.rb +36 -0
- data/lib/rouge/lexers/llvm.rb +80 -0
- data/lib/rouge/lexers/lua.rb +125 -0
- data/lib/rouge/lexers/lua/builtins.rb +22 -0
- data/lib/rouge/lexers/make.rb +112 -0
- data/lib/rouge/lexers/markdown.rb +154 -0
- data/lib/rouge/lexers/matlab.rb +71 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/moonscript.rb +114 -0
- data/lib/rouge/lexers/mosel.rb +231 -0
- data/lib/rouge/lexers/mxml.rb +68 -0
- data/lib/rouge/lexers/nasm.rb +198 -0
- data/lib/rouge/lexers/nginx.rb +71 -0
- data/lib/rouge/lexers/nim.rb +152 -0
- data/lib/rouge/lexers/nix.rb +205 -0
- data/lib/rouge/lexers/objective_c.rb +194 -0
- data/lib/rouge/lexers/ocaml.rb +100 -0
- data/lib/rouge/lexers/pascal.rb +66 -0
- data/lib/rouge/lexers/perl.rb +196 -0
- data/lib/rouge/lexers/php.rb +193 -0
- data/lib/rouge/lexers/php/builtins.rb +194 -0
- data/lib/rouge/lexers/plain_text.rb +26 -0
- data/lib/rouge/lexers/plist.rb +45 -0
- data/lib/rouge/lexers/pony.rb +93 -0
- data/lib/rouge/lexers/powershell.rb +678 -0
- data/lib/rouge/lexers/praat.rb +350 -0
- data/lib/rouge/lexers/prolog.rb +59 -0
- data/lib/rouge/lexers/prometheus.rb +121 -0
- data/lib/rouge/lexers/properties.rb +51 -0
- data/lib/rouge/lexers/protobuf.rb +70 -0
- data/lib/rouge/lexers/puppet.rb +128 -0
- data/lib/rouge/lexers/python.rb +232 -0
- data/lib/rouge/lexers/q.rb +123 -0
- data/lib/rouge/lexers/qml.rb +73 -0
- data/lib/rouge/lexers/r.rb +89 -0
- data/lib/rouge/lexers/racket.rb +543 -0
- data/lib/rouge/lexers/ruby.rb +437 -0
- data/lib/rouge/lexers/rust.rb +192 -0
- data/lib/rouge/lexers/sass.rb +74 -0
- data/lib/rouge/lexers/sass/common.rb +180 -0
- data/lib/rouge/lexers/scala.rb +142 -0
- data/lib/rouge/lexers/scheme.rb +112 -0
- data/lib/rouge/lexers/scss.rb +34 -0
- data/lib/rouge/lexers/sed.rb +172 -0
- data/lib/rouge/lexers/shell.rb +189 -0
- data/lib/rouge/lexers/sieve.rb +96 -0
- data/lib/rouge/lexers/slim.rb +228 -0
- data/lib/rouge/lexers/smalltalk.rb +116 -0
- data/lib/rouge/lexers/smarty.rb +80 -0
- data/lib/rouge/lexers/sml.rb +344 -0
- data/lib/rouge/lexers/sql.rb +140 -0
- data/lib/rouge/lexers/swift.rb +181 -0
- data/lib/rouge/lexers/tap.rb +87 -0
- data/lib/rouge/lexers/tcl.rb +192 -0
- data/lib/rouge/lexers/tex.rb +69 -0
- data/lib/rouge/lexers/toml.rb +67 -0
- data/lib/rouge/lexers/tsx.rb +19 -0
- data/lib/rouge/lexers/tulip.rb +106 -0
- data/lib/rouge/lexers/turtle.rb +63 -0
- data/lib/rouge/lexers/twig.rb +39 -0
- data/lib/rouge/lexers/typescript.rb +22 -0
- data/lib/rouge/lexers/typescript/common.rb +33 -0
- data/lib/rouge/lexers/vala.rb +77 -0
- data/lib/rouge/lexers/vb.rb +164 -0
- data/lib/rouge/lexers/verilog.rb +164 -0
- data/lib/rouge/lexers/vhdl.rb +97 -0
- data/lib/rouge/lexers/viml.rb +101 -0
- data/lib/rouge/lexers/viml/keywords.rb +12 -0
- data/lib/rouge/lexers/vue.rb +122 -0
- data/lib/rouge/lexers/wollok.rb +103 -0
- data/lib/rouge/lexers/xml.rb +57 -0
- data/lib/rouge/lexers/yaml.rb +373 -0
- data/lib/rouge/plugins/redcarpet.rb +30 -0
- data/lib/rouge/regex_lexer.rb +441 -0
- data/lib/rouge/template_lexer.rb +20 -0
- data/lib/rouge/text_analyzer.rb +49 -0
- data/lib/rouge/theme.rb +213 -0
- data/lib/rouge/themes/base16.rb +130 -0
- data/lib/rouge/themes/colorful.rb +67 -0
- data/lib/rouge/themes/github.rb +71 -0
- data/lib/rouge/themes/gruvbox.rb +167 -0
- data/lib/rouge/themes/igor_pro.rb +20 -0
- data/lib/rouge/themes/molokai.rb +82 -0
- data/lib/rouge/themes/monokai.rb +92 -0
- data/lib/rouge/themes/monokai_sublime.rb +90 -0
- data/lib/rouge/themes/pastie.rb +69 -0
- data/lib/rouge/themes/thankful_eyes.rb +74 -0
- data/lib/rouge/themes/tulip.rb +69 -0
- data/lib/rouge/token.rb +182 -0
- data/lib/rouge/util.rb +101 -0
- data/lib/rouge/version.rb +7 -0
- data/rouge.gemspec +23 -0
- metadata +365 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Conf < RegexLexer
|
|
6
|
+
tag 'conf'
|
|
7
|
+
aliases 'config', 'configuration'
|
|
8
|
+
|
|
9
|
+
title "Config File"
|
|
10
|
+
desc 'A generic lexer for configuration files'
|
|
11
|
+
filenames '*.conf', '*.config'
|
|
12
|
+
|
|
13
|
+
# short and sweet
|
|
14
|
+
state :root do
|
|
15
|
+
rule /#.*?\n/, Comment
|
|
16
|
+
rule /".*?"/, Str::Double
|
|
17
|
+
rule /'.*?'/, Str::Single
|
|
18
|
+
rule /[a-z]\w*/i, Name
|
|
19
|
+
rule /\d+/, Num
|
|
20
|
+
rule /[^\d\w#"']+/, Text
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class ConsoleLexer < Lexer
|
|
6
|
+
tag 'console'
|
|
7
|
+
aliases 'terminal', 'shell_session', 'shell-session'
|
|
8
|
+
filenames '*.cap'
|
|
9
|
+
desc 'A generic lexer for shell sessions. Accepts ?lang and ?output lexer options, a ?prompt option, and ?comments to enable # comments.'
|
|
10
|
+
|
|
11
|
+
option :lang, 'the shell language to lex (default: shell)'
|
|
12
|
+
option :output, 'the output language (default: plaintext?token=Generic.Output)'
|
|
13
|
+
option :prompt, 'comma-separated list of strings that indicate the end of a prompt. (default: $,#,>,;)'
|
|
14
|
+
option :comments, 'enable hash-comments at the start of a line - otherwise interpreted as a prompt. (default: false, implied by ?prompt not containing `#`)'
|
|
15
|
+
|
|
16
|
+
def initialize(*)
|
|
17
|
+
super
|
|
18
|
+
@prompt = list_option(:prompt) { nil }
|
|
19
|
+
@lang = lexer_option(:lang) { 'shell' }
|
|
20
|
+
@output = lexer_option(:output) { PlainText.new(token: Generic::Output) }
|
|
21
|
+
@comments = bool_option(:comments) { :guess }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def prompt_regex
|
|
25
|
+
@prompt_regex ||= begin
|
|
26
|
+
/^#{prompt_prefix_regex}(?:#{end_chars.map(&Regexp.method(:escape)).join('|')})/
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def end_chars
|
|
31
|
+
@end_chars ||= if @prompt.any?
|
|
32
|
+
@prompt.reject { |c| c.empty? }
|
|
33
|
+
else
|
|
34
|
+
%w($ # > ;)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# whether to allow comments. if manually specifying a prompt that isn't
|
|
39
|
+
# simply "#", we flag this to on
|
|
40
|
+
def allow_comments?
|
|
41
|
+
case @comments
|
|
42
|
+
when :guess
|
|
43
|
+
@prompt && !@prompt.empty? && !end_chars.include?('#')
|
|
44
|
+
else
|
|
45
|
+
@comments
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def prompt_prefix_regex
|
|
50
|
+
if allow_comments?
|
|
51
|
+
/[^<#]*?/m
|
|
52
|
+
else
|
|
53
|
+
/.*?/m
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def lang_lexer
|
|
58
|
+
@lang_lexer ||= case @lang
|
|
59
|
+
when Lexer
|
|
60
|
+
@lang
|
|
61
|
+
when nil
|
|
62
|
+
Shell.new(options)
|
|
63
|
+
when Class
|
|
64
|
+
@lang.new(options)
|
|
65
|
+
when String
|
|
66
|
+
Lexer.find(@lang).new(options)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def output_lexer
|
|
71
|
+
@output_lexer ||= case @output
|
|
72
|
+
when nil
|
|
73
|
+
PlainText.new(token: Generic::Output)
|
|
74
|
+
when Lexer
|
|
75
|
+
@output
|
|
76
|
+
when Class
|
|
77
|
+
@output.new(options)
|
|
78
|
+
when String
|
|
79
|
+
Lexer.find(@output).new(options)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def line_regex
|
|
84
|
+
/(\\.|[^\\])*?(\n|$)/m
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def comment_regex
|
|
88
|
+
/\A\s*?#/
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def stream_tokens(input, &output)
|
|
92
|
+
input = StringScanner.new(input)
|
|
93
|
+
lang_lexer.reset!
|
|
94
|
+
output_lexer.reset!
|
|
95
|
+
|
|
96
|
+
process_line(input, &output) while !input.eos?
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def process_line(input, &output)
|
|
100
|
+
input.scan(line_regex)
|
|
101
|
+
|
|
102
|
+
if input[0] =~ /\A\s*(?:<[.]+>|[.]+)\s*\z/
|
|
103
|
+
puts "console: matched snip #{input[0].inspect}" if @debug
|
|
104
|
+
output_lexer.reset!
|
|
105
|
+
lang_lexer.reset!
|
|
106
|
+
|
|
107
|
+
yield Comment, input[0]
|
|
108
|
+
elsif prompt_regex =~ input[0]
|
|
109
|
+
puts "console: matched prompt #{input[0].inspect}" if @debug
|
|
110
|
+
output_lexer.reset!
|
|
111
|
+
|
|
112
|
+
yield Generic::Prompt, $&
|
|
113
|
+
|
|
114
|
+
# make sure to take care of initial whitespace
|
|
115
|
+
# before we pass to the lang lexer so it can determine where
|
|
116
|
+
# the "real" beginning of the line is
|
|
117
|
+
$' =~ /\A\s*/
|
|
118
|
+
yield Text, $& unless $&.empty?
|
|
119
|
+
|
|
120
|
+
lang_lexer.lex($', continue: true, &output)
|
|
121
|
+
elsif comment_regex =~ input[0].strip
|
|
122
|
+
puts "console: matched comment #{input[0].inspect}" if @debug
|
|
123
|
+
output_lexer.reset!
|
|
124
|
+
lang_lexer.reset!
|
|
125
|
+
|
|
126
|
+
yield Comment, input[0]
|
|
127
|
+
else
|
|
128
|
+
puts "console: matched output #{input[0].inspect}" if @debug
|
|
129
|
+
lang_lexer.reset!
|
|
130
|
+
|
|
131
|
+
output_lexer.lex(input[0], continue: true, &output)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Coq < RegexLexer
|
|
6
|
+
title "Coq"
|
|
7
|
+
desc 'Coq (coq.inria.fr)'
|
|
8
|
+
tag 'coq'
|
|
9
|
+
mimetypes 'text/x-coq'
|
|
10
|
+
|
|
11
|
+
def self.gallina
|
|
12
|
+
@gallina ||= Set.new %w(
|
|
13
|
+
as fun if in let match then else return end Type Set Prop
|
|
14
|
+
forall
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.coq
|
|
19
|
+
@coq ||= Set.new %w(
|
|
20
|
+
Definition Theorem Lemma Remark Example Fixpoint CoFixpoint
|
|
21
|
+
Record Inductive CoInductive Corollary Goal Proof
|
|
22
|
+
Ltac Require Import Export Module Section End Variable
|
|
23
|
+
Context Polymorphic Monomorphic Universe Universes
|
|
24
|
+
Variables Class Instance Global Local Include
|
|
25
|
+
Printing Notation Infix Arguments Hint Rewrite Immediate
|
|
26
|
+
Qed Defined Opaque Transparent Existing
|
|
27
|
+
Compute Eval Print SearchAbout Search About Check
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.ltac
|
|
32
|
+
@ltac ||= Set.new %w(
|
|
33
|
+
apply eapply auto eauto rewrite setoid_rewrite
|
|
34
|
+
with in as at destruct split inversion injection
|
|
35
|
+
intro intros unfold fold cbv cbn lazy subst
|
|
36
|
+
clear symmetry transitivity etransitivity erewrite
|
|
37
|
+
edestruct constructor econstructor eexists exists
|
|
38
|
+
f_equal refine instantiate revert simpl
|
|
39
|
+
specialize generalize dependent red induction
|
|
40
|
+
beta iota zeta delta exfalso autorewrite setoid_rewrite
|
|
41
|
+
compute vm_compute native_compute
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.tacticals
|
|
46
|
+
@tacticals ||= Set.new %w(
|
|
47
|
+
repeat first try
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.terminators
|
|
52
|
+
@terminators ||= Set.new %w(
|
|
53
|
+
omega solve congruence reflexivity exact
|
|
54
|
+
assumption eassumption
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.keyopts
|
|
59
|
+
@keyopts ||= Set.new %w(
|
|
60
|
+
:= => -> /\\ \\/ _ ; :> :
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.end_sentence
|
|
65
|
+
@end_sentence ||= Punctuation::Indicator
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.classify(x)
|
|
69
|
+
if self.coq.include? x
|
|
70
|
+
return Keyword
|
|
71
|
+
elsif self.gallina.include? x
|
|
72
|
+
return Keyword::Reserved
|
|
73
|
+
elsif self.ltac.include? x
|
|
74
|
+
return Keyword::Pseudo
|
|
75
|
+
elsif self.terminators.include? x
|
|
76
|
+
return Name::Exception
|
|
77
|
+
elsif self.tacticals.include? x
|
|
78
|
+
return Keyword::Pseudo
|
|
79
|
+
else
|
|
80
|
+
return Name::Constant
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
operator = %r([\[\];,{}_()!$%&*+./:<=>?@^|~#-]+)
|
|
85
|
+
id = /(?:[a-z][\w']*)|(?:[_a-z][\w']+)/i
|
|
86
|
+
dot_id = /\.((?:[a-z][\w']*)|(?:[_a-z][\w']+))/i
|
|
87
|
+
dot_space = /\.(\s+)/
|
|
88
|
+
module_type = /Module(\s+)Type(\s+)/
|
|
89
|
+
set_options = /(Set|Unset)(\s+)(Universe|Printing|Implicit|Strict)(\s+)(Polymorphism|All|Notations|Arguments|Universes|Implicit)(\s*)\./m
|
|
90
|
+
|
|
91
|
+
state :root do
|
|
92
|
+
rule /[(][*](?![)])/, Comment, :comment
|
|
93
|
+
rule /\s+/m, Text::Whitespace
|
|
94
|
+
rule module_type do |m|
|
|
95
|
+
token Keyword , 'Module'
|
|
96
|
+
token Text::Whitespace , m[1]
|
|
97
|
+
token Keyword , 'Type'
|
|
98
|
+
token Text::Whitespace , m[2]
|
|
99
|
+
end
|
|
100
|
+
rule set_options do |m|
|
|
101
|
+
token Keyword , m[1]
|
|
102
|
+
i = 2
|
|
103
|
+
while m[i] != ''
|
|
104
|
+
token Text::Whitespace , m[i]
|
|
105
|
+
token Keyword , m[i+1]
|
|
106
|
+
i += 2
|
|
107
|
+
end
|
|
108
|
+
token self.class.end_sentence , '.'
|
|
109
|
+
end
|
|
110
|
+
rule id do |m|
|
|
111
|
+
@name = m[0]
|
|
112
|
+
@continue = false
|
|
113
|
+
push :continue_id
|
|
114
|
+
end
|
|
115
|
+
rule /\/\\/, Operator
|
|
116
|
+
rule /\\\//, Operator
|
|
117
|
+
rule operator do |m|
|
|
118
|
+
match = m[0]
|
|
119
|
+
if self.class.keyopts.include? match
|
|
120
|
+
token Punctuation
|
|
121
|
+
else
|
|
122
|
+
token Operator
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
rule /-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
|
|
127
|
+
rule /\d[\d_]*/, Num::Integer
|
|
128
|
+
|
|
129
|
+
rule /'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
|
|
130
|
+
rule /'/, Keyword
|
|
131
|
+
rule /"/, Str::Double, :string
|
|
132
|
+
rule /[~?]#{id}/, Name::Variable
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
state :comment do
|
|
136
|
+
rule /[^(*)]+/, Comment
|
|
137
|
+
rule(/[(][*]/) { token Comment; push }
|
|
138
|
+
rule /[*][)]/, Comment, :pop!
|
|
139
|
+
rule /[(*)]/, Comment
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
state :string do
|
|
143
|
+
rule /[^\\"]+/, Str::Double
|
|
144
|
+
mixin :escape_sequence
|
|
145
|
+
rule /\\\n/, Str::Double
|
|
146
|
+
rule /"/, Str::Double, :pop!
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
state :escape_sequence do
|
|
150
|
+
rule /\\[\\"'ntbr]/, Str::Escape
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :continue_id do
|
|
154
|
+
# the stream starts with an id (stored in @name) and continues here
|
|
155
|
+
rule dot_id do |m|
|
|
156
|
+
token Name::Namespace , @name
|
|
157
|
+
token Punctuation , '.'
|
|
158
|
+
@continue = true
|
|
159
|
+
@name = m[1]
|
|
160
|
+
end
|
|
161
|
+
rule dot_space do |m|
|
|
162
|
+
if @continue
|
|
163
|
+
token Name::Constant , @name
|
|
164
|
+
else
|
|
165
|
+
token self.class.classify(@name) , @name
|
|
166
|
+
end
|
|
167
|
+
token self.class.end_sentence , '.'
|
|
168
|
+
token Text::Whitespace , m[1]
|
|
169
|
+
@name = false
|
|
170
|
+
@continue = false
|
|
171
|
+
pop!
|
|
172
|
+
end
|
|
173
|
+
rule // do
|
|
174
|
+
if @continue
|
|
175
|
+
token Name::Constant , @name
|
|
176
|
+
else
|
|
177
|
+
token self.class.classify(@name) , @name
|
|
178
|
+
end
|
|
179
|
+
@name = false
|
|
180
|
+
@continue = false
|
|
181
|
+
pop!
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
load_lexer 'c.rb'
|
|
6
|
+
|
|
7
|
+
class Cpp < C
|
|
8
|
+
title "C++"
|
|
9
|
+
desc "The C++ programming language"
|
|
10
|
+
|
|
11
|
+
tag 'cpp'
|
|
12
|
+
aliases 'c++'
|
|
13
|
+
# the many varied filenames of c++ source files...
|
|
14
|
+
filenames '*.cpp', '*.hpp',
|
|
15
|
+
'*.c++', '*.h++',
|
|
16
|
+
'*.cc', '*.hh',
|
|
17
|
+
'*.cxx', '*.hxx',
|
|
18
|
+
'*.pde', '*.ino',
|
|
19
|
+
'*.tpp'
|
|
20
|
+
mimetypes 'text/x-c++hdr', 'text/x-c++src'
|
|
21
|
+
|
|
22
|
+
def self.keywords
|
|
23
|
+
@keywords ||= super + Set.new(%w(
|
|
24
|
+
asm auto catch const_cast delete dynamic_cast explicit export
|
|
25
|
+
friend mutable namespace new operator private protected public
|
|
26
|
+
reinterpret_cast restrict size_of static_cast template this throw
|
|
27
|
+
throws typeid typename using virtual final override
|
|
28
|
+
|
|
29
|
+
alignas alignof constexpr decltype noexcept static_assert
|
|
30
|
+
thread_local try
|
|
31
|
+
))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.keywords_type
|
|
35
|
+
@keywords_type ||= super + Set.new(%w(
|
|
36
|
+
bool
|
|
37
|
+
))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.reserved
|
|
41
|
+
@reserved ||= super + Set.new(%w(
|
|
42
|
+
__virtual_inheritance __uuidof __super __single_inheritance
|
|
43
|
+
__multiple_inheritance __interface __event
|
|
44
|
+
))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
|
48
|
+
|
|
49
|
+
prepend :root do
|
|
50
|
+
# Offload C++ extensions, http://offload.codeplay.com/
|
|
51
|
+
rule /(?:__offload|__blockingoffload|__outer)\b/, Keyword::Pseudo
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# digits with optional inner quotes
|
|
55
|
+
# see www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
|
|
56
|
+
dq = /\d('?\d)*/
|
|
57
|
+
|
|
58
|
+
prepend :statements do
|
|
59
|
+
rule /class\b/, Keyword, :classname
|
|
60
|
+
rule %r((#{dq}[.]#{dq}?|[.]#{dq})(e[+-]?#{dq}[lu]*)?)i, Num::Float
|
|
61
|
+
rule %r(#{dq}e[+-]?#{dq}[lu]*)i, Num::Float
|
|
62
|
+
rule /0x\h('?\h)*[lu]*/i, Num::Hex
|
|
63
|
+
rule /0[0-7]('?[0-7])*[lu]*/i, Num::Oct
|
|
64
|
+
rule /#{dq}[lu]*/i, Num::Integer
|
|
65
|
+
rule /\bnullptr\b/, Name::Builtin
|
|
66
|
+
rule /(?:u8|u|U|L)?R"([a-zA-Z0-9_{}\[\]#<>%:;.?*\+\-\/\^&|~!=,"']{,16})\(.*?\)\1"/m, Str
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
state :classname do
|
|
70
|
+
rule id, Name::Class, :pop!
|
|
71
|
+
|
|
72
|
+
# template specification
|
|
73
|
+
rule /\s*(?=>)/m, Text, :pop!
|
|
74
|
+
mixin :whitespace
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class CSharp < RegexLexer
|
|
6
|
+
tag 'csharp'
|
|
7
|
+
aliases 'c#', 'cs'
|
|
8
|
+
filenames '*.cs'
|
|
9
|
+
mimetypes 'text/x-csharp'
|
|
10
|
+
|
|
11
|
+
title "C#"
|
|
12
|
+
desc 'a multi-paradigm language targeting .NET'
|
|
13
|
+
|
|
14
|
+
# TODO: support more of unicode
|
|
15
|
+
id = /@?[_a-z]\w*/i
|
|
16
|
+
|
|
17
|
+
#Reserved Identifiers
|
|
18
|
+
#Contextual Keywords
|
|
19
|
+
#LINQ Query Expressions
|
|
20
|
+
keywords = %w(
|
|
21
|
+
abstract as base break case catch checked const continue
|
|
22
|
+
default delegate do else enum event explicit extern false
|
|
23
|
+
finally fixed for foreach goto if implicit in interface
|
|
24
|
+
internal is lock new null operator out override params private
|
|
25
|
+
protected public readonly ref return sealed sizeof stackalloc
|
|
26
|
+
static switch this throw true try typeof unchecked unsafe
|
|
27
|
+
virtual void volatile while
|
|
28
|
+
add alias async await get global partial remove set value where
|
|
29
|
+
yield nameof
|
|
30
|
+
ascending by descending equals from group in into join let on
|
|
31
|
+
orderby select
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
keywords_type = %w(
|
|
35
|
+
bool byte char decimal double dynamic float int long object
|
|
36
|
+
sbyte short string uint ulong ushort var
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
cpp_keywords = %w(
|
|
40
|
+
if endif else elif define undef line error warning region
|
|
41
|
+
endregion pragma
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
state :whitespace do
|
|
45
|
+
rule /\s+/m, Text
|
|
46
|
+
rule %r(//.*?$), Comment::Single
|
|
47
|
+
rule %r(/[*].*?[*]/)m, Comment::Multiline
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
state :nest do
|
|
51
|
+
rule /{/, Punctuation, :nest
|
|
52
|
+
rule /}/, Punctuation, :pop!
|
|
53
|
+
mixin :root
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
state :splice_string do
|
|
57
|
+
rule /\\./, Str
|
|
58
|
+
rule /{/, Punctuation, :nest
|
|
59
|
+
rule /"|\n/, Str, :pop!
|
|
60
|
+
rule /./, Str
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
state :splice_literal do
|
|
64
|
+
rule /""/, Str
|
|
65
|
+
rule /{/, Punctuation, :nest
|
|
66
|
+
rule /"/, Str, :pop!
|
|
67
|
+
rule /./, Str
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
state :root do
|
|
71
|
+
mixin :whitespace
|
|
72
|
+
|
|
73
|
+
rule /^\s*\[.*?\]/, Name::Attribute
|
|
74
|
+
rule /[$]\s*"/, Str, :splice_string
|
|
75
|
+
rule /[$]@\s*"/, Str, :splice_literal
|
|
76
|
+
|
|
77
|
+
rule /(<\[)\s*(#{id}:)?/, Keyword
|
|
78
|
+
rule /\]>/, Keyword
|
|
79
|
+
|
|
80
|
+
rule /[~!%^&*()+=|\[\]{}:;,.<>\/?-]/, Punctuation
|
|
81
|
+
rule /@"(""|[^"])*"/m, Str
|
|
82
|
+
rule /"(\\.|.)*?["\n]/, Str
|
|
83
|
+
rule /'(\\.|.)'/, Str::Char
|
|
84
|
+
rule /0x[0-9a-f]+[lu]?/i, Num
|
|
85
|
+
rule %r(
|
|
86
|
+
[0-9]
|
|
87
|
+
([.][0-9]*)? # decimal
|
|
88
|
+
(e[+-][0-9]+)? # exponent
|
|
89
|
+
[fldu]? # type
|
|
90
|
+
)ix, Num
|
|
91
|
+
rule /\b(?:class|struct|interface)\b/, Keyword, :class
|
|
92
|
+
rule /\b(?:namespace|using)\b/, Keyword, :namespace
|
|
93
|
+
rule /^#[ \t]*(#{cpp_keywords.join('|')})\b.*?\n/,
|
|
94
|
+
Comment::Preproc
|
|
95
|
+
rule /\b(#{keywords.join('|')})\b/, Keyword
|
|
96
|
+
rule /\b(#{keywords_type.join('|')})\b/, Keyword::Type
|
|
97
|
+
rule /#{id}(?=\s*[(])/, Name::Function
|
|
98
|
+
rule id, Name
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
state :class do
|
|
102
|
+
mixin :whitespace
|
|
103
|
+
rule id, Name::Class, :pop!
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
state :namespace do
|
|
107
|
+
mixin :whitespace
|
|
108
|
+
rule /(?=[(])/, Text, :pop!
|
|
109
|
+
rule /(#{id}|[.])+/, Name::Namespace, :pop!
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|