livetext 0.9.32 → 0.9.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6069fc394894011ca9f5ed2db3022b62a3a8c541c51566126551297e60eec74
4
- data.tar.gz: b95803194c64a840262b4912e9116905c27a1879e4f6ec4309ae48404b31fa7e
3
+ metadata.gz: fb4392b3c99d41bf20385de2f5cbb25846fb9193ab303072075d0baf904912d2
4
+ data.tar.gz: b7fb45dd41a63f9c2cf39afa6e8973f53a8828c1063a341ad8ecd78eb4468f96
5
5
  SHA512:
6
- metadata.gz: '046369b5d8a1c659fc210eea5134e79d9c8c0cfff0a2a833fff84b89001b115f4bd326fcf10cddcabc284e3abf964ad59e43330f7b4783dc4fba7d4255e66db9'
7
- data.tar.gz: 20fb083bbd8d727c5e5774c784afa49f9a0edd58e339bdd4b7966916ffa94cbe335c6f702c841b67b75c053c88592b7b864eb9abef60aa96a9a949f5171769e0
6
+ metadata.gz: 06e2d46af57bb812baecb5afcc30147abc862df4c4a0619f0151b3b2e6db3c78d7ef7f05eb8cab1e388a7efd73d7ca67ac2143fb5fb901f0b5abcf233b9dcb86
7
+ data.tar.gz: 0575eaf1bcf527c19ba6ea7ecf7d28b36c6f4dab8b4b81a57185bb9454452af4127bf60dea9a8d15039f29a7919ad7930a99e8aacf6f74ad4f55554bb9ade072
data/bin/livetext CHANGED
@@ -66,7 +66,7 @@ end
66
66
 
67
67
  def install_plugin
68
68
  lib = ARGV.shift
69
- system("cp #{lib} #{Livetext::Path}/../plugin/")
69
+ system("cp #{lib} #{Livetext::Path}/../../plugin/")
70
70
  end
71
71
 
72
72
  def parse_command_line
data/imports/bookish.rb CHANGED
@@ -98,14 +98,18 @@ module Bookish
98
98
  end
99
99
 
100
100
  def sec(args = nil, body = nil)
101
+ api.tty "## sec: cp 1"
101
102
  @sec += 1
102
103
  @sec2 = 0
103
104
  @section = "#@chapter.#@sec"
105
+ api.tty "## sec: cp 2"
104
106
  title = api.data.dup
105
107
  @toc << "#{_nbsp(3)}<b>#@section</b> #{title}<br>"
106
- api.data = _slug(api.data)
108
+ api.data = _slug(title)
109
+ api.tty "## sec: cp 3"
107
110
  next_output
108
111
  api.out "<h3>#@section #{title}</h3>\n"
112
+ api.tty "## sec: cp 4"
109
113
  rescue => err
110
114
  ::STDERR.puts "#{err}\n#{err.backtrace}"
111
115
  exit
@@ -41,7 +41,6 @@ module Formatter
41
41
  end
42
42
 
43
43
  def grab_terminator
44
- status("** grabterm 0")
45
44
  @state = :LOOPING
46
45
  # goes onto buffer by default
47
46
  # Don't? what if searching for space_marker?
@@ -73,7 +72,6 @@ module Formatter
73
72
  end
74
73
 
75
74
  def wrap(text)
76
- status("** wrap 0")
77
75
  if text.empty?
78
76
  result = @marker
79
77
  result = "" if @marker[1] == "["
@@ -83,60 +81,45 @@ module Formatter
83
81
  end
84
82
 
85
83
  def initial
86
- status("** init 0")
87
84
  n = @marker.length
88
85
  case
89
86
  when escape?
90
- status("** esc i0")
91
87
  grab # backslash
92
- status("** esc i1")
93
88
  @buffer << grab # char
94
- status("** esc i2")
95
89
  when space_marker?
96
- status("** init 1")
97
90
  @buffer << grab # append the space
98
91
  grab(n) # eat the marker
99
92
  @state = :CDATA
100
93
  when marker?
101
- status("** init 2")
102
94
  grab(n) # Eat the marker
103
95
  @state = :CDATA
104
96
  when eol?
105
- status("** init 3")
106
97
  @state = :FINAL
107
98
  else
108
- status("** init 4")
109
99
  @state = :BUFFER
