forked from pharo-project/pharo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TextStream.class.st
65 lines (59 loc) · 1.5 KB
/
TextStream.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"
I'm a Stream of Text objects.
ex:
|ts|
ts := TextStream on: (Text new: 50).
ts nextPutAll: 'I ' asText.
ts nextPutAll: 'love' asText allBold.
ts nextPutAll: ' Pharo'.
TextMorph new
newContents: ts contents;
openInWindowLabeled: 'TextStream test'
"
Class {
#name : #TextStream,
#superclass : #WriteStream,
#category : #'Text-Core-Base'
}
{ #category : #accessing }
TextStream >> applyAttribute: att beginningAt: startPos [
collection addAttribute: att from: startPos to: self position
]
{ #category : #accessing }
TextStream >> nextPutAll: aCollection [
"Optimized access to get around Text at:Put: overhead"
| n |
n := aCollection size.
position + n > writeLimit
ifTrue:
[self growTo: position + n + 10].
collection
replaceFrom: position+1
to: position + n
with: aCollection
startingAt: 1.
position := position + n.
^ aCollection
]
{ #category : #private }
TextStream >> withAttribute: att do: strmBlock [
"Add text to the stream with a block and apply its text attribute"
| pos1 val |
pos1 := self position.
val := strmBlock value.
collection addAttribute: att from: pos1+1 to: self position.
^ val
]
{ #category : #private }
TextStream >> withAttributes: attributes do: streamBlock [
"Add text to the stream with a block and apply its text attributes (in collection)"
| pos1 val |
pos1 := self position.
val := streamBlock value.
attributes do: [:attribute |
collection
addAttribute: attribute
from: pos1 + 1
to: self position].
^ val
]