rouge 4.6.1 → 5.0.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.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -4
  3. data/bin/rougify +3 -4
  4. data/lib/rouge/cli.rb +7 -10
  5. data/lib/rouge/demos/abap +30 -4
  6. data/lib/rouge/demos/dylan +8 -0
  7. data/lib/rouge/demos/gjs +23 -0
  8. data/lib/rouge/demos/gts +36 -0
  9. data/lib/rouge/demos/kick_assembler +14 -0
  10. data/lib/rouge/demos/pdf +29 -0
  11. data/lib/rouge/demos/thrift +15 -0
  12. data/lib/rouge/demos/veryl +24 -0
  13. data/lib/rouge/eager.rb +3 -0
  14. data/lib/rouge/formatters/html.rb +8 -1
  15. data/lib/rouge/formatters/html_debug.rb +16 -0
  16. data/lib/rouge/formatters/html_legacy.rb +15 -1
  17. data/lib/rouge/formatters/html_legacy_table.rb +57 -0
  18. data/lib/rouge/formatters/html_line_highlighter.rb +11 -4
  19. data/lib/rouge/formatters/html_line_table.rb +8 -3
  20. data/lib/rouge/formatters/html_linewise.rb +11 -2
  21. data/lib/rouge/formatters/html_pygments.rb +6 -1
  22. data/lib/rouge/formatters/html_table.rb +47 -21
  23. data/lib/rouge/formatters/terminal256.rb +3 -3
  24. data/lib/rouge/formatters/tex.rb +1 -1
  25. data/lib/rouge/guesser.rb +1 -1
  26. data/lib/rouge/guessers/disambiguation.rb +2 -2
  27. data/lib/rouge/guessers/glob_mapping.rb +2 -2
  28. data/lib/rouge/guessers/modeline.rb +2 -2
  29. data/lib/rouge/lexer.rb +40 -21
  30. data/lib/rouge/lexers/abap/builtins.rb +187 -0
  31. data/lib/rouge/lexers/abap.rb +70 -178
  32. data/lib/rouge/lexers/ada.rb +1 -1
  33. data/lib/rouge/lexers/apache/keywords.rb +3 -11
  34. data/lib/rouge/lexers/apache.rb +25 -24
  35. data/lib/rouge/lexers/apex.rb +2 -2
  36. data/lib/rouge/lexers/apiblueprint.rb +2 -2
  37. data/lib/rouge/lexers/bicep.rb +2 -2
  38. data/lib/rouge/lexers/biml.rb +36 -9
  39. data/lib/rouge/lexers/brightscript.rb +3 -4
  40. data/lib/rouge/lexers/c.rb +9 -5
  41. data/lib/rouge/lexers/cobol.rb +1 -1
  42. data/lib/rouge/lexers/console.rb +11 -5
  43. data/lib/rouge/lexers/cpp.rb +10 -12
  44. data/lib/rouge/lexers/crystal.rb +1 -1
  45. data/lib/rouge/lexers/css.rb +21 -2
  46. data/lib/rouge/lexers/cuda.rb +4 -4
  47. data/lib/rouge/lexers/cython.rb +26 -50
  48. data/lib/rouge/lexers/dafny.rb +1 -1
  49. data/lib/rouge/lexers/dart.rb +2 -0
  50. data/lib/rouge/lexers/datastudio.rb +1 -1
  51. data/lib/rouge/lexers/digdag.rb +2 -3
  52. data/lib/rouge/lexers/dylan.rb +109 -0
  53. data/lib/rouge/lexers/ecl.rb +3 -3
  54. data/lib/rouge/lexers/elixir.rb +14 -9
  55. data/lib/rouge/lexers/escape.rb +1 -1
  56. data/lib/rouge/lexers/factor.rb +1 -1
  57. data/lib/rouge/lexers/freefem.rb +2 -2
  58. data/lib/rouge/lexers/ghc_cmm.rb +1 -1
  59. data/lib/rouge/lexers/ghc_core.rb +1 -1
  60. data/lib/rouge/lexers/gherkin/keywords.rb +10 -6
  61. data/lib/rouge/lexers/gherkin.rb +28 -26
  62. data/lib/rouge/lexers/gjs.rb +39 -0
  63. data/lib/rouge/lexers/glsl/builtins.rb +17 -0
  64. data/lib/rouge/lexers/glsl.rb +50 -113
  65. data/lib/rouge/lexers/go.rb +8 -6
  66. data/lib/rouge/lexers/gradle.rb +2 -2
  67. data/lib/rouge/lexers/groovy.rb +6 -0
  68. data/lib/rouge/lexers/gts.rb +39 -0
  69. data/lib/rouge/lexers/hack.rb +4 -6
  70. data/lib/rouge/lexers/haxe.rb +2 -2
  71. data/lib/rouge/lexers/hlsl.rb +6 -6
  72. data/lib/rouge/lexers/hocon.rb +2 -2
  73. data/lib/rouge/lexers/hql.rb +15 -19
  74. data/lib/rouge/lexers/idris.rb +1 -1
  75. data/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
  76. data/lib/rouge/lexers/igorpro.rb +49 -520
  77. data/lib/rouge/lexers/irb.rb +3 -3
  78. data/lib/rouge/lexers/isbl.rb +7 -43
  79. data/lib/rouge/lexers/j.rb +1 -1
  80. data/lib/rouge/lexers/json5.rb +2 -2
  81. data/lib/rouge/lexers/json_doc.rb +2 -2
  82. data/lib/rouge/lexers/jsp.rb +119 -119
  83. data/lib/rouge/lexers/jsx.rb +2 -2
  84. data/lib/rouge/lexers/kick_assembler.rb +100 -0
  85. data/lib/rouge/lexers/kotlin.rb +5 -0
  86. data/lib/rouge/lexers/lasso/keywords.rb +6 -6
  87. data/lib/rouge/lexers/lasso.rb +9 -11
  88. data/lib/rouge/lexers/liquid.rb +5 -6
  89. data/lib/rouge/lexers/llvm/keywords.rb +3 -12
  90. data/lib/rouge/lexers/llvm.rb +5 -16
  91. data/lib/rouge/lexers/lua/keywords.rb +11 -13
  92. data/lib/rouge/lexers/lua.rb +8 -7
  93. data/lib/rouge/lexers/lutin.rb +5 -4
  94. data/lib/rouge/lexers/m68k.rb +3 -3
  95. data/lib/rouge/lexers/mason.rb +110 -110
  96. data/lib/rouge/lexers/mathematica/keywords.rb +1 -3
  97. data/lib/rouge/lexers/mathematica.rb +6 -7
  98. data/lib/rouge/lexers/matlab/keywords.rb +2 -2
  99. data/lib/rouge/lexers/matlab.rb +5 -5
  100. data/lib/rouge/lexers/meson.rb +1 -1
  101. data/lib/rouge/lexers/mojo.rb +6 -2
  102. data/lib/rouge/lexers/moonscript.rb +19 -17
  103. data/lib/rouge/lexers/nesasm.rb +6 -6
  104. data/lib/rouge/lexers/nial.rb +7 -8
  105. data/lib/rouge/lexers/nim.rb +3 -3
  106. data/lib/rouge/lexers/nix.rb +10 -8
  107. data/lib/rouge/lexers/objective_c.rb +3 -3
  108. data/lib/rouge/lexers/objective_cpp.rb +3 -2
  109. data/lib/rouge/lexers/ocaml.rb +2 -2
  110. data/lib/rouge/lexers/openedge.rb +9 -9
  111. data/lib/rouge/lexers/pdf.rb +109 -0
  112. data/lib/rouge/lexers/php/keywords.rb +136 -188
  113. data/lib/rouge/lexers/php.rb +100 -11
  114. data/lib/rouge/lexers/plsql.rb +8 -9
  115. data/lib/rouge/lexers/postscript.rb +1 -1
  116. data/lib/rouge/lexers/powershell.rb +1 -1
  117. data/lib/rouge/lexers/python.rb +111 -66
  118. data/lib/rouge/lexers/qml.rb +2 -2
  119. data/lib/rouge/lexers/reasonml.rb +2 -2
  120. data/lib/rouge/lexers/rego.rb +53 -53
  121. data/lib/rouge/lexers/rescript.rb +2 -2
  122. data/lib/rouge/lexers/robot_framework.rb +12 -12
  123. data/lib/rouge/lexers/{coq.rb → rocq.rb} +15 -6
  124. data/lib/rouge/lexers/ruby.rb +33 -7
  125. data/lib/rouge/lexers/rust.rb +1 -0
  126. data/lib/rouge/lexers/sas.rb +164 -165
  127. data/lib/rouge/lexers/sass/common.rb +1 -1
  128. data/lib/rouge/lexers/sass.rb +2 -2
  129. data/lib/rouge/lexers/scss.rb +2 -2
  130. data/lib/rouge/lexers/sed.rb +1 -1
  131. data/lib/rouge/lexers/shell.rb +5 -5
  132. data/lib/rouge/lexers/slice.rb +2 -2
  133. data/lib/rouge/lexers/sparql.rb +1 -1
  134. data/lib/rouge/lexers/sqf/keywords.rb +5 -3
  135. data/lib/rouge/lexers/sqf.rb +3 -4
  136. data/lib/rouge/lexers/stan.rb +9 -15
  137. data/lib/rouge/lexers/svelte.rb +2 -2
  138. data/lib/rouge/lexers/swift.rb +2 -2
  139. data/lib/rouge/lexers/tcl.rb +1 -1
  140. data/lib/rouge/lexers/terraform.rb +3 -3
  141. data/lib/rouge/lexers/thrift.rb +120 -0
  142. data/lib/rouge/lexers/tsx.rb +3 -3
  143. data/lib/rouge/lexers/ttcn3.rb +1 -1
  144. data/lib/rouge/lexers/twig.rb +2 -2
  145. data/lib/rouge/lexers/typescript.rb +3 -3
  146. data/lib/rouge/lexers/varnish.rb +8 -8
  147. data/lib/rouge/lexers/veryl.rb +109 -0
  148. data/lib/rouge/lexers/viml/keywords.rb +5 -7
  149. data/lib/rouge/lexers/viml.rb +8 -10
  150. data/lib/rouge/lexers/vue.rb +2 -2
  151. data/lib/rouge/lexers/xquery.rb +2 -1
  152. data/lib/rouge/lexers/yaml.rb +13 -1
  153. data/lib/rouge/lexers/yang.rb +42 -74
  154. data/lib/rouge/lexers/zig.rb +10 -10
  155. data/lib/rouge/plugins/redcarpet.rb +3 -2
  156. data/lib/rouge/regex_lexer.rb +25 -14
  157. data/lib/rouge/themes/gruvbox.rb +3 -0
  158. data/lib/rouge/token.rb +1 -1
  159. data/lib/rouge/util.rb +1 -1
  160. data/lib/rouge/version.rb +1 -1
  161. data/lib/rouge.rb +70 -59
  162. data/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
  163. data/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
  164. data/rouge.gemspec +8 -5
  165. metadata +44 -9
  166. data/lib/rouge/lexers/isbl/builtins.rb +0 -17
  167. data/lib/rouge/lexers/matlab/builtins.rb +0 -11
  168. /data/lib/rouge/demos/{coq → rocq} +0 -0