110
100
  end
111
101
  end
112
102
 
113
103
  def buffer
114
- status("** buffer 0")
115
104
  @buffer << grab
116
105
  @state = :LOOPING
117
106
  end
118
107
 
119
108
  def cdata
120
- status("** cdata 0")
121
109
  case
122
110
  when eol?
123
- status("** cdata 1")
124
111
  if @cdata.empty?
125
- status("** cdata 2")
126
112
  @buffer << @marker unless @marker[1] == "["
127
113
  else
128
- status("** cdata 3")
129
114
  @buffer << wrap(@cdata)
130
115
  end
131
116
  @state = :FINAL
132
117
  when terminated?
133
- status("** cdata 4")
134
118
  @buffer << wrap(@cdata)
135
119
  grab_terminator # "*a *b" case???
136
120
  @cdata = ""
137
121
  @state = :LOOPING
138
122
  else
139
- status("** cdata 5")
140
123
  @cdata << grab
141
124
  @state = :CDATA
142
125
  end
@@ -146,11 +129,8 @@ module Formatter
146
129
  n = @marker.length
147
130
  case
148
131
  when escape?
149
- status("** esc l0")
150
132
  grab # backslash
151
- status("** esc l1")
152
133
  @buffer << grab # char
153
- status("** esc l2")
154
134
  when space_marker?
155
135
  @buffer << grab # append the space
156
136
  grab(n) # eat the marker
data/lib/livetext/html.rb CHANGED
@@ -1,43 +1,48 @@
1
1
 
2
- module HTMLHelper
3
-
4
- def wrapped(str, *tags) # helper
5
- open, close = open_close_tags(*tags)
6
- open + str + close
7
- end
8
-
9
- def wrapped!(str, tag, **extras) # helper
10
- open, close = open_close_tags(tag)
11
- extras.each_pair do |name, value|
12
- open.sub!(">", " #{name}='#{value}'>")
13
- end
14
- open + str + close
15
- end
16
-
17
- def wrap(*tags) # helper
18
- open, close = open_close_tags(*tags)
19
- api.out open
20
- yield
21
- api.out close
22
- end
23
-
24
- def open_close_tags(*tags)
25
- open, close = "", ""
26
- tags.each do |tag|
27
- open << "<#{tag}>"
28
- close.prepend("</#{tag}>")
29
- end
30
- [open, close]
31
- end
32
- end
2
+ # module HTMLHelper
3
+ #
4
+ # def wrapped(str, *tags) # helper
5
+ # open, close = open_close_tags(*tags)
6
+ # open + str + close
7
+ # end
8
+ #
9
+ # def wrapped!(str, tag, **extras) # helper
10
+ # open, close = open_close_tags(tag)
11
+ # extras.each_pair do |name, value|
12
+ # open.sub!(">", " #{name}='#{value}'>")
13
+ # end
14
+ # open + str + close
15
+ # end
16
+ #
17
+ # def wrap(*tags) # helper
18
+ # open, close = open_close_tags(*tags)
19
+ # api.out open
20
+ # yield
21
+ # api.out close
22
+ # end
23
+ #
24
+ # def open_close_tags(*tags)
25
+ # open, close = "", ""
26
+ # tags.each do |tag|
27
+ # open << "<#{tag}>"
28
+ # close.prepend("</#{tag}>")
29
+ # end
30
+ # [open, close]
31
+ # end
32
+ # end
33
33
 
34
34
  class HTML
35
35
 
36
36
  def initialize(api)
37
+ raise "API is nil!" unless api
37
38
  @api = api
38
39
  @indent = 0
39
40
  end
40
41
 
42
+ def api
43
+ @api
44
+ end
45
+
41
46
  def indented
42
47
  " "*@indent
43
48
  end
@@ -69,10 +74,6 @@ class HTML
69
74
  wrap(:li, **details, &block)
70
75
  end
71
76
 
72
- def api
73
- @api
74
- end
75
-
76
77
  def open_close_tags(*tags)
77
78
  open, close = "", ""
78
79
  tags.each do |tag|
@@ -87,6 +88,7 @@ class HTML
87
88
  extras.each_pair do |name, value|
88
89
  open.sub!(">", " #{name}='#{value}'>")
89
90
  end
91
+ # STDERR.puts "#wrap - @api = #{@api.inspect}\n-----------"
90
92
  api.out indented + open
