rouge 3.17.0
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 +40 -0
- data/LICENSE +186 -0
- data/bin/rougify +18 -0
- data/lib/rouge.rb +93 -0
- data/lib/rouge/cli.rb +498 -0
- data/lib/rouge/demos/abap +6 -0
- data/lib/rouge/demos/actionscript +4 -0
- data/lib/rouge/demos/ada +26 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/apex +9 -0
- data/lib/rouge/demos/apiblueprint +33 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/armasm +12 -0
- data/lib/rouge/demos/awk +4 -0
- data/lib/rouge/demos/batchfile +3 -0
- data/lib/rouge/demos/bbcbasic +6 -0
- data/lib/rouge/demos/biml +38 -0
- data/lib/rouge/demos/bpf +7 -0
- data/lib/rouge/demos/brainfuck +5 -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/clean +6 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/cmake +7 -0
- data/lib/rouge/demos/cmhg +8 -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/crystal +45 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/csvs +8 -0
- data/lib/rouge/demos/cuda +11 -0
- data/lib/rouge/demos/cython +6 -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 +18 -0
- data/lib/rouge/demos/eex +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/epp +4 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/escape +3 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/fortran +22 -0
- data/lib/rouge/demos/freefem +16 -0
- data/lib/rouge/demos/fsharp +12 -0
- data/lib/rouge/demos/gdscript +18 -0
- data/lib/rouge/demos/ghc-core +26 -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/haxe +5 -0
- data/lib/rouge/demos/hcl +7 -0
- data/lib/rouge/demos/hocon +8 -0
- data/lib/rouge/demos/hql +5 -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/jsl +3 -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/jsp +29 -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 +10 -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/lustre +6 -0
- data/lib/rouge/demos/lutin +18 -0
- data/lib/rouge/demos/m68k +16 -0
- data/lib/rouge/demos/magik +6 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/mason +22 -0
- data/lib/rouge/demos/mathematica +8 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/minizinc +23 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/mosel +10 -0
- data/lib/rouge/demos/msgtrans +4 -0
- data/lib/rouge/demos/mxml +22 -0
- data/lib/rouge/demos/nasm +26 -0
- data/lib/rouge/demos/nesasm +11 -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/objective_cpp +17 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/openedge +4 -0
- data/lib/rouge/demos/opentype_feature_file +6 -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 +11 -0
- data/lib/rouge/demos/pony +17 -0
- data/lib/rouge/demos/powershell +13 -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 +8 -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/reasonml +12 -0
- data/lib/rouge/demos/robot_framework +27 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sas +13 -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/slice +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/sparql +6 -0
- data/lib/rouge/demos/sqf +14 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/supercollider +11 -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/terraform +16 -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/ttcn3 +6 -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/vcl +12 -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/xojo +14 -0
- data/lib/rouge/demos/xpath +2 -0
- data/lib/rouge/demos/xquery +22 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +112 -0
- data/lib/rouge/formatters/html.rb +56 -0
- data/lib/rouge/formatters/html_inline.rb +31 -0
- data/lib/rouge/formatters/html_legacy.rb +45 -0
- data/lib/rouge/formatters/html_line_table.rb +53 -0
- data/lib/rouge/formatters/html_linewise.rb +23 -0
- data/lib/rouge/formatters/html_pygments.rb +18 -0
- data/lib/rouge/formatters/html_table.rb +51 -0
- data/lib/rouge/formatters/null.rb +20 -0
- data/lib/rouge/formatters/terminal256.rb +198 -0
- data/lib/rouge/formatters/terminal_truecolor.rb +37 -0
- data/lib/rouge/formatters/tex.rb +92 -0
- data/lib/rouge/guesser.rb +57 -0
- data/lib/rouge/guessers/disambiguation.rb +136 -0
- data/lib/rouge/guessers/filename.rb +27 -0
- data/lib/rouge/guessers/glob_mapping.rb +45 -0
- data/lib/rouge/guessers/mimetype.rb +16 -0
- data/lib/rouge/guessers/modeline.rb +46 -0
- data/lib/rouge/guessers/source.rb +31 -0
- data/lib/rouge/guessers/util.rb +34 -0
- data/lib/rouge/lexer.rb +516 -0
- data/lib/rouge/lexers/abap.rb +240 -0
- data/lib/rouge/lexers/actionscript.rb +196 -0
- data/lib/rouge/lexers/ada.rb +162 -0
- data/lib/rouge/lexers/apache.rb +73 -0
- data/lib/rouge/lexers/apache/keywords.yml +764 -0
- data/lib/rouge/lexers/apex.rb +126 -0
- data/lib/rouge/lexers/apiblueprint.rb +49 -0
- data/lib/rouge/lexers/apple_script.rb +370 -0
- data/lib/rouge/lexers/armasm.rb +145 -0
- data/lib/rouge/lexers/awk.rb +162 -0
- data/lib/rouge/lexers/batchfile.rb +164 -0
- data/lib/rouge/lexers/bbcbasic.rb +112 -0
- data/lib/rouge/lexers/biml.rb +43 -0
- data/lib/rouge/lexers/bpf.rb +118 -0
- data/lib/rouge/lexers/brainfuck.rb +53 -0
- data/lib/rouge/lexers/bsl.rb +82 -0
- data/lib/rouge/lexers/c.rb +190 -0
- data/lib/rouge/lexers/ceylon.rb +96 -0
- data/lib/rouge/lexers/cfscript.rb +154 -0
- data/lib/rouge/lexers/clean.rb +156 -0
- data/lib/rouge/lexers/clojure.rb +113 -0
- data/lib/rouge/lexers/cmake.rb +207 -0
- data/lib/rouge/lexers/cmhg.rb +34 -0
- data/lib/rouge/lexers/coffeescript.rb +215 -0
- data/lib/rouge/lexers/common_lisp.rb +346 -0
- data/lib/rouge/lexers/conf.rb +25 -0
- data/lib/rouge/lexers/console.rb +174 -0
- data/lib/rouge/lexers/coq.rb +191 -0
- data/lib/rouge/lexers/cpp.rb +82 -0
- data/lib/rouge/lexers/crystal.rb +430 -0
- data/lib/rouge/lexers/csharp.rb +114 -0
- data/lib/rouge/lexers/css.rb +274 -0
- data/lib/rouge/lexers/csvs.rb +44 -0
- data/lib/rouge/lexers/cuda.rb +35 -0
- data/lib/rouge/lexers/cython.rb +151 -0
- data/lib/rouge/lexers/d.rb +177 -0
- data/lib/rouge/lexers/dart.rb +105 -0
- data/lib/rouge/lexers/diff.rb +37 -0
- data/lib/rouge/lexers/digdag.rb +70 -0
- data/lib/rouge/lexers/docker.rb +51 -0
- data/lib/rouge/lexers/dot.rb +69 -0
- data/lib/rouge/lexers/ecl.rb +175 -0
- data/lib/rouge/lexers/eex.rb +52 -0
- data/lib/rouge/lexers/eiffel.rb +66 -0
- data/lib/rouge/lexers/elixir.rb +149 -0
- data/lib/rouge/lexers/elm.rb +90 -0
- data/lib/rouge/lexers/epp.rb +51 -0
- data/lib/rouge/lexers/erb.rb +53 -0
- data/lib/rouge/lexers/erlang.rb +115 -0
- data/lib/rouge/lexers/escape.rb +58 -0
- data/lib/rouge/lexers/factor.rb +303 -0
- data/lib/rouge/lexers/fortran.rb +178 -0
- data/lib/rouge/lexers/freefem.rb +240 -0
- data/lib/rouge/lexers/fsharp.rb +119 -0
- data/lib/rouge/lexers/gdscript.rb +171 -0
- data/lib/rouge/lexers/ghc_core.rb +151 -0
- data/lib/rouge/lexers/gherkin.rb +140 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +16 -0
- data/lib/rouge/lexers/glsl.rb +132 -0
- data/lib/rouge/lexers/go.rb +175 -0
- data/lib/rouge/lexers/gradle.rb +38 -0
- data/lib/rouge/lexers/graphql.rb +261 -0
- data/lib/rouge/lexers/groovy.rb +111 -0
- data/lib/rouge/lexers/hack.rb +49 -0
- data/lib/rouge/lexers/haml.rb +226 -0
- data/lib/rouge/lexers/handlebars.rb +91 -0
- data/lib/rouge/lexers/haskell.rb +199 -0
- data/lib/rouge/lexers/haxe.rb +246 -0
- data/lib/rouge/lexers/hcl.rb +163 -0
- data/lib/rouge/lexers/hocon.rb +86 -0
- data/lib/rouge/lexers/hql.rb +139 -0
- data/lib/rouge/lexers/html.rb +141 -0
- data/lib/rouge/lexers/http.rb +81 -0
- data/lib/rouge/lexers/hylang.rb +94 -0
- data/lib/rouge/lexers/idlang.rb +312 -0
- data/lib/rouge/lexers/igorpro.rb +664 -0
- data/lib/rouge/lexers/ini.rb +54 -0
- data/lib/rouge/lexers/io.rb +69 -0
- data/lib/rouge/lexers/irb.rb +67 -0
- data/lib/rouge/lexers/java.rb +91 -0
- data/lib/rouge/lexers/javascript.rb +279 -0
- data/lib/rouge/lexers/jinja.rb +154 -0
- data/lib/rouge/lexers/jsl.rb +55 -0
- data/lib/rouge/lexers/json.rb +69 -0
- data/lib/rouge/lexers/json_doc.rb +25 -0
- data/lib/rouge/lexers/jsonnet.rb +152 -0
- data/lib/rouge/lexers/jsp.rb +120 -0
- data/lib/rouge/lexers/jsx.rb +104 -0
- data/lib/rouge/lexers/julia.rb +290 -0
- data/lib/rouge/lexers/kotlin.rb +127 -0
- data/lib/rouge/lexers/lasso.rb +215 -0
- data/lib/rouge/lexers/lasso/keywords.yml +446 -0
- data/lib/rouge/lexers/liquid.rb +285 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +34 -0
- data/lib/rouge/lexers/literate_haskell.rb +37 -0
- data/lib/rouge/lexers/llvm.rb +97 -0
- data/lib/rouge/lexers/lua.rb +164 -0
- data/lib/rouge/lexers/lua/builtins.rb +24 -0
- data/lib/rouge/lexers/lustre.rb +79 -0
- data/lib/rouge/lexers/lutin.rb +33 -0
- data/lib/rouge/lexers/m68k.rb +143 -0
- data/lib/rouge/lexers/magik.rb +127 -0
- data/lib/rouge/lexers/make.rb +135 -0
- data/lib/rouge/lexers/markdown.rb +182 -0
- data/lib/rouge/lexers/mason.rb +110 -0
- data/lib/rouge/lexers/mathematica.rb +96 -0
- data/lib/rouge/lexers/mathematica/builtins.rb +13 -0
- data/lib/rouge/lexers/matlab.rb +81 -0
- data/lib/rouge/lexers/matlab/builtins.yml +3515 -0
- data/lib/rouge/lexers/minizinc.rb +87 -0
- data/lib/rouge/lexers/moonscript.rb +115 -0
- data/lib/rouge/lexers/mosel.rb +232 -0
- data/lib/rouge/lexers/msgtrans.rb +26 -0
- data/lib/rouge/lexers/mxml.rb +69 -0
- data/lib/rouge/lexers/nasm.rb +72 -0
- data/lib/rouge/lexers/nesasm.rb +78 -0
- data/lib/rouge/lexers/nginx.rb +72 -0
- data/lib/rouge/lexers/nim.rb +154 -0
- data/lib/rouge/lexers/nix.rb +211 -0
- data/lib/rouge/lexers/objective_c.rb +21 -0
- data/lib/rouge/lexers/objective_c/common.rb +184 -0
- data/lib/rouge/lexers/objective_cpp.rb +31 -0
- data/lib/rouge/lexers/ocaml.rb +65 -0
- data/lib/rouge/lexers/ocaml/common.rb +53 -0
- data/lib/rouge/lexers/openedge.rb +429 -0
- data/lib/rouge/lexers/opentype_feature_file.rb +113 -0
- data/lib/rouge/lexers/pascal.rb +67 -0
- data/lib/rouge/lexers/perl.rb +231 -0
- data/lib/rouge/lexers/php.rb +216 -0
- data/lib/rouge/lexers/php/builtins.rb +203 -0
- data/lib/rouge/lexers/plain_text.rb +27 -0
- data/lib/rouge/lexers/plist.rb +47 -0
- data/lib/rouge/lexers/pony.rb +94 -0
- data/lib/rouge/lexers/powershell.rb +230 -0
- data/lib/rouge/lexers/praat.rb +351 -0
- data/lib/rouge/lexers/prolog.rb +67 -0
- data/lib/rouge/lexers/prometheus.rb +123 -0
- data/lib/rouge/lexers/properties.rb +52 -0
- data/lib/rouge/lexers/protobuf.rb +71 -0
- data/lib/rouge/lexers/puppet.rb +129 -0
- data/lib/rouge/lexers/python.rb +248 -0
- data/lib/rouge/lexers/q.rb +126 -0
- data/lib/rouge/lexers/qml.rb +74 -0
- data/lib/rouge/lexers/r.rb +89 -0
- data/lib/rouge/lexers/racket.rb +545 -0
- data/lib/rouge/lexers/reasonml.rb +65 -0
- data/lib/rouge/lexers/robot_framework.rb +249 -0
- data/lib/rouge/lexers/ruby.rb +444 -0
- data/lib/rouge/lexers/rust.rb +193 -0
- data/lib/rouge/lexers/sas.rb +563 -0
- data/lib/rouge/lexers/sass.rb +75 -0
- data/lib/rouge/lexers/sass/common.rb +181 -0
- data/lib/rouge/lexers/scala.rb +169 -0
- data/lib/rouge/lexers/scheme.rb +113 -0
- data/lib/rouge/lexers/scss.rb +35 -0
- data/lib/rouge/lexers/sed.rb +173 -0
- data/lib/rouge/lexers/shell.rb +201 -0
- data/lib/rouge/lexers/sieve.rb +97 -0
- data/lib/rouge/lexers/slice.rb +32 -0
- data/lib/rouge/lexers/slim.rb +229 -0
- data/lib/rouge/lexers/smalltalk.rb +117 -0
- data/lib/rouge/lexers/smarty.rb +81 -0
- data/lib/rouge/lexers/sml.rb +345 -0
- data/lib/rouge/lexers/sparql.rb +129 -0
- data/lib/rouge/lexers/sqf.rb +109 -0
- data/lib/rouge/lexers/sqf/commands.rb +15 -0
- data/lib/rouge/lexers/sql.rb +161 -0
- data/lib/rouge/lexers/supercollider.rb +116 -0
- data/lib/rouge/lexers/swift.rb +186 -0
- data/lib/rouge/lexers/tap.rb +89 -0
- data/lib/rouge/lexers/tcl.rb +193 -0
- data/lib/rouge/lexers/terraform.rb +113 -0
- data/lib/rouge/lexers/tex.rb +70 -0
- data/lib/rouge/lexers/toml.rb +106 -0
- data/lib/rouge/lexers/tsx.rb +20 -0
- data/lib/rouge/lexers/ttcn3.rb +119 -0
- data/lib/rouge/lexers/tulip.rb +108 -0
- data/lib/rouge/lexers/turtle.rb +61 -0
- data/lib/rouge/lexers/twig.rb +40 -0
- data/lib/rouge/lexers/typescript.rb +30 -0
- data/lib/rouge/lexers/typescript/common.rb +34 -0
- data/lib/rouge/lexers/vala.rb +78 -0
- data/lib/rouge/lexers/varnish.rb +168 -0
- data/lib/rouge/lexers/vb.rb +165 -0
- data/lib/rouge/lexers/verilog.rb +163 -0
- data/lib/rouge/lexers/vhdl.rb +98 -0
- data/lib/rouge/lexers/viml.rb +102 -0
- data/lib/rouge/lexers/viml/keywords.rb +14 -0
- data/lib/rouge/lexers/vue.rb +124 -0
- data/lib/rouge/lexers/wollok.rb +104 -0
- data/lib/rouge/lexers/xml.rb +54 -0
- data/lib/rouge/lexers/xojo.rb +61 -0
- data/lib/rouge/lexers/xpath.rb +332 -0
- data/lib/rouge/lexers/xquery.rb +145 -0
- data/lib/rouge/lexers/yaml.rb +376 -0
- data/lib/rouge/plugins/redcarpet.rb +37 -0
- data/lib/rouge/regex_lexer.rb +443 -0
- data/lib/rouge/template_lexer.rb +21 -0
- data/lib/rouge/tex_theme_renderer.rb +132 -0
- data/lib/rouge/text_analyzer.rb +50 -0
- data/lib/rouge/theme.rb +218 -0
- data/lib/rouge/themes/base16.rb +131 -0
- data/lib/rouge/themes/bw.rb +41 -0
- data/lib/rouge/themes/colorful.rb +68 -0
- data/lib/rouge/themes/github.rb +72 -0
- data/lib/rouge/themes/gruvbox.rb +168 -0
- data/lib/rouge/themes/igor_pro.rb +21 -0
- data/lib/rouge/themes/magritte.rb +78 -0
- data/lib/rouge/themes/molokai.rb +83 -0
- data/lib/rouge/themes/monokai.rb +93 -0
- data/lib/rouge/themes/monokai_sublime.rb +93 -0
- data/lib/rouge/themes/pastie.rb +70 -0
- data/lib/rouge/themes/thankful_eyes.rb +75 -0
- data/lib/rouge/themes/tulip.rb +70 -0
- data/lib/rouge/token.rb +191 -0
- data/lib/rouge/util.rb +102 -0
- data/lib/rouge/version.rb +8 -0
- data/rouge.gemspec +26 -0
- metadata +476 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Lua < RegexLexer
|
|
7
|
+
title "Lua"
|
|
8
|
+
desc "Lua (http://www.lua.org)"
|
|
9
|
+
tag 'lua'
|
|
10
|
+
filenames '*.lua', '*.wlua'
|
|
11
|
+
|
|
12
|
+
mimetypes 'text/x-lua', 'application/x-lua'
|
|
13
|
+
|
|
14
|
+
option :function_highlighting, 'Whether to highlight builtin functions (default: true)'
|
|
15
|
+
option :disabled_modules, 'builtin modules to disable'
|
|
16
|
+
|
|
17
|
+
def initialize(opts={})
|
|
18
|
+
@function_highlighting = opts.delete(:function_highlighting) { true }
|
|
19
|
+
@disabled_modules = opts.delete(:disabled_modules) { [] }
|
|
20
|
+
super(opts)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.detect?(text)
|
|
24
|
+
return true if text.shebang? 'lua'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.builtins
|
|
28
|
+
load File.join(__dir__, 'lua/builtins.rb')
|
|
29
|
+
self.builtins
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def builtins
|
|
33
|
+
return [] unless @function_highlighting
|
|
34
|
+
|
|
35
|
+
@builtins ||= Set.new.tap do |builtins|
|
|
36
|
+
self.class.builtins.each do |mod, fns|
|
|
37
|
+
next if @disabled_modules.include? mod
|
|
38
|
+
builtins.merge(fns)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
state :root do
|
|
44
|
+
# lua allows a file to start with a shebang
|
|
45
|
+
rule %r(#!(.*?)$), Comment::Preproc
|
|
46
|
+
rule %r//, Text, :base
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
state :base do
|
|
50
|
+
rule %r(--\[(=*)\[.*?\]\1\])m, Comment::Multiline
|
|
51
|
+
rule %r(--.*$), Comment::Single
|
|
52
|
+
|
|
53
|
+
rule %r((?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?'), Num::Float
|
|
54
|
+
rule %r((?i)\d+e[+-]?\d+), Num::Float
|
|
55
|
+
rule %r((?i)0x[0-9a-f]*), Num::Hex
|
|
56
|
+
rule %r(\d+), Num::Integer
|
|
57
|
+
|
|
58
|
+
rule %r(\n), Text
|
|
59
|
+
rule %r([^\S\n]), Text
|
|
60
|
+
# multiline strings
|
|
61
|
+
rule %r(\[(=*)\[.*?\]\1\])m, Str
|
|
62
|
+
|
|
63
|
+
rule %r((==|~=|<=|>=|\.\.\.|\.\.|[=+\-*/%^<>#])), Operator
|
|
64
|
+
rule %r([\[\]\{\}\(\)\.,:;]), Punctuation
|
|
65
|
+
rule %r((and|or|not)\b), Operator::Word
|
|
66
|
+
|
|
67
|
+
rule %r((break|do|else|elseif|end|for|if|in|repeat|return|then|until|while)\b), Keyword
|
|
68
|
+
rule %r((local)\b), Keyword::Declaration
|
|
69
|
+
rule %r((true|false|nil)\b), Keyword::Constant
|
|
70
|
+
|
|
71
|
+
rule %r((function)\b), Keyword, :function_name
|
|
72
|
+
|
|
73
|
+
rule %r([A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?) do |m|
|
|
74
|
+
name = m[0]
|
|
75
|
+
if name == "gsub"
|
|
76
|
+
token Name::Builtin
|
|
77
|
+
push :gsub
|
|
78
|
+
elsif self.builtins.include?(name)
|
|
79
|
+
token Name::Builtin
|
|
80
|
+
elsif name =~ /\./
|
|
81
|
+
a, b = name.split('.', 2)
|
|
82
|
+
token Name, a
|
|
83
|
+
token Punctuation, '.'
|
|
84
|
+
token Name, b
|
|
85
|
+
else
|
|
86
|
+
token Name
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
rule %r('), Str::Single, :escape_sqs
|
|
91
|
+
rule %r("), Str::Double, :escape_dqs
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
state :function_name do
|
|
95
|
+
rule %r/\s+/, Text
|
|
96
|
+
rule %r((?:([A-Za-z_][A-Za-z0-9_]*)(\.))?([A-Za-z_][A-Za-z0-9_]*)) do
|
|
97
|
+
groups Name::Class, Punctuation, Name::Function
|
|
98
|
+
pop!
|
|
99
|
+
end
|
|
100
|
+
# inline function
|
|
101
|
+
rule %r(\(), Punctuation, :pop!
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
state :gsub do
|
|
105
|
+
rule %r/\)/, Punctuation, :pop!
|
|
106
|
+
rule %r/[(,]/, Punctuation
|
|
107
|
+
rule %r/\s+/, Text
|
|
108
|
+
rule %r/"/, Str::Regex, :regex
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
state :regex do
|
|
112
|
+
rule %r(") do
|
|
113
|
+
token Str::Regex
|
|
114
|
+
goto :regex_end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
rule %r/\[\^?/, Str::Escape, :regex_group
|
|
118
|
+
rule %r/\\./, Str::Escape
|
|
119
|
+
rule %r{[(][?][:=<!]}, Str::Escape
|
|
120
|
+
rule %r/[{][\d,]+[}]/, Str::Escape
|
|
121
|
+
rule %r/[()?]/, Str::Escape
|
|
122
|
+
rule %r/./, Str::Regex
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
state :regex_end do
|
|
126
|
+
rule %r/[$]+/, Str::Regex, :pop!
|
|
127
|
+
rule(//) { pop! }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
state :regex_group do
|
|
131
|
+
rule %r(/), Str::Escape
|
|
132
|
+
rule %r/\]/, Str::Escape, :pop!
|
|
133
|
+
rule %r/(\\)(.)/ do |m|
|
|
134
|
+
groups Str::Escape, Str::Regex
|
|
135
|
+
end
|
|
136
|
+
rule %r/./, Str::Regex
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
state :escape_sqs do
|
|
140
|
+
mixin :string_escape
|
|
141
|
+
mixin :sqs
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
state :escape_dqs do
|
|
145
|
+
mixin :string_escape
|
|
146
|
+
mixin :dqs
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
state :string_escape do
|
|
150
|
+
rule %r(\\([abfnrtv\\"']|\d{1,3})), Str::Escape
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
state :sqs do
|
|
154
|
+
rule %r('), Str::Single, :pop!
|
|
155
|
+
rule %r([^']+), Str::Single
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
state :dqs do
|
|
159
|
+
rule %r("), Str::Double, :pop!
|
|
160
|
+
rule %r([^"]+), Str::Double
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# automatically generated by `rake builtins:lua`
|
|
5
|
+
module Rouge
|
|
6
|
+
module Lexers
|
|
7
|
+
class Lua
|
|
8
|
+
def self.builtins
|
|
9
|
+
@builtins ||= {}.tap do |b|
|
|
10
|
+
b["basic"] = Set.new %w(_G _VERSION assert collectgarbage dofile error getmetatable ipairs load loadfile next pairs pcall print rawequal rawget rawlen rawset select setmetatable tonumber tostring type xpcall file:close file:flush file:lines file:read file:seek file:setvbuf file:write LUA_CPATH LUA_CPATH_5_2 LUA_INIT LUA_INIT_5_2 LUA_PATH LUA_PATH_5_2 luaopen_base luaopen_bit32 luaopen_coroutine luaopen_debug luaopen_io luaopen_math luaopen_os luaopen_package luaopen_string luaopen_table LUA_ERRERR LUA_ERRFILE LUA_ERRGCMM LUA_ERRMEM LUA_ERRRUN LUA_ERRSYNTAX LUA_HOOKCALL LUA_HOOKCOUNT LUA_HOOKLINE LUA_HOOKRET LUA_HOOKTAILCALL LUA_MASKCALL LUA_MASKCOUNT LUA_MASKLINE LUA_MASKRET LUA_MINSTACK LUA_MULTRET LUA_NOREF LUA_OK LUA_OPADD LUA_OPDIV LUA_OPEQ LUA_OPLE LUA_OPLT LUA_OPMOD LUA_OPMUL LUA_OPPOW LUA_OPSUB LUA_OPUNM LUA_REFNIL LUA_REGISTRYINDEX LUA_RIDX_GLOBALS LUA_RIDX_MAINTHREAD LUA_TBOOLEAN LUA_TFUNCTION LUA_TLIGHTUSERDATA LUA_TNIL LUA_TNONE LUA_TNUMBER LUA_TSTRING LUA_TTABLE LUA_TTHREAD LUA_TUSERDATA LUA_USE_APICHECK LUA_YIELD LUAL_BUFFERSIZE)
|
|
11
|
+
b["modules"] = Set.new %w(require package.config package.cpath package.loaded package.loadlib package.path package.preload package.searchers package.searchpath)
|
|
12
|
+
b["bit32"] = Set.new %w(bit32.arshift bit32.band bit32.bnot bit32.bor bit32.btest bit32.bxor bit32.extract bit32.lrotate bit32.lshift bit32.replace bit32.rrotate bit32.rshift)
|
|
13
|
+
b["coroutine"] = Set.new %w(coroutine.create coroutine.resume coroutine.running coroutine.status coroutine.wrap coroutine.yield)
|
|
14
|
+
b["debug"] = Set.new %w(debug.debug debug.getuservalue debug.gethook debug.getinfo debug.getlocal debug.getmetatable debug.getregistry debug.getupvalue debug.setuservalue debug.sethook debug.setlocal debug.setmetatable debug.setupvalue debug.traceback debug.upvalueid debug.upvaluejoin)
|
|
15
|
+
b["io"] = Set.new %w(io.close io.flush io.input io.lines io.open io.output io.popen io.read io.stderr io.stdin io.stdout io.tmpfile io.type io.write)
|
|
16
|
+
b["math"] = Set.new %w(math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.cosh math.deg math.exp math.floor math.fmod math.frexp math.huge math.ldexp math.log math.max math.min math.modf math.pi math.pow math.rad math.random math.randomseed math.sin math.sinh math.sqrt math.tan math.tanh)
|
|
17
|
+
b["os"] = Set.new %w(os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname)
|
|
18
|
+
b["string"] = Set.new %w(string.byte string.char string.dump string.find string.format string.gmatch string.gsub string.len string.lower string.match string.rep string.reverse string.sub string.upper)
|
|
19
|
+
b["table"] = Set.new %w(table.concat table.insert table.pack table.remove table.sort table.unpack)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Lustre < RegexLexer
|
|
7
|
+
title "Lustre"
|
|
8
|
+
desc 'The Lustre programming language (Verimag)'
|
|
9
|
+
tag 'lustre'
|
|
10
|
+
filenames '*.lus'
|
|
11
|
+
mimetypes 'text/x-lustre'
|
|
12
|
+
|
|
13
|
+
def self.keywords
|
|
14
|
+
@keywords ||= Set.new %w(
|
|
15
|
+
extern unsafe assert const current enum function let node operator
|
|
16
|
+
returns step struct tel type var model package needs provides uses is
|
|
17
|
+
body end include merge
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.word_operators
|
|
22
|
+
@word_operators ||= Set.new %w(
|
|
23
|
+
div and xor mod or not nor if then else fby pre when with
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.primitives
|
|
28
|
+
@primitives ||= Set.new %w(int real bool)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
operator = %r([,!$%&*+./:<=>?@^|~#-]+)
|
|
32
|
+
id = /[a-z_][\w']*/i
|
|
33
|
+
|
|
34
|
+
state :root do
|
|
35
|
+
rule %r/\s+/m, Text
|
|
36
|
+
rule %r/false|true/, Keyword::Constant
|
|
37
|
+
rule %r(\-\-.*), Comment::Single
|
|
38
|
+
rule %r(/\*.*?\*/)m, Comment::Multiline
|
|
39
|
+
rule %r(\(\*.*?\*\))m, Comment::Multiline
|
|
40
|
+
rule id do |m|
|
|
41
|
+
match = m[0]
|
|
42
|
+
if self.class.keywords.include? match
|
|
43
|
+
token Keyword
|
|
44
|
+
elsif self.class.word_operators.include? match
|
|
45
|
+
token Operator::Word
|
|
46
|
+
elsif self.class.primitives.include? match
|
|
47
|
+
token Keyword::Type
|
|
48
|
+
else
|
|
49
|
+
token Name
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
rule %r/[(){}\[\];]+/, Punctuation
|
|
54
|
+
rule operator, Operator
|
|
55
|
+
|
|
56
|
+
rule %r/-?\d[\d_]*(.[\d_]*)?(e[+-]?\d[\d_]*)/i, Num::Float
|
|
57
|
+
rule %r/\d[\d_]*/, Num::Integer
|
|
58
|
+
|
|
59
|
+
rule %r/'(?:(\\[\\"'ntbr ])|(\\[0-9]{3})|(\\x\h{2}))'/, Str::Char
|
|
60
|
+
rule %r/'[.]'/, Str::Char
|
|
61
|
+
rule %r/"/, Str::Double, :string
|
|
62
|
+
rule %r/[~?]#{id}/, Name::Variable
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
state :string do
|
|
66
|
+
rule %r/[^\\"]+/, Str::Double
|
|
67
|
+
mixin :escape_sequence
|
|
68
|
+
rule %r/\\\n/, Str::Double
|
|
69
|
+
rule %r/"/, Str::Double, :pop!
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
state :escape_sequence do
|
|
73
|
+
rule %r/\\[\\"'ntbr]/, Str::Escape
|
|
74
|
+
rule %r/\\\d{3}/, Str::Escape
|
|
75
|
+
rule %r/\\x\h{2}/, Str::Escape
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
#
|
|
4
|
+
# adapted from lustre.rf (adapted from ocaml.rb), hence some ocaml-ism migth remains
|
|
5
|
+
module Rouge
|
|
6
|
+
module Lexers
|
|
7
|
+
load_lexer 'lustre.rb'
|
|
8
|
+
|
|
9
|
+
class Lutin < Lustre
|
|
10
|
+
title "Lutin"
|
|
11
|
+
desc 'The Lutin programming language (Verimag)'
|
|
12
|
+
tag 'lutin'
|
|
13
|
+
filenames '*.lut'
|
|
14
|
+
mimetypes 'text/x-lutin'
|
|
15
|
+
|
|
16
|
+
def self.keywords
|
|
17
|
+
@keywords ||= Set.new %w(
|
|
18
|
+
let in node extern system returns weak strong assert raise try catch
|
|
19
|
+
trap do exist erun run type ref exception include false true
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.word_operators
|
|
24
|
+
@word_operators ||= Set.new %w(
|
|
25
|
+
div and xor mod or not nor if then else pre)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.primitives
|
|
29
|
+
@primitives ||= Set.new %w(int real bool trace loop fby)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class M68k < RegexLexer
|
|
7
|
+
tag 'm68k'
|
|
8
|
+
|
|
9
|
+
title "M68k"
|
|
10
|
+
desc "Motorola 68k Assembler"
|
|
11
|
+
|
|
12
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
|
13
|
+
|
|
14
|
+
def self.keywords
|
|
15
|
+
@keywords ||= Set.new %w(
|
|
16
|
+
abcd add adda addi addq addx and andi asl asr
|
|
17
|
+
|
|
18
|
+
bcc bcs beq bge bgt bhi ble bls blt bmi bne bpl bvc bvs bhs blo
|
|
19
|
+
bchg bclr bfchg bfclr bfests bfextu bfffo bfins bfset bftst bkpt bra bse bsr btst
|
|
20
|
+
|
|
21
|
+
callm cas cas2 chk chk2 clr cmp cmpa cmpi cmpm cmp2
|
|
22
|
+
|
|
23
|
+
dbcc dbcs dbeq dbge dbgt dbhi dble dbls dblt dbmi dbne dbpl dbvc dbvs dbhs dblo
|
|
24
|
+
dbra dbf dbt divs divsl divu divul
|
|
25
|
+
|
|
26
|
+
eor eori exg ext extb
|
|
27
|
+
|
|
28
|
+
illegal jmp jsr lea link lsl lsr
|
|
29
|
+
|
|
30
|
+
move movea move16 movem movep moveq muls mulu
|
|
31
|
+
|
|
32
|
+
nbcd neg negx nop not or ori
|
|
33
|
+
|
|
34
|
+
pack pea rol ror roxl roxr rtd rtm rtr rts
|
|
35
|
+
|
|
36
|
+
sbcd
|
|
37
|
+
|
|
38
|
+
seq sne spl smi svc svs st sf sge sgt sle slt scc shi sls scs shs slo
|
|
39
|
+
sub suba subi subq subx swap
|
|
40
|
+
|
|
41
|
+
tas trap trapcc TODO trapv tst
|
|
42
|
+
|
|
43
|
+
unlk unpk eori
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.keywords_type
|
|
48
|
+
@keywords_type ||= Set.new %w(
|
|
49
|
+
dc ds dcb
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.reserved
|
|
54
|
+
@reserved ||= Set.new %w(
|
|
55
|
+
include incdir incbin end endf endfunc endmain endproc fpu func machine main mmu opword proc set opt section
|
|
56
|
+
rept endr
|
|
57
|
+
ifeq ifne ifgt ifge iflt ifle iif ifd ifnd ifc ifnc elseif else endc
|
|
58
|
+
even cnop fail machine
|
|
59
|
+
output radix __G2 __LK
|
|
60
|
+
list nolist plen llen ttl subttl spc page listchar format
|
|
61
|
+
equ equenv equr set reg
|
|
62
|
+
rsreset rsset offset
|
|
63
|
+
cargs
|
|
64
|
+
fequ.s fequ.d fequ.x fequ.p fequ.w fequ.l fopt
|
|
65
|
+
macro endm mexit narg
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.builtins
|
|
70
|
+
@builtins ||=Set.new %w(
|
|
71
|
+
d0 d1 d2 d3 d4 d5 d6 d7
|
|
72
|
+
a0 a1 a2 a3 a4 a5 a6 a7 a7'
|
|
73
|
+
pc usp ssp ccr
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
start { push :expr_bol }
|
|
78
|
+
|
|
79
|
+
state :expr_bol do
|
|
80
|
+
mixin :inline_whitespace
|
|
81
|
+
rule(//) { pop! }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
state :inline_whitespace do
|
|
85
|
+
rule %r/\s+/, Text
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
state :whitespace do
|
|
89
|
+
rule %r/\n+/m, Text, :expr_bol
|
|
90
|
+
rule %r(^\*(\\.|.)*?$), Comment::Single, :expr_bol
|
|
91
|
+
rule %r(;(\\.|.)*?$), Comment::Single, :expr_bol
|
|
92
|
+
mixin :inline_whitespace
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
state :root do
|
|
96
|
+
rule(//) { push :statements }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
state :statements do
|
|
100
|
+
mixin :whitespace
|
|
101
|
+
rule %r/"/, Str, :string
|
|
102
|
+
rule %r/#/, Name::Decorator
|
|
103
|
+
rule %r/^\.?[a-zA-Z0-9_]+:?/, Name::Label
|
|
104
|
+
rule %r/\.[bswl]\s/i, Name::Decorator
|
|
105
|
+
rule %r('(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
|
|
106
|
+
rule %r/\$[0-9a-f]+/i, Num::Hex
|
|
107
|
+
rule %r/@[0-8]+/i, Num::Oct
|
|
108
|
+
rule %r/%[01]+/i, Num::Bin
|
|
109
|
+
rule %r/\d+/i, Num::Integer
|
|
110
|
+
rule %r([*~&+=\|?:<>/-]), Operator
|
|
111
|
+
rule %r/\\./, Comment::Preproc
|
|
112
|
+
rule %r/[(),.]/, Punctuation
|
|
113
|
+
rule %r/\[[a-zA-Z0-9]*\]/, Punctuation
|
|
114
|
+
|
|
115
|
+
rule id do |m|
|
|
116
|
+
name = m[0]
|
|
117
|
+
|
|
118
|
+
if self.class.keywords.include? name.downcase
|
|
119
|
+
token Keyword
|
|
120
|
+
elsif self.class.keywords_type.include? name.downcase
|
|
121
|
+
token Keyword::Type
|
|
122
|
+
elsif self.class.reserved.include? name.downcase
|
|
123
|
+
token Keyword::Reserved
|
|
124
|
+
elsif self.class.builtins.include? name.downcase
|
|
125
|
+
token Name::Builtin
|
|
126
|
+
elsif name =~ /[a-zA-Z0-9]+/
|
|
127
|
+
token Name::Variable
|
|
128
|
+
else
|
|
129
|
+
token Name
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
state :string do
|
|
135
|
+
rule %r/"/, Str, :pop!
|
|
136
|
+
rule %r/\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
|
|
137
|
+
rule %r/[^\\"\n]+/, Str
|
|
138
|
+
rule %r/\\\n/, Str
|
|
139
|
+
rule %r/\\/, Str # stray backslash
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Magik < RegexLexer
|
|
7
|
+
title "Magik"
|
|
8
|
+
desc "Smallworld Magik"
|
|
9
|
+
tag 'magik'
|
|
10
|
+
filenames '*.magik'
|
|
11
|
+
mimetypes 'text/x-magik', 'application/x-magik'
|
|
12
|
+
|
|
13
|
+
def self.keywords
|
|
14
|
+
@keywords ||= %w(
|
|
15
|
+
_package
|
|
16
|
+
_pragma
|
|
17
|
+
_block _endblock
|
|
18
|
+
_handling _default
|
|
19
|
+
_protect _protection _endprotect
|
|
20
|
+
_try _with _when _endtry
|
|
21
|
+
_catch _endcatch
|
|
22
|
+
_throw
|
|
23
|
+
_lock _endlock
|
|
24
|
+
_if _then _elif _else _endif
|
|
25
|
+
_for _over _while _loop _finally _endloop _loopbody _continue _leave
|
|
26
|
+
_return
|
|
27
|
+
_class
|
|
28
|
+
_local _constant _recursive _global _dynamic _import
|
|
29
|
+
_private _iter _abstract _method _endmethod
|
|
30
|
+
_proc _endproc
|
|
31
|
+
_gather _scatter _allresults _optional
|
|
32
|
+
_thisthread _self _clone _super
|
|
33
|
+
_primitive
|
|
34
|
+
_unset _true _false _maybe
|
|
35
|
+
_is _isnt _not _and _or _xor _cf _andif _orif
|
|
36
|
+
_div _mod
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.string_double
|
|
41
|
+
@string_double ||= /"[^"\n]*?"/
|
|
42
|
+
end
|
|
43
|
+
def self.string_single
|
|
44
|
+
@string_single ||= /'[^'\n]*?'/
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.digits
|
|
48
|
+
@digits ||= /[0-9]+/
|
|
49
|
+
end
|
|
50
|
+
def self.radix
|
|
51
|
+
@radix ||= /r[0-9a-z]/i
|
|
52
|
+
end
|
|
53
|
+
def self.exponent
|
|
54
|
+
@exponent ||= /(e|&)[+-]?#{Magik.digits}/i
|
|
55
|
+
end
|
|
56
|
+
def self.decimal
|
|
57
|
+
@decimal ||= /\.#{Magik.digits}/
|
|
58
|
+
end
|
|
59
|
+
def self.number
|
|
60
|
+
@number = /#{Magik.digits}(#{Magik.radix}|#{Magik.exponent}|#{Magik.decimal})*/
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.character
|
|
64
|
+
@character ||= /%u[0-9a-z]{4}|%[^\s]+/i
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def self.simple_identifier
|
|
68
|
+
@simple_identifier ||= /(?>(?:[a-z0-9_!?]|\\.)+)/i
|
|
69
|
+
end
|
|
70
|
+
def self.piped_identifier
|
|
71
|
+
@piped_identifier ||= /\|[^\|\n]*\|/
|
|
72
|
+
end
|
|
73
|
+
def self.identifier
|
|
74
|
+
@identifier ||= /(?:#{Magik.simple_identifier}|#{Magik.piped_identifier})+/i
|
|
75
|
+
end
|
|
76
|
+
def self.package_identifier
|
|
77
|
+
@package_identifier ||= /#{Magik.identifier}:#{Magik.identifier}/
|
|
78
|
+
end
|
|
79
|
+
def self.symbol
|
|
80
|
+
@symbol ||= /:#{Magik.identifier}/i
|
|
81
|
+
end
|
|
82
|
+
def self.global_ref
|
|
83
|
+
@global_ref ||= /@[\s]*#{Magik.identifier}:#{Magik.identifier}/
|
|
84
|
+
end
|
|
85
|
+
def self.label
|
|
86
|
+
@label = /@[\s]*#{Magik.identifier}/
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
state :root do
|
|
90
|
+
rule %r/##(.*)?/, Comment::Doc
|
|
91
|
+
rule %r/#(.*)?/, Comment::Single
|
|
92
|
+
|
|
93
|
+
rule %r/(_method)(\s+)/ do
|
|
94
|
+
groups Keyword, Text::Whitespace
|
|
95
|
+
push :method_name
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
rule %r/(?:#{Magik.keywords.join('|')})\b/, Keyword
|
|
99
|
+
|
|
100
|
+
rule Magik.string_double, Literal::String
|
|
101
|
+
rule Magik.string_single, Literal::String
|
|
102
|
+
rule Magik.symbol, Str::Symbol
|
|
103
|
+
rule Magik.global_ref, Name::Label
|
|
104
|
+
rule Magik.label, Name::Label
|
|
105
|
+
rule Magik.character, Literal::String::Char
|
|
106
|
+
rule Magik.number, Literal::Number
|
|
107
|
+
rule Magik.package_identifier, Name
|
|
108
|
+
rule Magik.identifier, Name
|
|
109
|
+
|
|
110
|
+
rule %r/[\[\]{}()\.,;]/, Punctuation
|
|
111
|
+
rule %r/\$/, Punctuation
|
|
112
|
+
rule %r/(<<|^<<)/, Operator
|
|
113
|
+
rule %r/(>>)/, Operator
|
|
114
|
+
rule %r/[-~+\/*%=&^<>]|!=/, Operator
|
|
115
|
+
|
|
116
|
+
rule %r/[\s]+/, Text::Whitespace
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
state :method_name do
|
|
120
|
+
rule %r/(#{Magik.identifier})(\.)(#{Magik.identifier})/ do
|
|
121
|
+
groups Name::Class, Punctuation, Name::Function
|
|
122
|
+
pop!
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|