@@ -88,7 +88,7 @@ module Rouge
88
88
  rule %r/[A-Z][^\s.,(){}]*/, Keyword::Type
89
89
 
90
90
  # packages, e.g. 'ghc-prim-0.5.3:'
91
- rule %r/(^[a-z].*?\d+\.\d+\.\d+)(:)(?=\S)/ do |m|
91
+ rule %r/([a-z].*?\d+\.\d+\.\d+)(:)(?=\S)/ do |m|
92
92
  token Name::Namespace, m[1]
93
93
  token Punctuation, m[2]
94
94
  end
@@ -7,12 +7,16 @@
7
7
 
8
8
  module Rouge
9
9
  module Lexers
10
- def Gherkin.keywords
11
- @keywords ||= {}.tap do |k|
12
- k[:step] = Set.new ["'a ", "'ach ", "'ej ", "* ", "7 ", "A ", "A taktiež ", "A také ", "A tiež ", "A zároveň ", "AN ", "Aber ", "Ac ", "Ach", "Adott ", "Agus", "Ak ", "Akkor ", "Alavez ", "Ale ", "Aleshores ", "Ali ", "All git out ", "Allora ", "Alors ", "Als ", "Ama ", "Amennyiben ", "Amikor ", "Amma ", "Ampak ", "An ", "Ananging ", "Ancaq ", "And ", "Angenommen ", "Anrhegedig a ", "Ansin", "Antonces ", "Apabila ", "Atesa ", "Atunci ", "Atès ", "Avast! ", "Aye ", "BUT ", "Bagi ", "Banjur ", "Belgilangan ", "Bet ", "Bila ", "Biết ", "Blimey! ", "Buh ", "But ", "But at the end of the day I reckon ", "Bæþsealf ", "Bæþsealfa ", "Bæþsealfe ", "Cal ", "Cand ", "Cando ", "Ce ", "Cho ", "Ciricæw ", "Ciricæwa ", "Ciricæwe ", "Come hell or high water ", "Cuan ", "Cuando ", "Cuir i gcás go", "Cuir i gcás gur", "Cuir i gcás nach", "Cuir i gcás nár", "Când ", "DEN ", "DaH ghu' bejlu' ", "Dada ", "Dadas ", "Dadena ", "Dadeno ", "Dado ", "Dados ", "Daes ", "Dan ", "Dann ", "Dano ", "Daos ", "Dar ", "Dat fiind ", "Data ", "Date ", "Date fiind ", "Dati ", "Dati fiind ", "Dato ", "Dată fiind", "Dau ", "Daus ", "Daţi fiind ", "Dați fiind ", "De ", "Den youse gotta ", "Dengan ", "Diasumsikan ", "Diberi ", "Diketahui ", "Diyelim ki ", "Do ", "Donada ", "Donat ", "Donc ", "Donitaĵo ", "Dun ", "Duota ", "Dáu ", "E ", "Eeldades ", "Ef ", "En ", "Entao ", "Entonces ", "Então ", "Entón ", "Entós ", "Epi ", "Et ", "Et qu'", "Et que ", "Etant donné ", "Etant donné qu'", "Etant donné que ", "Etant donnée ", "Etant données ", "Etant donnés ", "Eğer ki ", "Fakat ", "Fixin' to ", "Gangway! ", "Gdy ", "Gegeben sei ", "Gegeben seien ", "Gegeven ", "Gegewe ", "Gitt ", "Given ", "Givet ", "Givun ", "Ha ", "Həm ", "I ", "I CAN HAZ ", "In ", "Ir ", "It's just unbelievable ", "Ja ", "Jeśli ", "Jeżeli ", "Jika ", "Kad ", "Kada ", "Kadar ", "Kai ", "Kaj ", "Když ", "Kemudian ", "Ketika ", "Keď ", "Khi ", "Kiedy ", "Ko ", "Koga ", "Komence ", "Kui ", "Kuid ", "Kun ", "Lan ", "Le ", "Le sa a ", "Let go and haul ", "Logo ", "Lorsqu'", "Lorsque ", "Lè ", "Lè sa a ", "Ma ", "Maar ", "Mais ", "Mais qu'", "Mais que ", "Majd ", "Mając ", "Maka ", "Manawa ", "Mas ", "Men ", "Menawa ", "Mutta ", "Nalika ", "Nalikaning ", "Nanging ", "Nato ", "Nhưng ", "Niin ", "Njuk ", "No ", "Nuair a", "Nuair ba", "Nuair nach", "Nuair nár", "När ", "Når ", "Nə vaxt ki ", "O halda ", "O zaman ", "Och ", "Og ", "Oletetaan ", "Ond ", "Onda ", "Oraz ", "Pak ", "Pero ", "Peru ", "Però ", "Podano ", "Pokiaľ ", "Pokud ", "Potem ", "Potom ", "Privzeto ", "Pryd ", "Quan ", "Quand ", "Quando ", "Quick out of the chute ", "Sachant ", "Sachant qu'", "Sachant que ", "Se ", "Sed ", "Si ", "Siis ", "Sipoze ", "Sipoze Ke ", "Sipoze ke ", "Soit ", "Stel ", "Så ", "Tad ", "Tada ", "Tak ", "Takrat ", "Tapi ", "Ter ", "Tetapi ", "Tha ", "Tha the ", "Then ", "There’s no tree but bears some fruit ", "Thurh ", "Thì ", "Toda ", "Togash ", "Too right ", "Tutaq ki ", "Ukoliko ", "Un ", "Und ", "Ve ", "Vendar ", "Verilir ", "Và ", "Və ", "WEN ", "Wanneer ", "Well now hold on, I'll you what ", "Wenn ", "When ", "Wtedy ", "Wun ", "Y ", "Y'know ", "Ya ", "Yeah nah ", "Yna ", "Youse know like when ", "Youse know when youse got ", "Za date ", "Za dati ", "Za dato ", "Za predpokladu ", "Za předpokladu ", "Zadan ", "Zadani ", "Zadano ", "Zakładając ", "Zakładając, że ", "Zaradi ", "Zatim ", "a ", "an ", "awer ", "dann ", "ghu' noblu' ", "latlh ", "mä ", "qaSDI' ", "ugeholl ", "vaj ", "wann ", "És ", "Étant donné ", "Étant donné qu'", "Étant donné que ", "Étant donnée ", "Étant données ", "Étant donnés ", "Ða ", "Ða ðe ", "Ðurh ", "Þa ", "Þa þe ", "Þegar ", "Þurh ", "Þá ", "Če ", "Şi ", "Əgər ", "Și ", "Όταν ", "Αλλά ", "Δεδομένου ", "Και ", "Τότε ", "І ", "А ", "А також ", "Агар ", "Але ", "Али ", "Аммо ", "Анх ", "Бирок ", "Ва ", "Вә ", "Гэхдээ ", "Дадена ", "Дадено ", "Дано ", "Допустим ", "Если ", "За дате ", "За дати ", "За дато ", "Затем ", "И ", "Иначе ", "К тому же ", "Кад ", "Када ", "Кога ", "Когато ", "Когда ", "Коли ", "Лекин ", "Ләкин ", "Мөн ", "Нехай ", "Но ", "Нәтиҗәдә ", "Онда ", "Припустимо ", "Припустимо, що ", "Пусть ", "Та ", "Также ", "То ", "Тогаш ", "Тогда ", "Тоді ", "Тэгэхэд ", "Тэгээд ", "Унда ", "Харин ", "Хэрэв ", "Якщо ", "Үүний дараа ", "Һәм ", "Әгәр ", "Әйтик ", "Әмма ", "Өгөгдсөн нь ", "Ապա ", "Բայց ", "Դիցուք ", "Եթե ", "Եվ ", "Երբ ", "אבל ", "אז ", "אזי ", "בהינתן ", "וגם ", "כאשר ", "آنگاه ", "اذاً ", "اما ", "اور ", "اگر ", "با فرض ", "بالفرض ", "بفرض ", "تب ", "ثم ", "جب ", "عندما ", "فرض کیا ", "لكن ", "لیکن ", "متى ", "هنگامی ", "و ", "پھر ", "अगर ", "अनि ", "अनी ", "आणि ", "और ", "कदा ", "किन्तु ", "चूंकि ", "जब ", "जर", "जेव्हा ", "तथा ", "तदा ", "तब ", "तर ", "तसेच ", "तेव्हा ", "त्यसपछि ", "दिइएको ", "दिएको ", "दिलेल्या प्रमाणे ", "पण ", "पर ", "परंतु ", "परन्तु ", "मग ", "यदि ", "र ", "ਅਤੇ ", "ਜਦੋਂ ", "ਜਿਵੇਂ ਕਿ ", "ਜੇਕਰ ", "ਤਦ ", "ਪਰ ", "અને ", "આપેલ છે ", "ક્યારે ", "પછી ", "પણ ", "அப்பொழுது ", "ஆனால் ", "எப்போது ", "கொடுக்கப்பட்ட ", "மற்றும் ", "மேலும் ", "అప్పుడు ", "ఈ పరిస్థితిలో ", "కాని ", "చెప్పబడినది ", "మరియు ", "ಆದರೆ ", "ನಂತರ ", "ನೀಡಿದ ", "ಮತ್ತು ", "ಸ್ಥಿತಿಯನ್ನು ", "กำหนดให้ ", "ดังนั้น ", "เมื่อ ", "แต่ ", "และ ", "ასევე ", "და ", "ვთქვათ ", "თუ ", "თუმცა ", "მაგრამ ", "მაშინ ", "მოცემული ", "მოცემულია ", "როგორც კი ", "როდესაც ", "როცა ", "መቼ ", "እና ", "ከዚያ ", "የተሰጠ ", "ግን ", "かつ", "しかし", "ただし", "ならば", "もし", "且つ", "並且", "但し", "但是", "假如", "假定", "假設", "假设", "前提", "同时", "同時", "并且", "当", "然し", "當", "而且", "那么", "那麼", "그러면", "그리고", "단", "만약", "만일", "먼저", "조건", "하지만", "🎬", "😂", "😐", "😔", "🙏"]
13
- k[:element] = Set.new ["Abstract Scenario", "Abstrakt Scenario", "Achtergrond", "Aer", "Agtergrond", "All hat and no cattle", "Antecedentes", "Antecedents", "Atburðarás", "Aturan", "Awww, look mate", "B4", "Background", "Baggrund", "Bakgrund", "Bakgrunn", "Bakgrunnur", "Beispiel", "Beispill", "Busy as a hound in flea season", "Bối cảnh", "Caso", "Casu", "Cefndir", "Cenario", "Cenario de Fundo", "Cenário", "Cenário de Fundo", "Contesto", "Context", "Contexte", "Contexto", "Cás", "Cás Achomair", "Cúlra", "Dasar", "Delineacao do Cenario", "Delineação do Cenário", "Dis is what went down", "Dyagram Senaryo", "Dyagram senaryo", "Eixemplo", "Ejemplo", "Eksempel", "Ekzemplo", "Enghraifft", "Esbozo do escenario", "Esbozu del casu", "Escenari", "Escenario", "Esempio", "Esquema de l'escenari", "Esquema del caso", "Esquema del escenario", "Esquema do Cenario", "Esquema do Cenário", "Example", "Exemple", "Exemplo", "Exemplu", "First off", "Fono", "Forgatókönyv", "Forgatókönyv vázlat", "Fundo", "Garis Panduan Senario", "Garis-Besar Skenario", "Geçmiş", "Grundlage", "Hannergrond", "Heave to", "Hintergrund", "Háttér", "Istorik", "Juhtum", "Kazo", "Kazo-skizo", "Keadaan", "Kerangka Keadaan", "Kerangka Senario", "Kerangka Situasi", "Keçmiş", "Khung kịch bản", "Khung tình huống", "Koncept", "Konsep skenario", "Kontekst", "Kontekstas", "Konteksts", "Kontext", "Konturo de la scenaro", "Kontèks", "Kural", "Kịch bản", "Latar Belakang", "Lemme tell y'all a story", "Lýsing Atburðarásar", "Lýsing Dæma", "MISHUN", "MISHUN SRSLY", "Na primer", "Náčrt Scenára", "Náčrt Scenáru", "Náčrt Scénáře", "Nümunə", "Oris scenarija", "Osnova", "Osnova Scenára", "Osnova scénáře", "Osnutek", "Ozadje", "Pavyzdys", "Piemērs", "Plan Senaryo", "Plan du Scénario", "Plan du scénario", "Plan senaryo", "Plang vum Szenario", "Pozadie", "Pozadina", "Pozadí", "Pravidlo", "Pravilo", "Pregled na scenarija", "Primer", "Primjer", "Przykład", "Príklad", "Példa", "Příklad", "Raamjuhtum", "Raamstsenaarium", "Reckon it's like", "Reegel", "Regel", "Regla", "Regla de negocio", "Regola", "Regra", "Reguła", "Rerefons", "Rule", "Rule ", "Règle", "Sampla", "Scenarie", "Scenarij", "Scenarijaus šablonas", "Scenariju", "Scenariju-obris", "Scenarijus", "Scenario", "Scenario Amlinellol", "Scenario Outline", "Scenario Template", "Scenario-outline", "Scenariomal", "Scenariomall", "Scenariu", "Scenariusz", "Scenaro", "Scenár", "Scenārijs", "Scenārijs pēc parauga", "Schema dello scenario", "Scénario", "Scénář", "Senario", "Senaryo", "Senaryo Deskripsyon", "Senaryo deskripsyon", "Senaryo taslağı", "Serious as a snake bite", "Shiver me timbers", "Situasi", "Situasie", "Situasie Uiteensetting", "Situācija", "Skenario", "Skenario konsep", "Skica", "Skizo", "Sodrzhina", "Ssenari", "Ssenarinin strukturu", "Structura scenariu", "Structură scenariu", "Struktura scenarija", "Stsenaarium", "Swa", "Swa hwaer swa", "Swa hwær swa", "Szablon scenariusza", "Szabály", "Szenarien", "Szenario", "Szenariogrundriss", "Tapaus", "Tapausaihio", "Taust", "Tausta", "The thing of it is", "Tình huống", "Voorbeeld", "Voraussetzungen", "Vorbedingungen", "Wharrimean is", "Yo-ho-ho", "Zasada", "Założenia", "lut", "lut chovnatlh", "mo'", "Ær", "Örnek", "Παράδειγμα", "Περίγραμμα Σεναρίου", "Περιγραφή Σεναρίου", "Σενάριο", "Υπόβαθρο", "Агуулга", "Кереш", "Контекст", "Концепт", "На пример", "Основа", "Передумова", "Позадина", "Правило", "Преглед на сценарија", "Предистория", "Предыстория", "Приклад", "Пример", "Рамка на сценарий", "Скица", "Содржина", "Структура сценария", "Структура сценарија", "Структура сценарію", "Сценар", "Сценарий", "Сценарий структураси", "Сценарийның төзелеше", "Сценарио", "Сценарын төлөвлөгөө", "Сценарій", "Тарих", "Шаблон сценария", "Կոնտեքստ", "Սցենար", "Սցենարի կառուցվացքը", "Օրինակ", "דוגמא", "כלל", "רקע", "תבנית תרחיש", "תרחיש", "الخلفية", "الگوی سناریو", "زمینه", "سناریو", "سيناريو", "سيناريو مخطط", "مثال", "منظر نامے کا خاکہ", "منظرنامہ", "پس منظر", "नियम", "परिदृश्य", "परिदृश्य रूपरेखा", "पार्श्वभूमी", "पृष्ठभूमि", "पृष्ठभूमी", "ਉਦਾਹਰਨ", "ਪਟਕਥਾ", "ਪਟਕਥਾ ਢਾਂਚਾ", "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", "ਪਿਛੋਕੜ", "ઉદાહરણ", "પરિદ્દશ્ય ઢાંચો", "પરિદ્દશ્ય રૂપરેખા", "બેકગ્રાઉન્ડ", "સ્થિતિ", "உதாரணமாக", "காட்சி", "காட்சி சுருக்கம்", "காட்சி வார்ப்புரு", "பின்னணி", "ఉదాహరణ", "కథనం", "నేపథ్యం", "సన్నివేశం", "ಉದಾಹರಣೆ", "ಕಥಾಸಾರಾಂಶ", "ವಿವರಣೆ", "ಹಿನ್ನೆಲೆ", "สรุปเหตุการณ์", "เหตุการณ์", "แนวคิด", "โครงสร้างของเหตุการณ์", "კონტექსტი", "მაგ", "მაგალითად", "მაგალითი", "ნიმუში", "სცენარი", "სცენარის ნიმუში", "სცენარის შაბლონი", "შაბლონი", "წესი", "ሁናቴ", "ሁናቴ አብነት", "ሁናቴ ዝርዝር", "ህግ", "መነሻ", "መነሻ ሀሳብ", "ምሳሌ", "ቅድመ ሁኔታ", "シナリオ", "シナリオアウトライン", "シナリオテンプレ", "シナリオテンプレート", "テンプレ", "ルール", "剧本", "剧本大纲", "劇本", "劇本大綱", "场景", "场景大纲", "場景", "場景大綱", "背景", "规则", "배경", "시나리오", "시나리오 개요", "💤", "📕", "📖", "🥒"]
14
- k[:examples] = Set.new ["Atburðarásir", "Beispiele", "Beispiller", "Cenarios", "Cenários", "Conto", "Contoh", "Contone", "Dead men tell no tales", "Dæmi", "Dữ liệu", "EXAMPLZ", "Egzanp", "Eixemplos", "Ejemplos", "Eksempler", "Ekzemploj", "Enghreifftiau", "Esempi", "Examples", "Exempel", "Exemple", "Exemples", "Exemplos", "Juhtumid", "Misal", "Now that's a story longer than a cattle drive in July", "Nümunələr", "Paraugs", "Pavyzdžiai", "Piemēri", "Primeri", "Primjeri", "Przykłady", "Príklady", "Példák", "Příklady", "Samplaí", "Scenaria", "Scenarijai", "Scenariji", "Scenarios", "Se the", "Se ðe", "Se þe", "Tapaukset", "Variantai", "Voorbeelde", "Voorbeelden", "You'll wanna", "ghantoH", "lutmey", "Örnekler", "Παραδείγματα", "Σενάρια", "Мисаллар", "Мисоллар", "Приклади", "Примери", "Примеры", "Сценарија", "Сценарији", "Тухайлбал", "Үрнәкләр", "Օրինակներ", "דוגמאות", "امثلة", "مثالیں", "نمونه ها", "उदाहरण", "उदाहरणहरु", "ਉਦਾਹਰਨਾਂ", "ઉદાહરણો", "எடுத்துக்காட்டுகள்", "காட்சிகள்", "நிலைமைகளில்", "ఉదాహరణలు", "ಉದಾಹರಣೆಗಳು", "ชุดของตัวอย่าง", "ชุดของเหตุการณ์", "მაგალითები", "ሁናቴዎች", "ምሳሌዎች", "サンプル", "例", "例子", "예", "📓"]
15
- k[:feature] = Set.new ["Ability", "Abilità", "Ahoy matey!", "All gussied up", "Arwedd", "Aspekt", "Besigheid Behoefte", "Biznis potreba", "Business Need", "Caracteristica", "Característica", "Carauterística", "Egenskab", "Egenskap", "Eiginleiki", "Esigenza di Business", "Feature", "Fitur", "Fonctionnalité", "Fonksyonalite", "Funcionalidade", "Funcionalitat", "Functionalitate", "Functionaliteit", "Funcţionalitate", "Funcționalitate", "Fungsi", "Funkcia", "Funkcija", "Funkcionalitāte", "Funkcionalnost", "Funkcja", "Funksie", "Funktion", "Funktionalität", "Funktionalitéit", "Funzionalità", "Fīča", "Gné", "Hwaet", "Hwæt", "Jellemző", "Karakteristik", "Karakteristika", "Lastnost", "Mak", "Mogucnost", "Mogućnost", "Mozhnost", "Moznosti", "Možnosti", "Necesidad del negocio", "OH HAI", "Omadus", "Ominaisuus", "Osobina", "Potrzeba biznesowa", "Požadavek", "Požiadavka", "Pretty much", "Qap", "Qu'meH 'ut", "Requisito", "Savybė", "This ain’t my first rodeo", "Trajto", "Tính năng", "Vermoë", "Vlastnosť", "Właściwość", "Značilnost", "laH", "perbogh", "poQbogh malja'", "Özellik", "Özəllik", "Δυνατότητα", "Λειτουργία", "Бизнис потреба", "Могућност", "Можност", "Мөмкинлек", "Особина", "Свойство", "Фича", "Функц", "Функционал", "Функционалност", "Функциональность", "Функция", "Функціонал", "Үзенчәлеклелек", "Հատկություն", "Ֆունկցիոնալություն", "תכונה", "خاصية", "خصوصیت", "صلاحیت", "وِیژگی", "کاروبار کی ضرورت", "रूप लेख", "विशेषता", "वैशिष्ट्य", "सुविधा", "ਖਾਸੀਅਤ", "ਨਕਸ਼ ਨੁਹਾਰ", "ਮੁਹਾਂਦਰਾ", "ક્ષમતા", "લક્ષણ", "વ્યાપાર જરૂર", "அம்சம்", "திறன்", "வணிக தேவை", "గుణము", "ಹೆಚ್ಚಳ", "ความต้องการทางธุรกิจ", "ความสามารถ", "โครงหลัก", "თვისება", "მოთხოვნა", "ስራ", "የሚፈለገው ድርጊት", "የተፈለገው ስራ", "フィーチャ", "功能", "機能", "기능", "📚"]
10
+ class Gherkin
11
+ # [jneen] this giant regex is staying, because Gherkin step
12
+ # keywords are so arbitrary that there is not a good simple
13
+ # pattern to match all of them and check post-hoc.
14
+ STEP_REGEX = %r('a\b|'ach\b|'ej\b|\*|7\b|A\b|A\ taktiež\b|A\ také\b|A\ tiež\b|A\ zároveň\b|AN\b|Aber\b|Ac\b|Ach\b|Adott\b|Agus\b|Ak\b|Akkor\b|Alavez\b|Ale\b|Aleshores\b|Ali\b|All\ git\ out\b|Allora\b|Alors\b|Als\b|Ama\b|Amennyiben\b|Amikor\b|Amma\b|Ampak\b|An\b|Ananging\b|Ancaq\b|And\b|Angenommen\b|Anrhegedig\ a\b|Ansin\b|Antonces\b|Apabila\b|Atesa\b|Atunci\b|Atès\b|Avast!|Aye\b|BUT\b|Bagi\b|Banjur\b|Belgilangan\b|Bet\b|Bila\b|Biết\b|Blimey!|Buh\b|But\b|But\ at\ the\ end\ of\ the\ day\ I\ reckon\b|Bæþsealf\b|Bæþsealfa\b|Bæþsealfe\b|Cal\b|Cand\b|Cando\b|Ce\b|Cho\b|Ciricæw\b|Ciricæwa\b|Ciricæwe\b|Come\ hell\ or\ high\ water\b|Cuan\b|Cuando\b|Cuir\ i\ gcás\ go\b|Cuir\ i\ gcás\ gur\b|Cuir\ i\ gcás\ nach\b|Cuir\ i\ gcás\ nár\b|Când\b|DEN\b|DaH\ ghu'\ bejlu'|Dada\b|Dadas\b|Dadena\b|Dadeno\b|Dado\b|Dados\b|Daes\b|Dan\b|Dann\b|Dano\b|Daos\b|Dar\b|Dat\ fiind\b|Data\b|Date\b|Date\ fiind\b|Dati\b|Dati\ fiind\b|Dato\b|Dată\ fiind\b|Dau\b|Daus\b|Daţi\ fiind\b|Dați\ fiind\b|De\b|Den\ youse\ gotta\b|Dengan\b|Diasumsikan\b|Diberi\b|Diketahui\b|Diyelim\ ki\b|Do\b|Donada\b|Donat\b|Donc\b|Donitaĵo\b|Dun\b|Duota\b|Dáu\b|E\b|Ed\b|Eeldades\b|Ef\b|En\b|Entao\b|Entonces\b|Então\b|Entón\b|Entós\b|Epi\b|Et\b|Et\ qu'|Et\ que\b|Etant\ donné\b|Etant\ donné\ qu'|Etant\ donné\ que\b|Etant\ donnée\b|Etant\ données\b|Etant\ donnés\b|Eğer\ ki\b|Fakat\b|Fixin'\ to\b|Gangway!|Gdy\b|Gegeben\ sei\b|Gegeben\ seien\b|Gegeven\b|Gegewe\b|Gitt\b|Given\b|Givet\b|Givun\b|Ha\b|Həm\b|I\b|I\ CAN\ HAZ\b|In\b|Ir\b|It's\ just\ unbelievable\b|Ja\b|Jeśli\b|Jeżeli\b|Jika\b|Kad\b|Kada\b|Kadar\b|Kai\b|Kaj\b|Když\b|Kemudian\b|Ketika\b|Keď\b|Khi\b|Kiedy\b|Ko\b|Koga\b|Komence\b|Kui\b|Kuid\b|Kun\b|Lan\b|Le\b|Le\ sa\ a\b|Let\ go\ and\ haul\b|Logo\b|Lorsqu'|Lorsque\b|Lè\b|Lè\ sa\ a\b|Ma\b|Maar\b|Mais\b|Mais\ qu'|Mais\ que\b|Majd\b|Mając\b|Maka\b|Manawa\b|Mas\b|Men\b|Menawa\b|Mutta\b|Nalika\b|Nalikaning\b|Nanging\b|Nato\b|Nhưng\b|Niin\b|Njuk\b|No\b|Nuair\ a\b|Nuair\ ba\b|Nuair\ nach\b|Nuair\ nár\b|När\b|Når\b|Nə\ vaxt\ ki\b|O\ halda\b|O\ zaman\b|Och\b|Og\b|Oletetaan\b|Ond\b|Onda\b|Oraz\b|Pak\b|Pero\b|Peru\b|Però\b|Podano\b|Pokiaľ\b|Pokud\b|Potem\b|Potom\b|Privzeto\b|Pryd\b|Quan\b|Quand\b|Quando\b|Quick\ out\ of\ the\ chute\b|Sachant\b|Sachant\ qu'|Sachant\ que\b|Se\b|Sed\b|Si\b|Siis\b|Sipoze\b|Sipoze\ Ke\b|Sipoze\ ke\b|Soit\b|Stel\b|Så\b|Tad\b|Tada\b|Tak\b|Takrat\b|Tapi\b|Ter\b|Tetapi\b|Tha\b|Tha\ the\b|Then\b|There’s\ no\ tree\ but\ bears\ some\ fruit\b|Thurh\b|Thì\b|Toda\b|Togash\b|Too\ right\b|Tutaq\ ki\b|Ukoliko\b|Un\b|Und\b|Ve\b|Vendar\b|Verilir\b|Và\b|Və\b|WEN\b|Wanneer\b|Well\ now\ hold\ on,\ I'll\ you\ what\b|Wenn\b|When\b|Wtedy\b|Wun\b|Y\b|Y'know\b|Ya\b|Yeah\ nah\b|Yna\b|Youse\ know\ like\ when\b|Youse\ know\ when\ youse\ got\b|Za\ date\b|Za\ dati\b|Za\ dato\b|Za\ predpokladu\b|Za\ předpokladu\b|Zadan\b|Zadani\b|Zadano\b|Zakładając\b|Zakładając,\ że\b|Zaradi\b|Zatim\b|a\b|an\b|awer\b|dann\b|ghu'\ noblu'|latlh\b|mä\b|qaSDI'|ugeholl\b|vaj\b|wann\b|És\b|Étant\ donné\b|Étant\ donné\ qu'|Étant\ donné\ que\b|Étant\ donnée\b|Étant\ données\b|Étant\ donnés\b|Ða\b|Ða\ ðe\b|Ðurh\b|Þa\b|Þa\ þe\b|Þegar\b|Þurh\b|Þá\b|Če\b|Şi\b|Əgər\b|Și\b|Όταν\b|Αλλά\b|Δεδομένου\b|Και\b|Τότε\b|І\b|Інакш\b|А\b|А\ також\b|Агар\b|Але\b|Али\b|Аммо\b|Анх\b|Бирок\b|Ва\b|Вә\b|Гэхдээ\b|Дадена\b|Дадено\b|Дадзена\b|Дано\b|Допустим\b|Ды\b|Если\b|За\ дате\b|За\ дати\b|За\ дато\b|Затем\b|И\b|Иначе\b|К\ тому\ же\b|Кад\b|Када\b|Калі\b|Кога\b|Когато\b|Когда\b|Коли\b|Лекин\b|Ләкин\b|Мөн\b|Нехай\b|Но\b|Няхай\b|Нәтиҗәдә\b|Онда\b|Припустимо\b|Припустимо,\ що\b|Пусть\b|Та\b|Тады\b|Также\b|Таксама\b|То\b|Тогаш\b|Тогда\b|Тоді\b|Тэгэхэд\b|Тэгээд\b|Унда\b|Харин\b|Хэрэв\b|Якщо\b|Үүний\ дараа\b|Һәм\b|Әгәр\b|Әйтик\b|Әмма\b|Өгөгдсөн\ нь\b|Ապա\b|Բայց\b|Դիցուք\b|Եթե\b|Եվ\b|Երբ\b|אבל\b|אז\b|אזי\b|בהינתן\b|וגם\b|כאשר\b|آنگاه\b|اذاً\b|اما\b|اور\b|اگر\b|با\ فرض\b|بالفرض\b|بفرض\b|تب\b|ثم\b|جب\b|عندما\b|فرض\ کیا\b|لكن\b|لیکن\b|متى\b|هنگامی\b|و\b|پھر\b|अगर\b|अनि\b|अनी\b|आणि\b|और\b|कदा\b|किन्तु\b|चूंकि\b|जब\b|जर\b|जेव्हा\b|तथा\b|तदा\b|तब\b|तर\b|तसेच\b|तेव्हा\b|त्यसपछि\b|दिइएको\b|दिएको\b|दिलेल्या\ प्रमाणे\b|पण\b|पर\b|परंतु\b|परन्तु\b|मग\b|यदि\b|र\b|ਅਤੇ\b|ਜਦੋਂ\b|ਜਿਵੇਂ\ ਕਿ\b|ਜੇਕਰ\b|ਤਦ\b|ਪਰ\b|અને\b|આપેલ\ છે\b|ક્યારે\b|પછી\b|પણ\b|அப்பொழுது\b|ஆனால்\b|எப்போது\b|கொடுக்கப்பட்ட\b|மற்றும்\b|மேலும்\b|అప్పుడు\b|ఈ\ పరిస్థితిలో\b|కాని\b|చెప్పబడినది\b|మరియు\b|ಆದರೆ\b|ನಂತರ\b|ನೀಡಿದ\b|ಮತ್ತು\b|ಸ್ಥಿತಿಯನ್ನು\b|എപ്പോൾ\b|ഒപ്പം\b|നൽകിയത്\b|പക്ഷേ\b|പിന്നെ\b|กำหนดให้\b|ดังนั้น\b|เมื่อ\b|แต่\b|และ\b|ასევე\b|და\b|ვთქვათ\b|თუ\b|თუმცა\b|მაგრამ\b|მაშინ\b|მოცემული\b|მოცემულია\b|როგორც\ კი\b|როდესაც\b|როცა\b|መቼ\b|እና\b|ከዚያ\b|የተሰጠ\b|ግን\b|かつ\b|しかし\b|ただし\b|ならば\b|もし\b|且つ\b|並且\b|但し\b|但是\b|假如\b|假定\b|假設\b|假设\b|前提\b|同时\b|同時\b|并且\b|当\b|然し\b|當\b|而且\b|那么\b|那麼\b|그러면\b|그리고\b|단\b|만약\b|만일\b|먼저\b|조건\b|하지만\b|🎬|😂|😐|😔|🙏)o
15
+
16
+ KEYWORDS = {}.tap do |k|
17
+ k[:element] = Set.new ["Abstract Scenario", "Abstrakt Scenario", "Achtergrond", "Aer", "Agtergrond", "All hat and no cattle", "Antecedentes", "Antecedents", "Atburðarás", "Aturan", "Awww, look mate", "B4", "Background", "Baggrund", "Bakgrund", "Bakgrunn", "Bakgrunnur", "Beispiel", "Beispill", "Busy as a hound in flea season", "Bối cảnh", "Caso", "Casu", "Cefndir", "Cenario", "Cenario de Fundo", "Cenário", "Cenário de Fundo", "Contesto", "Context", "Contexte", "Contexto", "Cás", "Cás Achomair", "Cúlra", "Cцэнар", "Dasar", "Delineacao do Cenario", "Delineação do Cenário", "Dis is what went down", "Dyagram Senaryo", "Dyagram senaryo", "Eixemplo", "Ejemplo", "Eksempel", "Ekzemplo", "Enghraifft", "Esbozo do escenario", "Esbozu del casu", "Escenari", "Escenario", "Esempio", "Esquema de l'escenari", "Esquema del caso", "Esquema del escenario", "Esquema do Cenario", "Esquema do Cenário", "Example", "Exemple", "Exemplo", "Exemplu", "First off", "Fono", "Forgatókönyv", "Forgatókönyv vázlat", "Fundo", "Garis Panduan Senario", "Garis-Besar Skenario", "Geçmiş", "Grundlage", "Hannergrond", "Heave to", "Hintergrund", "Háttér", "Istorik", "Juhtum", "Kazo", "Kazo-skizo", "Keadaan", "Kerangka Keadaan", "Kerangka Senario", "Kerangka Situasi", "Keçmiş", "Khung kịch bản", "Khung tình huống", "Koncept", "Konsep skenario", "Kontekst", "Kontekstas", "Konteksts", "Kontext", "Konturo de la scenaro", "Kontèks", "Kural", "Kịch bản", "Latar Belakang", "Lemme tell y'all a story", "Lýsing Atburðarásar", "Lýsing Dæma", "MISHUN", "MISHUN SRSLY", "Na primer", "Náčrt Scenára", "Náčrt Scenáru", "Náčrt Scénáře", "Nümunə", "Oris scenarija", "Osnova", "Osnova Scenára", "Osnova scénáře", "Osnutek", "Ozadje", "Pavyzdys", "Piemērs", "Plan Senaryo", "Plan du Scénario", "Plan du scénario", "Plan senaryo", "Plang vum Szenario", "Pozadie", "Pozadina", "Pozadí", "Pravidlo", "Pravilo", "Pregled na scenarija", "Primer", "Primjer", "Przykład", "Príklad", "Példa", "Příklad", "Quy tắc", "Raamjuhtum", "Raamstsenaarium", "Reckon it's like", "Reegel", "Reel", "Regel", "Regla", "Regla de negocio", "Regola", "Regra", "Regulo", "Reguła", "Rerefons", "Reël", "Riail", "Rule", "Règle", "Sampla", "Scenarie", "Scenarij", "Scenarijaus šablonas", "Scenariju", "Scenariju-obris", "Scenarijus", "Scenario", "Scenario Amlinellol", "Scenario Outline", "Scenario Template", "Scenario-outline", "Scenariomal", "Scenariomall", "Scenariu", "Scenariusz", "Scenaro", "Scenár", "Scenārijs", "Scenārijs pēc parauga", "Schema dello scenario", "Scénario", "Scénář", "Senario", "Senaryo", "Senaryo Deskripsyon", "Senaryo deskripsyon", "Senaryo taslağı", "Serious as a snake bite", "Shiver me timbers", "Situasi", "Situasie", "Situasie Uiteensetting", "Situācija", "Skenario", "Skenario konsep", "Skica", "Skizo", "Sodrzhina", "Ssenari", "Ssenarinin strukturu", "Structura scenariu", "Structură scenariu", "Struktura scenarija", "Stsenaarium", "Swa", "Swa hwaer swa", "Swa hwær swa", "Szablon scenariusza", "Szabály", "Szenarien", "Szenario", "Szenariogrundriss", "Tapaus", "Tapausaihio", "Taust", "Tausta", "The thing of it is", "Tình huống", "Voorbeeld", "Voraussetzungen", "Vorbedingungen", "Wharrimean is", "Yo-ho-ho", "Zasada", "Założenia", "lut", "lut chovnatlh", "mo'", "Ær", "Örnek", "Παράδειγμα", "Περίγραμμα Σεναρίου", "Περιγραφή Σεναρίου", "Σενάριο", "Υπόβαθρο", "Агуулга", "Кантэкст", "Кереш", "Контекст", "Концепт", "На пример", "Основа", "Передумова", "Позадина", "Правило", "Правілы", "Преглед на сценарија", "Предистория", "Предыстория", "Приклад", "Пример", "Рамка на сценарий", "Скица", "Содржина", "Структура сценария", "Структура сценарија", "Структура сценарію", "Сценар", "Сценарий", "Сценарий структураси", "Сценарийның төзелеше", "Сценарио", "Сценарын төлөвлөгөө", "Сценарій", "Сцэнарый", "Тарих", "Узор сцэнара", "Шаблон сценария", "Шаблон сцэнарыя", "Կոնտեքստ", "Սցենար", "Սցենարի կառուցվացքը", "Օրինակ", "דוגמא", "כלל", "רקע", "תבנית תרחיש", "תרחיש", "الخلفية", "الگوی سناریو", "زمینه", "سناریو", "سيناريو", "سيناريو مخطط", "مثال", "منظر نامے کا خاکہ", "منظرنامہ", "پس منظر", "नियम", "परिदृश्य", "परिदृश्य रूपरेखा", "पार्श्वभूमी", "पृष्ठभूमि", "पृष्ठभूमी", "ਉਦਾਹਰਨ", "ਪਟਕਥਾ", "ਪਟਕਥਾ ਢਾਂਚਾ", "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", "ਪਿਛੋਕੜ", "ઉદાહરણ", "નિયમ", "પરિદ્દશ્ય ઢાંચો", "પરિદ્દશ્ય રૂપરેખા", "બેકગ્રાઉન્ડ", "સ્થિતિ", "உதாரணமாக", "காட்சி", "காட்சி சுருக்கம்", "காட்சி வார்ப்புரு", "பின்னணி", "ఉదాహరణ", "కథనం", "నేపథ్యం", "సన్నివేశం", "ಉದಾಹರಣೆ", "ಕಥಾಸಾರಾಂಶ", "ವಿವರಣೆ", "ಹಿನ್ನೆಲೆ", "നിയമം", "പശ്ചാത്തലം", "രംഗം", "സാഹചര്യത്തിന്റെ രൂപരേഖ", "สรุปเหตุการณ์", "เหตุการณ์", "แนวคิด", "โครงสร้างของเหตุการณ์", "კონტექსტი", "მაგ", "მაგალითად", "მაგალითი", "ნიმუში", "სცენარი", "სცენარის ნიმუში", "სცენარის შაბლონი", "შაბლონი", "წესი", "ሁናቴ", "ሁናቴ አብነት", "ሁናቴ ዝርዝር", "ህግ", "መነሻ", "መነሻ ሀሳብ", "ምሳሌ", "ቅድመ ሁኔታ", "シナリオ", "シナリオアウトライン", "シナリオテンプレ", "シナリオテンプレート", "テンプレ", "ルール", "剧本", "剧本大纲", "劇本", "劇本大綱", "场景", "场景大纲", "場景", "場景大綱", "背景", "规则", "규칙", "배경", "시나리오", "시나리오 개요", "💤", "📕", "📖", "🥒"]
18
+ k[:examples] = Set.new ["Atburðarásir", "Beispiele", "Beispiller", "Cenarios", "Cenários", "Conto", "Contoh", "Contone", "Dead men tell no tales", "Dæmi", "Dữ liệu", "EXAMPLZ", "Egzanp", "Eixemplos", "Ejemplos", "Eksempler", "Ekzemploj", "Enghreifftiau", "Esempi", "Examples", "Exempel", "Exemple", "Exemples", "Exemplos", "Juhtumid", "Misal", "Now that's a story longer than a cattle drive in July", "Nümunələr", "Paraugs", "Pavyzdžiai", "Piemēri", "Primeri", "Primjeri", "Przykłady", "Príklady", "Példák", "Příklady", "Samplaí", "Scenaria", "Scenarijai", "Scenariji", "Scenarios", "Se the", "Se ðe", "Se þe", "Tapaukset", "Variantai", "Voorbeelde", "Voorbeelden", "You'll wanna", "ghantoH", "lutmey", "Örnekler", "Παραδείγματα", "Σενάρια", "Значения", "Мисаллар", "Мисоллар", "Приклади", "Примери", "Примеры", "Прыклады", "Сценарија", "Сценарији", "Тухайлбал", "Үрнәкләр", "Օրինակներ", "דוגמאות", "امثلة", "مثالیں", "نمونه ها", "उदाहरण", "उदाहरणहरु", "ਉਦਾਹਰਨਾਂ", "ઉદાહરણો", "எடுத்துக்காட்டுகள்", "காட்சிகள்", "நிலைமைகளில்", "ఉదాహరణలు", "ಉದಾಹರಣೆಗಳು", "ഉദാഹരണങ്ങൾ", "ชุดของตัวอย่าง", "ชุดของเหตุการณ์", "მაგალითები", "ሁናቴዎች", "ምሳሌዎች", "サンプル", "例", "例子", "예", "📓"]
19
+ k[:feature] = Set.new ["Ability", "Abilità", "Ahoy matey!", "All gussied up", "Arwedd", "Aspekt", "Besigheid Behoefte", "Biznis potreba", "Business Need", "Caracteristica", "Característica", "Carauterística", "Egenskab", "Egenskap", "Eiginleiki", "Esigenza di Business", "Feature", "Fitur", "Fonctionnalité", "Fonksyonalite", "Funcionalidade", "Funcionalitat", "Functionalitate", "Functionaliteit", "Funcţionalitate", "Funcționalitate", "Fungsi", "Funkcia", "Funkcija", "Funkcionalitāte", "Funkcionalnost", "Funkcja", "Funksie", "Funktion", "Funktionalität", "Funktionalitéit", "Funzionalità", "Fīča", "Gné", "Hwaet", "Hwæt", "Jellemző", "Karakteristik", "Karakteristika", "Lastnost", "Mak", "Mogucnost", "Mogućnost", "Mozhnost", "Moznosti", "Možnosti", "Necesidad del negocio", "OH HAI", "Omadus", "Ominaisuus", "Osobina", "Potrzeba biznesowa", "Požadavek", "Požiadavka", "Pretty much", "Qap", "Qu'meH 'ut", "Requisito", "Savybė", "This ain’t my first rodeo", "Trajto", "Tính năng", "Vermoë", "Vlastnosť", "Właściwość", "Značilnost", "laH", "perbogh", "poQbogh malja'", "Özellik", "Özəllik", "Δυνατότητα", "Λειτουργία", "Бизнис потреба", "Могућност", "Можност", "Мөмкинлек", "Особина", "Свойство", "Фича", "Функц", "Функционал", "Функционалност", "Функциональность", "Функция", "Функцыянальнасць", "Функціонал", "Фіча", "Үзенчәлеклелек", "Հատկություն", "Ֆունկցիոնալություն", "תכונה", "خاصية", "خصوصیت", "صلاحیت", "وِیژگی", "کاروبار کی ضرورت", "रूप लेख", "विशेषता", "वैशिष्ट्य", "सुविधा", "ਖਾਸੀਅਤ", "ਨਕਸ਼ ਨੁਹਾਰ", "ਮੁਹਾਂਦਰਾ", "ક્ષમતા", "લક્ષણ", "વ્યાપાર જરૂર", "அம்சம்", "திறன்", "வணிக தேவை", "గుణము", "ಹೆಚ್ಚಳ", "സവിശേഷത", "ความต้องการทางธุรกิจ", "ความสามารถ", "โครงหลัก", "თვისება", "მოთხოვნა", "ስራ", "የሚፈለገው ድርጊት", "የተፈለገው ስራ", "フィーチャ", "功能", "機能", "기능", "📚"]
16
20
  end