91
93
  indent(:in)
92
94
  yield
data/lib/livetext/more.rb CHANGED
@@ -7,6 +7,7 @@ class Livetext
7
7
 
8
8
  class Variables
9
9
  attr_reader :vars
10
+
10
11
  def initialize(hash = {})
11
12
  @vars = {}
12
13
  hash.each_pair {|k, v| @vars[k.to_sym] = v }
@@ -34,6 +35,10 @@ class Livetext
34
35
  api.setvar(var, value)
35
36
  end
36
37
  end
38
+
39
+ def to_a
40
+ @vars.to_a
41
+ end
37
42
  end
38
43
 
39
44
  Vars = Variables.new
@@ -95,7 +100,10 @@ class Livetext
95
100
  obj = self.new
96
101
  mix = Array(mix)
97
102
  call = Array(call)
98
- mix.each {|lib| obj.mixin(lib) }
103
+ # STDERR.puts "#{__method__}: obj meth = #{obj.methods.sort.inspect}"
104
+ mix.each do |lib|
105
+ obj.invoke_dotcmd(:mixin, lib.dup)
106
+ end
99
107
  call.each {|cmd| obj.main.send(cmd[1..-1]) } # ignores leading dot, no param
100
108
  # vars.each_pair {|var, val| obj.setvar(var, val.to_s) }
101
109
  obj.api.setvars(vars)
@@ -130,6 +138,10 @@ class Livetext
130
138
  @api
131
139
  end
132
140
 
141
+ def api=(obj)
142
+ @api = obj
143
+ end
144
+
133
145
  def initial_vars
134
146
  # Other predefined variables (see also setfile)
135
147
  @api.setvar(:User, `whoami`.chomp)
@@ -27,6 +27,8 @@ class Processor
27
27
 
28
28
  def initialize(parent, output = nil)
29
29
  @parent = parent
30
+ # STDERR.puts "PARENT.api = #{parent.api.inspect}"
31
+ @parent.api ||= Livetext::UserAPI.new(@parent)
30
32
  @nopass = false
31
33
  @nopara = false
32
34
  # Meh?
@@ -14,7 +14,7 @@ make_exception(:FileNotFound, "Error: file '%1' not found")
14
14
 
15
15
  module Livetext::Standard
16
16
 
17
- include HTMLHelper
17
+ # include HTMLHelper
18
18
  include Livetext::Helpers
19
19
 
20
20
  TTY = ::File.open("/dev/tty", "w")
@@ -82,14 +82,14 @@ module Livetext::Standard
82
82
  def h6; api.out wrapped(api.data, :h6); return true; end
83
83
 
84
84
  def list
85
- wrap :ul do
85
+ html.wrap :ul do
86
86
  api.body {|line| api.out wrapped(line, :li) }
87
87
  end
88
88
  api.optional_blank_line
89
89
  end
90
90
 
91
91
  def list!
92
- wrap(:ul) do
92
+ html.wrap(:ul) do
93
93
  lines = api.body.each # enumerator
94
94
  loop do
95
95
  line = lines.next
@@ -173,7 +173,6 @@ module Livetext::Standard
173
173
  lines = api.body
174
174
  end
175
175
  pairs = Livetext::ParseGeneral.parse_vars(lines, prefix: nil)
176
- STDERR.puts "! pairs = #{pairs.inspect}"
177
176
  api.setvars(pairs)
178
177
  api.optional_blank_line
179
178
  end
@@ -189,7 +188,6 @@ STDERR.puts "! pairs = #{pairs.inspect}"
189
188
  lines = api.body
190
189
  end
191
190
  pairs = Livetext::ParseGeneral.parse_vars(lines, prefix: nil)
192
- STDERR.puts "pairs = #{pairs.inspect}"
193
191
  api.setvars(pairs)
194
192
  api.optional_blank_line
195
193
  end
@@ -217,7 +215,7 @@ STDERR.puts "pairs = #{pairs.inspect}"
217
215
  end
218
216
 
219
217
  def dot_include # dot command
220
- file = api.args.first # api.format(api.args.first) # allows for variables
218
+ file = api.expand_variables(api.args.first) # allows for variables
221
219
  check_file_exists(file)
222
220
  @parent.process_file(file)
223
221
  api.optional_blank_line
