What about moving it to Text
Text>>scanFrom:
?
This method parses a stream from a fileout with styling and generates the text style specific objects.
Now,
1) are we writing that style section in our fileouts?
2) Is this really necessary in RunArray?�� It's class comment does not say anything to me about Text nor TextStyle or stuff:
"My instances provide space-efficient storage of data which tends to be constant over long runs of the possible indices. Essentially repeated values are stored singly and then associated with a "run" length that denotes the number of consecutive occurrences of the value."
The method is the following:
scanFrom: strm
��� "Read the style section of a fileOut or sources file.��� nextChunk has already been done. We need to return a RunArray of TextAttributes of various kinds. These are written by the implementors of writeScanOn:"
��� | runs values attrList char |
��� (strm peekFor: $( ) ifFalse: [^ nil].
��� runs := OrderedCollection new.
��� [strm skipSeparators.
��� �strm peekFor: $)] whileFalse:
��� ��� [runs add: (Number readFrom: strm)].
��� values := OrderedCollection new. "Value array"
��� attrList := OrderedCollection new. "Attributes list"
��� [(char := strm next) == nil] whileFalse: [
��� ��� char == $, ifTrue: [values add: attrList asArray. attrList := OrderedCollection new].
��� ��� char == $a ifTrue: [attrList add:
��� ��� ��� (TextAlignment new alignment: (Integer readFrom: strm ifFail: [0]))].
��� ��� char == $f ifTrue: [attrList add:
��� ��� ��� (TextFontChange new fontNumber: (Integer readFrom: strm ifFail: [0]))].
��� ��� char == $F ifTrue: [attrList add: (TextFontReference toFont:
��� ��� ��� (Smalltalk at: #StrikeFont ifPresent: [:sf | sf familyName: (strm upTo: $#) size: (Integer readFrom: strm ifFail: [0])]))].
��� ��� char == $b ifTrue: [attrList add: (TextEmphasis bold)].
��� ��� char == $i ifTrue: [attrList add: (TextEmphasis italic)].
��� ��� char == $u ifTrue: [attrList add: (TextEmphasis underlined)].
��� ��� char == $= ifTrue: [attrList add: (TextEmphasis struckOut)].
��� ��� char == $n ifTrue: [attrList add: (TextEmphasis normal)].
��� ��� char == $- ifTrue: [attrList add: (TextKern kern: -1)].
��� ��� char == $+ ifTrue: [attrList add: (TextKern kern: 1)].
��� ��� char == $c ifTrue: [attrList add: (TextColor scanFrom: strm)]. "color"
��� ��� char == $L ifTrue: [attrList add: (TextLink scanFrom: strm)]. "L not look like 1"
��� ��� char == $R ifTrue: [attrList add: (TextURL scanFrom: strm)].
��� ��� ��� ��� "R capitalized so it can follow a number"
��� ��� char == $P ifTrue: [attrList add: (TextPrintIt scanFrom: strm)].
��� ��� char == $d ifTrue: [attrList add: (TextDoIt scanFrom: strm)].
��� ��� "space, cr do nothing"
��� ��� ].
��� values add: attrList asArray.
��� ^ self runs: runs asArray values: (values copyFrom: 1 to: runs size) asArray
"
RunArray scanFrom: (ReadStream on: '(14 50 312)f1,f1b,f1LInteger +;i')
"
Guille