brakeman 6.2.2 → 7.0.1

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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +26 -0
  3. data/README.md +1 -1
  4. data/bundle/load.rb +10 -8
  5. data/bundle/ruby/3.1.0/gems/csv-3.3.3/LICENSE.txt +33 -0
  6. data/bundle/ruby/3.1.0/gems/csv-3.3.3/NEWS.md +990 -0
  7. data/bundle/ruby/3.1.0/gems/csv-3.3.3/README.md +55 -0
  8. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/core_ext/array.rb +9 -0
  9. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/core_ext/string.rb +9 -0
  10. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/fields_converter.rb +96 -0
  11. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/input_record_separator.rb +18 -0
  12. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/parser.rb +1302 -0
  13. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/row.rb +757 -0
  14. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/table.rb +1055 -0
  15. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/version.rb +6 -0
  16. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv/writer.rb +209 -0
  17. data/bundle/ruby/3.1.0/gems/csv-3.3.3/lib/csv.rb +3017 -0
  18. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/Changelog.md +4 -0
  19. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/Gemfile +1 -0
  20. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/list_renderer.rb +2 -2
  21. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/menu.rb +7 -5
  22. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/version.rb +1 -1
  23. data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline.rb +17 -12
  24. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/config.rb +22 -26
  25. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/history.rb +3 -3
  26. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/ansi.rb +64 -111
  27. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/dumb.rb +16 -2
  28. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io/windows.rb +77 -60
  29. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/io.rb +14 -0
  30. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/base.rb +10 -4
  31. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/emacs.rb +96 -96
  32. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/vi_command.rb +182 -182
  33. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/vi_insert.rb +137 -137
  34. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_stroke.rb +26 -16
  35. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/line_editor.rb +238 -404
  36. data/bundle/ruby/3.1.0/gems/reline-0.6.0/lib/reline/unicode.rb +415 -0
  37. data/bundle/ruby/3.1.0/gems/reline-0.6.0/lib/reline/version.rb +3 -0
  38. data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline.rb +18 -18
  39. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/NEWS.md +74 -0
  40. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/baseparser.rb +78 -48
  41. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/pullparser.rb +4 -0
  42. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/rexml.rb +1 -1
  43. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/source.rb +61 -6
  44. data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/text.rb +15 -40
  45. data/bundle/ruby/3.1.0/gems/{ruby2ruby-2.5.1 → ruby2ruby-2.5.2}/History.rdoc +6 -0
  46. data/bundle/ruby/3.1.0/gems/{ruby2ruby-2.5.1 → ruby2ruby-2.5.2}/lib/ruby2ruby.rb +7 -4
  47. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/History.rdoc +6 -0
  48. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp.rb +1 -1
  49. data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp_processor.rb +1 -1
  50. data/bundle/ruby/3.1.0/gems/terminal-table-4.0.0/History.rdoc +149 -0
  51. data/bundle/ruby/3.1.0/gems/terminal-table-4.0.0/README.md +417 -0
  52. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/cell.rb +9 -9
  53. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/row.rb +18 -4
  54. data/bundle/ruby/3.1.0/gems/terminal-table-4.0.0/lib/terminal-table/separator.rb +66 -0
  55. data/bundle/ruby/3.1.0/gems/terminal-table-4.0.0/lib/terminal-table/style.rb +284 -0
  56. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/table.rb +49 -18
  57. data/bundle/ruby/3.1.0/gems/terminal-table-4.0.0/lib/terminal-table/util.rb +13 -0
  58. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/version.rb +1 -1
  59. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table.rb +2 -2
  60. data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/terminal-table.gemspec +3 -4
  61. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/creole.rb +2 -0
  62. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/liquid.rb +0 -3
  63. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/mapping.rb +3 -3
  64. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/rdoc.rb +0 -8
  65. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/template.rb +178 -27
  66. data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt.rb +9 -4
  67. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/CHANGELOG.md +291 -0
  68. data/bundle/ruby/3.1.0/gems/{unicode-display_width-1.8.0 → unicode-display_width-3.1.4}/MIT-LICENSE.txt +1 -1
  69. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/README.md +194 -0
  70. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/data/display_width.marshal.gz +0 -0
  71. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/constants.rb +10 -0
  72. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/emoji_support.rb +52 -0
  73. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/index.rb +34 -0
  74. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/no_string_ext.rb +8 -0
  75. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/reline_ext.rb +14 -0
  76. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width/string_ext.rb +9 -0
  77. data/bundle/ruby/3.1.0/gems/unicode-display_width-3.1.4/lib/unicode/display_width.rb +247 -0
  78. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/CHANGELOG.md +191 -0
  79. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/CODE_OF_CONDUCT.md +74 -0
  80. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/Gemfile +7 -0
  81. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/Gemfile.lock +33 -0
  82. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/MIT-LICENSE.txt +20 -0
  83. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/README.md +205 -0
  84. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/data/emoji.marshal.gz +0 -0
  85. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/data/generate_constants.rb +344 -0
  86. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/constants.rb +49 -0
  87. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex.rb +8 -0
  88. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_basic.rb +8 -0
  89. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_emoji_keycap.rb +8 -0
  90. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe.rb +8 -0
  91. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_mqe_uqe.rb +8 -0
  92. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_include_text.rb +8 -0
  93. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto.rb +8 -0
  94. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_picto_no_emoji.rb +8 -0
  95. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_possible.rb +8 -0
  96. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_component.rb +8 -0
  97. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_emoji.rb +8 -0
  98. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier.rb +8 -0
  99. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_modifier_base.rb +8 -0
  100. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_prop_presentation.rb +8 -0
  101. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text.rb +8 -0
  102. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_text_presentation.rb +8 -0
  103. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid.rb +8 -0
  104. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_valid_include_text.rb +8 -0
  105. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed.rb +8 -0
  106. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated/regex_well_formed_include_text.rb +8 -0
  107. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex.rb +8 -0
  108. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_basic.rb +8 -0
  109. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_emoji_keycap.rb +8 -0
  110. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe.rb +8 -0
  111. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_mqe_uqe.rb +8 -0
  112. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_include_text.rb +8 -0
  113. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto.rb +8 -0
  114. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_picto_no_emoji.rb +8 -0
  115. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_possible.rb +8 -0
  116. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_component.rb +8 -0
  117. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_emoji.rb +8 -0
  118. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier.rb +8 -0
  119. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_modifier_base.rb +8 -0
  120. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_prop_presentation.rb +8 -0
  121. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text.rb +8 -0
  122. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_text_presentation.rb +8 -0
  123. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid.rb +8 -0
  124. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_valid_include_text.rb +8 -0
  125. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed.rb +8 -0
  126. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/generated_native/regex_well_formed_include_text.rb +8 -0
  127. data/bundle/ruby/3.1.0/gems/{unicode-display_width-1.8.0/lib/unicode/display_width → unicode-emoji-4.0.4/lib/unicode/emoji}/index.rb +5 -3
  128. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/lazy_constants.rb +56 -0
  129. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji/list.rb +13 -0
  130. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/lib/unicode/emoji.rb +111 -0
  131. data/bundle/ruby/3.1.0/gems/unicode-emoji-4.0.4/unicode-emoji.gemspec +22 -0
  132. data/lib/brakeman/app_tree.rb +29 -19
  133. data/lib/brakeman/checks/check_deserialize.rb +4 -1
  134. data/lib/brakeman/checks/check_evaluation.rb +45 -8
  135. data/lib/brakeman/checks/check_model_attr_accessible.rb +1 -0
  136. data/lib/brakeman/checks/check_weak_rsa_key.rb +1 -1
  137. data/lib/brakeman/file_parser.rb +2 -1
  138. data/lib/brakeman/options.rb +12 -5
  139. data/lib/brakeman/processors/alias_processor.rb +9 -4
  140. data/lib/brakeman/processors/lib/file_type_detector.rb +9 -7
  141. data/lib/brakeman/report/ignore/config.rb +0 -1
  142. data/lib/brakeman/report/report_sarif.rb +122 -2
  143. data/lib/brakeman/rescanner.rb +40 -390
  144. data/lib/brakeman/scanner.rb +84 -51
  145. data/lib/brakeman/tracker/file_cache.rb +83 -0
  146. data/lib/brakeman/tracker.rb +19 -2
  147. data/lib/brakeman/version.rb +1 -1
  148. data/lib/brakeman.rb +19 -2
  149. metadata +265 -199
  150. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/terminfo.rb +0 -158
  151. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/unicode.rb +0 -671
  152. data/bundle/ruby/3.1.0/gems/reline-0.5.10/lib/reline/version.rb +0 -3
  153. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/History.rdoc +0 -85
  154. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/README.rdoc +0 -247
  155. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb +0 -14
  156. data/bundle/ruby/3.1.0/gems/terminal-table-1.8.0/lib/terminal-table/style.rb +0 -79
  157. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/erubis.rb +0 -51
  158. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/maruku.rb +0 -10
  159. data/bundle/ruby/3.1.0/gems/tilt-2.4.0/lib/tilt/wikicloth.rb +0 -12
  160. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/CHANGELOG.md +0 -137
  161. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/README.md +0 -124
  162. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/data/display_width.marshal.gz +0 -0
  163. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/constants.rb +0 -8
  164. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/no_string_ext.rb +0 -7
  165. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width/string_ext.rb +0 -17
  166. data/bundle/ruby/3.1.0/gems/unicode-display_width-1.8.0/lib/unicode/display_width.rb +0 -51
  167. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/AUTHORS +0 -0
  168. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/COPYING +0 -0
  169. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/LICENSE +0 -0
  170. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/README.md +0 -0
  171. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/TODO +0 -0
  172. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/highline.gemspec +0 -0
  173. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/builtin_styles.rb +0 -0
  174. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/color_scheme.rb +0 -0
  175. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/compatibility.rb +0 -0
  176. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/custom_errors.rb +0 -0
  177. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/import.rb +0 -0
  178. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/io_console_compatible.rb +0 -0
  179. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/list.rb +0 -0
  180. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/menu/item.rb +0 -0
  181. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/paginator.rb +0 -0
  182. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/question/answer_converter.rb +0 -0
  183. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/question.rb +0 -0
  184. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/question_asker.rb +0 -0
  185. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/simulate.rb +0 -0
  186. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/statement.rb +0 -0
  187. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/string.rb +0 -0
  188. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/string_extensions.rb +0 -0
  189. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/style.rb +0 -0
  190. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/template_renderer.rb +0 -0
  191. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/terminal/io_console.rb +0 -0
  192. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/terminal/ncurses.rb +0 -0
  193. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/terminal/unix_stty.rb +0 -0
  194. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/terminal.rb +0 -0
  195. /data/bundle/ruby/3.1.0/gems/{highline-3.1.1 → highline-3.1.2}/lib/highline/wrapper.rb +0 -0
  196. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/BSDL +0 -0
  197. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/COPYING +0 -0
  198. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/README.md +0 -0
  199. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/face.rb +0 -0
  200. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor/composite.rb +0 -0
  201. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/key_actor.rb +0 -0
  202. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/kill_ring.rb +0 -0
  203. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/lib/reline/unicode/east_asian_width.rb +0 -0
  204. /data/bundle/ruby/3.1.0/gems/{reline-0.5.10 → reline-0.6.0}/license_of_rb-readline +0 -0
  205. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/LICENSE.txt +0 -0
  206. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/README.md +0 -0
  207. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/attlistdecl.rb +0 -0
  208. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/attribute.rb +0 -0
  209. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/cdata.rb +0 -0
  210. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/child.rb +0 -0
  211. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/comment.rb +0 -0
  212. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/doctype.rb +0 -0
  213. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/document.rb +0 -0
  214. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/dtd/attlistdecl.rb +0 -0
  215. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/dtd/dtd.rb +0 -0
  216. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/dtd/elementdecl.rb +0 -0
  217. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/dtd/entitydecl.rb +0 -0
  218. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/dtd/notationdecl.rb +0 -0
  219. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/element.rb +0 -0
  220. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/encoding.rb +0 -0
  221. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/entity.rb +0 -0
  222. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/formatters/default.rb +0 -0
  223. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/formatters/pretty.rb +0 -0
  224. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/formatters/transitive.rb +0 -0
  225. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/functions.rb +0 -0
  226. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/instruction.rb +0 -0
  227. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/light/node.rb +0 -0
  228. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/namespace.rb +0 -0
  229. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/node.rb +0 -0
  230. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/output.rb +0 -0
  231. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parent.rb +0 -0
  232. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parseexception.rb +0 -0
  233. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/lightparser.rb +0 -0
  234. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/sax2parser.rb +0 -0
  235. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/streamparser.rb +0 -0
  236. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/treeparser.rb +0 -0
  237. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/ultralightparser.rb +0 -0
  238. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/parsers/xpathparser.rb +0 -0
  239. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/quickpath.rb +0 -0
  240. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/sax2listener.rb +0 -0
  241. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/security.rb +0 -0
  242. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/streamlistener.rb +0 -0
  243. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/undefinednamespaceexception.rb +0 -0
  244. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/validation/relaxng.rb +0 -0
  245. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/validation/validation.rb +0 -0
  246. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/validation/validationexception.rb +0 -0
  247. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/xmldecl.rb +0 -0
  248. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/xmltokens.rb +0 -0
  249. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/xpath.rb +0 -0
  250. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml/xpath_parser.rb +0 -0
  251. /data/bundle/ruby/3.1.0/gems/{rexml-3.3.8 → rexml-3.4.1}/lib/rexml.rb +0 -0
  252. /data/bundle/ruby/3.1.0/gems/{ruby2ruby-2.5.1 → ruby2ruby-2.5.2}/Manifest.txt +0 -0
  253. /data/bundle/ruby/3.1.0/gems/{ruby2ruby-2.5.1 → ruby2ruby-2.5.2}/README.rdoc +0 -0
  254. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/Manifest.txt +0 -0
  255. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/README.rdoc +0 -0
  256. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/composite_sexp_processor.rb +0 -0
  257. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/pt_testcase.rb +0 -0
  258. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/sexp_matcher.rb +0 -0
  259. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/strict_sexp.rb +0 -0
  260. /data/bundle/ruby/3.1.0/gems/{sexp_processor-4.17.2 → sexp_processor-4.17.3}/lib/unique.rb +0 -0
  261. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/Gemfile +0 -0
  262. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/LICENSE.txt +0 -0
  263. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/Manifest +0 -0
  264. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/Todo.rdoc +0 -0
  265. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/import.rb +0 -0
  266. /data/bundle/ruby/3.1.0/gems/{terminal-table-1.8.0 → terminal-table-4.0.0}/lib/terminal-table/table_helper.rb +0 -0
  267. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/COPYING +0 -0
  268. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/_emacs_org.rb +0 -0
  269. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/_handlebars.rb +0 -0
  270. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/_jbuilder.rb +0 -0
  271. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/_org.rb +0 -0
  272. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/asciidoc.rb +0 -0
  273. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/babel.rb +0 -0
  274. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/builder.rb +0 -0
  275. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/cli.rb +0 -0
  276. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/coffee.rb +0 -0
  277. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/commonmarker.rb +0 -0
  278. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/csv.rb +0 -0
  279. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/erb.rb +0 -0
  280. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/erubi.rb +0 -0
  281. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/etanni.rb +0 -0
  282. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/haml.rb +0 -0
  283. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/kramdown.rb +0 -0
  284. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/livescript.rb +0 -0
  285. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/markaby.rb +0 -0
  286. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/nokogiri.rb +0 -0
  287. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/pandoc.rb +0 -0
  288. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/pipeline.rb +0 -0
  289. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/plain.rb +0 -0
  290. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/prawn.rb +0 -0
  291. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/radius.rb +0 -0
  292. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/rdiscount.rb +0 -0
  293. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/redcarpet.rb +0 -0
  294. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/redcloth.rb +0 -0
  295. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/rst-pandoc.rb +0 -0
  296. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/sass.rb +0 -0
  297. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/slim.rb +0 -0
  298. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/string.rb +0 -0
  299. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.0}/lib/tilt/typescript.rb +0 -0
  300. /data/bundle/ruby/3.1.0/gems/{tilt-2.4.0 → tilt-2.6.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