@@ -283,7 +281,7 @@ STDERR.puts "pairs = #{pairs.inspect}"
283
281
  end
284
282
 
285
283
  def debug
286
- self._debug = onoff(api.args.first)
284
+ self.debug = onoff(api.args.first)
287
285
  api.optional_blank_line
288
286
  end
289
287
 
@@ -323,7 +321,7 @@ STDERR.puts "pairs = #{pairs.inspect}"
323
321
  end
324
322
 
325
323
  def mono
326
- wrap ":pre" do
324
+ html.wrap ":pre" do
327
325
  api.body(true) {|line| api.out line }
328
326
  end
329
327
  api.optional_blank_line
@@ -331,7 +329,7 @@ STDERR.puts "pairs = #{pairs.inspect}"
331
329
 
332
330
  def dlist
333
331
  delim = api.args.first
334
- wrap(:dl) do
332
+ html.wrap(:dl) do
335
333
  api.body do |line|
336
334
  line = api.format(line)
337
335
  term, defn = line.split(delim)
@@ -371,7 +369,7 @@ STDERR.puts "pairs = #{pairs.inspect}"
371
369
 
372
370
  processed.each do |line|
373
371
  cells = line.split(delim)
374
- wrap :tr do
372
+ html.wrap :tr do
375
373
  cells.each {|cell| api.out " <td valign=top>#{cell}</td>" }
376
374
  end
377
375
  end
@@ -380,8 +378,10 @@ STDERR.puts "pairs = #{pairs.inspect}"
380
378
  end
381
379
 
382
380
  def image
383
- name = api.args[0]
384
- api.out "<img src='#{name}'></img>"
381
+ name, wide, high = api.args
382
+ geom = ""
383
+ geom = "width=#{wide} height=#{high}" if wide || high
384
+ api.out "<img src='#{name} #{geom}'></img>"
385
385
  api.optional_blank_line
386
386
  end
387
387
 
@@ -5,6 +5,8 @@ require_relative 'html'
5
5
 
6
6
  class Livetext::UserAPI
7
7
 
8
+ include ::Livetext::Standard
9
+
8
10
  KBD = File.new("/dev/tty", "r")
9
11
  TTY = File.new("/dev/tty", "w")
10
12
 
@@ -31,12 +33,28 @@ class Livetext::UserAPI
31
33
  @live
32
34
  end
33
35
 
36
+ def include_file(file)
37
+ api.data = file
38
+ api.args = [file]
39
+ STDERR.puts "incfile: #{api.methods.sort.inspect}\n "
40
+ api.dot_include
41
+ end
42
+
43
+ def expand_variables(str)
44
+ @expander.expand_variables(str)
45
+ end
46
+
47
+ def expand_functions(str)
48
+ @expander.expand_functions(str)
49
+ end
50
+
34
51
  def setvar(var, val) # FIXME
35
52
  @live.vars.set(var, val)
36
53
  end
37
54
 
38
55
  def setvars(pairs)
39
- pairs = pairs.to_a if pairs.is_a?(Hash)
56
+ # STDERR.puts "#{__method__}: pairs = #{pairs.inspect} (#{pairs.class})"
57
+ pairs = pairs.to_a # could be Hash or Variables
40
58
  pairs.each do |var, value|
41
59
  @live.vars.set(var, value)
42
60
  end
@@ -2,5 +2,5 @@
2
2
  # Defining VERSION
3
3
 
4
4
  class Livetext
5
- VERSION = "0.9.32"
5
+ VERSION = "0.9.35"
6
6
  end
data/plugin/bookish.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  def hardbreaks(args = nil, body = nil)
2
2
  @hard = false
3
3
  @hard = true unless api.args.first == "off"
4
+ api.optional_blank_line
4
5
  end
5
6
 
6
7
  def hardbreaks?
@@ -9,13 +10,14 @@ end
9
10
 
10
11
  def credit(args = nil, body = nil)
11
12
  # really just a place marker in source
13
+ api.optional_blank_line
12
14
  end
13
15
 
14
16
  # These are duplicated. Remove safely
15
17
 
