mirror of
https://github.com/atom/atom.git
synced 2026-01-23 05:48:10 -05:00
Wrap at the first CJK character before the boundary
This commit is contained in:
@@ -130,14 +130,25 @@ describe "DisplayBuffer", ->
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(10).text).toBe ' return '
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(11).text).toBe ' sort(left).concat(pivot).concat(sort(right));'
|
||||
|
||||
it "wraps the line at the boundary if it includes a CJK character", ->
|
||||
buffer.setTextInRange([[0, 0], [1, 0]], 'abcd efg유私フ业余爱\n')
|
||||
it "wraps the line at the first CJK character before the boundary", ->
|
||||
displayBuffer.setEditorWidthInChars(10)
|
||||
|
||||
buffer.setTextInRange([[0, 0], [1, 0]], 'abcd efg유私フ业余爱\n')
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(0).text).toBe 'abcd efg유私'
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(1).text).toBe 'フ业余爱'
|
||||
|
||||
buffer.setTextInRange([[0, 0], [1, 0]], 'abcd ef유gef业余爱\n')
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(0).text).toBe 'abcd ef유'
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(1).text).toBe 'gef业余爱'
|
||||
|
||||
describe "when there is no whitespace before the boundary", ->
|
||||
it "wraps the line exactly at the boundary since there's no more graceful place to wrap it", ->
|
||||
it "wraps the line at the first CJK character before the boundary", ->
|
||||
buffer.setTextInRange([[0, 0], [1, 0]], '私たちのabcdefghij\n')
|
||||
displayBuffer.setEditorWidthInChars(10)
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(0).text).toBe '私たちの'
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(1).text).toBe 'abcdefghij'
|
||||
|
||||
it "wraps the line exactly at the boundary when no CJK character is found, since there's no more graceful place to wrap it", ->
|
||||
buffer.setTextInRange([[0, 0], [1, 0]], 'abcdefghijklmnopqrstuvwxyz\n')
|
||||
displayBuffer.setEditorWidthInChars(10)
|
||||
expect(displayBuffer.tokenizedLineForScreenRow(0).text).toBe 'abcdefghij'
|
||||
|
||||
@@ -321,19 +321,19 @@ class TokenizedLine
|
||||
return unless maxColumn?
|
||||
return unless @text.length > maxColumn
|
||||
|
||||
if isCjkCharacter(@text[maxColumn])
|
||||
# always wrap when a CJK character is at the wrap boundary
|
||||
return maxColumn
|
||||
else if /\s/.test(@text[maxColumn])
|
||||
if /\s/.test(@text[maxColumn])
|
||||
# search forward for the start of a word past the boundary
|
||||
for column in [maxColumn..@text.length]
|
||||
return column if /\S/.test(@text[column])
|
||||
|
||||
return @text.length
|
||||
else if isCjkCharacter(@text[maxColumn])
|
||||
maxColumn
|
||||
else
|
||||
# search backward for the start of the word on the boundary
|
||||
for column in [maxColumn..@firstNonWhitespaceIndex]
|
||||
return column + 1 if /\s/.test(@text[column])
|
||||
if /\s/.test(@text[column]) or isCjkCharacter(@text[column])
|
||||
return column + 1
|
||||
|
||||
return maxColumn
|
||||
|
||||
|
||||
Reference in New Issue
Block a user