summaryrefslogtreecommitdiff
path: root/lib/reline/unicode.rb
AgeCommit message (Collapse)Author
2025-01-24Migrate irb and reline to the bundled gemsHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/12624
2025-01-05[ruby/reline] Refactor utf-8 strings and invalid strings in testtomoya ishida
code (https://github.com/ruby/reline/pull/800) * Remove invalid encoding string "\M-[char]" from test code, remove unused code/arg/options * Omit unicode unnoralized input test in non-utf8 testcase * Remove helper method and constant no longer used in testcode * Change key binding test to use realistic bytes instead of invalid byte sequence * Remove invalid byte sequence input from rendering test yamatanooroti handles invalid byte sequence input "\M-[char]" and converts it to "\e[char]" We don't need to use these invalid byte sequence and rely on the hack implemented in yamatanooroti https://github.com/ruby/reline/commit/f09e7b154c
2025-01-01[ruby/reline] Support inserting C-c C-z C-\ with quoted_inserttomoya ishida
(https://github.com/ruby/reline/pull/798) https://github.com/ruby/reline/commit/e6eb5d2d3c
2024-12-26[ruby/reline] Fix typos in commentYudai Takada
(https://github.com/ruby/reline/pull/796) * s/Calcualte/Calculate/ * s/unneccesary/unnecessary/ https://github.com/ruby/reline/commit/db86bcd2bf Notes: Merged: https://github.com/ruby/ruby/pull/12469
2024-12-15[ruby/reline] Refactor Reline::Unicode ed_ vi_ em_ methodstomoya ishida
(https://github.com/ruby/reline/pull/720) * Refactor Reline::Unicode vi_ ed_ em_ methods * Make Reline::Unicode's vi_ ed_ em_ method encoding safe https://github.com/ruby/reline/commit/cdd7288978
2024-11-11[ruby/reline] Refactor perform_completontomoya ishida
(https://github.com/ruby/reline/pull/778) Flatten recursive method Remove CompletionState::COMPLETE https://github.com/ruby/reline/commit/aa5b278f3d
2024-11-10[ruby/reline] Remove unused things from reline/unicode.rbtomoya ishida
(https://github.com/ruby/reline/pull/759) * Remove garbage(nil) from Reline::Unicode.split_by_width result * Remove unused width from Reline::Unicode vi_ ed_ em_ method return value * Remove unused height from Unicode.split_by_width return value * Rename split_by_width to split_line_by_width and add legacy split_by_width for IRB https://github.com/ruby/reline/commit/f32446ebc4
2024-10-24[ruby/reline] nonprinting_start and nonprinting_end should betomoya ishida
removed (https://github.com/ruby/reline/pull/771) https://github.com/ruby/reline/commit/e36441652a
2024-10-01[ruby/reline] Fix Reline crash with invalid encoding historytomoya ishida
(https://github.com/ruby/reline/pull/751) https://github.com/ruby/reline/commit/e9d4b37e34
2024-08-29[ruby/reline] Calculate mbchar width with bsearchtomoya ishida
(https://github.com/ruby/reline/pull/632) https://github.com/ruby/reline/commit/0851e93640
2024-05-08[ruby/reline] Implement bracketed paste inserttomoya ishida
(https://github.com/ruby/reline/pull/655) https://github.com/ruby/reline/commit/e92dcbf514
2024-04-29[ruby/reline] Completely support full-width characters intomoya ishida
differential rendering (https://github.com/ruby/reline/pull/654) * Add a cut variation of Reline::Unicode.take_range method take_mbchar_range * Consider fullwidth take_range in differential rendering https://github.com/ruby/reline/commit/29714df09f
2024-04-24[ruby/reline] Long line performancetomoya ishida
(https://github.com/ruby/reline/pull/688) * Improve C-e (ed_move_to_end) performance for long line * Reline::Unicode.split_by_width optimization for RESET_SGR https://github.com/ruby/reline/commit/0c8d3c827a
2024-04-23[ruby/reline] Separate prompt and input line in renderingtomoya ishida
(https://github.com/ruby/reline/pull/652) * Separate prompt and input line in rendering Often, only one of prompt and input changes. Split prompt+input_line to a separate rendering item will improve differential rendering performance. * Rename method wrapped_prompt_lines to more descriptive name https://github.com/ruby/reline/commit/16d82f1f23
2023-06-22[ruby/reline] Remove unused methodima1zumi
(https://github.com/ruby/reline/pull/557) `get_mbchar_byte_size_by_first_char` isn't used in Reline. Also, this method implements the same functionality as `String#bytesize` and is unnecessary.
2023-03-29[ruby/reline] Drop Unicode.take_range's optional arg as it's neverStan Lo
used (https://github.com/ruby/reline/pull/528) https://github.com/ruby/reline/commit/428fed4a6a
2023-03-29[ruby/reline] Improve OSC sequence regexp. OSC sequence can end withtomoya ishida
ST(ESC\) and it should not to include \a and \e inside. (https://github.com/ruby/reline/pull/527) https://github.com/ruby/reline/commit/a88052adec
2023-03-28[ruby/reline] Expand the scanned array to later case statement moreStan Lo
straightforward (https://github.com/ruby/reline/pull/526) * Improve test coverage on Unicode.take_range * Add test for Unicode.calculate_width * Expand the scanned array to later case statement more straightforward
2023-03-25[ruby/reline] Fix split_by_width to retain color sequencestomoya ishida
(https://github.com/ruby/reline/pull/490) * Fix split_by_width to retain color sequences * Add OSC escape sequence testcase of Reline::Unicode.split_by_width
2021-12-24[ruby/reline] "Halfwidth char + halfwidth (han)dakuten" is a single grapheme.aycabta
When a halfwidth character is followed by a halfwidth dakuten or a halfwidth handakuten character, it should be treated as a single grapheme. https://github.com/ruby/reline/commit/9f20b9ec28
2021-09-06[ruby/reline] Add that Reline::Unicode.take_range is cutting based on widthaycabta
https://github.com/ruby/reline/commit/18405d9594
2021-09-06[ruby/reline] Add comments about optimizing chars in ASCII range of UTF-8aycabta
https://github.com/ruby/reline/commit/3c13d93486
2021-08-31[ruby/reline] Fix Reline::Unicode.take_range as it was not fully functionalaycabta
https://github.com/ruby/reline/commit/5da6a8d851
2021-08-29[ruby/reline] Implement dialog with autocomplete callbackaycabta
https://github.com/ruby/reline/commit/1401d6165e
2021-02-21[ruby/reline] Return 1 when char width not foundaycabta
This fixes ruby/reline#261. https://github.com/ruby/reline/commit/3cf1213014
2020-12-24[ruby/reline] Doesn't contain terminate spaces by cwaycabta
This closes ruby/reline#233. https://github.com/ruby/reline/commit/4c3f2e2eae
2020-12-24[ruby/reline] Delete the last char of a line by dwaycabta
This closes ruby/reline#229. https://github.com/ruby/reline/commit/3f0ae689c4
2020-12-05[ruby/reline] Optimize regexp handling for widthaycabta
The rendering time in IRB has been reduced as follows: start = Time.now [{"_id"=>"5f9072a4589a06d2d74b6028", "index"=>0, "guid"=>"6b3051e2-dbc7-4537-bdb9-6cd7bb5358a7", "isActive"=>true, "balance"=>"$1,442.84", "picture"=>"http://placehold.it/32x32", "age"=>34, "eyeColor"=>"blue", "name"=>{"first"=>"Ward", "last"=>"Levy"}, "company"=>"HYPLEX", "email"=>"ward.levy@hyplex.us", "phone"=>"+1 (867) 568-3319", "address"=>"867 Cobek Court, Clara, Maryland, 3254", "about"=> "Exercitation eu ex aliqua sit. Pariatur aliquip incididunt sint id non consectetur ullamco Lorem ea mollit duis amet sint labore. Commodo laborum labore commodo officia in cillum adipisicing esse excepteur cupidatat adipisicing ut. Non esse incididunt voluptate aliquip cillum eu aute duis laboris sit et. Amet enim quis tempor occaecat excepteur exercitation excepteur deserunt amet cillum adipisicing.", "registered"=>"Monday, May 25, 2015 6:51 AM", "latitude"=>"16.001127", "longitude"=>"-72.377848", "tags"=>["dolore", "nostrud", "occaecat", "cillum", "nisi"], "range"=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "friends"=> [{"id"=>0, "name"=>"Alison Bryant"}, {"id"=>1, "name"=>"Ester Espinoza"}, {"id"=>2, "name"=>"Sullivan Kane"}], "greeting"=>"Hello, Ward! You have 7 unread messages.", "favoriteFruit"=>"apple"}] puts "Duration: #{Time.now - start} seconds" 0.47sec -> 0.34sec start = Time.now "Exercitation eu ex aliqua sit. Pariatur aliquip incididunt sint id non consectetur ullamco Lorem ea mollit duis amet sint labore. Commodo laborum labore commodo officia in cillum adipisicing esse excepteur cupidatat adipisicing ut. Non esse incididunt voluptate aliquip cillum eu aute duis laboris sit et. Amet enim quis tempor occaecat excepteur exercitation excepteur deserunt amet cillum adipisicing." puts "Duration: #{Time.now - start} seconds" 0.11sec -> 0.08sec start = Time.now def each_top_level_statement initialize_input catch(:TERM_INPUT) do loop do begin prompt unless l = lex throw :TERM_INPUT if @line == '' else @line_no += l.count("\n") next if l == "\n" @line.concat l if @code_block_open or @ltype or @continue or @indent > 0 next end end if @line != "\n" @line.force_encoding(@io.encoding) yield @line, @exp_line_no end break if @io.eof? @line = '' @exp_line_no = @line_no @indent = 0 rescue TerminateLineInput initialize_input prompt end end end end puts "Duration: #{Time.now - start} seconds" 0.40sec -> 0.33sec Co-authored-by: NARUSE, Yui <naruse@airemix.jp> https://github.com/ruby/reline/commit/a9e39ddcc4
2020-12-05[ruby/reline] Optimize ASCII character width calculationaycabta
The rendering time in IRB has been reduced as follows: start = Time.now [{"_id"=>"5f9072a4589a06d2d74b6028", "index"=>0, "guid"=>"6b3051e2-dbc7-4537-bdb9-6cd7bb5358a7", "isActive"=>true, "balance"=>"$1,442.84", "picture"=>"http://placehold.it/32x32", "age"=>34, "eyeColor"=>"blue", "name"=>{"first"=>"Ward", "last"=>"Levy"}, "company"=>"HYPLEX", "email"=>"ward.levy@hyplex.us", "phone"=>"+1 (867) 568-3319", "address"=>"867 Cobek Court, Clara, Maryland, 3254", "about"=> "Exercitation eu ex aliqua sit. Pariatur aliquip incididunt sint id non consectetur ullamco Lorem ea mollit duis amet sint labore. Commodo laborum labore commodo officia in cillum adipisicing esse excepteur cupidatat adipisicing ut. Non esse incididunt voluptate aliquip cillum eu aute duis laboris sit et. Amet enim quis tempor occaecat excepteur exercitation excepteur deserunt amet cillum adipisicing.", "registered"=>"Monday, May 25, 2015 6:51 AM", "latitude"=>"16.001127", "longitude"=>"-72.377848", "tags"=>["dolore", "nostrud", "occaecat", "cillum", "nisi"], "range"=>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "friends"=> [{"id"=>0, "name"=>"Alison Bryant"}, {"id"=>1, "name"=>"Ester Espinoza"}, {"id"=>2, "name"=>"Sullivan Kane"}], "greeting"=>"Hello, Ward! You have 7 unread messages.", "favoriteFruit"=>"apple"}] puts "Duration: #{Time.now - start} seconds" 0.73sec -> 0.43sec start = Time.now "Exercitation eu ex aliqua sit. Pariatur aliquip incididunt sint id non consectetur ullamco Lorem ea mollit duis amet sint labore. Commodo laborum labore commodo officia in cillum adipisicing esse excepteur cupidatat adipisicing ut. Non esse incididunt voluptate aliquip cillum eu aute duis laboris sit et. Amet enim quis tempor occaecat excepteur exercitation excepteur deserunt amet cillum adipisicing." puts "Duration: #{Time.now - start} seconds" 0.15sec -> 0.10sec start = Time.now def each_top_level_statement initialize_input catch(:TERM_INPUT) do loop do begin prompt unless l = lex throw :TERM_INPUT if @line == '' else @line_no += l.count("\n") next if l == "\n" @line.concat l if @code_block_open or @ltype or @continue or @indent > 0 next end end if @line != "\n" @line.force_encoding(@io.encoding) yield @line, @exp_line_no end break if @io.eof? @line = '' @exp_line_no = @line_no @indent = 0 rescue TerminateLineInput initialize_input prompt end end end end puts "Duration: #{Time.now - start} seconds" 0.59sec -> 0.38sec Co-authored-by: NARUSE, Yui <naruse@airemix.jp> https://github.com/ruby/reline/commit/36bc9e3abb
2020-12-05[ruby/reline] Fix crash to input `é`. refs #174manga_osyo
https://github.com/ruby/reline/commit/ba5e267e5f
2020-12-05[ruby/reline] Improve the performance of `get_mbchar_width`Yusuke Endoh
It is about three times faster to use one big regexp instead of sequential matching. https://github.com/ruby/reline/commit/e36f6c0707
2020-09-12[ruby/reline] Use str.encoding by default for split_by_widthaycabta
https://github.com/ruby/reline/commit/2d32604c9e
2020-08-28[ruby/reline] Move width calculator methods to Reline::Unicodeaycabta
https://github.com/ruby/reline/commit/f348ecd9f5
2019-06-04Implement transpose-wordsaycabta
2019-06-03The ed_move_to_beg is different from vi_first_printaycabta
2019-05-25Deal with more syntax highlight edge casesTakashi Kokubun
Please refer to the tests again.
2019-05-25Add and use Reline::Unicode.escape_for_printTakashi Kokubun
2019-04-30Add Reline as a fallback library for Readlineaycabta
* lib/reine.rb, lib/reline/*: Reline is a readline stdlib compatible library. * lib/readline.rb: Readline uses a fallback to Reline when ext/readline doesn't exist. * tool/sync_default_gems.rb: add ruby/reline as a default gem. * appveyor.yml: add "set RELINE_TEST_ENCODING=Windows-31J" for test suit of Reline, and add "--exclude readline" to "nmake test-all" on Visual Studio builds because of strange behavior. * spec/ruby/library/readline/spec_helper.rb: skip Reline as with RbReadline.
2019-04-23Revert "IRB is improved with Reline and RDoc, take 2"Nobuyoshi Nakada
Accidentally merged when 89271d4a3733bc5e70e9c56b4bd12f277e699c42 "Adjusted indents".
2019-04-23IRB is improved with Reline and RDoc, take 2aycabta
2019-04-21Revert "IRB is improved with Reline and RDoc"aycabta
This reverts commit 7f273ac6d0f05208b5b228da95205e20c0e8286c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-04-20IRB is improved with Reline and RDocaycabta
Reline is a readline stdlib compatible library. It also supports multiline input. IRB is improved with Reline and supports multiline. Besides, supports showing documents when completed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e