16
- def h1; api.out "<h1>#{api.data}</h1>"; end
17
- def h2; api.out "<h2>#{api.data}</h2>"; end
18
- def h3; api.out "<h3>#{api.data}</h3>"; end
18
+ def h1; api.out "<h1>#{api.data}</h1>"; api.optional_blank_line; end
19
+ def h2; api.out "<h2>#{api.data}</h2>"; api.optional_blank_line; end
20
+ def h3; api.out "<h3>#{api.data}</h3>"; api.optional_blank_line; end
19
21
 
20
22
  def alpha_columns(args = nil, body = nil)
21
23
  n = api.args.first.to_i # FIXME: what if it's missing?
@@ -30,6 +32,7 @@ def alpha_columns(args = nil, body = nil)
30
32
  api.out "<tr><td width=5% valign=top></td><td>" + items.join("</td><td>") + "</td></tr>"
31
33
  end
32
34
  api.out "</table>"
35
+ api.optional_blank_line
33
36
  end
34
37
 
35
38
  # def comment
@@ -55,6 +58,7 @@ end
55
58
  def image(args = nil, body = nil)
56
59
  name = api.args[0]
57
60
  api.out "<img src='#{name}'></img>"
61
+ api.optional_blank_line
58
62
  end
59
63
 
60
64
  def figure(args = nil, body = nil)
@@ -64,6 +68,7 @@ def figure(args = nil, body = nil)
64
68
  title = api.format(title)
65
69
  api.out "<img src='#{name}'></img>"
66
70
  api.out "<center><b>Figure #{num}</b> #{title}</center>"
71
+ api.optional_blank_line
67
72
  end
68
73
 
69
74
  def chapter(args = nil, body = nil)
@@ -79,6 +84,7 @@ def chapter(args = nil, body = nil)
79
84
  <h1>#{title}</h1>
80
85
 
81
86
  HTML
87
+ api.optional_blank_line
82
88
  end
83
89
 
84
90
  def chapterN(args = nil, body = nil)
@@ -95,6 +101,7 @@ def chapterN(args = nil, body = nil)
95
101
  <h1>#{title}</h1>
96
102
 
97
103
  HTML
104
+ api.optional_blank_line
98
105
  end
99
106
 
100
107
  def sec(args = nil, body = nil)
@@ -106,7 +113,9 @@ def sec(args = nil, body = nil)
106
113
  api.data = _slug(api.data)
107
114
  next_output
108
115
  api.out "<h3>#@section #{title}</h3>\n"
116
+ api.optional_blank_line
109
117
  rescue => err
118
+ api.tty "#{err}\n#{err.backtrace}"
110
119
  ::STDERR.puts "#{err}\n#{err.backtrace}"
111
120
  exit
112
121
  end
@@ -119,6 +128,7 @@ def subsec(args = nil, body = nil)
119
128
  api.data = _slug(api.data)
120
129
  next_output
121
130
  api.out "<h3>#@subsec #{title}</h3>\n"
131
+ api.optional_blank_line
122
132
  end
123
133
 
124
134
  def definition_table(args = nil, body = nil)
@@ -234,6 +244,7 @@ end
234
244
  def toc!(args = nil, body = nil)
235
245
  _debug "Closing TOC"
236
246
  @toc.close
247
+ api.optional_blank_line
237
248
  rescue => err
238
249
  puts @parent.body
239
250
  @parent.body = ""
@@ -251,29 +262,34 @@ def toc2(args = nil, body = nil)
251
262
 
252
263
  EOS
253
264
  system("cat toc.tmp >>#{file}")
265
+ api.optional_blank_line
254
266
  end
255
267
 
256
268
  def missing(args = nil, body = nil)
257
269
  @toc << "#{_nbsp(8)}<font color=red>TBD: #{api.data}</font><br>"
258
270
  stuff = api.data.empty? ? "" : ": #{api.data}"
259
271
  api.out "<br><font color=red><i>[Material missing#{stuff}]</i></font><br>\n "
272
+ api.optional_blank_line
260
273
  end
261
274
 
262
275
  def TBC(args = nil, body = nil)
263
276
  @toc << "#{_nbsp(8)}<font color=red>To be continued...</font><br>"
264
277
  api.out "<br><font color=red><i>To be continued...</i></font><br>"
278
+ api.optional_blank_line
265
279
  end
266
280
 
267
281
  def note(args = nil, body = nil)
268
282
  api.out "<br><font color=red><i>Note: "
269
283
  api.out api.data
270
284
  api.out "</i></font><br>\n "
