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,151 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
load_lexer 'python.rb'
|
|
7
|
+
|
|
8
|
+
class Cython < Python
|
|
9
|
+
title "Cython"
|
|
10
|
+
desc "Cython and Pyrex source code (cython.org)"
|
|
11
|
+
tag 'cython'
|
|
12
|
+
aliases 'pyx', 'pyrex'
|
|
13
|
+
filenames '*.pyx', '*.pxd', '*.pxi'
|
|
14
|
+
mimetypes 'text/x-cython', 'application/x-cython'
|
|
15
|
+
|
|
16
|
+
def initialize(opts = {})
|
|
17
|
+
super opts
|
|
18
|
+
@indentation = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.keywords
|
|
22
|
+
@keywords ||= super + %w(
|
|
23
|
+
by except? fused gil nogil
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.c_keywords
|
|
28
|
+
@ckeywords ||= %w(
|
|
29
|
+
public readonly extern api inline enum union
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
identifier = /[a-z_]\w*/i
|
|
34
|
+
dotted_identifier = /[a-z_.][\w.]*/i
|
|
35
|
+
|
|
36
|
+
prepend :root do
|
|
37
|
+
rule %r/cp?def|ctypedef/ do
|
|
38
|
+
token Keyword
|
|
39
|
+
push :c_definitions
|
|
40
|
+
push :c_start
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule %r/(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(cimport)/ do
|
|
44
|
+
groups Keyword::Namespace,
|
|
45
|
+
Text,
|
|
46
|
+
Name::Namespace,
|
|
47
|
+
Text,
|
|
48
|
+
Keyword::Namespace
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
rule %r/(cimport)(\s+)(#{dotted_identifier})/ do
|
|
52
|
+
groups Keyword::Namespace, Text, Name::Namespace
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
rule %r/(struct)((?:\\\s|\s)+)/ do
|
|
56
|
+
groups Keyword, Text
|
|
57
|
+
push :classname
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
mixin :func_call_fix
|
|
61
|
+
|
|
62
|
+
rule %r/[(,]/, Punctuation, :c_start
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
prepend :classname do
|
|
66
|
+
rule %r/(?:\\\s|\s)+/, Text
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
prepend :funcname do
|
|
70
|
+
rule %r/(?:\\\s|\s)+/, Text
|
|
71
|
+
end
|
|
72
|
+
# This is a fix for the way that function calls are lexed in the Python
|
|
73
|
+
# lexer. This should be moved to the Python lexer once confirmed that it
|
|
74
|
+
# does not cause any regressions.
|
|
75
|
+
state :func_call_fix do
|
|
76
|
+
rule %r/#{identifier}(?=\()/ do |m|
|
|
77
|
+
if self.class.keywords.include? m[0]
|
|
78
|
+
token Keyword
|
|
79
|
+
elsif self.class.exceptions.include? m[0]
|
|
80
|
+
token Name::Builtin
|
|
81
|
+
elsif self.class.builtins.include? m[0]
|
|
82
|
+
token Name::Builtin
|
|
83
|
+
elsif self.class.builtins_pseudo.include? m[0]
|
|
84
|
+
token Name::Builtin::Pseudo
|
|
85
|
+
else
|
|
86
|
+
token Name::Function
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# The Cython lexer adds three states to those already in the Python lexer.
|
|
92
|
+
# Calls to `cdef`, `cpdef` and `ctypedef` move the lexer into the :c_start
|
|
93
|
+
# state. The primary purpose of this state is to highlight datatypes. Once
|
|
94
|
+
# this has been done, the lexer moves to the :c_definitions state where
|
|
95
|
+
# the majority of text in a definition is lexed. Finally, newlines cause
|
|
96
|
+
# the lexer to move to :c_indent. This state is used to check whether we
|
|
97
|
+
# have moved out of a C block.
|
|
98
|
+
|
|
99
|
+
state :c_start do
|
|
100
|
+
rule %r/[^\S\n]+/, Text
|
|
101
|
+
|
|
102
|
+
rule %r/cp?def|ctypedef/, Keyword
|
|
103
|
+
|
|
104
|
+
rule %r/(?:un)?signed/, Keyword::Type
|
|
105
|
+
|
|
106
|
+
# This rule matches identifiers that could be type declarations. The
|
|
107
|
+
# lookahead matches (1) pointers, (2) arrays and (3) variable names.
|
|
108
|
+
rule %r/#{identifier}(?=(?:\*+)|(?:[ \t]*\[)|(?:[ \t]+\w))/ do |m|
|
|
109
|
+
if self.class.keywords.include? m[0]
|
|
110
|
+
token Keyword
|
|
111
|
+
pop!
|
|
112
|
+
elsif %w(def).include? m[0]
|
|
113
|
+
token Keyword
|
|
114
|
+
goto :funcname
|
|
115
|
+
elsif %w(struct class).include? m[0]
|
|
116
|
+
token Keyword::Reserved
|
|
117
|
+
goto :classname
|
|
118
|
+
elsif self.class.c_keywords.include? m[0]
|
|
119
|
+
token Keyword::Reserved
|
|
120
|
+
else
|
|
121
|
+
token Keyword::Type
|
|
122
|
+
pop!
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
rule(//) { pop! }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
state :c_definitions do
|
|
130
|
+
rule %r/\n/, Text, :c_indent
|
|
131
|
+
mixin :root
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
state :c_indent do
|
|
135
|
+
rule %r/[ \t]+/ do |m|
|
|
136
|
+
token Text
|
|
137
|
+
goto :c_start
|
|
138
|
+
|
|
139
|
+
if @indentation.nil?
|
|
140
|
+
@indentation = m[0]
|
|
141
|
+
elsif @indentation.length > m[0].length
|
|
142
|
+
@indentation = nil
|
|
143
|
+
pop! 2 # Pop :c_start and :c_definitions
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
rule(//) { @indentation = nil; reset_stack }
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class D < RegexLexer
|
|
7
|
+
tag 'd'
|
|
8
|
+
aliases 'dlang'
|
|
9
|
+
filenames '*.d', '*.di'
|
|
10
|
+
mimetypes 'application/x-dsrc', 'text/x-dsrc'
|
|
11
|
+
|
|
12
|
+
title "D"
|
|
13
|
+
desc 'The D programming language(dlang.org)'
|
|
14
|
+
|
|
15
|
+
keywords = %w(
|
|
16
|
+
abstract alias align asm assert auto body
|
|
17
|
+
break case cast catch class const continue
|
|
18
|
+
debug default delegate delete deprecated do else
|
|
19
|
+
enum export extern finally final foreach_reverse
|
|
20
|
+
foreach for function goto if immutable import
|
|
21
|
+
interface invariant inout in is lazy mixin
|
|
22
|
+
module new nothrow out override package pragma
|
|
23
|
+
private protected public pure ref return scope
|
|
24
|
+
shared static struct super switch synchronized
|
|
25
|
+
template this throw try typedef typeid typeof
|
|
26
|
+
union unittest version volatile while with
|
|
27
|
+
__gshared __traits __vector __parameters
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
keywords_type = %w(
|
|
31
|
+
bool byte cdouble cent cfloat char creal
|
|
32
|
+
dchar double float idouble ifloat int ireal
|
|
33
|
+
long real short ubyte ucent uint ulong
|
|
34
|
+
ushort void wchar
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
keywords_pseudo = %w(
|
|
38
|
+
__FILE__ __FILE_FULL_PATH__ __MODULE__ __LINE__ __FUNCTION__
|
|
39
|
+
__PRETTY_FUNCTION__ __DATE__ __EOF__ __TIME__ __TIMESTAMP__
|
|
40
|
+
__VENDOR__ __VERSION__
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
state :whitespace do
|
|
44
|
+
rule %r/\n/m, Text
|
|
45
|
+
rule %r/\s+/m, Text
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
state :root do
|
|
49
|
+
mixin :whitespace
|
|
50
|
+
# Comments
|
|
51
|
+
rule %r(//.*), Comment::Single
|
|
52
|
+
rule %r(/(\\\n)?[*](.|\n)*?[*](\\\n)?/), Comment::Multiline
|
|
53
|
+
rule %r(/\+), Comment::Multiline, :nested_comment
|
|
54
|
+
# Keywords
|
|
55
|
+
rule %r/(#{keywords.join('|')})\b/, Keyword
|
|
56
|
+
rule %r/(#{keywords_type.join('|')})\b/, Keyword::Type
|
|
57
|
+
rule %r/(false|true|null)\b/, Keyword::Constant
|
|
58
|
+
rule %r/(#{keywords_pseudo.join('|')})\b/, Keyword::Pseudo
|
|
59
|
+
rule %r/macro\b/, Keyword::Reserved
|
|
60
|
+
rule %r/(string|wstring|dstring|size_t|ptrdiff_t)\b/, Name::Builtin
|
|
61
|
+
# Literals
|
|
62
|
+
# HexFloat
|
|
63
|
+
rule %r/0[xX]([0-9a-fA-F_]*\.[0-9a-fA-F_]+|[0-9a-fA-F_]+)[pP][+\-]?[0-9_]+[fFL]?[i]?/, Num::Float
|
|
64
|
+
# DecimalFloat
|
|
65
|
+
rule %r/[0-9_]+(\.[0-9_]+[eE][+\-]?[0-9_]+|\.[0-9_]*|[eE][+\-]?[0-9_]+)[fFL]?[i]?/, Num::Float
|
|
66
|
+
rule %r/\.(0|[1-9][0-9_]*)([eE][+\-]?[0-9_]+)?[fFL]?[i]?/, Num::Float
|
|
67
|
+
# IntegerLiteral
|
|
68
|
+
# Binary
|
|
69
|
+
rule %r/0[Bb][01_]+/, Num::Bin
|
|
70
|
+
# Octal
|
|
71
|
+
# TODO: 0[0-7] isn't supported use octal![0-7] instead
|
|
72
|
+
rule %r/0[0-7_]+/, Num::Oct
|
|
73
|
+
# Hexadecimal
|
|
74
|
+
rule %r/0[xX][0-9a-fA-F_]+/, Num::Hex
|
|
75
|
+
# Decimal
|
|
76
|
+
rule %r/(0|[1-9][0-9_]*)([LUu]|Lu|LU|uL|UL)?/, Num::Integer
|
|
77
|
+
# CharacterLiteral
|
|
78
|
+
rule %r/'(\\['"?\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\&\w+;|.)'/, Str::Char
|
|
79
|
+
# StringLiteral
|
|
80
|
+
# WysiwygString
|
|
81
|
+
rule %r/r"[^"]*"[cwd]?/, Str
|
|
82
|
+
# Alternate WysiwygString
|
|
83
|
+
rule %r/`[^`]*`[cwd]?/, Str
|
|
84
|
+
# DoubleQuotedString
|
|
85
|
+
rule %r/"(\\\\|\\"|[^"])*"[cwd]?/, Str
|
|
86
|
+
# EscapeSequence
|
|
87
|
+
rule %r/\\(['\"?\\abfnrtv]|x[0-9a-fA-F]{2}|[0-7]{1,3}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|&\w+;)/, Str
|
|
88
|
+
# HexString
|
|
89
|
+
rule %r/x"[0-9a-fA-F_\s]*"[cwd]?/, Str
|
|
90
|
+
# DelimitedString
|
|
91
|
+
rule %r/q"\[/, Str, :delimited_bracket
|
|
92
|
+
rule %r/q"\(/, Str, :delimited_parenthesis
|
|
93
|
+
rule %r/q"</, Str, :delimited_angle
|
|
94
|
+
rule %r/q"\{/, Str, :delimited_curly
|
|
95
|
+
rule %r/q"([a-zA-Z_]\w*)\n.*?\n\1"/, Str
|
|
96
|
+
rule %r/q"(.).*?\1"/, Str
|
|
97
|
+
# TokenString
|
|
98
|
+
rule %r/q\{/, Str, :token_string
|
|
99
|
+
# Attributes
|
|
100
|
+
rule %r/@([a-zA-Z_]\w*)?/, Name::Decorator
|
|
101
|
+
# Tokens
|
|
102
|
+
rule %r`(~=|\^=|%=|\*=|==|!>=|!<=|!<>=|!<>|!<|!>|!=|>>>=|>>>|>>=|>>|>=|<>=|<>|<<=|<<|<=|\+\+|\+=|--|-=|\|\||\|=|&&|&=|\.\.\.|\.\.|/=)|[/.&|\-+<>!()\[\]{}?,;:$=*%^~]`, Punctuation
|
|
103
|
+
# Identifier
|
|
104
|
+
rule %r/[a-zA-Z_]\w*/, Name
|
|
105
|
+
# Line
|
|
106
|
+
rule %r/#line\s.*\n/, Comment::Special
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
state :nested_comment do
|
|
110
|
+
rule %r([^+/]+), Comment::Multiline
|
|
111
|
+
rule %r(/\+), Comment::Multiline, :push
|
|
112
|
+
rule %r(\+/), Comment::Multiline, :pop!
|
|
113
|
+
rule %r([+/]), Comment::Multiline
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
state :token_string do
|
|
117
|
+
rule %r/\{/, Punctuation, :token_string_nest
|
|
118
|
+
rule %r/\}/, Str, :pop!
|
|
119
|
+
mixin :root
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
state :token_string_nest do
|
|
123
|
+
rule %r/\{/, Punctuation, :push
|
|
124
|
+
rule %r/\}/, Punctuation, :pop!
|
|
125
|
+
mixin :root
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
state :delimited_bracket do
|
|
129
|
+
rule %r/[^\[\]]+/, Str
|
|
130
|
+
rule %r/\[/, Str, :delimited_inside_bracket
|
|
131
|
+
rule %r/\]"/, Str, :pop!
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
state :delimited_inside_bracket do
|
|
135
|
+
rule %r/[^\[\]]+/, Str
|
|
136
|
+
rule %r/\[/, Str, :push
|
|
137
|
+
rule %r/\]/, Str, :pop!
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
state :delimited_parenthesis do
|
|
141
|
+
rule %r/[^()]+/, Str
|
|
142
|
+
rule %r/\(/, Str, :delimited_inside_parenthesis
|
|
143
|
+
rule %r/\)"/, Str, :pop!
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
state :delimited_inside_parenthesis do
|
|
147
|
+
rule %r/[^()]+/, Str
|
|
148
|
+
rule %r/\(/, Str, :push
|
|
149
|
+
rule %r/\)/, Str, :pop!
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
state :delimited_angle do
|
|
153
|
+
rule %r/[^<>]+/, Str
|
|
154
|
+
rule %r/</, Str, :delimited_inside_angle
|
|
155
|
+
rule %r/>"/, Str, :pop!
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
state :delimited_inside_angle do
|
|
159
|
+
rule %r/[^<>]+/, Str
|
|
160
|
+
rule %r/</, Str, :push
|
|
161
|
+
rule %r/>/, Str, :pop!
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
state :delimited_curly do
|
|
165
|
+
rule %r/[^{}]+/, Str
|
|
166
|
+
rule %r/\{/, Str, :delimited_inside_curly
|
|
167
|
+
rule %r/\}"/, Str, :pop!
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
state :delimited_inside_curly do
|
|
171
|
+
rule %r/[^{}]+/, Str
|
|
172
|
+
rule %r/\{/, Str, :push
|
|
173
|
+
rule %r/\}/, Str, :pop!
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Rouge
|
|
5
|
+
module Lexers
|
|
6
|
+
class Dart < RegexLexer
|
|
7
|
+
title "Dart"
|
|
8
|
+
desc "The Dart programming language (dartlang.com)"
|
|
9
|
+
|
|
10
|
+
tag 'dart'
|
|
11
|
+
filenames '*.dart'
|
|
12
|
+
mimetypes 'text/x-dart'
|
|
13
|
+
|
|
14
|
+
keywords = %w(
|
|
15
|
+
as assert break case catch continue default do else finally for
|
|
16
|
+
if in is new rethrow return super switch this throw try while with
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
declarations = %w(
|
|
20
|
+
abstract dynamic const external extends factory final get implements
|
|
21
|
+
native operator set static typedef var
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
types = %w(bool double Dynamic enum int num Object Set String void)
|
|
25
|
+
|
|
26
|
+
imports = %w(import export library part\s*of part source)
|
|
27
|
+
|
|
28
|
+
id = /[a-zA-Z_]\w*/
|
|
29
|
+
|
|
30
|
+
state :root do
|
|
31
|
+
rule %r(^
|
|
32
|
+
(\s*(?:[a-zA-Z_][a-zA-Z\d_.\[\]]*\s+)+?) # return arguments
|
|
33
|
+
([a-zA-Z_]\w*) # method name
|
|
34
|
+
(\s*)(\() # signature start
|
|
35
|
+
)mx do |m|
|
|
36
|
+
# TODO: do this better, this shouldn't need a delegation
|
|
37
|
+
delegate Dart, m[1]
|
|
38
|
+
token Name::Function, m[2]
|
|
39
|
+
token Text, m[3]
|
|
40
|
+
token Punctuation, m[4]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule %r/\s+/, Text
|
|
44
|
+
rule %r(//.*?$), Comment::Single
|
|
45
|
+
rule %r(/\*.*?\*/)m, Comment::Multiline
|
|
46
|
+
rule %r/"/, Str, :dqs
|
|
47
|
+
rule %r/'/, Str, :sqs
|
|
48
|
+
rule %r/r"[^"]*"/, Str::Other
|
|
49
|
+
rule %r/r'[^']*'/, Str::Other
|
|
50
|
+
rule %r/##{id}*/i, Str::Symbol
|
|
51
|
+
rule %r/@#{id}/, Name::Decorator
|
|
52
|
+
rule %r/(?:#{keywords.join('|')})\b/, Keyword
|
|
53
|
+
rule %r/(?:#{declarations.join('|')})\b/, Keyword::Declaration
|
|
54
|
+
rule %r/(?:#{types.join('|')})\b/, Keyword::Type
|
|
55
|
+
rule %r/(?:true|false|null)\b/, Keyword::Constant
|
|
56
|
+
rule %r/(?:class|interface)\b/, Keyword::Declaration, :class
|
|
57
|
+
rule %r/(?:#{imports.join('|')})\b/, Keyword::Namespace, :import
|
|
58
|
+
rule %r/(\.)(#{id})/ do
|
|
59
|
+
groups Operator, Name::Attribute
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
rule %r/#{id}:/, Name::Label
|
|
63
|
+
rule %r/\$?#{id}/, Name
|
|
64
|
+
rule %r/[~^*!%&\[\](){}<>\|+=:;,.\/?-]/, Operator
|
|
65
|
+
rule %r/\d*\.\d+([eE]\-?\d+)?/, Num::Float
|
|
66
|
+
rule %r/0x[\da-fA-F]+/, Num::Hex
|
|
67
|
+
rule %r/\d+L?/, Num::Integer
|
|
68
|
+
rule %r/\n/, Text
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
state :class do
|
|
72
|
+
rule %r/\s+/m, Text
|
|
73
|
+
rule id, Name::Class, :pop!
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
state :dqs do
|
|
77
|
+
rule %r/"/, Str, :pop!
|
|
78
|
+
rule %r/[^\\\$"]+/, Str
|
|
79
|
+
mixin :string
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
state :sqs do
|
|
83
|
+
rule %r/'/, Str, :pop!
|
|
84
|
+
rule %r/[^\\\$']+/, Str
|
|
85
|
+
mixin :string
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
state :import do
|
|
89
|
+
rule %r/;/, Operator, :pop!
|
|
90
|
+
rule %r/(?:show|hide)\b/, Keyword::Declaration
|
|
91
|
+
mixin :root
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
state :string do
|
|
95
|
+
mixin :interpolation
|
|
96
|
+
rule %r/\\[nrt\"\'\\]/, Str::Escape
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
state :interpolation do
|
|
100
|
+
rule %r/\$#{id}/, Str::Interpol
|
|
101
|
+
rule %r/\$\{[^\}]+\}/, Str::Interpol
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rouge
|
|
4
|
+
module Lexers
|
|
5
|
+
class Diff < RegexLexer
|
|
6
|
+
title 'diff'
|
|
7
|
+
desc 'Lexes unified diffs or patches'
|
|
8
|
+
|
|
9
|
+
tag 'diff'
|
|
10
|
+
aliases 'patch', 'udiff'
|
|
11
|
+
filenames '*.diff', '*.patch'
|
|
12
|
+
mimetypes 'text/x-diff', 'text/x-patch'
|
|
13
|
+
|
|
14
|
+
def self.detect?(text)
|
|
15
|
+
return true if text.start_with?('Index: ')
|
|
16
|
+
return true if text =~ %r(\Adiff[^\n]*?\ba/[^\n]*\bb/)
|
|
17
|
+
return true if text =~ /(---|[+][+][+]).*?\n(---|[+][+][+])/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
state :root do
|
|
21
|
+
rule(/^ .*$\n?/, Text)
|
|
22
|
+
rule(/^---$\n?/, Punctuation)
|
|
23
|
+
rule(/^[+>]+.*$\n?/, Generic::Inserted)
|
|
24
|
+
rule(/^\+.*$\n?/, Generic::Inserted)
|
|
25
|
+
rule(/^[-<]+.*$\n?/, Generic::Deleted)
|
|
26
|
+
rule(/^!.*$\n?/, Generic::Strong)
|
|
27
|
+
rule(/^([Ii]ndex|diff).*$\n?/, Generic::Heading)
|
|
28
|
+
rule(/^(@@[^@]*@@)([^\n]*\n)/) do
|
|
29
|
+
groups Punctuation, Text
|
|
30
|
+
end
|
|
31
|
+
rule(/^\w.*$\n?/, Punctuation)
|
|
32
|
+
rule(/^=.*$\n?/, Generic::Heading)
|
|
33
|
+
rule(/\s.*$\n?/, Text)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|