brakeman 6.2.2 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +17 -0
  3. data/bundle/load.rb +7 -6
  4. data/bundle/ruby/3.1.0/gems/csv-3.3.2/LICENSE.txt +33 -0
  5. data/bundle/ruby/3.1.0/gems/csv-3.3.2/NEWS.md +965 -0
  6. data/bundle/ruby/3.1.0/gems/csv-3.3.2/README.md +55 -0
  7. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/core_ext/array.rb +9 -0
  8. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/core_ext/string.rb +9 -0
  9. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/fields_converter.rb +96 -0
  10. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/input_record_separator.rb +18 -0
  11. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/parser.rb +1292 -0
  12. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/row.rb +757 -0
  13. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/table.rb +1055 -0
  14. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/version.rb +6 -0
  15. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv/writer.rb +209 -0
  16. data/bundle/ruby/3.1.0/gems/csv-3.3.2/lib/csv.rb +3017 -0
  17. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/config.rb +22 -26
  18. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/history.rb +3 -3
  19. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/ansi.rb +64 -111
  20. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/dumb.rb +16 -2
  21. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/windows.rb +77 -60
  22. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io.rb +14 -0
  23. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/base.rb +10 -4
  24. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/emacs.rb +96 -96
  25. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/vi_command.rb +182 -182
  26. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/vi_insert.rb +137 -137
  27. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_stroke.rb +26 -16
  28. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/line_editor.rb +238 -404
  29. data/bundle/ruby/3.1.0/gems/reline-0.6.0/lib/reline/unicode.rb +415 -0
  30. data/bundle/ruby/3.1.0/gems/reline-0.6.0/lib/reline/version.rb +3 -0
  31. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline.rb +18 -18
  32. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/NEWS.md +50 -0
  33. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/baseparser.rb +54 -45
  34. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/pullparser.rb +4 -0
  35. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/rexml.rb +1 -1
  36. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/source.rb +45 -4
  37. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/text.rb +15 -40
  38. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/History.rdoc +6 -0
  39. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp.rb +1 -1
  40. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp_processor.rb +1 -1
  41. data/bundle/ruby/3.1.0/gems/terminal-table-3.0.2/History.rdoc +142 -0
  42. data/bundle/ruby/3.1.0/gems/terminal-table-3.0.2/README.md +417 -0
  43. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/cell.rb +8 -8
  44. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/row.rb +18 -4
  45. data/bundle/ruby/3.1.0/gems/terminal-table-3.0.2/lib/terminal-table/separator.rb +66 -0
  46. data/bundle/ruby/3.1.0/gems/terminal-table-3.0.2/lib/terminal-table/style.rb +284 -0
  47. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/table.rb +47 -18
  48. data/bundle/ruby/3.1.0/gems/terminal-table-3.0.2/lib/terminal-table/util.rb +13 -0
  49. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/version.rb +1 -1
  50. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table.rb +2 -2
  51. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/terminal-table.gemspec +3 -3
  52. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/creole.rb +2 -0
  53. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/liquid.rb +0 -3
  54. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/mapping.rb +3 -3
  55. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/rdoc.rb +0 -8
  56. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/template.rb +27 -3
  57. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt.rb +1 -4
  58. data/bundle/ruby/3.1.0/gems/{unicode-display_width-1.8.0 → unicode-display_width-2.6.0}/CHANGELOG.md +65 -2
  59. data/bundle/ruby/3.1.0/gems/{unicode-display_width-1.8.0 → unicode-display_width-2.6.0}/MIT-LICENSE.txt +1 -1
  60. data/bundle/ruby/3.1.0/gems/{unicode-display_width-1.8.0 → unicode-display_width-2.6.0}/README.md +67 -20
  61. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/data/display_width.marshal.gz +0 -0
  62. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/lib/unicode/display_width/constants.rb +10 -0
  63. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/lib/unicode/display_width/index.rb +34 -0
  64. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/lib/unicode/display_width/no_string_ext.rb +8 -0
  65. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/lib/unicode/display_width/string_ext.rb +9 -0
  66. data/bundle/ruby/3.1.0/gems/unicode-display_width-2.6.0/lib/unicode/display_width.rb +123 -0
  67. data/lib/brakeman/app_tree.rb +23 -18
  68. data/lib/brakeman/checks/check_deserialize.rb +4 -1
  69. data/lib/brakeman/checks/check_evaluation.rb +20 -2
  70. data/lib/brakeman/checks/check_model_attr_accessible.rb +1 -0
  71. data/lib/brakeman/file_parser.rb +2 -1
  72. data/lib/brakeman/options.rb +8 -5
  73. data/lib/brakeman/processors/alias_processor.rb +6 -2
  74. data/lib/brakeman/processors/lib/file_type_detector.rb +9 -7
  75. data/lib/brakeman/report/ignore/config.rb +0 -1
  76. data/lib/brakeman/report/report_sarif.rb +122 -2
  77. data/lib/brakeman/rescanner.rb +40 -390
  78. data/lib/brakeman/scanner.rb +62 -38
  79. data/lib/brakeman/tracker/file_cache.rb +83 -0
  80. data/lib/brakeman/tracker.rb +19 -2
  81. data/lib/brakeman/version.rb +1 -1
  82. data/lib/brakeman.rb +12 -2
  83. metadata +170 -160
  84. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/terminfo.rb +0 -158
  85. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/unicode.rb +0 -671
  86. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/version.rb +0 -3
  87. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/History.rdoc +0 -85
  88. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/README.rdoc +0 -247
  89. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb +0 -14
  90. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/lib/terminal-table/style.rb +0 -79
  91. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/erubis.rb +0 -51
  92. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/maruku.rb +0 -10
  93. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/wikicloth.rb +0 -12
  94. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/data/display_width.marshal.gz +0 -0
  95. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/constants.rb +0 -8
  96. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/index.rb +0 -12
  97. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/no_string_ext.rb +0 -7
  98. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/string_ext.rb +0 -17
  99. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width.rb +0 -51
  100. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/BSDL +0 -0
  101. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/COPYING +0 -0
  102. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/README.md +0 -0
  103. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/face.rb +0 -0
  104. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/composite.rb +0 -0
  105. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor.rb +0 -0
  106. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/kill_ring.rb +0 -0
  107. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/unicode/east_asian_width.rb +0 -0
  108. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/license_of_rb-readline +0 -0
  109. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/LICENSE.txt +0 -0
  110. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/README.md +0 -0
  111. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/attlistdecl.rb +0 -0
  112. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/attribute.rb +0 -0
  113. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/cdata.rb +0 -0
  114. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/child.rb +0 -0
  115. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/comment.rb +0 -0
  116. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/doctype.rb +0 -0
  117. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/document.rb +0 -0
  118. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/dtd/attlistdecl.rb +0 -0
  119. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/dtd/dtd.rb +0 -0
  120. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/dtd/elementdecl.rb +0 -0
  121. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/dtd/entitydecl.rb +0 -0
  122. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/dtd/notationdecl.rb +0 -0
  123. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/element.rb +0 -0
  124. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/encoding.rb +0 -0
  125. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/entity.rb +0 -0
  126. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/formatters/default.rb +0 -0
  127. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/formatters/pretty.rb +0 -0
  128. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/formatters/transitive.rb +0 -0
  129. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/functions.rb +0 -0
  130. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/instruction.rb +0 -0
  131. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/light/node.rb +0 -0
  132. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/namespace.rb +0 -0
  133. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/node.rb +0 -0
  134. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/output.rb +0 -0
  135. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parent.rb +0 -0
  136. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parseexception.rb +0 -0
  137. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/lightparser.rb +0 -0
  138. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/sax2parser.rb +0 -0
  139. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/streamparser.rb +0 -0
  140. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/treeparser.rb +0 -0
  141. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/ultralightparser.rb +0 -0
  142. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/parsers/xpathparser.rb +0 -0
  143. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/quickpath.rb +0 -0
  144. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/sax2listener.rb +0 -0
  145. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/security.rb +0 -0
  146. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/streamlistener.rb +0 -0
  147. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/undefinednamespaceexception.rb +0 -0
  148. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/validation/relaxng.rb +0 -0
  149. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/validation/validation.rb +0 -0
  150. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/validation/validationexception.rb +0 -0
  151. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/xmldecl.rb +0 -0
  152. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/xmltokens.rb +0 -0
  153. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/xpath.rb +0 -0
  154. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml/xpath_parser.rb +0 -0
  155. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.0}/lib/rexml.rb +0 -0
  156. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/Manifest.txt +0 -0
  157. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/README.rdoc +0 -0
  158. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/composite_sexp_processor.rb +0 -0
  159. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/pt_testcase.rb +0 -0
  160. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp_matcher.rb +0 -0
  161. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/strict_sexp.rb +0 -0
  162. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/unique.rb +0 -0
  163. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/Gemfile +0 -0
  164. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/LICENSE.txt +0 -0
  165. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/Manifest +0 -0
  166. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/Todo.rdoc +0 -0
  167. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/import.rb +0 -0
  168. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-3.0.2}/lib/terminal-table/table_helper.rb +0 -0
  169. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/COPYING +0 -0
  170. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/_emacs_org.rb +0 -0
  171. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/_handlebars.rb +0 -0
  172. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/_jbuilder.rb +0 -0
  173. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/_org.rb +0 -0
  174. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/asciidoc.rb +0 -0
  175. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/babel.rb +0 -0
  176. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/builder.rb +0 -0
  177. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/cli.rb +0 -0
  178. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/coffee.rb +0 -0
  179. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/commonmarker.rb +0 -0
  180. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/csv.rb +0 -0
  181. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/erb.rb +0 -0
  182. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/erubi.rb +0 -0
  183. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/etanni.rb +0 -0
  184. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/haml.rb +0 -0
  185. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/kramdown.rb +0 -0
  186. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/livescript.rb +0 -0
  187. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/markaby.rb +0 -0
  188. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/nokogiri.rb +0 -0
  189. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/pandoc.rb +0 -0
  190. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/pipeline.rb +0 -0
  191. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/plain.rb +0 -0
  192. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/prawn.rb +0 -0
  193. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/radius.rb +0 -0
  194. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/rdiscount.rb +0 -0
  195. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/redcarpet.rb +0 -0
  196. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/redcloth.rb +0 -0
  197. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/rst-pandoc.rb +0 -0
  198. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/sass.rb +0 -0
  199. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/slim.rb +0 -0
  200. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/string.rb +0 -0
  201. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/typescript.rb +0 -0
  202. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.5.0}/lib/tilt/yajl.rb +0 -0