285
+ api.optional_blank_line
271
286
  end
272
287
 
273
288
  def quote(args = nil, body = nil)
274
289
  api.out "<blockquote>"
275
290
  api.body {|line| api.out line }
276
291
  api.out "</blockquote>"
292
+ api.optional_blank_line
277
293
  rescue => err
278
294
  ::STDERR.puts "#{err}\n#{err.backtrace}"
279
295
  exit
@@ -285,3 +301,102 @@ def init_bookish
285
301
  @chapter = -1
286
302
  end
287
303
 
304
+ ################### custom.rb
305
+
306
+
307
+ def outdir
308
+ @_outdir = api.args.first
309
+ # @output = STDOUT
310
+ @output = nil
311
+ api.optional_blank_line
312
+ end
313
+
314
+ def outdir! # FIXME ?
315
+ @_outdir = api.args.first
316
+ raise "No output directory specified" if @_outdir.nil?
317
+ raise "No output directory specified" if @_outdir.empty?
318
+ system("rm -f #@_outdir/*.html")
319
+ api.optional_blank_line
320
+ end
321
+
322
+ def _append(name)
323
+ @_outdir ||= "."
324
+ @output.close unless @output == STDOUT
325
+ @output = File.open(@_outdir + "/" + name, "a")
326
+ @output.puts "<meta charset='UTF-8'>\n\n"
327
+ end
328
+
329
+
330
+ def append
331
+ file = api.args[0]
332
+ _append(file)
333
+ end
334
+
335
+ def close_output
336
+ return if @output == STDOUT
337
+ @_outdir ||= "."
338
+ @output.puts "<meta charset='UTF-8'>\n\n"
339
+ @output.puts @parent.body
340
+ @output.close
341
+ @parent.body = "" # See bin/livetext
342
+ @output = STDOUT
343
+ end
344
+
345
+ def _prep_next_output(args)
346
+ tag, num = args # _next_output(tag, num)
347
+ @_file_num = num ? num : @_file_num + 1
348
+ @_file_num = @_file_num.to_i
349
+ name = "#{'%03d' % @_file_num}-#{tag}.html"
350
+ api.tty "tag, num, name= #{[tag, num, name].inspect}"
351
+ name
352
+ end
353
+
354
+ def next_output
355
+ name = _prep_next_output(api.args)
356
+ @_outdir ||= "."
357
+ unless @output.nil?
358
+ @output.puts "<meta charset='UTF-8'>\n\n"
359
+ @output.puts @parent.body
360
+ @parent.body = ""
361
+ @output.close unless @output == STDOUT
362
+ end
363
+ fname = @_outdir + "/" + name
364
+ @output = File.open(fname, "w")
365
+ api.optional_blank_line
366
+ end
367
+
368
+ def output
369
+ name = api.args.first
370
+ _debug "Redirecting output to: #{name}"
371
+ # _output(name)
372
+ @_outdir ||= "." # FIXME
373
+ @output.puts "<meta charset='UTF-8'>\n\n"
374
+ @output.puts @parent.body
375
+ @parent.body = ""
376
+ @output.close unless @output == STDOUT
377
+ fname = @_outdir + "/" + name #; STDERR.puts "--- _output: fname = #{fname.inspect}"
378
+ @output = File.open(fname, "w") #; STDERR.puts "---- @out = #{@output.inspect}"
379
+ end
380
+
381
+ def columns
382
+ api.out "<table border=1><tr><td valign=top><br>\n"
383
+ api.body.to_a.each do |line|
384
+ if line.start_with?("##col")
385
+ api.out "</td><td valign=top>"
386
+ elsif line.start_with?("##row")
387
+ api.out "</td></tr><tr><td valign=top>"
388
+ else
389
+ api.out line
390
+ end
391
+ end
392
+ api.out "<br>\n</td></tr></table>"
393
+ end
394
+
395
+ def quote
396
+ api.out "<blockquote>"
397
+ lines = api.body.to_a
398
+ # STDERR.puts "-----------------------------------------------------"
399
+ # STDERR.puts lines.inspect
400
+ lines.each {|line| api.out line }
401
+ api.out "</blockquote>"
402
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: livetext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.32
4
+ version: 0.9.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2023-03-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A smart text processor extensible in Ruby
14
14
  email: rubyhacker@gmail.com