17
21
  end
18
22
  end
@@ -17,26 +17,8 @@ module Rouge
17
17
  return true if text.shebang? 'cucumber'
18
18
  end
19
19
 
20
- # self-modifying method that loads the keywords file
21
- def self.keywords
22
- Kernel::load File.join(Lexers::BASE_DIR, 'gherkin/keywords.rb')
23
- keywords
24
- end
25
-
26
- def self.step_regex
27
- # in Gherkin's config, keywords that end in < don't
28
- # need word boundaries at the ends - all others do.
29
- @step_regex ||= Regexp.new(
30
- keywords[:step].map do |w|
31
- if w.end_with? '<'
32
- Regexp.escape(w.chop)
33
- elsif w.end_with?(' ')
34
- Regexp.escape(w)
35
- else
36
- "#{Regexp.escape(w)}\\b"
37
- end
38
- end.join('|')
39
- )
20
+ lazy do
21
+ require_relative 'gherkin/keywords'
40
22
  end
41
23
 
42
24
  rest_of_line = /.*?(?=[#\n])/
@@ -46,10 +28,29 @@ module Rouge
46
28
  rule %r/[ \r\t]+/, Text
47
29
  end
48
30
 
31
+ state :annotated_string do
32
+ rule %r((""")(\S*)(.*?)("""))m do |m|
33
+ open, lang, content, close = m.captures
34
+
35
+ token Str, open
36
+ token Str::Escape, lang
37
+
38
+ sublexer = Rouge::Lexer.find(lang.strip)
39
+
40
+ if sublexer
41
+ delegate sublexer, content
42
+ else
43
+ token Str, content
44
+ end
45
+
46
+ token Str, close
47
+ end
48
+ end
49
+
49
50
  state :root do
50
51
  mixin :basic
51
52
  rule %r(\n), Text
52
- rule %r(""".*?""")m, Str
53
+ mixin :annotated_string
53
54
  rule %r(@[^\s@]+), Name::Tag
54
55
  mixin :has_table
55
56
  mixin :has_examples
@@ -60,11 +61,11 @@ module Rouge
60
61
  reset_stack
61
62
 
62
63
  keyword = m[1]
63
- keyword_tok = if self.class.keywords[:element].include? keyword
64
+ keyword_tok = if KEYWORDS[:element].include? keyword
64
65
  push :description; Keyword::Namespace
65
- elsif self.class.keywords[:feature].include? keyword
66
+ elsif KEYWORDS[:feature].include? keyword
66
67
  push :feature_description; Keyword::Declaration
67
- elsif self.class.keywords[:examples].include? keyword
68
+ elsif KEYWORDS[:examples].include? keyword
68
69
  push :example_description; Name::Namespace
69
70
  else
70
71
  Error
@@ -76,9 +77,10 @@ module Rouge
76
77
 
77
78
  state :has_examples do
78
79
  mixin :has_scenarios
79
- rule Gherkin.step_regex, Name::Function do
80
+ rule Gherkin::STEP_REGEX do
80
81
  token Name::Function
81
- reset_stack; push :step
82
+ reset_stack
83
+ push :step
82
84
  end
83
85
  end
84
86
 
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'javascript'
5
+
6
+ module Rouge
7
+ module Lexers
8
+ class Gjs < Javascript
9
+ title "Template Tag (gjs)"
10
+ desc "Ember.js, JavaScript with <template> tags"
11
+ tag "gjs"
12
+ filenames "*.gjs"
13
+ mimetypes "text/x-gjs", "application/x-gjs"
14
+
15
+ def initialize(*)
16
+ super
17
+ @handlebars = Handlebars.new(options)
18
+ end
19
+
20
+ prepend :root do
21
+ rule %r/(<)(template)(>)/ do
22
+ groups Name::Tag, Keyword, Name::Tag
23
+ push :template
24
+ end
25
+ end
26
+
27
+ state :template do
28
+ rule %r((</)(template)(>)) do
29
+ groups Name::Tag, Keyword, Name::Tag
30
+ pop!
31
+ end
32
+
33
+ rule %r/.+?(?=<\/template>)/m do
34
+ delegate @handlebars
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ # DO NOT EDIT
5
+ # This file is automatically generated by `rake builtins:glsl`.
6
+ # See tasks/builtins/glsl.rake for more info.
7
+
8
+ module Rouge
9
+ module Lexers
10
+ class GLSL
11
+ BUILTINS = Set["EmitStreamVertex", "EmitVertex", "EndPrimitive", "EndStreamPrimitive", "abs", "acos", "acosh", "all", "allInvocations", "allInvocationsEqual", "any", "anyInvocation", "asin", "asinh", "atan", "atanh", "atomicAdd", "atomicAnd", "atomicCompSwap", "atomicCounter", "atomicCounterAdd", "atomicCounterAnd", "atomicCounterCompSwap", "atomicCounterDecrement", "atomicCounterExchange", "atomicCounterIncrement", "atomicCounterMax", "atomicCounterMin", "atomicCounterOr", "atomicCounterSubtract", "atomicCounterXor", "atomicExchange", "atomicMax", "atomicMin", "atomicOr", "atomicXor", "barrier", "bitCount", "bitfieldExtract", "bitfieldInsert", "bitfieldReverse", "ceil", "clamp", "cos", "cosh", "cross", "dFdx", "dFdxCoarse", "dFdxFine", "dFdy", "dFdyCoarse", "dFdyFine", "degrees", "determinant", "distance", "dot", "equal", "exp", "exp2", "faceforward", "findLSB", "findMSB", "floatBitsToInt", "floatBitsToUint", "floor", "fma", "fract", "frexp", "ftransform", "fwidth", "fwidthCoarse", "fwidthFine", "greaterThan", "greaterThanEqual", "groupMemoryBarrier", "imageAtomicAdd", "imageAtomicAnd", "imageAtomicCompSwap", "imageAtomicExchange", "imageAtomicMax", "imageAtomicMin", "imageAtomicOr", "imageAtomicXor", "imageLoad", "imageSamples", "imageSize", "imageStore", "imulExtended", "intBitsToFloat", "interpolateAtCentroid", "interpolateAtOffset", "interpolateAtSample", "inverse", "inversesqrt", "isinf", "isnan", "ldexp", "length", "lessThan", "lessThanEqual", "log", "log2", "matrixCompMult", "max", "memoryBarrier", "memoryBarrierAtomicCounter", "memoryBarrierBuffer", "memoryBarrierImage", "memoryBarrierShared", "min", "mix", "mod", "modf", "neighbor", "noise1", "noise2", "noise3", "noise4", "normalize", "not", "notEqual", "outerProduct", "packDouble2x32", "packHalf2x16", "packSnorm2x16", "packSnorm4x8", "packUnorm2x16", "packUnorm4x8", "pow", "radians", "reflect", "refract", "round", "roundEven", "shadow1D", "shadow1DLod", "shadow1DProj", "shadow1DProjLod", "shadow2D", "shadow2DLod", "shadow2DProj", "shadow2DProjLod", "sign", "sin", "sinh", "smoothstep", "sqrt", "step", "subpassLoad", "tan", "tanh", "texelFetch", "texelFetchOffset", "texture", "texture1DLod", "texture1DProj", "texture1DProjLod", "texture2DLod", "texture2DProj", "texture2DProjLod", "texture3DLod", "texture3DProj", "texture3DProjLod", "textureCubeLod", "textureGather", "textureGatherOffset", "textureGatherOffsets", "textureGrad", "textureGradOffset", "textureLod", "textureLodOffset", "textureOffset", "textureProj", "textureProjGrad", "textureProjGradOffset", "textureProjLod", "textureProjLodOffset", "textureProjOffset", "textureQueryLevels", "textureQueryLod", "textureSamples", "textureSize", "transpose", "trunc", "uaddCarry", "uintBitsToFloat", "umulExtended", "unpackDouble2x32", "unpackHalf2x16", "unpackSnorm2x16", "unpackSnorm4x8", "unpackUnorm2x16", "unpackUnorm4x8", "usubBorrow"]
12
+ KEYWORDS = Set["active", "asm", "attribute", "break", "buffer", "case", "cast", "centroid", "class", "coherent", "common", "const", "continue", "default", "discard", "do", "else", "enum", "extern", "external", "false", "filter", "fixed", "flat", "for", "fvec2", "fvec3", "fvec4", "goto", "half", "highp", "hvec2", "hvec3", "hvec4", "if", "in", "inline", "inout", "input", "interface", "invariant", "layout", "long", "lowp", "mediump", "namespace", "noinline", "noperspective", "out", "output", "partition", "patch", "precise", "precision", "public", "readonly", "resource", "restrict", "return", "sample", "sampler3DRect", "shared", "short", "sizeof", "smooth", "static", "struct", "subroutine", "superp", "switch", "template", "this", "true", "typedef", "uniform", "union", "unsigned", "using", "varying", "volatile", "while", "writeonly"]
13
+ TYPES = Set["atomic_uint", "bool", "bvec2", "bvec3", "bvec4", "dmat2", "dmat2x2", "dmat2x3", "dmat2x4", "dmat3", "dmat3x2", "dmat3x3", "dmat3x4", "dmat4", "dmat4x2", "dmat4x3", "dmat4x4", "double", "dvec2", "dvec3", "dvec4", "float", "iimage1D", "iimage1DArray", "iimage2D", "iimage2DArray", "iimage2DMS", "iimage2DMSArray", "iimage2DRect", "iimage3D", "iimageBuffer", "iimageCube", "iimageCubeArray", "image1D", "image1DArray", "image2D", "image2DArray", "image2DMS", "image2DMSArray", "image2DRect", "image3D", "imageBuffer", "imageCube", "imageCubeArray", "int", "isampler1D", "isampler1DArray", "isampler2D", "isampler2DArray", "isampler2DMS", "isampler2DMSArray", "isampler2DRect", "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray", "isubpassInput", "isubpassInputMS", "itexture1D", "itexture1DArray", "itexture2D", "itexture2DArray", "itexture2DMS", "itexture2DMSArray", "itexture2DRect", "itexture3D", "itextureBuffer", "itextureCube", "itextureCubeArray", "ivec2", "ivec3", "ivec4", "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4", "mat4", "mat4x2", "mat4x3", "mat4x4", "sampler", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", "sampler1DShadow", "sampler2D", "sampler2DArray", "sampler2DArrayShadow", "sampler2DMS", "sampler2DMSArray", "sampler2DRect", "sampler2DRectShadow", "sampler2DShadow", "sampler3D", "samplerBuffer", "samplerCube", "samplerCubeArray", "samplerCubeArrayShadow", "samplerCubeShadow", "samplerShadow", "subpassInput", "subpassInputMS", "texture1D", "texture1DArray", "texture2D", "texture2DArray", "texture2DMS", "texture2DMSArray", "texture2DRect", "texture3D", "textureBuffer", "textureCube", "textureCubeArray", "uimage1D", "uimage1DArray", "uimage2D", "uimage2DArray", "uimage2DMS", "uimage2DMSArray", "uimage2DRect", "uimage3D", "uimageBuffer", "uimageCube", "uimageCubeArray", "uint", "usampler1D", "usampler1DArray", "usampler2D", "usampler2DArray", "usampler2DMS", "usampler2DMSArray", "usampler2DRect", "usampler3D", "usamplerBuffer", "usamplerCube", "usamplerCubeArray", "usubpassInput", "usubpassInputMS", "utexture1D", "utexture1DArray", "utexture2D", "utexture2DArray", "utexture2DMS", "utexture2DMSArray", "utexture2DRect", "utexture3D", "utextureBuffer", "utextureCube", "utextureCubeArray", "uvec2", "uvec3", "uvec4", "vec2", "vec3", "vec4", "void"]
14
+ GL_VARS = Set["gl_BackColor", "gl_BackLightModelProduct", "gl_BackLightProduct", "gl_BackMaterial", "gl_BackSecondaryColor", "gl_BaseInstance", "gl_BaseVertex", "gl_BoundingBox", "gl_ClipDistance", "gl_ClipPlane", "gl_ClipVertex", "gl_Color", "gl_CullDistance", "gl_DepthRange", "gl_DepthRangeParameters", "gl_DrawID", "gl_EyePlaneQ", "gl_EyePlaneR", "gl_EyePlaneS", "gl_EyePlaneT", "gl_Fog", "gl_FogCoord", "gl_FogFragCoord", "gl_FogParameters", "gl_FragColor", "gl_FragCoord", "gl_FragData", "gl_FragDepth", "gl_FrontColor", "gl_FrontFacing", "gl_FrontLightModelProduct", "gl_FrontLightProduct", "gl_FrontMaterial", "gl_FrontSecondaryColor", "gl_GlobalInvocationID", "gl_HelperInvocation", "gl_InstanceID", "gl_InstanceIndex", "gl_InvocationID", "gl_Layer", "gl_LightModel", "gl_LightModelParameters", "gl_LightModelProducts", "gl_LightProducts", "gl_LightSource", "gl_LightSourceParameters", "gl_LocalInvocationID", "gl_LocalInvocationIndex", "gl_MaterialParameters", "gl_MaxAtomicCounterBindings", "gl_MaxAtomicCounterBufferSize", "gl_MaxClipDistances", "gl_MaxClipPlanes", "gl_MaxCombinedAtomicCounterBuffers", "gl_MaxCombinedAtomicCounters", "gl_MaxCombinedClipAndCullDistances", "gl_MaxCombinedImageUniforms", "gl_MaxCombinedImageUnitsAndFragmentOutputs", "gl_MaxCombinedShaderOutputResources", "gl_MaxCombinedTextureImageUnits", "gl_MaxComputeAtomicCounterBuffers", "gl_MaxComputeAtomicCounters", "gl_MaxComputeImageUniforms", "gl_MaxComputeTextureImageUnits", "gl_MaxComputeUniformComponents", "gl_MaxComputeWorkGroupCount", "gl_MaxComputeWorkGroupSize", "gl_MaxCullDistances", "gl_MaxDrawBuffers", "gl_MaxFragmentAtomicCounterBuffers", "gl_MaxFragmentAtomicCounters", "gl_MaxFragmentImageUniforms", "gl_MaxFragmentInputComponents", "gl_MaxFragmentInputVectors", "gl_MaxFragmentUniformComponents", "gl_MaxFragmentUniformVectors", "gl_MaxGeometryAtomicCounterBuffers", "gl_MaxGeometryAtomicCounters", "gl_MaxGeometryImageUniforms", "gl_MaxGeometryInputComponents", "gl_MaxGeometryOutputComponents", "gl_MaxGeometryOutputVertices", "gl_MaxGeometryTextureImageUnits", "gl_MaxGeometryTotalOutputComponents", "gl_MaxGeometryUniformComponents", "gl_MaxGeometryVaryingComponents", "gl_MaxImageSamples", "gl_MaxImageUnits", "gl_MaxInputAttachments", "gl_MaxLights", "gl_MaxPatchVertices", "gl_MaxProgramTexelOffset", "gl_MaxSamples", "gl_MaxTessControlAtomicCounterBuffers", "gl_MaxTessControlAtomicCounters", "gl_MaxTessControlImageUniforms", "gl_MaxTessControlInputComponents", "gl_MaxTessControlOutputComponents", "gl_MaxTessControlTextureImageUnits", "gl_MaxTessControlTotalOutputComponents", "gl_MaxTessControlUniformComponents", "gl_MaxTessEvaluationAtomicCounterBuffers", "gl_MaxTessEvaluationAtomicCounters", "gl_MaxTessEvaluationImageUniforms", "gl_MaxTessEvaluationInputComponents", "gl_MaxTessEvaluationOutputComponents", "gl_MaxTessEvaluationTextureImageUnits", "gl_MaxTessEvaluationUniformComponents", "gl_MaxTessGenLevel", "gl_MaxTessPatchComponents", "gl_MaxTextureCoords", "gl_MaxTextureImageUnits", "gl_MaxTextureUnits", "gl_MaxTransformFeedbackBuffers", "gl_MaxTransformFeedbackInterleavedComponents", "gl_MaxVaryingComponents", "gl_MaxVaryingFloats", "gl_MaxVaryingVectors", "gl_MaxVertexAtomicCounterBuffers", "gl_MaxVertexAtomicCounters", "gl_MaxVertexAttribs", "gl_MaxVertexImageUniforms", "gl_MaxVertexOutputComponents", "gl_MaxVertexOutputVectors", "gl_MaxVertexTextureImageUnits", "gl_MaxVertexUniformComponents", "gl_MaxVertexUniformVectors", "gl_MaxViewports", "gl_MinProgramTexelOffset", "gl_ModelViewMatrix", "gl_ModelViewMatrixInverse", "gl_ModelViewMatrixInverseTranspose", "gl_ModelViewMatrixTranspose", "gl_ModelViewProjectionMatrix", "gl_ModelViewProjectionMatrixInverse", "gl_ModelViewProjectionMatrixInverseTranspose", "gl_ModelViewProjectionMatrixTranspose", "gl_MultiTexCoord0", "gl_MultiTexCoord1", "gl_MultiTexCoord2", "gl_MultiTexCoord3", "gl_MultiTexCoord4", "gl_MultiTexCoord5", "gl_MultiTexCoord6", "gl_MultiTexCoord7", "gl_Normal", "gl_NormalMatrix", "gl_NormalScale", "gl_NumSamples", "gl_NumWorkGroups", "gl_ObjectPlaneQ", "gl_ObjectPlaneR", "gl_ObjectPlaneS", "gl_ObjectPlaneT", "gl_PatchVerticesIn", "gl_PerFragment", "gl_PerVertex", "gl_Point", "gl_PointCoord", "gl_PointParameters", "gl_PointSize", "gl_Position", "gl_PrimitiveID", "gl_PrimitiveIDIn", "gl_ProjectionMatrix", "gl_ProjectionMatrixInverse", "gl_ProjectionMatrixInverseTranspose", "gl_ProjectionMatrixTranspose", "gl_SampleID", "gl_SampleMask", "gl_SampleMaskIn", "gl_SamplePosition", "gl_SecondaryColor", "gl_TessCoord", "gl_TessLevelInner", "gl_TessLevelOuter", "gl_TexCoord", "gl_TextureEnvColor", "gl_TextureMatrix", "gl_TextureMatrixInverse", "gl_TextureMatrixInverseTranspose", "gl_TextureMatrixTranspose", "gl_Vertex", "gl_VertexID", "gl_VertexIndex", "gl_ViewportIndex", "gl_WorkGroupID", "gl_WorkGroupSize", "gl_color", "gl_in", "gl_out"]
15
+ end
16
+ end
17
+ end
@@ -1,15 +1,11 @@
1
1
  # -*- coding: utf-8 -*- #
2
2
  # frozen_string_literal: true
3
3
 
4
+ require_relative 'c'
5
+
4
6
  module Rouge
5
7
  module Lexers
6
- load_lexer 'c.rb'
7
-
8
- # This file defines the GLSL language lexer to the Rouge
9
- # syntax highlighter.
10
- #
11
- # Author: Sri Harsha Chilakapati
12
- class Glsl < C
8
+ class GLSL < RegexLexer
13
9
  tag 'glsl'
14
10
  filenames '*.glsl', '*.frag', '*.vert', '*.geom', '*.vs', '*.gs', '*.shader'
15
11
  mimetypes 'x-shader/x-vertex', 'x-shader/x-fragment', 'x-shader/x-geometry'
@@ -17,116 +13,57 @@ module Rouge
17
13
  title "GLSL"
18
14
  desc "The GLSL shader language"
19
15
 
20
- def self.keywords
21
- @keywords ||= Set.new %w(
22
- attribute const uniform varying
23
- layout
24
- centroid flat smooth noperspective
25
- patch sample
26
- break continue do for while switch case default
27
- if else
28
- subroutine
29
- in out inout
30
- invariant
31
- discard return struct precision
32
- )
33
- end
16
+ lazy { require_relative "glsl/builtins" }
34
17
 
35
- def self.keywords_type
36
- @keywords_type ||= Set.new %w(
37
- float double int void bool true false
38
- lowp mediump highp
39
- mat2 mat3 mat4 dmat2 dmat3 dmat4
40
- mat2x2 mat2x3 mat2x4 dmat2x2 dmat2x3 dmat2x4
41
- mat3x2 mat3x3 mat3x4 dmat3x2 dmat3x3 dmat3x4
42
- mat4x2 mat4x3 mat4x4 dmat4x2 dmat4x3 dmat4x4
43
- vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 dvec2 dvec3 dvec4
44
- uint uvec2 uvec3 uvec4
45
- sampler1D sampler2D sampler3D samplerCube
46
- sampler1DShadow sampler2DShadow samplerCubeShadow
47
- sampler1DArray sampler2DArray
48
- sampler1DArrayShadow sampler2DArrayShadow
49
- isampler1D isampler2D isampler3D isamplerCube
50
- isampler1DArray isampler2DArray
51
- usampler1D usampler2D usampler3D usamplerCube
52
- usampler1DArray usampler2DArray
53
- sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
54
- samplerBuffer isamplerBuffer usamplerBuffer
55
- sampler2DMS isampler2DMS usampler2DMS
56
- sampler2DMSArray isampler2DMSArray usampler2DMSArray
57
- samplerCubeArray samplerCubeArrayShadow isamplerCubeArray usamplerCubeArray
58
- )
59
- end
18
+ state :root do
19
+ rule %r/\s+/, Text
20
+ rule %r(/[*].*?[*]/)m, Comment::Multiline
21
+ rule %r(//.*$), Comment
60
22
 
61
- def self.reserved
62
- @reserved ||= Set.new %w(
63
- common partition active
64
- asm
65
- class union enum typedef template this packed
66
- goto
67
- inline noinline volatile public static extern external interface
68
- long short half fixed unsigned superp
69
- input output
70
- hvec2 hvec3 hvec4 fvec2 fvec3 fvec4
71
- sampler3DRect
72
- filter
73
- image1D image2D image3D imageCube
74
- iimage1D iimage2D iimage3D iimageCube
75
- uimage1D uimage2D uimage3D uimageCube
76
- image1DArray image2DArray
77
- iimage1DArray iimage2DArray uimage1DArray uimage2DArray
78
- image1DShadow image2DShadow
79
- image1DArrayShadow image2DArrayShadow
80
- imageBuffer iimageBuffer uimageBuffer
81
- sizeof cast
82
- namespace using
83
- row_major
84
- )
85
- end
23
+ rule %r/^#(?:[^\n]|\\\r?\n)*/, Comment::Preproc
24
+ rule %r/defined\b/, Comment::Preproc
25
+ rule %r/__(?:LINE|FILE|VERSION)__\b/, Keyword::Constant
26
+ rule %r/(?:true|false)\b/, Keyword::Pseudo
86
27
 
87
- def self.builtins
88
- @builtins ||= Set.new %w(
89
- gl_VertexID gl_InstanceID gl_PerVertex gl_Position gl_PointSize gl_ClipDistance
90
- gl_PrimitiveIDIn gl_InvocationID gl_PrimitiveID gl_Layer gl_ViewportIndex
91
- gl_MaxPatchVertices gl_PatchVerticesIn gl_TessLevelOuter gl_TessLevelInner
92
- gl_TessCoord gl_FragCoord gl_FrontFacing gl_PointCoord gl_SampleID gl_SamplePosition
93
- gl_FragColor gl_FragData gl_MaxDrawBuffers gl_FragDepth gl_SampleMask
94
- gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor
95
- gl_TexCoord gl_FogFragCoord gl_Color gl_SecondaryColor gl_Normal gl_VertexID
96
- gl_MultiTexCord0 gl_MultiTexCord1 gl_MultiTexCord2 gl_MultiTexCord3
97
- gl_MultiTexCord4 gl_MultiTexCord5 gl_MultiTexCord6 gl_MultiTexCord7
98
- gl_FogCoord gl_MaxVertexAttribs gl_MaxVertexUniformComponents
99
- gl_MaxVaryingFloats gl_MaxVaryingComponents gl_MaxVertexOutputComponents
100
- gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents
101
- gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
102
- gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits
103
- gl_MaxFragmentUniformComponents gl_MaxClipDistances
104
- gl_MaxGeometryTextureImageUnits gl_MaxGeometryUniformComponents
105
- gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents
106
- gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits
107
- gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents
108
- gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents
109
- gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents
110
- gl_MaxTessPatchComponents gl_MaxTessGenLevel gl_MaxViewports
111
- gl_MaxVertexUniformVectors gl_MaxFragmentUniformVectors gl_MaxVaryingVectors
112
- gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes gl_DepthRange
113
- gl_DepthRangeParameters gl_ModelViewMatrix gl_ProjectionMatrix
114
- gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix
115
- gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
116
- gl_TextureMatrixInverse gl_ModelViewMatrixTranspose
117
- gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose
118
- gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose
119
- gl_ModelViewProjectionMatrixInverseTranspose
120
- gl_TextureMatrixInverseTranspose gl_NormalScale gl_ClipPlane gl_PointParameters
121
- gl_Point gl_MaterialParameters gl_FrontMaterial gl_BackMaterial
122
- gl_LightSourceParameters gl_LightSource gl_MaxLights gl_LightModelParameters
123
- gl_LightModel gl_LightModelProducts gl_FrontLightModelProduct
124
- gl_BackLightModelProduct gl_LightProducts gl_FrontLightProduct
125
- gl_BackLightProduct gl_TextureEnvColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR
126
- gl_EyePlaneQ gl_ObjectPlaneS gl_ObjectPlaneT gl_ObjectPlaneR gl_ObjectPlaneQ
127
- gl_FogParameters gl_Fog
128
- )
28
+ rule %r/0x\h+u?/i, Num::Hex
29
+ rule %r/(?:\d+[.]\d*|[.]\d+)(?:e[+-]?\d+)?(?:l?f)?/i, Num::Float
30
+ rule %r/\d+(?:e[+-]?\d+)(?:l?f)?/i, Num::Float
31
+ rule %r/[1-9]\d*u?/i, Num::Integer
32
+ rule %r/0[0-7]+/, Num::Oct
33
+ rule %r/0/, Num::Integer
34
+ rule %r([-.+/*%<>\[\](){}^|&~=!:;,?]), Punctuation
35
+
36
+ rule %r/\w+/ do |m|
37
+ if KEYWORDS.include?(m[0])
38
+ token Keyword
39
+ elsif TYPES.include?(m[0])
40
+ token Keyword::Type
41
+ else
42
+ fallthrough!
43
+ end
44
+ end
45
+
46
+ rule %r/\w+(?=\s*[(])/ do |m|
47
+ if BUILTINS.include?(m[0])
48
+ token Name::Builtin
49
+ else
50
+ token Name::Function
51
+ end
52
+ end
53
+
54
+ rule %r/\w+/ do |m|
55
+ if GL_VARS.include?(m[0])
56
+ token Name::Constant
57
+ elsif BUILTINS.include?(m[0])
58
+ token Name::Builtin
59
+ else
60
+ token Name
61
+ end
62
+ end
129
63
  end
130
64
  end
65
+
66
+ # backcompat
67
+ Glsl = GLSL
131
68
  end
132
69
  end
@@ -25,6 +25,7 @@ module Rouge
25
25
 
26
26
  LETTER = /#{UNICODE_LETTER}|_/
27
27
  DECIMAL_DIGIT = /[0-9]/
28
+ BINARY_DIGIT = /[01]/
28
29
  OCTAL_DIGIT = /[0-7]/
29
30
  HEX_DIGIT = /[0-9A-Fa-f]/
30
31
 
@@ -71,14 +72,15 @@ module Rouge
71
72
 
72
73
  # Integer literals
73
74
 
74
- DECIMAL_LIT = /[0-9]#{DECIMAL_DIGIT}*/
75
- OCTAL_LIT = /0#{OCTAL_DIGIT}*/
76
- HEX_LIT = /0[xX]#{HEX_DIGIT}+/
77
- INT_LIT = /#{HEX_LIT}|#{DECIMAL_LIT}|#{OCTAL_LIT}/
75
+ DECIMAL_LIT = /#{DECIMAL_DIGIT}(?:_?#{DECIMAL_DIGIT})*/
76
+ BINARY_LIT = /0[bB]_*#{BINARY_DIGIT}(?:_?#{BINARY_DIGIT})*/
77
+ OCTAL_LIT = /0[oO]?_*#{OCTAL_DIGIT}(?:_?#{OCTAL_DIGIT})*/
78
+ HEX_LIT = /0[xX]_*#{HEX_DIGIT}(?:_?#{HEX_DIGIT})*/
79
+ INT_LIT = /#{BINARY_LIT}|#{HEX_LIT}|#{OCTAL_LIT}|#{DECIMAL_LIT}/
78
80
 
79
81
  # Floating-point literals
80
82
 
81
- DECIMALS = /#{DECIMAL_DIGIT}+/
83
+ DECIMALS = /#{DECIMAL_DIGIT}(?:_?#{DECIMAL_DIGIT})*/
82
84
  EXPONENT = /[eE][+\-]?#{DECIMALS}/
83
85
  FLOAT_LIT = / #{DECIMALS} \. #{DECIMALS}? #{EXPONENT}?
84
86
  | #{DECIMALS} #{EXPONENT}
@@ -125,7 +127,7 @@ module Rouge
125
127
  | rune | string | uint8
126
128
  | uint16 | uint32 | uint64
127
129
  | uintptr | uint
128
- )\b/x
130
+ )\b/x
129
131
 
130
132
  PREDECLARED_CONSTANTS = /\b(?:true|false|iota|nil)\b/
131
133
 
@@ -1,10 +1,10 @@
1
1
  # -*- coding: utf-8 -*- #
2
2
  # frozen_string_literal: true
3
3
 
4
+ require_relative 'groovy'
5
+
4
6
  module Rouge
5
7
  module Lexers
6
- load_lexer 'groovy.rb'
7
-
8
8
  class Gradle < Groovy
9
9
  title "Gradle"
10
10
  desc "A powerful build system for the JVM"
@@ -42,6 +42,12 @@ module Rouge
42
42
  end
43
43
 
44
44
  state :root do
45
+ # groovy allows a file to start with a shebang
46
+ rule %r/\A#!(.*?)$/, Comment::Preproc
47
+ rule %r//, Text, :base
48
+ end
49
+
50
+ state :base do
45
51
  rule %r(^
46
52
  (\s*(?:\w[\w.\[\]]*\s+)+?) # return arguments
47
53
  (\w\w*) # method name
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'typescript'
5
+
6
+ module Rouge
7
+ module Lexers
8
+ class Gts < Typescript
9
+ title "Template Tag (gts)"
10
+ desc "Ember.js, TypeScript with <template> tags"
11
+ tag "gts"
12
+ filenames "*.gts"
13
+ mimetypes "text/x-gts", "application/x-gts"
14
+
15
+ def initialize(*)
16
+ super
17
+ @handlebars = Handlebars.new(options)
18
+ end
19
+
20
+ prepend :root do
21
+ rule %r/(<)(template)(>)/ do
22
+ groups Name::Tag, Keyword, Name::Tag
23
+ push :template
24
+ end
25
+ end
26
+
27
+ state :template do
28
+ rule %r((</)(template)(>)) do
29
+ groups Name::Tag, Keyword, Name::Tag
30
+ pop!
31
+ end
32
+
33
+ rule %r/.+?(?=<\/template>)/m do
34
+ delegate @handlebars
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end