@@ -1,671 +0,0 @@
1
- class Reline::Unicode
2
- EscapedPairs = {
3
- 0x00 => '^@',
4
- 0x01 => '^A', # C-a
5
- 0x02 => '^B',
6
- 0x03 => '^C',
7
- 0x04 => '^D',
8
- 0x05 => '^E',
9
- 0x06 => '^F',
10
- 0x07 => '^G',
11
- 0x08 => '^H', # Backspace
12
- 0x09 => '^I',
13
- 0x0A => '^J',
14
- 0x0B => '^K',
15
- 0x0C => '^L',
16
- 0x0D => '^M', # Enter
17
- 0x0E => '^N',
18
- 0x0F => '^O',
19
- 0x10 => '^P',
20
- 0x11 => '^Q',
21
- 0x12 => '^R',
22
- 0x13 => '^S',
23
- 0x14 => '^T',
24
- 0x15 => '^U',
25
- 0x16 => '^V',
26
- 0x17 => '^W',
27
- 0x18 => '^X',
28
- 0x19 => '^Y',
29
- 0x1A => '^Z', # C-z
30
- 0x1B => '^[', # C-[ C-3
31
- 0x1D => '^]', # C-]
32
- 0x1E => '^^', # C-~ C-6
33
- 0x1F => '^_', # C-_ C-7
34
- 0x7F => '^?', # C-? C-8
35
- }
36
- EscapedChars = EscapedPairs.keys.map(&:chr)
37
-
38
- NON_PRINTING_START = "\1"
39
- NON_PRINTING_END = "\2"
40
- CSI_REGEXP = /\e\[[\d;]*[ABCDEFGHJKSTfminsuhl]/
41
- OSC_REGEXP = /\e\]\d+(?:;[^;\a\e]+)*(?:\a|\e\\)/
42
- WIDTH_SCANNER = /\G(?:(#{NON_PRINTING_START})|(#{NON_PRINTING_END})|(#{CSI_REGEXP})|(#{OSC_REGEXP})|(\X))/o
43
-
44
- def self.escape_for_print(str)
45
- str.chars.map! { |gr|
46
- case gr
47
- when -"\n"
48
- gr
49
- when -"\t"
50
- -' '
51
- else
52
- EscapedPairs[gr.ord] || gr
53
- end
54
- }.join
55
- end
56
-
57
- require 'reline/unicode/east_asian_width'
58
-
59
- def self.get_mbchar_width(mbchar)
60
- ord = mbchar.ord
61
- if ord <= 0x1F # in EscapedPairs
62
- return 2
63
- elsif ord <= 0x7E # printable ASCII chars
64
- return 1
65
- end
66
- utf8_mbchar = mbchar.encode(Encoding::UTF_8)
67
- ord = utf8_mbchar.ord
68
- chunk_index = EastAsianWidth::CHUNK_LAST.bsearch_index { |o| ord <= o }
69
- size = EastAsianWidth::CHUNK_WIDTH[chunk_index]
70
- if size == -1
71
- Reline.ambiguous_width
72
- elsif size == 1 && utf8_mbchar.size >= 2
73
- second_char_ord = utf8_mbchar[1].ord
74
- # Halfwidth Dakuten Handakuten
75
- # Only these two character has Letter Modifier category and can be combined in a single grapheme cluster
76
- (second_char_ord == 0xFF9E || second_char_ord == 0xFF9F) ? 2 : 1
77
- else
78
- size
79
- end
80
- end
81
-
82
- def self.calculate_width(str, allow_escape_code = false)
83
- if allow_escape_code
84
- width = 0
85
- rest = str.encode(Encoding::UTF_8)
86
- in_zero_width = false
87
- rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
88
- case
89
- when non_printing_start
90
- in_zero_width = true
91
- when non_printing_end
92
- in_zero_width = false
93
- when csi, osc
94
- when gc
95
- unless in_zero_width
96
- width += get_mbchar_width(gc)
97
- end
98
- end
99
- end
100
- width
101
- else
102
- str.encode(Encoding::UTF_8).grapheme_clusters.inject(0) { |w, gc|
103
- w + get_mbchar_width(gc)
104
- }
105
- end
106
- end
107
-
108
- def self.split_by_width(str, max_width, encoding = str.encoding, offset: 0)
109
- lines = [String.new(encoding: encoding)]
110
- height = 1
111
- width = offset
112
- rest = str.encode(Encoding::UTF_8)
113
- in_zero_width = false
114
- seq = String.new(encoding: encoding)
115
- rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
116
- case
117
- when non_printing_start
118
- in_zero_width = true
119
- lines.last << NON_PRINTING_START
120
- when non_printing_end
121
- in_zero_width = false
122
- lines.last << NON_PRINTING_END
123
- when csi
124
- lines.last << csi
125
- unless in_zero_width
126
- if csi == -"\e[m" || csi == -"\e[0m"
127
- seq.clear
128
- else
129
- seq << csi
130
- end
131
- end
132
- when osc
133
- lines.last << osc
134
- seq << osc
135
- when gc
136
- unless in_zero_width
137
- mbchar_width = get_mbchar_width(gc)
138
- if (width += mbchar_width) > max_width
139
- width = mbchar_width
140
- lines << nil
141
- lines << seq.dup
142
- height += 1
143
- end
144
- end
145
- lines.last << gc
146
- end
147
- end
148
- # The cursor moves to next line in first
149
- if width == max_width
150
- lines << nil
151
- lines << String.new(encoding: encoding)
152
- height += 1
153
- end
154
- [lines, height]
155
- end
156
-
157
- # Take a chunk of a String cut by width with escape sequences.
158
- def self.take_range(str, start_col, max_width)
159
- take_mbchar_range(str, start_col, max_width).first
160
- end
161
-
162
- def self.take_mbchar_range(str, start_col, width, cover_begin: false, cover_end: false, padding: false)
163
- chunk = String.new(encoding: str.encoding)
164
-
165
- end_col = start_col + width
166
- total_width = 0
167
- rest = str.encode(Encoding::UTF_8)
168
- in_zero_width = false
169
- chunk_start_col = nil
170
- chunk_end_col = nil
171
- has_csi = false
172
- rest.scan(WIDTH_SCANNER) do |non_printing_start, non_printing_end, csi, osc, gc|
173
- case
174
- when non_printing_start
175
- in_zero_width = true
176
- chunk << NON_PRINTING_START
177
- when non_printing_end
178
- in_zero_width = false
179
- chunk << NON_PRINTING_END
180
- when csi
181
- has_csi = true
182
- chunk << csi
183
- when osc
184
- chunk << osc
185
- when gc
186
- if in_zero_width
187
- chunk << gc
188
- next
189
- end
190
-
191
- mbchar_width = get_mbchar_width(gc)
192
- prev_width = total_width
193
- total_width += mbchar_width
194
-
195
- if (cover_begin || padding ? total_width <= start_col : prev_width < start_col)
196
- # Current character haven't reached start_col yet
197
- next
198
- elsif padding && !cover_begin && prev_width < start_col && start_col < total_width
199
- # Add preceding padding. This padding might have background color.
200
- chunk << ' '
201
- chunk_start_col ||= start_col
202
- chunk_end_col = total_width
203
- next
204
- elsif (cover_end ? prev_width < end_col : total_width <= end_col)
205
- # Current character is in the range
206
- chunk << gc
207
- chunk_start_col ||= prev_width
208
- chunk_end_col = total_width
209
- break if total_width >= end_col
210
- else
211
- # Current character exceeds end_col
212
- if padding && end_col < total_width
213
- # Add succeeding padding. This padding might have background color.
214
- chunk << ' '
215
- chunk_start_col ||= prev_width
216
- chunk_end_col = end_col
217
- end
218
- break
219
- end
220
- end
221
- end
222
- chunk_start_col ||= start_col
223
- chunk_end_col ||= start_col
224
- if padding && chunk_end_col < end_col
225
- # Append padding. This padding should not include background color.
226
- chunk << "\e[0m" if has_csi
227
- chunk << ' ' * (end_col - chunk_end_col)
228
- chunk_end_col = end_col
229
- end
230
- [chunk, chunk_start_col, chunk_end_col - chunk_start_col]
231
- end
232
-
233
- def self.get_next_mbchar_size(line, byte_pointer)
234
- grapheme = line.byteslice(byte_pointer..-1).grapheme_clusters.first
235
- grapheme ? grapheme.bytesize : 0
236
- end
237
-
238
- def self.get_prev_mbchar_size(line, byte_pointer)
239
- if byte_pointer.zero?
240
- 0
241
- else
242
- grapheme = line.byteslice(0..(byte_pointer - 1)).grapheme_clusters.last
243
- grapheme ? grapheme.bytesize : 0
244
- end
245
- end
246
-
247
- def self.em_forward_word(line, byte_pointer)
248
- width = 0
249
- byte_size = 0
250
- while line.bytesize > (byte_pointer + byte_size)
251
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
252
- mbchar = line.byteslice(byte_pointer + byte_size, size)
253
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
254
- width += get_mbchar_width(mbchar)
255
- byte_size += size
256
- end
257
- while line.bytesize > (byte_pointer + byte_size)
258
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
259
- mbchar = line.byteslice(byte_pointer + byte_size, size)
260
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
261
- width += get_mbchar_width(mbchar)
262
- byte_size += size
263
- end
264
- [byte_size, width]
265
- end
266
-
267
- def self.em_forward_word_with_capitalization(line, byte_pointer)
268
- width = 0
269
- byte_size = 0
270
- new_str = String.new
271
- while line.bytesize > (byte_pointer + byte_size)
272
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
273
- mbchar = line.byteslice(byte_pointer + byte_size, size)
274
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
275
- new_str += mbchar
276
- width += get_mbchar_width(mbchar)
277
- byte_size += size
278
- end
279
- first = true
280
- while line.bytesize > (byte_pointer + byte_size)
281
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
282
- mbchar = line.byteslice(byte_pointer + byte_size, size)
283
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
284
- if first
285
- new_str += mbchar.upcase
286
- first = false
287
- else
288
- new_str += mbchar.downcase
289
- end
290
- width += get_mbchar_width(mbchar)
291
- byte_size += size
292
- end
293
- [byte_size, width, new_str]
294
- end
295
-
296
- def self.em_backward_word(line, byte_pointer)
297
- width = 0
298
- byte_size = 0
299
- while 0 < (byte_pointer - byte_size)
300
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
301
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
302
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
303
- width += get_mbchar_width(mbchar)
304
- byte_size += size
305
- end
306
- while 0 < (byte_pointer - byte_size)
307
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
308
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
309
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
310
- width += get_mbchar_width(mbchar)
311
- byte_size += size
312
- end
313
- [byte_size, width]
314
- end
315
-
316
- def self.em_big_backward_word(line, byte_pointer)
317
- width = 0
318
- byte_size = 0
319
- while 0 < (byte_pointer - byte_size)
320
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
321
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
322
- break if mbchar =~ /\S/
323
- width += get_mbchar_width(mbchar)
324
- byte_size += size
325
- end
326
- while 0 < (byte_pointer - byte_size)
327
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
328
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
329
- break if mbchar =~ /\s/
330
- width += get_mbchar_width(mbchar)
331
- byte_size += size
332
- end
333
- [byte_size, width]
334
- end
335
-
336
- def self.ed_transpose_words(line, byte_pointer)
337
- right_word_start = nil
338
- size = get_next_mbchar_size(line, byte_pointer)
339
- mbchar = line.byteslice(byte_pointer, size)
340
- if size.zero?
341
- # ' aaa bbb [cursor]'
342
- byte_size = 0
343
- while 0 < (byte_pointer + byte_size)
344
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
345
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
346
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
347
- byte_size -= size
348
- end
349
- while 0 < (byte_pointer + byte_size)
350
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
351
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
352
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
353
- byte_size -= size
354
- end
355
- right_word_start = byte_pointer + byte_size
356
- byte_size = 0
357
- while line.bytesize > (byte_pointer + byte_size)
358
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
359
- mbchar = line.byteslice(byte_pointer + byte_size, size)
360
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
361
- byte_size += size
362
- end
363
- after_start = byte_pointer + byte_size
364
- elsif mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
365
- # ' aaa bb[cursor]b'
366
- byte_size = 0
367
- while 0 < (byte_pointer + byte_size)
368
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
369
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
370
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
371
- byte_size -= size
372
- end
373
- right_word_start = byte_pointer + byte_size
374
- byte_size = 0
375
- while line.bytesize > (byte_pointer + byte_size)
376
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
377
- mbchar = line.byteslice(byte_pointer + byte_size, size)
378
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
379
- byte_size += size
380
- end
381
- after_start = byte_pointer + byte_size
382
- else
383
- byte_size = 0
384
- while (line.bytesize - 1) > (byte_pointer + byte_size)
385
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
386
- mbchar = line.byteslice(byte_pointer + byte_size, size)
387
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
388
- byte_size += size
389
- end
390
- if (byte_pointer + byte_size) == (line.bytesize - 1)
391
- # ' aaa bbb [cursor] '
392
- after_start = line.bytesize
393
- while 0 < (byte_pointer + byte_size)
394
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
395
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
396
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
397
- byte_size -= size
398
- end
399
- while 0 < (byte_pointer + byte_size)
400
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
401
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
402
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
403
- byte_size -= size
404
- end
405
- right_word_start = byte_pointer + byte_size
406
- else
407
- # ' aaa [cursor] bbb '
408
- right_word_start = byte_pointer + byte_size
409
- while line.bytesize > (byte_pointer + byte_size)
410
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
411
- mbchar = line.byteslice(byte_pointer + byte_size, size)
412
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
413
- byte_size += size
414
- end
415
- after_start = byte_pointer + byte_size
416
- end
417
- end
418
- byte_size = right_word_start - byte_pointer
419
- while 0 < (byte_pointer + byte_size)
420
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
421
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
422
- break if mbchar.encode(Encoding::UTF_8) =~ /\p{Word}/
423
- byte_size -= size
424
- end
425
- middle_start = byte_pointer + byte_size
426
- byte_size = middle_start - byte_pointer
427
- while 0 < (byte_pointer + byte_size)
428
- size = get_prev_mbchar_size(line, byte_pointer + byte_size)
429
- mbchar = line.byteslice(byte_pointer + byte_size - size, size)
430
- break if mbchar.encode(Encoding::UTF_8) =~ /\P{Word}/
431
- byte_size -= size
432
- end
433
- left_word_start = byte_pointer + byte_size
434
- [left_word_start, middle_start, right_word_start, after_start]
435
- end
436
-
437
- def self.vi_big_forward_word(line, byte_pointer)
438
- width = 0
439
- byte_size = 0
440
- while (line.bytesize - 1) > (byte_pointer + byte_size)
441
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
442
- mbchar = line.byteslice(byte_pointer + byte_size, size)
443
- break if mbchar =~ /\s/
444
- width += get_mbchar_width(mbchar)
445
- byte_size += size
446
- end
447
- while (line.bytesize - 1) > (byte_pointer + byte_size)
448
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
449
- mbchar = line.byteslice(byte_pointer + byte_size, size)
450
- break if mbchar =~ /\S/
451
- width += get_mbchar_width(mbchar)
452
- byte_size += size
453
- end
454
- [byte_size, width]
455
- end
456
-
457
- def self.vi_big_forward_end_word(line, byte_pointer)
458
- if (line.bytesize - 1) > byte_pointer
459
- size = get_next_mbchar_size(line, byte_pointer)
460
- mbchar = line.byteslice(byte_pointer, size)
461
- width = get_mbchar_width(mbchar)
462
- byte_size = size
463
- else
464
- return [0, 0]
465
- end
466
- while (line.bytesize - 1) > (byte_pointer + byte_size)
467
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
468
- mbchar = line.byteslice(byte_pointer + byte_size, size)
469
- break if mbchar =~ /\S/
470
- width += get_mbchar_width(mbchar)
471
- byte_size += size
472
- end
473
- prev_width = width
474
- prev_byte_size = byte_size
475
- while line.bytesize > (byte_pointer + byte_size)
476
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
477
- mbchar = line.byteslice(byte_pointer + byte_size, size)
478
- break if mbchar =~ /\s/
479
- prev_width = width
480
- prev_byte_size = byte_size
481
- width += get_mbchar_width(mbchar)
482
- byte_size += size
483
- end
484
- [prev_byte_size, prev_width]
485
- end
486
-
487
- def self.vi_big_backward_word(line, byte_pointer)
488
- width = 0
489
- byte_size = 0
490
- while 0 < (byte_pointer - byte_size)
491
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
492
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
493
- break if mbchar =~ /\S/
494
- width += get_mbchar_width(mbchar)
495
- byte_size += size
496
- end
497
- while 0 < (byte_pointer - byte_size)
498
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
499
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
500
- break if mbchar =~ /\s/
501
- width += get_mbchar_width(mbchar)
502
- byte_size += size
503
- end
504
- [byte_size, width]
505
- end
506
-
507
- def self.vi_forward_word(line, byte_pointer, drop_terminate_spaces = false)
508
- if line.bytesize > byte_pointer
509
- size = get_next_mbchar_size(line, byte_pointer)
510
- mbchar = line.byteslice(byte_pointer, size)
511
- if mbchar =~ /\w/
512
- started_by = :word
513
- elsif mbchar =~ /\s/
514
- started_by = :space
515
- else
516
- started_by = :non_word_printable
517
- end
518
- width = get_mbchar_width(mbchar)
519
- byte_size = size
520
- else
521
- return [0, 0]
522
- end
523
- while line.bytesize > (byte_pointer + byte_size)
524
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
525
- mbchar = line.byteslice(byte_pointer + byte_size, size)
526
- case started_by
527
- when :word
528
- break if mbchar =~ /\W/
529
- when :space
530
- break if mbchar =~ /\S/
531
- when :non_word_printable
532
- break if mbchar =~ /\w|\s/
533
- end
534
- width += get_mbchar_width(mbchar)
535
- byte_size += size
536
- end
537
- return [byte_size, width] if drop_terminate_spaces
538
- while line.bytesize > (byte_pointer + byte_size)
539
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
540
- mbchar = line.byteslice(byte_pointer + byte_size, size)
541
- break if mbchar =~ /\S/
542
- width += get_mbchar_width(mbchar)
543
- byte_size += size
544
- end
545
- [byte_size, width]
546
- end
547
-
548
- def self.vi_forward_end_word(line, byte_pointer)
549
- if (line.bytesize - 1) > byte_pointer
550
- size = get_next_mbchar_size(line, byte_pointer)
551
- mbchar = line.byteslice(byte_pointer, size)
552
- if mbchar =~ /\w/
553
- started_by = :word
554
- elsif mbchar =~ /\s/
555
- started_by = :space
556
- else
557
- started_by = :non_word_printable
558
- end
559
- width = get_mbchar_width(mbchar)
560
- byte_size = size
561
- else
562
- return [0, 0]
563
- end
564
- if (line.bytesize - 1) > (byte_pointer + byte_size)
565
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
566
- mbchar = line.byteslice(byte_pointer + byte_size, size)
567
- if mbchar =~ /\w/
568
- second = :word
569
- elsif mbchar =~ /\s/
570
- second = :space
571
- else
572
- second = :non_word_printable
573
- end
574
- second_width = get_mbchar_width(mbchar)
575
- second_byte_size = size
576
- else
577
- return [byte_size, width]
578
- end
579
- if second == :space
580
- width += second_width
581
- byte_size += second_byte_size
582
- while (line.bytesize - 1) > (byte_pointer + byte_size)
583
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
584
- mbchar = line.byteslice(byte_pointer + byte_size, size)
585
- if mbchar =~ /\S/
586
- if mbchar =~ /\w/
587
- started_by = :word
588
- else
589
- started_by = :non_word_printable
590
- end
591
- break
592
- end
593
- width += get_mbchar_width(mbchar)
594
- byte_size += size
595
- end
596
- else
597
- case [started_by, second]
598
- when [:word, :non_word_printable], [:non_word_printable, :word]
599
- started_by = second
600
- else
601
- width += second_width
602
- byte_size += second_byte_size
603
- started_by = second
604
- end
605
- end
606
- prev_width = width
607
- prev_byte_size = byte_size
608
- while line.bytesize > (byte_pointer + byte_size)
609
- size = get_next_mbchar_size(line, byte_pointer + byte_size)
610
- mbchar = line.byteslice(byte_pointer + byte_size, size)
611
- case started_by
612
- when :word
613
- break if mbchar =~ /\W/
614
- when :non_word_printable
615
- break if mbchar =~ /[\w\s]/
616
- end
617
- prev_width = width
618
- prev_byte_size = byte_size
619
- width += get_mbchar_width(mbchar)
620
- byte_size += size
621
- end
622
- [prev_byte_size, prev_width]
623
- end
624
-
625
- def self.vi_backward_word(line, byte_pointer)
626
- width = 0
627
- byte_size = 0
628
- while 0 < (byte_pointer - byte_size)
629
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
630
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
631
- if mbchar =~ /\S/
632
- if mbchar =~ /\w/
633
- started_by = :word
634
- else
635
- started_by = :non_word_printable
636
- end
637
- break
638
- end
639
- width += get_mbchar_width(mbchar)
640
- byte_size += size
641
- end
642
- while 0 < (byte_pointer - byte_size)
643
- size = get_prev_mbchar_size(line, byte_pointer - byte_size)
644
- mbchar = line.byteslice(byte_pointer - byte_size - size, size)
645
- case started_by
646
- when :word
647
- break if mbchar =~ /\W/
648
- when :non_word_printable
649
- break if mbchar =~ /[\w\s]/
650
- end
651
- width += get_mbchar_width(mbchar)
652
- byte_size += size
653
- end
654
- [byte_size, width]
655
- end
656
-
657
- def self.vi_first_print(line)
658
- width = 0
659
- byte_size = 0
660
- while (line.bytesize - 1) > byte_size
661
- size = get_next_mbchar_size(line, byte_size)
662
- mbchar = line.byteslice(byte_size, size)
663
- if mbchar =~ /\S/
664
- break
665
- end
666
- width += get_mbchar_width(mbchar)
667
- byte_size += size
668
- end
669
- [byte_size, width]
670
- end
671
- end
@@ -1,3 +0,0 @@
1
- module Reline
2
- VERSION = '0.5.10'
3
- end