brakeman 6.1.2 → 7.1.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 (617) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +65 -0
  3. data/README.md +6 -3
  4. data/bundle/load.rb +16 -13
  5. data/bundle/ruby/3.2.0/gems/csv-3.3.5/LICENSE.txt +33 -0
  6. data/bundle/ruby/3.2.0/gems/csv-3.3.5/NEWS.md +1009 -0
  7. data/bundle/ruby/3.2.0/gems/csv-3.3.5/README.md +55 -0
  8. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/core_ext/array.rb +9 -0
  9. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/core_ext/string.rb +9 -0
  10. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/fields_converter.rb +96 -0
  11. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/input_record_separator.rb +18 -0
  12. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/parser.rb +1302 -0
  13. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/row.rb +757 -0
  14. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/table.rb +1055 -0
  15. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/version.rb +6 -0
  16. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/writer.rb +209 -0
  17. data/bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv.rb +3017 -0
  18. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/CHANGELOG.md +168 -4
  19. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/FAQ.md +1 -1
  20. data/bundle/ruby/3.2.0/gems/haml-6.3.0/Gemfile +27 -0
  21. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/MIT-LICENSE +1 -1
  22. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/README.md +22 -34
  23. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/REFERENCE.md +95 -159
  24. data/bundle/ruby/3.2.0/gems/haml-6.3.0/exe/haml +6 -0
  25. data/bundle/ruby/3.2.0/gems/haml-6.3.0/haml.gemspec +43 -0
  26. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/ambles.rb +20 -0
  27. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_builder.rb +162 -0
  28. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_compiler.rb +133 -0
  29. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/attribute_parser.rb +116 -0
  30. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/cli.rb +154 -0
  31. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/children_compiler.rb +155 -0
  32. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/comment_compiler.rb +51 -0
  33. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/doctype_compiler.rb +52 -0
  34. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/script_compiler.rb +114 -0
  35. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/silent_script_compiler.rb +24 -0
  36. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler/tag_compiler.rb +76 -0
  37. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/compiler.rb +97 -0
  38. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/dynamic_merger.rb +67 -0
  39. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/engine.rb +59 -0
  40. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/error.rb +5 -4
  41. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/escape.rb +13 -0
  42. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/escape_any.rb +21 -0
  43. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/base.rb +12 -0
  44. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/cdata.rb +20 -0
  45. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/coffee.rb +17 -0
  46. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/css.rb +33 -0
  47. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/erb.rb +10 -0
  48. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/escaped.rb +22 -0
  49. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/javascript.rb +33 -0
  50. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/less.rb +20 -0
  51. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/markdown.rb +11 -0
  52. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/plain.rb +29 -0
  53. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/preserve.rb +22 -0
  54. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/ruby.rb +10 -0
  55. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/sass.rb +15 -0
  56. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/scss.rb +15 -0
  57. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/text_base.rb +25 -0
  58. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters/tilt_base.rb +59 -0
  59. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/filters.rb +75 -0
  60. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/force_escape.rb +29 -0
  61. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/helpers.rb +15 -0
  62. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/html.rb +22 -0
  63. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/identity.rb +13 -0
  64. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/object_ref.rb +35 -0
  65. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/parser.rb +158 -23
  66. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/rails_helpers.rb +53 -0
  67. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/rails_template.rb +62 -0
  68. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/railtie.rb +10 -0
  69. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/ruby_expression.rb +32 -0
  70. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/string_splitter.rb +140 -0
  71. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/template.rb +20 -0
  72. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/temple_line_counter.rb +2 -1
  73. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/util.rb +19 -15
  74. data/bundle/ruby/{3.3.0/gems/haml-5.2.2 → 3.2.0/gems/haml-6.3.0}/lib/haml/version.rb +1 -2
  75. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml/whitespace.rb +8 -0
  76. data/bundle/ruby/3.2.0/gems/haml-6.3.0/lib/haml.rb +13 -0
  77. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/Changelog.md +14 -0
  78. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/Gemfile +2 -0
  79. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/README.md +3 -0
  80. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/highline.gemspec +4 -1
  81. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/list_renderer.rb +2 -2
  82. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/menu.rb +7 -5
  83. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal.rb +2 -2
  84. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/version.rb +1 -1
  85. data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline.rb +26 -13
  86. data/bundle/ruby/3.2.0/gems/parallel-1.27.0/lib/parallel/version.rb +4 -0
  87. data/bundle/ruby/{3.3.0/gems/parallel-1.24.0 → 3.2.0/gems/parallel-1.27.0}/lib/parallel.rb +52 -20
  88. data/bundle/ruby/3.2.0/gems/reline-0.6.1/COPYING +56 -0
  89. data/bundle/ruby/3.2.0/gems/reline-0.6.1/README.md +94 -0
  90. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/config.rb +373 -0
  91. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/face.rb +199 -0
  92. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/history.rb +76 -0
  93. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/ansi.rb +318 -0
  94. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/dumb.rb +120 -0
  95. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io/windows.rb +530 -0
  96. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/io.rb +55 -0
  97. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/base.rb +37 -0
  98. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/composite.rb +17 -0
  99. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/emacs.rb +517 -0
  100. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/vi_command.rb +518 -0
  101. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor/vi_insert.rb +517 -0
  102. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_actor.rb +8 -0
  103. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/key_stroke.rb +119 -0
  104. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/kill_ring.rb +125 -0
  105. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/line_editor.rb +2354 -0
  106. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/unicode/east_asian_width.rb +1293 -0
  107. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/unicode.rb +415 -0
  108. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline/version.rb +3 -0
  109. data/bundle/ruby/3.2.0/gems/reline-0.6.1/lib/reline.rb +528 -0
  110. data/bundle/ruby/3.2.0/gems/reline-0.6.1/license_of_rb-readline +25 -0
  111. data/bundle/ruby/3.2.0/gems/rexml-3.4.1/LICENSE.txt +22 -0
  112. data/bundle/ruby/3.2.0/gems/rexml-3.4.1/NEWS.md +699 -0
  113. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/attribute.rb +3 -2
  114. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/document.rb +5 -1
  115. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/element.rb +16 -31
  116. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/entity.rb +9 -48
  117. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/pretty.rb +1 -1
  118. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/functions.rb +1 -2
  119. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/node.rb +8 -4
  120. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parseexception.rb +1 -0
  121. data/bundle/ruby/3.2.0/gems/rexml-3.4.1/lib/rexml/parsers/baseparser.rb +887 -0
  122. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/pullparser.rb +16 -0
  123. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/sax2parser.rb +16 -19
  124. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/streamparser.rb +16 -10
  125. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/treeparser.rb +9 -21
  126. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/rexml.rb +1 -1
  127. data/bundle/ruby/3.2.0/gems/rexml-3.4.1/lib/rexml/source.rb +383 -0
  128. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/text.rb +54 -57
  129. data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xpath_parser.rb +7 -3
  130. data/bundle/ruby/{3.3.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/History.rdoc +28 -0
  131. data/bundle/ruby/{3.3.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/lib/ruby2ruby.rb +166 -27
  132. data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/History.rdoc +12 -0
  133. data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp.rb +1 -1
  134. data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp_matcher.rb +1 -1
  135. data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/sexp_processor.rb +1 -1
  136. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/CHANGES +44 -8
  137. data/bundle/ruby/3.2.0/gems/slim-5.2.1/Gemfile +43 -0
  138. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/LICENSE +1 -1
  139. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/README.jp.md +28 -41
  140. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/README.md +66 -43
  141. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/code_attributes.rb +2 -1
  142. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/command.rb +2 -8
  143. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/controls.rb +1 -0
  144. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/do_inserter.rb +4 -3
  145. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/embedded.rb +17 -17
  146. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/end_inserter.rb +3 -2
  147. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/engine.rb +3 -0
  148. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/erb_converter.rb +1 -0
  149. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/filter.rb +1 -0
  150. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/grammar.rb +1 -0
  151. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/include.rb +1 -0
  152. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/interpolation.rb +1 -0
  153. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less/context.rb +6 -7
  154. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less/filter.rb +1 -0
  155. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/logic_less.rb +1 -0
  156. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/parser.rb +26 -39
  157. data/bundle/ruby/3.2.0/gems/slim-5.2.1/lib/slim/railtie.rb +19 -0
  158. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/escaper.rb +1 -1
  159. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/filter.rb +3 -2
  160. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart/parser.rb +4 -3
  161. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/smart.rb +1 -0
  162. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/splat/builder.rb +16 -8
  163. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/splat/filter.rb +6 -4
  164. data/bundle/ruby/3.2.0/gems/slim-5.2.1/lib/slim/template.rb +6 -0
  165. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/translator.rb +4 -3
  166. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim/version.rb +2 -1
  167. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/lib/slim.rb +2 -0
  168. data/bundle/ruby/{3.3.0/gems/slim-4.1.0 → 3.2.0/gems/slim-5.2.1}/slim.gemspec +14 -5
  169. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/CHANGES +39 -1
  170. data/bundle/ruby/3.2.0/gems/temple-0.10.3/Gemfile +2 -0
  171. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/README.md +1 -1
  172. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/engine.rb +1 -0
  173. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/engine.rb +3 -0
  174. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/parser.rb +2 -1
  175. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/template.rb +1 -0
  176. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/erb/trimming.rb +1 -0
  177. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/exceptions.rb +1 -0
  178. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filter.rb +1 -0
  179. data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/filters/ambles.rb +22 -0
  180. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/code_merger.rb +1 -0
  181. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/control_flow.rb +1 -0
  182. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/dynamic_inliner.rb +2 -1
  183. data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/filters/dynamic_merger.rb +69 -0
  184. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/encoding.rb +1 -0
  185. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/eraser.rb +1 -0
  186. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/escapable.rb +1 -0
  187. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/multi_flattener.rb +1 -0
  188. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/remove_bom.rb +1 -0
  189. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/static_analyzer.rb +1 -0
  190. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/static_merger.rb +1 -0
  191. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/string_splitter.rb +13 -1
  192. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/filters/validator.rb +1 -0
  193. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generator.rb +5 -2
  194. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/array.rb +1 -0
  195. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/array_buffer.rb +1 -0
  196. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/erb.rb +1 -0
  197. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/rails_output_buffer.rb +4 -4
  198. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/generators/string_buffer.rb +2 -1
  199. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/grammar.rb +1 -0
  200. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_merger.rb +1 -0
  201. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_remover.rb +1 -0
  202. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/attribute_sorter.rb +1 -0
  203. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/dispatcher.rb +1 -0
  204. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/fast.rb +1 -0
  205. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/filter.rb +1 -0
  206. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/pretty.rb +1 -0
  207. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/html/safe.rb +1 -0
  208. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/map.rb +1 -0
  209. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/dispatcher.rb +1 -0
  210. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/engine_dsl.rb +1 -0
  211. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/grammar_dsl.rb +4 -2
  212. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/options.rb +1 -0
  213. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/mixins/template.rb +1 -0
  214. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/parser.rb +1 -0
  215. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/static_analyzer.rb +1 -0
  216. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates/rails.rb +7 -2
  217. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates/tilt.rb +2 -9
  218. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/templates.rb +1 -0
  219. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple/utils.rb +5 -15
  220. data/bundle/ruby/3.2.0/gems/temple-0.10.3/lib/temple/version.rb +4 -0
  221. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/lib/temple.rb +3 -0
  222. data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/temple.gemspec +4 -6
  223. data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/History.rdoc +149 -0
  224. data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/README.md +417 -0
  225. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/cell.rb +9 -9
  226. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/row.rb +18 -4
  227. data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/separator.rb +66 -0
  228. data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/style.rb +284 -0
  229. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/table.rb +49 -18
  230. data/bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/util.rb +13 -0
  231. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/version.rb +1 -1
  232. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table.rb +2 -2
  233. data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/terminal-table.gemspec +3 -4
  234. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/COPYING +1 -0
  235. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_emacs_org.rb +2 -0
  236. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_handlebars.rb +2 -0
  237. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_jbuilder.rb +2 -0
  238. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_org.rb +2 -0
  239. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/asciidoc.rb +15 -0
  240. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/babel.rb +8 -0
  241. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/builder.rb +42 -0
  242. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/cli.rb +134 -0
  243. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/coffee.rb +39 -0
  244. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/commonmarker.rb +95 -0
  245. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb +16 -0
  246. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/csv.rb +6 -18
  247. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/erb.rb +23 -21
  248. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erubi.rb +55 -0
  249. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/etanni.rb +5 -4
  250. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/haml.rb +94 -0
  251. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb +13 -0
  252. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/liquid.rb +10 -17
  253. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/livescript.rb +11 -0
  254. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/mapping.rb +228 -109
  255. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/markaby.rb +5 -7
  256. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/nokogiri.rb +11 -10
  257. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb +39 -0
  258. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pipeline.rb +19 -0
  259. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/plain.rb +5 -0
  260. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/prawn.rb +28 -0
  261. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb +41 -0
  262. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb +23 -0
  263. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb +11 -0
  264. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb +31 -0
  265. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb +13 -0
  266. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb +10 -0
  267. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/sass.rb +78 -0
  268. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb +5 -0
  269. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/string.rb +9 -3
  270. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/template.rb +611 -0
  271. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/typescript.rb +19 -0
  272. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt/yajl.rb +5 -11
  273. data/bundle/ruby/{3.3.0/gems/tilt-2.0.11 → 3.2.0/gems/tilt-2.6.1}/lib/tilt.rb +68 -43
  274. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/CHANGELOG.md +291 -0
  275. data/bundle/ruby/{3.3.0/gems/unicode-display_width-1.8.0 → 3.2.0/gems/unicode-display_width-3.1.4}/MIT-LICENSE.txt +1 -1
  276. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/README.md +194 -0
  277. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/data/display_width.marshal.gz +0 -0
  278. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/constants.rb +10 -0
  279. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/emoji_support.rb +52 -0
  280. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/index.rb +34 -0
  281. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/no_string_ext.rb +8 -0
  282. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/reline_ext.rb +14 -0
  283. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/string_ext.rb +9 -0
  284. data/bundle/ruby/3.2.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width.rb +247 -0
  285. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/CHANGELOG.md +191 -0
  286. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/CODE_OF_CONDUCT.md +74 -0
  287. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/Gemfile +7 -0
  288. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/Gemfile.lock +33 -0
  289. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/MIT-LICENSE.txt +20 -0
  290. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/README.md +205 -0
  291. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/data/emoji.marshal.gz +0 -0
  292. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/data/generate_constants.rb +344 -0
  293. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/constants.rb +49 -0
  294. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex.rb +8 -0
  295. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_basic.rb +8 -0
  296. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_emoji_keycap.rb +8 -0
  297. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe.rb +8 -0
  298. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe_uqe.rb +8 -0
  299. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_text.rb +8 -0
  300. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto.rb +8 -0
  301. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto_no_emoji.rb +8 -0
  302. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_possible.rb +8 -0
  303. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_component.rb +8 -0
  304. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_emoji.rb +8 -0
  305. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier.rb +8 -0
  306. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier_base.rb +8 -0
  307. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_presentation.rb +8 -0
  308. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text.rb +8 -0
  309. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text_presentation.rb +8 -0
  310. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid.rb +8 -0
  311. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid_include_text.rb +8 -0
  312. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed.rb +8 -0
  313. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed_include_text.rb +8 -0
  314. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex.rb +8 -0
  315. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_basic.rb +8 -0
  316. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_emoji_keycap.rb +8 -0
  317. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe.rb +8 -0
  318. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe_uqe.rb +8 -0
  319. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_text.rb +8 -0
  320. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto.rb +8 -0
  321. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto_no_emoji.rb +8 -0
  322. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_possible.rb +8 -0
  323. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_component.rb +8 -0
  324. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_emoji.rb +8 -0
  325. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier.rb +8 -0
  326. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier_base.rb +8 -0
  327. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_presentation.rb +8 -0
  328. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text.rb +8 -0
  329. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text_presentation.rb +8 -0
  330. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid.rb +8 -0
  331. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid_include_text.rb +8 -0
  332. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed.rb +8 -0
  333. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed_include_text.rb +8 -0
  334. data/bundle/ruby/{3.3.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width → 3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji}/index.rb +5 -3
  335. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/lazy_constants.rb +56 -0
  336. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/list.rb +13 -0
  337. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji.rb +111 -0
  338. data/bundle/ruby/3.2.0/gems/unicode-emoji-4.0.4/unicode-emoji.gemspec +22 -0
  339. data/lib/brakeman/app_tree.rb +50 -13
  340. data/lib/brakeman/checks/check_deserialize.rb +4 -1
  341. data/lib/brakeman/checks/check_eol_rails.rb +7 -0
  342. data/lib/brakeman/checks/check_eol_ruby.rb +1 -0
  343. data/lib/brakeman/checks/check_evaluation.rb +45 -8
  344. data/lib/brakeman/checks/check_execute.rb +28 -0
  345. data/lib/brakeman/checks/check_model_attr_accessible.rb +1 -0
  346. data/lib/brakeman/checks/check_session_settings.rb +1 -1
  347. data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
  348. data/lib/brakeman/checks/check_weak_rsa_key.rb +1 -1
  349. data/lib/brakeman/commandline.rb +5 -0
  350. data/lib/brakeman/file_parser.rb +35 -2
  351. data/lib/brakeman/messages.rb +1 -1
  352. data/lib/brakeman/options.rb +45 -4
  353. data/lib/brakeman/parsers/erubis_patch.rb +11 -0
  354. data/lib/brakeman/parsers/haml6_embedded.rb +23 -0
  355. data/lib/brakeman/parsers/rails2_erubis.rb +3 -0
  356. data/lib/brakeman/parsers/rails2_xss_plugin_erubis.rb +4 -0
  357. data/lib/brakeman/parsers/rails3_erubis.rb +5 -1
  358. data/lib/brakeman/parsers/slim_embedded.rb +2 -0
  359. data/lib/brakeman/parsers/template_parser.rb +32 -7
  360. data/lib/brakeman/processor.rb +2 -0
  361. data/lib/brakeman/processors/alias_processor.rb +43 -17
  362. data/lib/brakeman/processors/base_processor.rb +2 -0
  363. data/lib/brakeman/processors/haml6_template_processor.rb +92 -0
  364. data/lib/brakeman/processors/haml_template_processor.rb +7 -1
  365. data/lib/brakeman/processors/lib/file_type_detector.rb +9 -7
  366. data/lib/brakeman/processors/lib/render_helper.rb +38 -1
  367. data/lib/brakeman/processors/template_processor.rb +1 -1
  368. data/lib/brakeman/report/ignore/config.rb +0 -1
  369. data/lib/brakeman/report/report_html.rb +1 -1
  370. data/lib/brakeman/report/report_junit.rb +4 -57
  371. data/lib/brakeman/report/report_markdown.rb +1 -1
  372. data/lib/brakeman/report/report_sarif.rb +122 -2
  373. data/lib/brakeman/report/report_table.rb +2 -2
  374. data/lib/brakeman/report/report_tabs.rb +0 -1
  375. data/lib/brakeman/report/report_text.rb +8 -1
  376. data/lib/brakeman/report/templates/header.html.erb +7 -2
  377. data/lib/brakeman/report/templates/ignored_warnings.html.erb +3 -3
  378. data/lib/brakeman/rescanner.rb +40 -390
  379. data/lib/brakeman/scanner.rb +86 -53
  380. data/lib/brakeman/tracker/config.rb +9 -1
  381. data/lib/brakeman/tracker/file_cache.rb +83 -0
  382. data/lib/brakeman/tracker.rb +25 -2
  383. data/lib/brakeman/util.rb +1 -3
  384. data/lib/brakeman/version.rb +1 -1
  385. data/lib/brakeman/warning.rb +1 -1
  386. data/lib/brakeman.rb +25 -2
  387. data/lib/ruby_parser/bm_sexp.rb +5 -1
  388. metadata +493 -374
  389. data/bundle/ruby/3.3.0/gems/haml-5.2.2/Gemfile +0 -16
  390. data/bundle/ruby/3.3.0/gems/haml-5.2.2/TODO +0 -24
  391. data/bundle/ruby/3.3.0/gems/haml-5.2.2/haml.gemspec +0 -45
  392. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/attribute_builder.rb +0 -219
  393. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/attribute_compiler.rb +0 -237
  394. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/attribute_parser.rb +0 -150
  395. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/buffer.rb +0 -182
  396. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/compiler.rb +0 -330
  397. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/engine.rb +0 -238
  398. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/escapable.rb +0 -77
  399. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/exec.rb +0 -347
  400. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/filters.rb +0 -399
  401. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/generator.rb +0 -42
  402. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/action_view_extensions.rb +0 -60
  403. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/action_view_mods.rb +0 -132
  404. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/action_view_xss_mods.rb +0 -60
  405. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/safe_erubi_template.rb +0 -20
  406. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/safe_erubis_template.rb +0 -33
  407. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers/xss_mods.rb +0 -114
  408. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/helpers.rb +0 -709
  409. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/options.rb +0 -273
  410. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/plugin.rb +0 -54
  411. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/railtie.rb +0 -53
  412. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/sass_rails_filter.rb +0 -47
  413. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/template/options.rb +0 -27
  414. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/template.rb +0 -39
  415. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml/temple_engine.rb +0 -124
  416. data/bundle/ruby/3.3.0/gems/haml-5.2.2/lib/haml.rb +0 -25
  417. data/bundle/ruby/3.3.0/gems/haml-5.2.2/yard/default/fulldoc/html/css/common.sass +0 -15
  418. data/bundle/ruby/3.3.0/gems/haml-5.2.2/yard/default/layout/html/footer.erb +0 -12
  419. data/bundle/ruby/3.3.0/gems/parallel-1.24.0/lib/parallel/version.rb +0 -4
  420. data/bundle/ruby/3.3.0/gems/rexml-3.2.6/NEWS.md +0 -276
  421. data/bundle/ruby/3.3.0/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb +0 -694
  422. data/bundle/ruby/3.3.0/gems/rexml-3.2.6/lib/rexml/source.rb +0 -298
  423. data/bundle/ruby/3.3.0/gems/slim-4.1.0/Gemfile +0 -70
  424. data/bundle/ruby/3.3.0/gems/slim-4.1.0/lib/slim/template.rb +0 -19
  425. data/bundle/ruby/3.3.0/gems/temple-0.8.2/Gemfile +0 -3
  426. data/bundle/ruby/3.3.0/gems/temple-0.8.2/lib/temple/version.rb +0 -3
  427. data/bundle/ruby/3.3.0/gems/terminal-table-1.8.0/History.rdoc +0 -85
  428. data/bundle/ruby/3.3.0/gems/terminal-table-1.8.0/README.rdoc +0 -247
  429. data/bundle/ruby/3.3.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb +0 -14
  430. data/bundle/ruby/3.3.0/gems/terminal-table-1.8.0/lib/terminal-table/style.rb +0 -79
  431. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/asciidoc.rb +0 -27
  432. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/babel.rb +0 -16
  433. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/bluecloth.rb +0 -24
  434. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/builder.rb +0 -37
  435. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/coffee.rb +0 -58
  436. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/commonmarker.rb +0 -88
  437. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/creole.rb +0 -25
  438. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/dummy.rb +0 -3
  439. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/erubi.rb +0 -32
  440. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/erubis.rb +0 -43
  441. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/haml.rb +0 -86
  442. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/kramdown.rb +0 -25
  443. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/less.rb +0 -30
  444. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/livescript.rb +0 -23
  445. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/maruku.rb +0 -22
  446. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/pandoc.rb +0 -57
  447. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/plain.rb +0 -16
  448. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/prawn.rb +0 -43
  449. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/radius.rb +0 -48
  450. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/rdiscount.rb +0 -39
  451. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/rdoc.rb +0 -40
  452. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/redcarpet.rb +0 -86
  453. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/redcloth.rb +0 -23
  454. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/rst-pandoc.rb +0 -23
  455. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/sass.rb +0 -78
  456. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/sigil.rb +0 -34
  457. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/template.rb +0 -308
  458. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/typescript.rb +0 -26
  459. data/bundle/ruby/3.3.0/gems/tilt-2.0.11/lib/tilt/wikicloth.rb +0 -22
  460. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/CHANGELOG.md +0 -137
  461. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/README.md +0 -124
  462. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/data/display_width.marshal.gz +0 -0
  463. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/constants.rb +0 -8
  464. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/no_string_ext.rb +0 -7
  465. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/string_ext.rb +0 -17
  466. data/bundle/ruby/3.3.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width.rb +0 -51
  467. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/CHANGES.txt +0 -0
  468. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/MIT-LICENSE +0 -0
  469. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/README.txt +0 -0
  470. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/contrib/erubis +0 -0
  471. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -0
  472. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/contrib/inline-require +0 -0
  473. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/context.rb +0 -0
  474. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -0
  475. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -0
  476. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -0
  477. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -0
  478. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -0
  479. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -0
  480. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -0
  481. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -0
  482. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -0
  483. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -0
  484. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -0
  485. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -0
  486. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -0
  487. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/error.rb +0 -0
  488. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -0
  489. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -0
  490. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -0
  491. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -0
  492. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -0
  493. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -0
  494. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/main.rb +0 -0
  495. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -0
  496. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -0
  497. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis/util.rb +0 -0
  498. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/lib/erubis.rb +0 -0
  499. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/erubis-2.7.0/setup.rb +0 -0
  500. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/AUTHORS +0 -0
  501. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/COPYING +0 -0
  502. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/LICENSE +0 -0
  503. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/TODO +0 -0
  504. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/builtin_styles.rb +0 -0
  505. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/color_scheme.rb +0 -0
  506. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/compatibility.rb +0 -0
  507. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/custom_errors.rb +0 -0
  508. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/import.rb +0 -0
  509. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/io_console_compatible.rb +0 -0
  510. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/list.rb +0 -0
  511. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/menu/item.rb +0 -0
  512. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/paginator.rb +0 -0
  513. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/question/answer_converter.rb +0 -0
  514. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/question.rb +0 -0
  515. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/question_asker.rb +0 -0
  516. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/simulate.rb +0 -0
  517. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/statement.rb +0 -0
  518. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/string.rb +0 -0
  519. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/string_extensions.rb +0 -0
  520. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/style.rb +0 -0
  521. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/template_renderer.rb +0 -0
  522. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/io_console.rb +0 -0
  523. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/ncurses.rb +0 -0
  524. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/terminal/unix_stty.rb +0 -0
  525. /data/bundle/ruby/{3.3.0/gems/highline-3.0.1 → 3.2.0/gems/highline-3.1.2}/lib/highline/wrapper.rb +0 -0
  526. /data/bundle/ruby/{3.3.0/gems/parallel-1.24.0 → 3.2.0/gems/parallel-1.27.0}/MIT-LICENSE.txt +0 -0
  527. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6/LICENSE.txt → 3.2.0/gems/reline-0.6.1/BSDL} +0 -0
  528. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/README.md +0 -0
  529. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/attlistdecl.rb +0 -0
  530. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/cdata.rb +0 -0
  531. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/child.rb +0 -0
  532. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/comment.rb +0 -0
  533. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/doctype.rb +0 -0
  534. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/attlistdecl.rb +0 -0
  535. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/dtd.rb +0 -0
  536. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/elementdecl.rb +0 -0
  537. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/entitydecl.rb +0 -0
  538. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/dtd/notationdecl.rb +0 -0
  539. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/encoding.rb +0 -0
  540. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/default.rb +0 -0
  541. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/formatters/transitive.rb +0 -0
  542. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/instruction.rb +0 -0
  543. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/light/node.rb +0 -0
  544. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/namespace.rb +0 -0
  545. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/output.rb +0 -0
  546. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parent.rb +0 -0
  547. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/lightparser.rb +0 -0
  548. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/ultralightparser.rb +0 -0
  549. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/parsers/xpathparser.rb +0 -0
  550. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/quickpath.rb +0 -0
  551. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/sax2listener.rb +0 -0
  552. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/security.rb +0 -0
  553. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/streamlistener.rb +0 -0
  554. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/undefinednamespaceexception.rb +0 -0
  555. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/relaxng.rb +0 -0
  556. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/validation.rb +0 -0
  557. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/validation/validationexception.rb +0 -0
  558. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xmldecl.rb +0 -0
  559. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xmltokens.rb +0 -0
  560. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml/xpath.rb +0 -0
  561. /data/bundle/ruby/{3.3.0/gems/rexml-3.2.6 → 3.2.0/gems/rexml-3.4.1}/lib/rexml.rb +0 -0
  562. /data/bundle/ruby/{3.3.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/Manifest.txt +0 -0
  563. /data/bundle/ruby/{3.3.0/gems/ruby2ruby-2.4.4 → 3.2.0/gems/ruby2ruby-2.5.2}/README.rdoc +0 -0
  564. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/History.rdoc +0 -0
  565. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/Manifest.txt +0 -0
  566. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/README.rdoc +0 -0
  567. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/compare/normalize.rb +0 -0
  568. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/debugging.md +0 -0
  569. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/gauntlet.md +0 -0
  570. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/rp_extensions.rb +0 -0
  571. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/rp_stringscanner.rb +0 -0
  572. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby20_parser.rb +0 -0
  573. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby20_parser.y +0 -0
  574. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby21_parser.rb +0 -0
  575. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby21_parser.y +0 -0
  576. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby22_parser.rb +0 -0
  577. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby22_parser.y +0 -0
  578. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby23_parser.rb +0 -0
  579. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby23_parser.y +0 -0
  580. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby24_parser.rb +0 -0
  581. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby24_parser.y +0 -0
  582. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby25_parser.rb +0 -0
  583. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby25_parser.y +0 -0
  584. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby26_parser.rb +0 -0
  585. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby26_parser.y +0 -0
  586. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby27_parser.rb +0 -0
  587. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby27_parser.y +0 -0
  588. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby30_parser.rb +0 -0
  589. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby30_parser.y +0 -0
  590. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby31_parser.rb +0 -0
  591. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby31_parser.y +0 -0
  592. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby32_parser.rb +0 -0
  593. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby32_parser.y +0 -0
  594. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby3_parser.yy +0 -0
  595. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_lexer.rb +0 -0
  596. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_lexer.rex +0 -0
  597. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_lexer.rex.rb +0 -0
  598. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_lexer_strings.rb +0 -0
  599. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_parser.rb +0 -0
  600. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_parser.yy +0 -0
  601. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/lib/ruby_parser_extras.rb +0 -0
  602. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/tools/munge.rb +0 -0
  603. /data/bundle/ruby/{3.3.0 → 3.2.0}/gems/ruby_parser-3.20.3/tools/ripper.rb +0 -0
  604. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/Manifest.txt +0 -0
  605. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/README.rdoc +0 -0
  606. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/composite_sexp_processor.rb +0 -0
  607. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/pt_testcase.rb +0 -0
  608. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/strict_sexp.rb +0 -0
  609. /data/bundle/ruby/{3.3.0/gems/sexp_processor-4.17.1 → 3.2.0/gems/sexp_processor-4.17.3}/lib/unique.rb +0 -0
  610. /data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/EXPRESSIONS.md +0 -0
  611. /data/bundle/ruby/{3.3.0/gems/temple-0.8.2 → 3.2.0/gems/temple-0.10.3}/LICENSE +0 -0
  612. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Gemfile +0 -0
  613. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/LICENSE.txt +0 -0
  614. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Manifest +0 -0
  615. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/Todo.rdoc +0 -0
  616. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/import.rb +0 -0
  617. /data/bundle/ruby/{3.3.0/gems/terminal-table-1.8.0 → 3.2.0/gems/terminal-table-4.0.0}/lib/terminal-table/table_helper.rb +0 -0
@@ -0,0 +1,887 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../parseexception'
3
+ require_relative '../undefinednamespaceexception'
4
+ require_relative '../security'
5
+ require_relative '../source'
6
+ require 'set'
7
+ require "strscan"
8
+
9
+ module REXML
10
+ module Parsers
11
+ unless [].respond_to?(:tally)
12
+ module EnumerableTally
13
+ refine Enumerable do
14
+ def tally
15
+ counts = {}
16
+ each do |item|
17
+ counts[item] ||= 0
18
+ counts[item] += 1
19
+ end
20
+ counts
21
+ end
22
+ end
23
+ end
24
+ using EnumerableTally
25
+ end
26
+
27
+ if StringScanner::Version < "3.0.8"
28
+ module StringScannerCaptures
29
+ refine StringScanner do
30
+ def captures
31
+ values_at(*(1...size))
32
+ end
33
+ end
34
+ end
35
+ using StringScannerCaptures
36
+ end
37
+
38
+ # = Using the Pull Parser
39
+ # <em>This API is experimental, and subject to change.</em>
40
+ # parser = PullParser.new( "<a>text<b att='val'/>txet</a>" )
41
+ # while parser.has_next?
42
+ # res = parser.next
43
+ # puts res[1]['att'] if res.start_tag? and res[0] == 'b'
44
+ # end
45
+ # See the PullEvent class for information on the content of the results.
46
+ # The data is identical to the arguments passed for the various events to
47
+ # the StreamListener API.
48
+ #
49
+ # Notice that:
50
+ # parser = PullParser.new( "<a>BAD DOCUMENT" )
51
+ # while parser.has_next?
52
+ # res = parser.next
53
+ # raise res[1] if res.error?
54
+ # end
55
+ #
56
+ # Nat Price gave me some good ideas for the API.
57
+ class BaseParser
58
+ LETTER = '[:alpha:]'
59
+ DIGIT = '[:digit:]'
60
+
61
+ COMBININGCHAR = '' # TODO
62
+ EXTENDER = '' # TODO
63
+
64
+ NCNAME_STR= "[#{LETTER}_][-[:alnum:]._#{COMBININGCHAR}#{EXTENDER}]*"
65
+ QNAME_STR= "(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})"
66
+ QNAME = /(#{QNAME_STR})/
67
+
68
+ # Just for backward compatibility. For example, kramdown uses this.
69
+ # It's not used in REXML.
70
+ UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}"
71
+
72
+ NAMECHAR = '[\-\w\.:]'
73
+ NAME = "([\\w:]#{NAMECHAR}*)"
74
+ NMTOKEN = "(?:#{NAMECHAR})+"
75
+ NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*"
76
+ REFERENCE = "&(?:#{NAME};|#\\d+;|#x[0-9a-fA-F]+;)"
77
+ REFERENCE_RE = /#{REFERENCE}/
78
+
79
+ DOCTYPE_START = /\A\s*<!DOCTYPE\s/um
80
+ DOCTYPE_END = /\A\s*\]\s*>/um
81
+ ATTRIBUTE_PATTERN = /\s*(#{QNAME_STR})\s*=\s*(["'])(.*?)\4/um
82
+ COMMENT_START = /\A<!--/u
83
+ COMMENT_PATTERN = /<!--(.*?)-->/um
84
+ CDATA_START = /\A<!\[CDATA\[/u
85
+ CDATA_END = /\A\s*\]\s*>/um
86
+ CDATA_PATTERN = /<!\[CDATA\[(.*?)\]\]>/um
87
+ XMLDECL_START = /\A<\?xml\s/u;
88
+ XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>/um
89
+ INSTRUCTION_START = /\A<\?/u
90
+ INSTRUCTION_PATTERN = /<\?#{NAME}(\s+.*?)?\?>/um
91
+ TAG_MATCH = /\A<((?>#{QNAME_STR}))/um
92
+ CLOSE_MATCH = /\A\s*<\/(#{QNAME_STR})\s*>/um
93
+
94
+ VERSION = /\bversion\s*=\s*["'](.*?)['"]/um
95
+ ENCODING = /\bencoding\s*=\s*["'](.*?)['"]/um
96
+ STANDALONE = /\bstandalone\s*=\s*["'](.*?)['"]/um
97
+
98
+ ENTITY_START = /\A\s*<!ENTITY/
99
+ ELEMENTDECL_START = /\A\s*<!ELEMENT/um
100
+ ELEMENTDECL_PATTERN = /\A\s*(<!ELEMENT.*?)>/um
101
+ SYSTEMENTITY = /\A\s*(%.*?;)\s*$/um
102
+ ENUMERATION = "\\(\\s*#{NMTOKEN}(?:\\s*\\|\\s*#{NMTOKEN})*\\s*\\)"
103
+ NOTATIONTYPE = "NOTATION\\s+\\(\\s*#{NAME}(?:\\s*\\|\\s*#{NAME})*\\s*\\)"
104
+ ENUMERATEDTYPE = "(?:(?:#{NOTATIONTYPE})|(?:#{ENUMERATION}))"
105
+ ATTTYPE = "(CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS|#{ENUMERATEDTYPE})"
106
+ ATTVALUE = "(?:\"((?:[^<&\"]|#{REFERENCE})*)\")|(?:'((?:[^<&']|#{REFERENCE})*)')"
107
+ DEFAULTDECL = "(#REQUIRED|#IMPLIED|(?:(#FIXED\\s+)?#{ATTVALUE}))"
108
+ ATTDEF = "\\s+#{NAME}\\s+#{ATTTYPE}\\s+#{DEFAULTDECL}"
109
+ ATTDEF_RE = /#{ATTDEF}/
110
+ ATTLISTDECL_START = /\A\s*<!ATTLIST/um
111
+ ATTLISTDECL_PATTERN = /\A\s*<!ATTLIST\s+#{NAME}(?:#{ATTDEF})*\s*>/um
112
+
113
+ TEXT_PATTERN = /\A([^<]*)/um
114
+
115
+ # Entity constants
116
+ PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#"
117
+ SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))}
118
+ PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')}
119
+ EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))"
120
+ NDATADECL = "\\s+NDATA\\s+#{NAME}"
121
+ PEREFERENCE = "%#{NAME};"
122
+ ENTITYVALUE = %Q{((?:"(?:[^%&"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&']|#{PEREFERENCE}|#{REFERENCE})*'))}
123
+ PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})"
124
+ ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))"
125
+ PEDECL = "<!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>"
126
+ GEDECL = "<!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>"
127
+ ENTITYDECL = /\s*(?:#{GEDECL})|\s*(?:#{PEDECL})/um
128
+
129
+ NOTATIONDECL_START = /\A\s*<!NOTATION/um
130
+ EXTERNAL_ID_PUBLIC = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}\s*/um
131
+ EXTERNAL_ID_SYSTEM = /\A\s*SYSTEM\s+#{SYSTEMLITERAL}\s*/um
132
+ PUBLIC_ID = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s*/um
133
+
134
+ EREFERENCE = /&(?!#{NAME};)/
135
+
136
+ DEFAULT_ENTITIES = {
137
+ 'gt' => [/&gt;/, '&gt;', '>', />/],
138
+ 'lt' => [/&lt;/, '&lt;', '<', /</],
139
+ 'quot' => [/&quot;/, '&quot;', '"', /"/],
140
+ "apos" => [/&apos;/, "&apos;", "'", /'/]
141
+ }
142
+
143
+ module Private
144
+ PEREFERENCE_PATTERN = /#{PEREFERENCE}/um
145
+ TAG_PATTERN = /((?>#{QNAME_STR}))\s*/um
146
+ CLOSE_PATTERN = /(#{QNAME_STR})\s*>/um
147
+ ATTLISTDECL_END = /\s+#{NAME}(?:#{ATTDEF})*\s*>/um
148
+ NAME_PATTERN = /#{NAME}/um
149
+ GEDECL_PATTERN = "\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>"
150
+ PEDECL_PATTERN = "\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>"
151
+ ENTITYDECL_PATTERN = /(?:#{GEDECL_PATTERN})|(?:#{PEDECL_PATTERN})/um
152
+ CARRIAGE_RETURN_NEWLINE_PATTERN = /\r\n?/
153
+ CHARACTER_REFERENCES = /&#((?:\d+)|(?:x[a-fA-F0-9]+));/
154
+ DEFAULT_ENTITIES_PATTERNS = {}
155
+ default_entities = ['gt', 'lt', 'quot', 'apos', 'amp']
156
+ default_entities.each do |term|
157
+ DEFAULT_ENTITIES_PATTERNS[term] = /&#{term};/
158
+ end
159
+ XML_PREFIXED_NAMESPACE = "http://www.w3.org/XML/1998/namespace"
160
+ end
161
+ private_constant :Private
162
+
163
+ def initialize( source )
164
+ self.stream = source
165
+ @listeners = []
166
+ @prefixes = Set.new
167
+ @entity_expansion_count = 0
168
+ @entity_expansion_limit = Security.entity_expansion_limit
169
+ @entity_expansion_text_limit = Security.entity_expansion_text_limit
170
+ @source.ensure_buffer
171
+ end
172
+
173
+ def add_listener( listener )
174
+ @listeners << listener
175
+ end
176
+
177
+ attr_reader :source
178
+ attr_reader :entity_expansion_count
179
+ attr_writer :entity_expansion_limit
180
+ attr_writer :entity_expansion_text_limit
181
+
182
+ def stream=( source )
183
+ @source = SourceFactory.create_from( source )
184
+ reset
185
+ end
186
+
187
+ def reset
188
+ @closed = nil
189
+ @have_root = false
190
+ @document_status = nil
191
+ @tags = []
192
+ @stack = []
193
+ @entities = []
194
+ @namespaces = {"xml" => Private::XML_PREFIXED_NAMESPACE}
195
+ @namespaces_restore_stack = []
196
+ end
197
+
198
+ def position
199
+ if @source.respond_to? :position
200
+ @source.position
201
+ else
202
+ # FIXME
203
+ 0
204
+ end
205
+ end
206
+
207
+ # Returns true if there are no more events
208
+ def empty?
209
+ return (@source.empty? and @stack.empty?)
210
+ end
211
+
212
+ # Returns true if there are more events. Synonymous with !empty?
213
+ def has_next?
214
+ return !(@source.empty? and @stack.empty?)
215
+ end
216
+
217
+ # Push an event back on the head of the stream. This method
218
+ # has (theoretically) infinite depth.
219
+ def unshift token
220
+ @stack.unshift(token)
221
+ end
222
+
223
+ # Peek at the +depth+ event in the stack. The first element on the stack
224
+ # is at depth 0. If +depth+ is -1, will parse to the end of the input
225
+ # stream and return the last event, which is always :end_document.
226
+ # Be aware that this causes the stream to be parsed up to the +depth+
227
+ # event, so you can effectively pre-parse the entire document (pull the
228
+ # entire thing into memory) using this method.
229
+ def peek depth=0
230
+ raise %Q[Illegal argument "#{depth}"] if depth < -1
231
+ temp = []
232
+ if depth == -1
233
+ temp.push(pull()) until empty?
234
+ else
235
+ while @stack.size+temp.size < depth+1
236
+ temp.push(pull())
237
+ end
238
+ end
239
+ @stack += temp if temp.size > 0
240
+ @stack[depth]
241
+ end
242
+
243
+ # Returns the next event. This is a +PullEvent+ object.
244
+ def pull
245
+ @source.drop_parsed_content
246
+
247
+ pull_event.tap do |event|
248
+ @listeners.each do |listener|
249
+ listener.receive event
250
+ end
251
+ end
252
+ end
253
+
254
+ def pull_event
255
+ if @closed
256
+ x, @closed = @closed, nil
257
+ return [ :end_element, x ]
258
+ end
259
+ if empty?
260
+ if @document_status == :in_doctype
261
+ raise ParseException.new("Malformed DOCTYPE: unclosed", @source)
262
+ end
263
+ unless @tags.empty?
264
+ path = "/" + @tags.join("/")
265
+ raise ParseException.new("Missing end tag for '#{path}'", @source)
266
+ end
267
+ return [ :end_document ]
268
+ end
269
+ return @stack.shift if @stack.size > 0
270
+ #STDERR.puts @source.encoding
271
+ #STDERR.puts "BUFFER = #{@source.buffer.inspect}"
272
+
273
+ @source.ensure_buffer
274
+ if @document_status == nil
275
+ start_position = @source.position
276
+ if @source.match?("<?", true)
277
+ return process_instruction
278
+ elsif @source.match?("<!", true)
279
+ if @source.match?("--", true)
280
+ md = @source.match(/(.*?)-->/um, true)
281
+ if md.nil?
282
+ raise REXML::ParseException.new("Unclosed comment", @source)
283
+ end
284
+ if /--|-\z/.match?(md[1])
285
+ raise REXML::ParseException.new("Malformed comment", @source)
286
+ end
287
+ return [ :comment, md[1] ]
288
+ elsif @source.match?("DOCTYPE", true)
289
+ base_error_message = "Malformed DOCTYPE"
290
+ unless @source.match?(/\s+/um, true)
291
+ if @source.match?(">")
292
+ message = "#{base_error_message}: name is missing"
293
+ else
294
+ message = "#{base_error_message}: invalid name"
295
+ end
296
+ @source.position = start_position
297
+ raise REXML::ParseException.new(message, @source)
298
+ end
299
+ name = parse_name(base_error_message)
300
+ @source.match?(/\s*/um, true) # skip spaces
301
+ if @source.match?("[", true)
302
+ id = [nil, nil, nil]
303
+ @document_status = :in_doctype
304
+ elsif @source.match?(">", true)
305
+ id = [nil, nil, nil]
306
+ @document_status = :after_doctype
307
+ @source.ensure_buffer
308
+ else
309
+ id = parse_id(base_error_message,
310
+ accept_external_id: true,
311
+ accept_public_id: false)
312
+ if id[0] == "SYSTEM"
313
+ # For backward compatibility
314
+ id[1], id[2] = id[2], nil
315
+ end
316
+ @source.match?(/\s*/um, true) # skip spaces
317
+ if @source.match?("[", true)
318
+ @document_status = :in_doctype
319
+ elsif @source.match?(">", true)
320
+ @document_status = :after_doctype
321
+ @source.ensure_buffer
322
+ else
323
+ message = "#{base_error_message}: garbage after external ID"
324
+ raise REXML::ParseException.new(message, @source)
325
+ end
326
+ end
327
+ args = [:start_doctype, name, *id]
328
+ if @document_status == :after_doctype
329
+ @source.match?(/\s*/um, true)
330
+ @stack << [ :end_doctype ]
331
+ end
332
+ return args
333
+ else
334
+ message = "Invalid XML"
335
+ raise REXML::ParseException.new(message, @source)
336
+ end
337
+ end
338
+ end
339
+ if @document_status == :in_doctype
340
+ @source.match?(/\s*/um, true) # skip spaces
341
+ start_position = @source.position
342
+ if @source.match?("<!", true)
343
+ if @source.match?("ELEMENT", true)
344
+ md = @source.match(/(.*?)>/um, true)
345
+ raise REXML::ParseException.new( "Bad ELEMENT declaration!", @source ) if md.nil?
346
+ return [ :elementdecl, "<!ELEMENT" + md[1] ]
347
+ elsif @source.match?("ENTITY", true)
348
+ match_data = @source.match(Private::ENTITYDECL_PATTERN, true)
349
+ unless match_data
350
+ raise REXML::ParseException.new("Malformed entity declaration", @source)
351
+ end
352
+ match = [:entitydecl, *match_data.captures.compact]
353
+ ref = false
354
+ if match[1] == '%'
355
+ ref = true
356
+ match.delete_at 1
357
+ end
358
+ # Now we have to sort out what kind of entity reference this is
359
+ if match[2] == 'SYSTEM'
360
+ # External reference
361
+ match[3] = match[3][1..-2] # PUBID
362
+ match.delete_at(4) if match.size > 4 # Chop out NDATA decl
363
+ # match is [ :entity, name, SYSTEM, pubid(, ndata)? ]
364
+ elsif match[2] == 'PUBLIC'
365
+ # External reference
366
+ match[3] = match[3][1..-2] # PUBID
367
+ match[4] = match[4][1..-2] # HREF
368
+ match.delete_at(5) if match.size > 5 # Chop out NDATA decl
369
+ # match is [ :entity, name, PUBLIC, pubid, href(, ndata)? ]
370
+ elsif Private::PEREFERENCE_PATTERN.match?(match[2])
371
+ raise REXML::ParseException.new("Parameter entity references forbidden in internal subset: #{match[2]}", @source)
372
+ else
373
+ match[2] = match[2][1..-2]
374
+ match.pop if match.size == 4
375
+ # match is [ :entity, name, value ]
376
+ end
377
+ match << '%' if ref
378
+ return match
379
+ elsif @source.match?("ATTLIST", true)
380
+ md = @source.match(Private::ATTLISTDECL_END, true)
381
+ raise REXML::ParseException.new( "Bad ATTLIST declaration!", @source ) if md.nil?
382
+ element = md[1]
383
+ contents = "<!ATTLIST" + md[0]
384
+
385
+ pairs = {}
386
+ values = md[0].strip.scan( ATTDEF_RE )
387
+ values.each do |attdef|
388
+ unless attdef[3] == "#IMPLIED"
389
+ attdef.compact!
390
+ val = attdef[3]
391
+ val = attdef[4] if val == "#FIXED "
392
+ pairs[attdef[0]] = val
393
+ if attdef[0] =~ /^xmlns:(.*)/
394
+ @namespaces[$1] = val
395
+ end
396
+ end
397
+ end
398
+ return [ :attlistdecl, element, pairs, contents ]
399
+ elsif @source.match?("NOTATION", true)
400
+ base_error_message = "Malformed notation declaration"
401
+ unless @source.match?(/\s+/um, true)
402
+ if @source.match?(">")
403
+ message = "#{base_error_message}: name is missing"
404
+ else
405
+ message = "#{base_error_message}: invalid name"
406
+ end
407
+ @source.position = start_position
408
+ raise REXML::ParseException.new(message, @source)
409
+ end
410
+ name = parse_name(base_error_message)
411
+ id = parse_id(base_error_message,
412
+ accept_external_id: true,
413
+ accept_public_id: true)
414
+ @source.match?(/\s*/um, true) # skip spaces
415
+ unless @source.match?(">", true)
416
+ message = "#{base_error_message}: garbage before end >"
417
+ raise REXML::ParseException.new(message, @source)
418
+ end
419
+ return [:notationdecl, name, *id]
420
+ elsif md = @source.match(/--(.*?)-->/um, true)
421
+ case md[1]
422
+ when /--/, /-\z/
423
+ raise REXML::ParseException.new("Malformed comment", @source)
424
+ end
425
+ return [ :comment, md[1] ] if md
426
+ end
427
+ elsif match = @source.match(/(%.*?;)\s*/um, true)
428
+ return [ :externalentity, match[1] ]
429
+ elsif @source.match?(/\]\s*>/um, true)
430
+ @document_status = :after_doctype
431
+ return [ :end_doctype ]
432
+ end
433
+ if @document_status == :in_doctype
434
+ raise ParseException.new("Malformed DOCTYPE: invalid declaration", @source)
435
+ end
436
+ end
437
+ if @document_status == :after_doctype
438
+ @source.match?(/\s*/um, true)
439
+ end
440
+ begin
441
+ start_position = @source.position
442
+ if @source.match?("<", true)
443
+ # :text's read_until may remain only "<" in buffer. In the
444
+ # case, buffer is empty here. So we need to fill buffer
445
+ # here explicitly.
446
+ @source.ensure_buffer
447
+ if @source.match?("/", true)
448
+ @namespaces_restore_stack.pop
449
+ last_tag = @tags.pop
450
+ md = @source.match(Private::CLOSE_PATTERN, true)
451
+ if md and !last_tag
452
+ message = "Unexpected top-level end tag (got '#{md[1]}')"
453
+ raise REXML::ParseException.new(message, @source)
454
+ end
455
+ if md.nil? or last_tag != md[1]
456
+ message = "Missing end tag for '#{last_tag}'"
457
+ message += " (got '#{md[1]}')" if md
458
+ @source.position = start_position if md.nil?
459
+ raise REXML::ParseException.new(message, @source)
460
+ end
461
+ return [ :end_element, last_tag ]
462
+ elsif @source.match?("!", true)
463
+ md = @source.match(/([^>]*>)/um)
464
+ #STDERR.puts "SOURCE BUFFER = #{source.buffer}, #{source.buffer.size}"
465
+ raise REXML::ParseException.new("Malformed node", @source) unless md
466
+ if md[0][0] == ?-
467
+ md = @source.match(/--(.*?)-->/um, true)
468
+
469
+ if md.nil? || /--|-\z/.match?(md[1])
470
+ raise REXML::ParseException.new("Malformed comment", @source)
471
+ end
472
+
473
+ return [ :comment, md[1] ]
474
+ else
475
+ md = @source.match(/\[CDATA\[(.*?)\]\]>/um, true)
476
+ return [ :cdata, md[1] ] if md
477
+ end
478
+ raise REXML::ParseException.new( "Declarations can only occur "+
479
+ "in the doctype declaration.", @source)
480
+ elsif @source.match?("?", true)
481
+ return process_instruction
482
+ else
483
+ # Get the next tag
484
+ md = @source.match(Private::TAG_PATTERN, true)
485
+ unless md
486
+ @source.position = start_position
487
+ raise REXML::ParseException.new("malformed XML: missing tag start", @source)
488
+ end
489
+ tag = md[1]
490
+ @document_status = :in_element
491
+ @prefixes.clear
492
+ @prefixes << md[2] if md[2]
493
+ push_namespaces_restore
494
+ attributes, closed = parse_attributes(@prefixes)
495
+ # Verify that all of the prefixes have been defined
496
+ for prefix in @prefixes
497
+ unless @namespaces.key?(prefix)
498
+ raise UndefinedNamespaceException.new(prefix,@source,self)
499
+ end
500
+ end
501
+
502
+ if closed
503
+ @closed = tag
504
+ pop_namespaces_restore
505
+ else
506
+ if @tags.empty? and @have_root
507
+ raise ParseException.new("Malformed XML: Extra tag at the end of the document (got '<#{tag}')", @source)
508
+ end
509
+ @tags.push( tag )
510
+ end
511
+ @have_root = true
512
+ return [ :start_element, tag, attributes ]
513
+ end
514
+ else
515
+ text = @source.read_until("<")
516
+ if text.chomp!("<")
517
+ @source.position -= "<".bytesize
518
+ end
519
+ if @tags.empty?
520
+ unless /\A\s*\z/.match?(text)
521
+ if @have_root
522
+ raise ParseException.new("Malformed XML: Extra content at the end of the document (got '#{text}')", @source)
523
+ else
524
+ raise ParseException.new("Malformed XML: Content at the start of the document (got '#{text}')", @source)
525
+ end
526
+ end
527
+ return pull_event if @have_root
528
+ end
529
+ return [ :text, text ]
530
+ end
531
+ rescue REXML::UndefinedNamespaceException
532
+ raise
533
+ rescue REXML::ParseException
534
+ raise
535
+ rescue => error
536
+ raise REXML::ParseException.new( "Exception parsing",
537
+ @source, self, (error ? error : $!) )
538
+ end
539
+ return [ :dummy ]
540
+ end
541
+ private :pull_event
542
+
543
+ def entity( reference, entities )
544
+ return unless entities
545
+
546
+ value = entities[ reference ]
547
+ return if value.nil?
548
+
549
+ record_entity_expansion
550
+ unnormalize( value, entities )
551
+ end
552
+
553
+ # Escapes all possible entities
554
+ def normalize( input, entities=nil, entity_filter=nil )
555
+ copy = input.clone
556
+ # Doing it like this rather than in a loop improves the speed
557
+ copy.gsub!( EREFERENCE, '&amp;' )
558
+ entities.each do |key, value|
559
+ copy.gsub!( value, "&#{key};" ) unless entity_filter and
560
+ entity_filter.include?(entity)
561
+ end if entities
562
+ copy.gsub!( EREFERENCE, '&amp;' )
563
+ DEFAULT_ENTITIES.each do |key, value|
564
+ copy.gsub!( value[3], value[1] )
565
+ end
566
+ copy
567
+ end
568
+
569
+ # Unescapes all possible entities
570
+ def unnormalize( string, entities=nil, filter=nil )
571
+ if string.include?("\r")
572
+ rv = string.gsub( Private::CARRIAGE_RETURN_NEWLINE_PATTERN, "\n" )
573
+ else
574
+ rv = string.dup
575
+ end
576
+ matches = rv.scan( REFERENCE_RE )
577
+ return rv if matches.size == 0
578
+ rv.gsub!( Private::CHARACTER_REFERENCES ) {
579
+ m=$1
580
+ if m.start_with?("x")
581
+ code_point = Integer(m[1..-1], 16)
582
+ else
583
+ code_point = Integer(m, 10)
584
+ end
585
+ [code_point].pack('U*')
586
+ }
587
+ matches.collect!{|x|x[0]}.compact!
588
+ if filter
589
+ matches.reject! do |entity_reference|
590
+ filter.include?(entity_reference)
591
+ end
592
+ end
593
+ if matches.size > 0
594
+ matches.tally.each do |entity_reference, n|
595
+ entity_expansion_count_before = @entity_expansion_count
596
+ entity_value = entity( entity_reference, entities )
597
+ if entity_value
598
+ if n > 1
599
+ entity_expansion_count_delta =
600
+ @entity_expansion_count - entity_expansion_count_before
601
+ record_entity_expansion(entity_expansion_count_delta * (n - 1))
602
+ end
603
+ re = Private::DEFAULT_ENTITIES_PATTERNS[entity_reference] || /&#{entity_reference};/
604
+ rv.gsub!( re, entity_value )
605
+ if rv.bytesize > @entity_expansion_text_limit
606
+ raise "entity expansion has grown too large"
607
+ end
608
+ else
609
+ er = DEFAULT_ENTITIES[entity_reference]
610
+ rv.gsub!( er[0], er[2] ) if er
611
+ end
612
+ end
613
+ rv.gsub!( Private::DEFAULT_ENTITIES_PATTERNS['amp'], '&' )
614
+ end
615
+ rv
616
+ end
617
+
618
+ private
619
+ def add_namespace(prefix, uri)
620
+ @namespaces_restore_stack.last[prefix] = @namespaces[prefix]
621
+ if uri.nil?
622
+ @namespaces.delete(prefix)
623
+ else
624
+ @namespaces[prefix] = uri
625
+ end
626
+ end
627
+
628
+ def push_namespaces_restore
629
+ namespaces_restore = {}
630
+ @namespaces_restore_stack.push(namespaces_restore)
631
+ namespaces_restore
632
+ end
633
+
634
+ def pop_namespaces_restore
635
+ namespaces_restore = @namespaces_restore_stack.pop
636
+ namespaces_restore.each do |prefix, uri|
637
+ if uri.nil?
638
+ @namespaces.delete(prefix)
639
+ else
640
+ @namespaces[prefix] = uri
641
+ end
642
+ end
643
+ end
644
+
645
+ def record_entity_expansion(delta=1)
646
+ @entity_expansion_count += delta
647
+ if @entity_expansion_count > @entity_expansion_limit
648
+ raise "number of entity expansions exceeded, processing aborted."
649
+ end
650
+ end
651
+
652
+ def need_source_encoding_update?(xml_declaration_encoding)
653
+ return false if xml_declaration_encoding.nil?
654
+ return false if /\AUTF-16\z/i =~ xml_declaration_encoding
655
+ true
656
+ end
657
+
658
+ def parse_name(base_error_message)
659
+ md = @source.match(Private::NAME_PATTERN, true)
660
+ unless md
661
+ if @source.match?(/\S/um)
662
+ message = "#{base_error_message}: invalid name"
663
+ else
664
+ message = "#{base_error_message}: name is missing"
665
+ end
666
+ raise REXML::ParseException.new(message, @source)
667
+ end
668
+ md[0]
669
+ end
670
+
671
+ def parse_id(base_error_message,
672
+ accept_external_id:,
673
+ accept_public_id:)
674
+ if accept_external_id and (md = @source.match(EXTERNAL_ID_PUBLIC, true))
675
+ pubid = system = nil
676
+ pubid_literal = md[1]
677
+ pubid = pubid_literal[1..-2] if pubid_literal # Remove quote
678
+ system_literal = md[2]
679
+ system = system_literal[1..-2] if system_literal # Remove quote
680
+ ["PUBLIC", pubid, system]
681
+ elsif accept_public_id and (md = @source.match(PUBLIC_ID, true))
682
+ pubid = system = nil
683
+ pubid_literal = md[1]
684
+ pubid = pubid_literal[1..-2] if pubid_literal # Remove quote
685
+ ["PUBLIC", pubid, nil]
686
+ elsif accept_external_id and (md = @source.match(EXTERNAL_ID_SYSTEM, true))
687
+ system = nil
688
+ system_literal = md[1]
689
+ system = system_literal[1..-2] if system_literal # Remove quote
690
+ ["SYSTEM", nil, system]
691
+ else
692
+ details = parse_id_invalid_details(accept_external_id: accept_external_id,
693
+ accept_public_id: accept_public_id)
694
+ message = "#{base_error_message}: #{details}"
695
+ raise REXML::ParseException.new(message, @source)
696
+ end
697
+ end
698
+
699
+ def parse_id_invalid_details(accept_external_id:,
700
+ accept_public_id:)
701
+ public = /\A\s*PUBLIC/um
702
+ system = /\A\s*SYSTEM/um
703
+ if (accept_external_id or accept_public_id) and @source.match?(/#{public}/um)
704
+ if @source.match?(/#{public}(?:\s+[^'"]|\s*[\[>])/um)
705
+ return "public ID literal is missing"
706
+ end
707
+ unless @source.match?(/#{public}\s+#{PUBIDLITERAL}/um)
708
+ return "invalid public ID literal"
709
+ end
710
+ if accept_public_id
711
+ if @source.match?(/#{public}\s+#{PUBIDLITERAL}\s+[^'"]/um)
712
+ return "system ID literal is missing"
713
+ end
714
+ unless @source.match?(/#{public}\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}/um)
715
+ return "invalid system literal"
716
+ end
717
+ "garbage after system literal"
718
+ else
719
+ "garbage after public ID literal"
720
+ end
721
+ elsif accept_external_id and @source.match?(/#{system}/um)
722
+ if @source.match?(/#{system}(?:\s+[^'"]|\s*[\[>])/um)
723
+ return "system literal is missing"
724
+ end
725
+ unless @source.match?(/#{system}\s+#{SYSTEMLITERAL}/um)
726
+ return "invalid system literal"
727
+ end
728
+ "garbage after system literal"
729
+ else
730
+ unless @source.match?(/\A\s*(?:PUBLIC|SYSTEM)\s/um)
731
+ return "invalid ID type"
732
+ end
733
+ "ID type is missing"
734
+ end
735
+ end
736
+
737
+ def process_instruction
738
+ name = parse_name("Malformed XML: Invalid processing instruction node")
739
+ if @source.match?(/\s+/um, true)
740
+ match_data = @source.match(/(.*?)\?>/um, true)
741
+ unless match_data
742
+ raise ParseException.new("Malformed XML: Unclosed processing instruction", @source)
743
+ end
744
+ content = match_data[1]
745
+ else
746
+ content = nil
747
+ unless @source.match?("?>", true)
748
+ raise ParseException.new("Malformed XML: Unclosed processing instruction", @source)
749
+ end
750
+ end
751
+ if name == "xml"
752
+ if @document_status
753
+ raise ParseException.new("Malformed XML: XML declaration is not at the start", @source)
754
+ end
755
+ version = VERSION.match(content)
756
+ version = version[1] unless version.nil?
757
+ encoding = ENCODING.match(content)
758
+ encoding = encoding[1] unless encoding.nil?
759
+ if need_source_encoding_update?(encoding)
760
+ @source.encoding = encoding
761
+ end
762
+ if encoding.nil? and /\AUTF-16(?:BE|LE)\z/i =~ @source.encoding
763
+ encoding = "UTF-16"
764
+ end
765
+ standalone = STANDALONE.match(content)
766
+ standalone = standalone[1] unless standalone.nil?
767
+ return [ :xmldecl, version, encoding, standalone ]
768
+ end
769
+ [:processing_instruction, name, content]
770
+ end
771
+
772
+ if StringScanner::Version < "3.1.1"
773
+ def scan_quote
774
+ @source.match(/(['"])/, true)&.[](1)
775
+ end
776
+ else
777
+ def scan_quote
778
+ case @source.peek_byte
779
+ when 34 # '"'.ord
780
+ @source.scan_byte
781
+ '"'
782
+ when 39 # "'".ord
783
+ @source.scan_byte
784
+ "'"
785
+ else
786
+ nil
787
+ end
788
+ end
789
+ end
790
+
791
+ def parse_attributes(prefixes)
792
+ attributes = {}
793
+ expanded_names = {}
794
+ closed = false
795
+ while true
796
+ if @source.match?(">", true)
797
+ return attributes, closed
798
+ elsif @source.match?("/>", true)
799
+ closed = true
800
+ return attributes, closed
801
+ elsif match = @source.match(QNAME, true)
802
+ name = match[1]
803
+ prefix = match[2]
804
+ local_part = match[3]
805
+
806
+ unless @source.match?(/\s*=\s*/um, true)
807
+ message = "Missing attribute equal: <#{name}>"
808
+ raise REXML::ParseException.new(message, @source)
809
+ end
810
+ unless quote = scan_quote
811
+ message = "Missing attribute value start quote: <#{name}>"
812
+ raise REXML::ParseException.new(message, @source)
813
+ end
814
+ start_position = @source.position
815
+ value = @source.read_until(quote)
816
+ unless value.chomp!(quote)
817
+ @source.position = start_position
818
+ message = "Missing attribute value end quote: <#{name}>: <#{quote}>"
819
+ raise REXML::ParseException.new(message, @source)
820
+ end
821
+ @source.match?(/\s*/um, true)
822
+ if prefix == "xmlns"
823
+ if local_part == "xml"
824
+ if value != Private::XML_PREFIXED_NAMESPACE
825
+ msg = "The 'xml' prefix must not be bound to any other namespace "+
826
+ "(http://www.w3.org/TR/REC-xml-names/#ns-decl)"
827
+ raise REXML::ParseException.new( msg, @source, self )
828
+ end
829
+ elsif local_part == "xmlns"
830
+ msg = "The 'xmlns' prefix must not be declared "+
831
+ "(http://www.w3.org/TR/REC-xml-names/#ns-decl)"
832
+ raise REXML::ParseException.new( msg, @source, self)
833
+ end
834
+ add_namespace(local_part, value)
835
+ elsif prefix
836
+ prefixes << prefix unless prefix == "xml"
837
+ end
838
+
839
+ if attributes[name]
840
+ msg = "Duplicate attribute #{name.inspect}"
841
+ raise REXML::ParseException.new(msg, @source, self)
842
+ end
843
+
844
+ unless prefix == "xmlns"
845
+ uri = @namespaces[prefix]
846
+ expanded_name = [uri, local_part]
847
+ existing_prefix = expanded_names[expanded_name]
848
+ if existing_prefix
849
+ message = "Namespace conflict in adding attribute " +
850
+ "\"#{local_part}\": " +
851
+ "Prefix \"#{existing_prefix}\" = \"#{uri}\" and " +
852
+ "prefix \"#{prefix}\" = \"#{uri}\""
853
+ raise REXML::ParseException.new(message, @source, self)
854
+ end
855
+ expanded_names[expanded_name] = prefix
856
+ end
857
+
858
+ attributes[name] = value
859
+ else
860
+ message = "Invalid attribute name: <#{@source.buffer.split(%r{[/>\s]}).first}>"
861
+ raise REXML::ParseException.new(message, @source)
862
+ end
863
+ end
864
+ end
865
+ end
866
+ end
867
+ end
868
+
869
+ =begin
870
+ case event[0]
871
+ when :start_element
872
+ when :text
873
+ when :end_element
874
+ when :processing_instruction
875
+ when :cdata
876
+ when :comment
877
+ when :xmldecl
878
+ when :start_doctype
879
+ when :end_doctype
880
+ when :externalentity
881
+ when :elementdecl
882
+ when :entity
883
+ when :attlistdecl
884
+ when :notationdecl
885
+ when :end_doctype
886
+ end
887
+ =end