Class: Formatter::Delimited
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(str, marker, tag) ⇒ Delimited
Returns a new instance of Delimited.
20
21
22
23
24
25
|
# File 'lib/livetext/formatter.rb', line 20
def initialize(str, marker, tag)
@str, @marker, @tag = str.dup, marker, tag
@buffer = ""
@cdata = ""
@state = :INITIAL
end
|
Class Method Details
.process(str) ⇒ Object
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/livetext/formatter.rb', line 154
def self.process(str)
bold = self.new(str, "*", "b")
sb = bold.handle
ital = self.new(sb, "_", "i")
si = ital.handle
code = self.new(si, "`", "tt")
sc = code.handle
stri = self.new(sc, "~", "strike")
si = stri.handle
si
end
|
Instance Method Details
103
104
105
106
|
# File 'lib/livetext/formatter.rb', line 103
def buffer
@buffer << grab
@state = :LOOPING
end
|
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/livetext/formatter.rb', line 108
def cdata
case
when eol?
if @cdata.empty?
@buffer << @marker unless @marker[1] == "["
else
@buffer << wrap(@cdata)
end
@state = :FINAL
when terminated?
@buffer << wrap(@cdata)
grab_terminator
@cdata = ""
@state = :LOOPING
else
@cdata << grab
@state = :CDATA
end
end
|
#eol? ⇒ Boolean
50
51
52
|
# File 'lib/livetext/formatter.rb', line 50
def eol?
@str.empty?
end
|
#escape? ⇒ Boolean
58
59
60
|
# File 'lib/livetext/formatter.rb', line 58
def escape?
front == "\\"
end
|
34
35
36
|
# File 'lib/livetext/formatter.rb', line 34
def front
@str[0]
end
|
#grab(n = 1) ⇒ Object
38
39
40
41
|
# File 'lib/livetext/formatter.rb', line 38
def grab(n=1)
char = @str.slice!(0..(n-1))
char
end
|
#grab_terminator ⇒ Object
43
44
45
46
47
48
|
# File 'lib/livetext/formatter.rb', line 43
def grab_terminator
@state = :LOOPING
end
|
145
146
147
148
149
150
151
152
|
# File 'lib/livetext/formatter.rb', line 145
def handle
loop do
break if @state == :FINAL
meth = @state.downcase
send(meth)
end
return @buffer
end
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/livetext/formatter.rb', line 83
def initial
n = @marker.length
case
when escape?
grab
@buffer << grab
when space_marker?
@buffer << grab
grab(n)
@state = :CDATA
when marker?
grab(n)
@state = :CDATA
when eol?
@state = :FINAL
else
@state = :BUFFER
end
end
|
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/livetext/formatter.rb', line 128
def looping
n = @marker.length
case
when escape?
grab
@buffer << grab
when space_marker?
@buffer << grab
grab(n)
@state = :CDATA
when eol?
@state = :FINAL
else
@buffer << grab
end
end
|
#marker? ⇒ Boolean
66
67
68
|
# File 'lib/livetext/formatter.rb', line 66
def marker?
@str.start_with?(@marker)
end
|
#space? ⇒ Boolean
54
55
56
|
# File 'lib/livetext/formatter.rb', line 54
def space?
front == " "
end
|
#space_marker? ⇒ Boolean
70
71
72
|
# File 'lib/livetext/formatter.rb', line 70
def space_marker?
@str.start_with?(" " + @marker)
end
|
#status(where) ⇒ Object
27
28
29
30
31
32
|
# File 'lib/livetext/formatter.rb', line 27
def status(where)
if $debug
STDERR.printf "%-11s %-7s #{@marker.inspect} \n #{' '*11} state = %-8s str = %-20s buffer = %-20s cdata = %-20s\n",
where, self.class, @state, @str.inspect, @buffer.inspect, @cdata.inspect
end
end
|
#terminated? ⇒ Boolean
62
63
64
|
# File 'lib/livetext/formatter.rb', line 62
def terminated?
space?
end
|
#wrap(text) ⇒ Object
74
75
76
77
78
79
80
81
|
# File 'lib/livetext/formatter.rb', line 74
def wrap(text)
if text.empty?
result = @marker
result = "" if @marker[1] == "["
return result
end
"<#{@tag}>#{text}</#{@tag}>"
end
|