livetext 0.9.03 → 0.9.08

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 868972bd6d69160614982ec1673ffe4b1e6b52cc0c37b3f3665b4cd63a9465c4
4
- data.tar.gz: bb03f156bed4713bfa30804c6bb4fb5057a22db84523774a90649e62e22ac8f6
3
+ metadata.gz: f983f97d1e649079c9ae7b8c059c099eb3fb4b70b3df8afa026aefad4009f83e
4
+ data.tar.gz: 5efeb66838ae1b36dff234d548e0835f6617af739c653d9e6af8888c68b09c02
5
5
  SHA512:
6
- metadata.gz: f44235d6cd9649515ae9b6fed910b233f90c37f92c54bec3183f718b83e918ef95192aa8e8c08ec8b2eca16edbcbcc519a002214efeff4d042d7056f8a3a3a78
7
- data.tar.gz: 148fa1af92fa0320bbbe3db92fb89cd24d4ebc0620d65343c1c0120c1a61c5612df7fe27bf2d6b0cf805189e00a566487cda712a4e1e09be3ce1f4e9ea035999
6
+ metadata.gz: 957fccd4430db4bd5dfcaa889829e753b180ee9a48635ba88769dd6e2645768cbff293c887d6202dcfc58474deaa56bc03ce18973f612ec138b85db636909988
7
+ data.tar.gz: 18c66b6647b1bd78c75b5bf4c7d0b7b5649fc2f403b1013dedec8a7e0203fa0758ef17f5fd7f731705a9428ac993e8a449b6092b551a4708d84bf13848bdfd1b
@@ -1,5 +1,5 @@
1
1
  class Livetext
2
- VERSION = "0.9.03"
2
+ VERSION = "0.9.08"
3
3
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
4
4
  end
5
5
 
@@ -31,6 +31,10 @@ class Livetext
31
31
  attr_accessor :output # both bad solutions?
32
32
  end
33
33
 
34
+ def vars
35
+ Livetext::Vars.dup
36
+ end
37
+
34
38
  def self.customize(mix: [], call: [], vars: {})
35
39
  obj = self.new
36
40
  mix = Array(mix)
@@ -50,10 +54,6 @@ class Livetext
50
54
  self
51
55
  end
52
56
 
53
- def vars
54
- Livetext::Vars.dup
55
- end
56
-
57
57
  Space = " "
58
58
  Sigil = "." # Can't change yet
59
59
 
@@ -73,29 +73,30 @@ class Livetext
73
73
  @body = ""
74
74
  @main = Processor.new(self, output)
75
75
  @indentation = [0]
76
+ @_vars = Livetext::Vars
76
77
  end
77
78
 
78
- def _parse_colon_args(args, hash) # really belongs in livetext
79
- h2 = hash.dup
80
- e = args.each
81
- loop do
82
- arg = e.next.chop.to_sym
83
- raise "_parse_args: #{arg} is unknown" unless hash.keys.include?(arg)
84
- h2[arg] = e.next
79
+ def _parse_colon_args(args, hash) # really belongs in livetext
80
+ h2 = hash.dup
81
+ e = args.each
82
+ loop do
83
+ arg = e.next.chop.to_sym
84
+ raise "_parse_args: #{arg} is unknown" unless hash.keys.include?(arg)
85
+ h2[arg] = e.next
86
+ end
87
+ h2 = h2.reject {|k,v| v.nil? }
88
+ h2.each_pair {|k, v| raise "#{k} has no value" if v.empty? }
89
+ h2
85
90
  end
86
- h2 = h2.reject {|k,v| v.nil? }
87
- h2.each_pair {|k, v| raise "#{k} has no value" if v.empty? }
88
- h2
89
- end
90
91
 
91
- def _get_arg(name, args) # really belongs in livetext
92
- raise "(#{name}) Expected an array" unless args.is_a? Array
93
- raise "(#{name}) Expected an arg" if args.empty?
94
- raise "(#{name}) Too many args: #{args.inspect}" if args.size > 1
95
- val = args[0]
96
- raise "Expected an argument '#{name}'" if val.nil?
97
- val
98
- end
92
+ def _get_arg(name, args) # really belongs in livetext
93
+ raise "(#{name}) Expected an array" unless args.is_a? Array
94
+ raise "(#{name}) Expected an arg" if args.empty?
95
+ raise "(#{name}) Too many args: #{args.inspect}" if args.size > 1
96
+ val = args[0]
97
+ raise "Expected an argument '#{name}'" if val.nil?
98
+ val
99
+ end
99
100
 
100
101
  def mixin(mod)
101
102
  @main._mixin(mod)
@@ -105,6 +106,8 @@ end
105
106
  str, sym = var.to_s, var.to_sym
106
107
  Livetext::Vars[str] = val
107
108
  Livetext::Vars[sym] = val
109
+ @_vars[str] = val
110
+ @_vars[sym] = val
108
111
  end
109
112
 
110
113
  def _setfile(file)
@@ -123,6 +126,7 @@ end
123
126
  when Comment
124
127
  handle_scomment(line)
125
128
  when Dotcmd
129
+ STDERR.puts "line = #{line.inspect}"
126
130
  handle_dotcmd(line)
127
131
  when Ddotcmd
128
132
  indent = line.index("$") + 1
@@ -166,50 +170,13 @@ end
166
170
  self.body
167
171
  end
168
172
 
169
- def xform_file(file, vars: {})
173
+ def xform_file(file) # , vars: {})
170
174
  Livetext::Vars.replace(vars) unless vars.nil?
175
+ @_vars.replace(vars) unless vars.nil?
171
176
  self.process_file(file)
172
177
  self.body
173
178
  end
174
179
 
175
- # def transform(text)
176
- # _setfile!("(string)")
177
- # @output = ::Livetext.output
178
- # enum = text.each_line
179
- # front = text.match(/.*?\n/).to_a.first.chomp rescue "..."
180
- # @main.source(enum, "STDIN: '#{front}...'", 0)
181
- # loop do
182
- # line = @main.nextline
183
- # break if line.nil?
184
- # process_line(line) # transform_line ???
185
- # end
186
- # @body
187
- # end
188
-
189
- ## FIXME don't need process *and* process_text
190
-
191
- # def process_text(text)
192
- # _setfile!("(string)")
193
- # text = text.split("\n") if text.is_a? String
194
- # enum = text.each
195
- # @backtrace = false
196
- # front = text[0].chomp
197
- # @main.source(enum, "(text): '#{front}...'", 0)
198
- # loop do
199
- # line = @main.nextline
200
- # break if line.nil?
201
- # process_line(line)
202
- # end
203
- # val = @main.finalize if @main.respond_to? :finalize
204
- # val
205
- # rescue => err
206
- # puts "process_text: err = #{err}"
207
- ## puts err.backtrace.join("\n")
208
- # puts @body
209
- # @body = ""
210
- # return @body
211
- # end
212
-
213
180
  ## FIXME process_file[!] should call process[_text]
214
181
 
215
182
  def process_file(fname, btrace=false)
@@ -218,6 +185,7 @@ end
218
185
  enum = text.each
219
186
  @backtrace = btrace
220
187
  @main.source(enum, fname, 0)
188
+ line = nil
221
189
  loop do
222
190
  line = @main.nextline
223
191
  break if line.nil?
@@ -226,26 +194,12 @@ end
226
194
  val = @main.finalize if @main.respond_to? :finalize
227
195
  @body
228
196
  rescue => err
197
+ STDERR.puts "[process_file] fname = #{fname.inspect}\n line = #{line.inspect}"
229
198
  STDERR.puts "ERROR #{err} in process_file"
230
199
  err.backtrace.each {|x| STDERR.puts " " + x }
231
200
  @body = ""
232
201
  end
233
202
 
234
- # def process_file!(fname, backtrace=false)
235
- # _setfile(fname)
236
- # raise "No such file '#{fname}' to process" unless File.exist?(fname)
237
- # @main.output = StringIO.new
238
- # enum = File.readlines(fname).each
239
- # @backtrace = backtrace
240
- # @main.source(enum, fname, 0)
241
- # loop do
242
- # line = @main.nextline
243
- # break if line.nil?
244
- # process_line(line)
245
- # end
246
- # @main.finalize if @main.respond_to? :finalize
247
- # end
248
-
249
203
  def handle_scomment(line)
250
204
  end
251
205
 
@@ -265,7 +219,7 @@ end
265
219
 
266
220
  def handle_dotcmd(line, indent = 0)
267
221
  indent = @indentation.last # top of stack
268
- line = line.sub(/# .*$/, "")
222
+ line = line.sub(/# .*$/, "")
269
223
  name = _get_name(line).to_sym
270
224
  result = nil
271
225
  if @main.respond_to?(name)
@@ -276,8 +230,10 @@ line = line.sub(/# .*$/, "")
276
230
  end
277
231
  result
278
232
  rescue => err
233
+ STDERR.puts "Error was: #{err.inspect} (calling @main._error!)"
234
+ STDERR.puts err.backtrace
279
235
  @main._error!(err)
280
- puts @body
236
+ # puts @body
281
237
  @body = ""
282
238
  return @body
283
239
  end
@@ -35,7 +35,8 @@ class Livetext
35
35
  def _error!(err, abort=true, trace=false)
36
36
  where = @sources.last || @save_location
37
37
  puts @parent.body
38
- STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
38
+ STDERR.puts "[lib/processor] Error: #{err}" # (at #{where[1]} line #{where[2]})"
39
+ raise "lib/processor error!"
39
40
  STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
40
41
  exit if abort
41
42
  end
@@ -43,12 +43,42 @@ module Livetext::Standard
43
43
  _error! "Illegal name '#{funcname}'" if _disallowed?(funcname)
44
44
  func_def = <<-EOS
45
45
  def #{funcname}(param)
46
- #{_body_text(true)}
46
+ #{_body.to_a.join("\n")}
47
47
  end
48
48
  EOS
49
+ _optional_blank_line
50
+
49
51
  Livetext::Functions.class_eval func_def
50
52
  end
51
53
 
54
+ def h1; _out "<h1>#{@_data}</h1>"; end
55
+ def h2; _out "<h2>#{@_data}</h2>"; end
56
+ def h3; _out "<h3>#{@_data}</h3>"; end
57
+ def h4; _out "<h4>#{@_data}</h4>"; end
58
+ def h5; _out "<h5>#{@_data}</h5>"; end
59
+ def h6; _out "<h6>#{@_data}</h6>"; end
60
+
61
+ def list
62
+ _out "<ul>"
63
+ _body {|line| _out "<li>#{line}</li>" }
64
+ _out "</ul>"
65
+ end
66
+
67
+ def list!
68
+ _out "<ul>"
69
+ lines = _body.each # {|line| _out "<li>#{line}</li>" }
70
+ loop do
71
+ line = lines.next
72
+ line = _format(line)
73
+ if line[0] == " "
74
+ _out line
75
+ else
76
+ _out "<li>#{line}</li>"
77
+ end
78
+ end
79
+ _out "</ul>"
80
+ end
81
+
52
82
  def shell!
53
83
  cmd = @_data.chomp
54
84
  system(cmd)
@@ -195,6 +225,26 @@ EOS
195
225
  end
196
226
  end
197
227
 
228
+ def variables! # cwd, not FileDir - weird, fix later
229
+ prefix = _args[0]
230
+ file = _args[1]
231
+ prefix = nil if prefix == "-" # FIXME dumb hack
232
+ if file
233
+ here = "" # different for ! version
234
+ lines = File.readlines(here + file)
235
+ else
236
+ lines = _body
237
+ end
238
+ lines.map! {|x| x.sub(/# .*/, "").strip } # strip comments
239
+ lines.each do |line|
240
+ next if line.strip.empty?
241
+ var, val = line.split(" ", 2)
242
+ val = FormatLine.var_func_parse(val)
243
+ var = prefix + "." + var if prefix
244
+ @parent._setvar(var, val)
245
+ end
246
+ end
247
+
198
248
  def variables
199
249
  prefix = _args[0]
200
250
  file = _args[1]
@@ -219,13 +269,21 @@ EOS
219
269
  eval _data.chomp
220
270
  end
221
271
 
272
+ def heredoc! # adds <br>...
273
+ _heredoc(true)
274
+ end
275
+
222
276
  def heredoc
277
+ _heredoc
278
+ end
279
+
280
+ def _heredoc(bang=false)
223
281
  var = @_args[0]
224
282
  str = _body.join("\n")
225
283
  s2 = ""
226
284
  str.each_line do |s|
227
285
  str = FormatLine.var_func_parse(s.chomp)
228
- s2 << str # + "<br>"
286
+ s2 << str + "<br>"
229
287
  end
230
288
  indent = @parent.indentation.last
231
289
  indented = " " * indent
@@ -250,8 +308,10 @@ EOS
250
308
  break if value
251
309
  end
252
310
  end
311
+ STDERR.puts "Cannot find #{file.inspect} from #{Dir.pwd}" unless value
253
312
  return value
254
313
  rescue
314
+ STDERR.puts "Can't find #{file.inspect} from #{Dir.pwd}"
255
315
  return nil
256
316
  end
257
317
 
@@ -259,21 +319,25 @@ EOS
259
319
  # like include, but search upward as needed
260
320
  file = @_args.first
261
321
  file = _seek(file)
262
- _error!(file, "No such include file '#{file}'") unless file
322
+ _error!("No such include file #{file.inspect}") unless file
263
323
  @parent.process_file(file)
264
324
  _optional_blank_line
325
+ rescue => err
326
+ STDERR.puts ".seek error - #{err}"
327
+ STDERR.puts err.inspect
328
+ return nil
265
329
  end
266
330
 
267
331
  def in_out # FIXME dumb name!
268
332
  file, dest = *@_args
269
- _check_existence(file, "No such include file '#{file}'")
333
+ _check_existence(file, "No such include file #{file.inspect}")
270
334
  @parent.process_file(file, dest)
271
335
  _optional_blank_line
272
336
  end
273
337
 
274
338
  def _include
275
339
  file = @_args.first
276
- _check_existence(file, "No such include file '#{file}'")
340
+ _check_existence(file, "No such include file #{file.inspect}")
277
341
  @parent.process_file(file)
278
342
  _optional_blank_line
279
343
  end
@@ -320,7 +384,7 @@ EOS
320
384
  Dir.chdir("..") { mixin }
321
385
  return
322
386
  else
323
- STDERR.puts "No such mixin '#{name}"
387
+ STDERR.puts "No such mixin '#{name}'"
324
388
  puts @body
325
389
  exit!
326
390
  end
@@ -472,6 +536,11 @@ EOS
472
536
  _out "</table></center>"
473
537
  end
474
538
 
539
+ def image
540
+ name = @_args[0]
541
+ _out "<img src='#{name}'></img>"
542
+ end
543
+
475
544
  def br
476
545
  n = _args.first || "1"
477
546
  out = ""
@@ -19,7 +19,7 @@ module Livetext::UserAPI
19
19
  end
20
20
 
21
21
  def _args
22
- @_args = @_data.chomp.split
22
+ @_args = _format(@_data).chomp.split
23
23
  if block_given?
24
24
  @_args.each {|arg| yield arg }
25
25
  else
@@ -27,6 +27,10 @@ module Livetext::UserAPI
27
27
  end
28
28
  end
29
29
 
30
+ def _vars
31
+ @_vars.dup
32
+ end
33
+
30
34
  def _optional_blank_line
31
35
  peek = peek_nextline
32
36
  return if peek.nil?
@@ -90,7 +94,7 @@ module Livetext::UserAPI
90
94
  lines
91
95
  end
92
96
  rescue => err
93
- str << err.inspect + "\n"
97
+ str = err.inspect + "\n"
94
98
  str << err.backtrace.map {|x| " " + x }.join("\n")
95
99
  _error!(str)
96
100
  end
@@ -12,29 +12,9 @@ def credit
12
12
  end
13
13
 
14
14
  def h1; _out "<h1>#{@_data}</h1>"; end
15
+ def h2; _out "<h2>#{@_data}</h2>"; end
15
16
  def h3; _out "<h3>#{@_data}</h3>"; end
16
17
 
17
- def list
18
- _out "<ul>"
19
- _body {|line| _out "<li>#{line}</li>" }
20
- _out "</ul>"
21
- end
22
-
23
- def list!
24
- _out "<ul>"
25
- lines = _body.each # {|line| _out "<li>#{line}</li>" }
26
- loop do
27
- line = lines.next
28
- line = _format(line)
29
- if line[0] == " "
30
- _out line
31
- else
32
- _out "<li>#{line}</li>"
33
- end
34
- end
35
- _out "</ul>"
36
- end
37
-
38
18
  def alpha_columns
39
19
  n = @_args.first.to_i # FIXME: what if missing?
40
20
  words = []
@@ -42,7 +22,7 @@ def alpha_columns
42
22
  words << line.chomp
43
23
  end
44
24
  words.sort!
45
- _out "<table cellpadding=10>"
25
+ _out "<table cellpadding=2>"
46
26
  words.each_slice(n) do |w|
47
27
  items = w.map {|x| "<tt>#{x}</tt>" }
48
28
  _out "<tr><td width=5% valign=top></td><td>" + items.join("</td><td>") + "</td></tr>"
@@ -92,7 +72,7 @@ def chapter
92
72
  next_output
93
73
  _out "<title>#{@chapter}. #{title}</title>"
94
74
  _out <<-HTML
95
- <h2>Chapter #{@chapter}</h1>
75
+ <h2>Chapter #{@chapter}</h2>
96
76
  <h1>#{title}</h1>
97
77
 
98
78
  HTML
@@ -108,7 +88,7 @@ def chapterN
108
88
  next_output
109
89
  _out "<title>#{@chapter}. #{title}</title>"
110
90
  _out <<-HTML
111
- <h2>Chapter #{@chapter}</h1>
91
+ <h2>Chapter #{@chapter}</h2>
112
92
  <h1>#{title}</h1>
113
93
 
114
94
  HTML
@@ -118,11 +98,11 @@ def sec
118
98
  @sec += 1
119
99
  @sec2 = 0
120
100
  @section = "#@chapter.#@sec"
121
- # _errout("section #@section")
122
- @toc << "#{_nbsp(3)}<b>#@section</b> #@_data<br>"
101
+ title = @_data.dup
102
+ @toc << "#{_nbsp(3)}<b>#@section</b> #{title}<br>"
123
103
  @_data = _slug(@_data)
124
104
  next_output
125
- _out "<h3>#@section #{@_data}</h3>\n"
105
+ _out "<h3>#@section #{title}</h3>\n"
126
106
  rescue => err
127
107
  STDERR.puts "#{err}\n#{err.backtrace}"
128
108
  exit
@@ -131,11 +111,33 @@ end
131
111
  def subsec
132
112
  @sec2 += 1
133
113
  @subsec = "#@chapter.#@sec.#@sec2"
134
- @toc << "#{_nbsp(6)}<b>#@subsec</b> #@_data<br>"
135
- # _errout("section #@subsec")
114
+ title = @_data.dup
115
+ @toc << "#{_nbsp(6)}<b>#@subsec</b> #{title}<br>"
136
116
  @_data = _slug(@_data)
137
117
  next_output
138
- _out "<h3>#@subsec #{@_data}</h3>\n"
118
+ _out "<h3>#@subsec #{title}</h3>\n"
119
+ end
120
+
121
+ def definition_table
122
+ title = @_data
123
+ wide = "95"
124
+ delim = " :: "
125
+ _out "<br><center><table width=#{wide}% cellpadding=5>"
126
+ lines = _body(true)
127
+ lines.map! {|line| _format(line) }
128
+
129
+ lines.each do |line|
130
+ cells = line.split(delim)
131
+ _out "<tr>"
132
+ cells.each.with_index do |cell, i|
133
+ width = (i == 0) ? "width=15%" : ""
134
+ _out " <td #{width} valign=top>#{cell}</td>"
135
+ end
136
+ _out "</tr>"
137
+ end
138
+ _out "</table></center><br><br>"
139
+
140
+ _optional_blank_line
139
141
  end
140
142
 
141
143
  def table2
@@ -143,7 +145,7 @@ def table2
143
145
  wide = "90"
144
146
  extra = _args[2]
145
147
  delim = " :: "
146
- _out "<br><center><table border=1 width=#{wide}% cellpadding=5>"
148
+ _out "<br><center><table width=#{wide}% cellpadding=5>"
147
149
  lines = _body(true)
148
150
  lines.map! {|line| _format(line) }
149
151
 
@@ -196,7 +198,7 @@ def table
196
198
  @table_num += 1
197
199
  title = @_data
198
200
  delim = " :: "
199
- _out "<br><center><table border=1 width=90% cellpadding=5>"
201
+ _out "<br><center><table width=90% cellpadding=5>"
200
202
  lines = _body(true)
201
203
  maxw = nil
202
204
  lines.each do |line|
@@ -204,7 +206,7 @@ def table
204
206
  cells = line.split(delim)
205
207
  wide = cells.map {|x| x.length }
206
208
  maxw = [0] * cells.size
207
- maxw = maxw.map.with_index {|x, i| [x, wide[i]].max }
209
+ maxw = maxw.map.with_index {|x, i| [x, wide[i]+2].max }
208
210
  end
209
211
 
210
212
  sum = maxw.inject(0, :+)
@@ -22,5 +22,5 @@ def epub!
22
22
  str = `wc -w /tmp/links.out`
23
23
  nw = str.split[0]
24
24
  puts "Approx words: #{nw}"
25
- ::FileUtils.rm("TEMP.html")
25
+ # ::FileUtils.rm("TEMP.html")
26
26
  end
@@ -4,9 +4,9 @@ a comment
4
4
  .end
5
5
  abc 123
6
6
  xyz
7
- .comment # and this is an extra-useless comment
7
+ .comment
8
8
  And so is this.
9
- .end # comment of dubious nature
9
+ .end
10
10
 
11
11
  one
12
12
  more
@@ -0,0 +1 @@
1
+ Error: Name 'foobar' is unknown
@@ -1 +1 @@
1
- Error: Illegal name 'to_s' (at source.lt3 line 5)
1
+ Error: Illegal name 'to_s'
@@ -0,0 +1 @@
1
+ Error: Mismatched 'end'
@@ -0,0 +1 @@
1
+ Error: #<RuntimeError: Expected .end, found end of file>
@@ -1 +1 @@
1
- Error: Name 'class' is not permitted (at source.lt3 line 4)
1
+ Error: Name 'class' is not permitted
@@ -0,0 +1 @@
1
+ Error: No such file 'nosuchfile.txt' to copy
@@ -0,0 +1 @@
1
+ Error: No such include file 'nosuchinc.lt3'
@@ -0,0 +1 @@
1
+ No such mixin 'nosuchthing'
@@ -1,6 +0,0 @@
1
- Test that
2
- we give an error
3
- when a mixin does not
4
- exist:
5
- <p>
6
-
@@ -3,7 +3,7 @@ some functions
3
3
  here...
4
4
 
5
5
  .func myfunc
6
- "Eureka!"
6
+ "Eureka!"
7
7
  .end
8
8
 
9
9
  I am calling $$myfunc here...
@@ -18,7 +18,7 @@ class TestingLivetext < MiniTest::Test
18
18
 
19
19
  TestLines = []
20
20
 
21
- Dir.chdir `livetext --path`.chomp if ARGV.first == "cmdline"
21
+ Dir.chdir `livetext --path`.chomp.chomp if ARGV.first == "cmdline"
22
22
 
23
23
  Dir.chdir(Data)
24
24
 
@@ -31,7 +31,7 @@ class TestingLivetext < MiniTest::Test
31
31
  break if f.eof?
32
32
  end
33
33
 
34
- if File.size("subset.txt") # == 0
34
+ if File.size("subset.txt") == 0
35
35
  puts "Defining via TestLines"
36
36
  TestLines.each.with_index do |item, i|
37
37
  msg, src, exp, blank = *item
@@ -51,8 +51,6 @@ class TestingLivetext < MiniTest::Test
51
51
  selected = File.readlines("subset.txt").map(&:chomp)
52
52
  Subset = selected.empty? ? TestDirs : selected
53
53
 
54
- # puts "Subset = #{Subset.inspect}"
55
-
56
54
  Subset.each do |tdir|
57
55
  define_method("test_#{tdir}") do
58
56
  external_files(tdir)
@@ -60,11 +58,11 @@ class TestingLivetext < MiniTest::Test
60
58
  end
61
59
 
62
60
  def green(str)
63
- "" + str + ""
61
+ "" + str.to_s + ""
64
62
  end
65
63
 
66
64
  def red(str)
67
- "" + str + ""
65
+ "" + str.to_s + ""
68
66
  end
69
67
 
70
68
  def external_files(base)
@@ -85,14 +83,14 @@ class TestingLivetext < MiniTest::Test
85
83
 
86
84
  if File.exist?(expout_regex)
87
85
  rx_out = /#{Regexp.escape(File.read(expout_regex).chomp)}/
88
- expected = "(match test)"
86
+ expected = rx_out # "(match test)"
89
87
  else
90
88
  expected = File.read(exp)
91
89
  end
92
90
 
93
91
  if File.exist?(experr_regex)
94
92
  rx_err = /#{Regexp.escape(File.read(experr_regex).chomp)}/
95
- errexp = "(match test)"
93
+ errexp = rx_err # "(match test)"
96
94
  else
97
95
  errexp = File.read(erx)
98
96
  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.03
4
+ version: 0.9.08
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-28 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A smart text processor extensible in Ruby
14
14
  email: rubyhacker@gmail.com
@@ -53,34 +53,32 @@ files:
53
53
  - test/data/def_method/expected-error.txt
54
54
  - test/data/def_method/expected-output.txt
55
55
  - test/data/def_method/source.lt3
56
- - test/data/error_inc_line_num/expected-error.txt
56
+ - test/data/error_inc_line_num/expected-err-line1match.txt
57
57
  - test/data/error_inc_line_num/expected-output.txt
58
58
  - test/data/error_inc_line_num/file2.lt3
59
59
  - test/data/error_inc_line_num/source.lt3
60
60
  - test/data/error_invalid_name/expected-err-line1match.txt
61
- - test/data/error_invalid_name/expected-error.txt
62
61
  - test/data/error_invalid_name/expected-output.txt
63
62
  - test/data/error_invalid_name/source.lt3
64
63
  - test/data/error_line_num/expected-err-line1match.txt
65
- - test/data/error_line_num/expected-error.txt
66
64
  - test/data/error_line_num/expected-output.txt
67
65
  - test/data/error_line_num/source.lt3
68
- - test/data/error_mismatched_end/expected-error.txt
66
+ - test/data/error_mismatched_end/expected-err-line1match.txt
69
67
  - test/data/error_mismatched_end/expected-output.txt
70
68
  - test/data/error_mismatched_end/source.lt3
71
- - test/data/error_missing_end/expected-error.txt
69
+ - test/data/error_missing_end/expected-err-line1match.txt
72
70
  - test/data/error_missing_end/expected-output.txt
73
71
  - test/data/error_missing_end/source.lt3
74
72
  - test/data/error_name_not_permitted/expected-error.txt
75
73
  - test/data/error_name_not_permitted/expected-output.txt
76
74
  - test/data/error_name_not_permitted/source.lt3
77
- - test/data/error_no_such_copy/expected-error.txt
75
+ - test/data/error_no_such_copy/expected-err-line1match.txt
78
76
  - test/data/error_no_such_copy/expected-output.txt
79
77
  - test/data/error_no_such_copy/source.lt3
80
- - test/data/error_no_such_inc/expected-error.txt
78
+ - test/data/error_no_such_inc/expected-err-line1match.txt
81
79
  - test/data/error_no_such_inc/expected-output.txt
82
80
  - test/data/error_no_such_inc/source.lt3
83
- - test/data/error_no_such_mixin/expected-error.txt
81
+ - test/data/error_no_such_mixin/expected-err-line1match.txt
84
82
  - test/data/error_no_such_mixin/expected-output.txt
85
83
  - test/data/error_no_such_mixin/source.lt3
86
84
  - test/data/example_alpha/expected-error.txt
@@ -139,7 +137,7 @@ homepage: https://github.com/Hal9000/livetext
139
137
  licenses:
140
138
  - Ruby
141
139
  metadata: {}
142
- post_install_message:
140
+ post_install_message:
143
141
  rdoc_options: []
144
142
  require_paths:
145
143
  - lib
@@ -154,8 +152,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
152
  - !ruby/object:Gem::Version
155
153
  version: '0'
156
154
  requirements: []
157
- rubygems_version: 3.0.4
158
- signing_key:
155
+ rubygems_version: 3.1.2
156
+ signing_key:
159
157
  specification_version: 4
160
158
  summary: A smart processor for text
161
159
  test_files: []
@@ -1 +0,0 @@
1
- Error: Name 'foobar' is unknown (at file2.lt3 line 5)
@@ -1 +0,0 @@
1
- Error: Illegal name 'to_s' (at source.lt3 line 5)
@@ -1 +0,0 @@
1
- Error: Name 'foobar' is unknown (at source.lt3 line 4)
@@ -1 +0,0 @@
1
- Error: Mismatched 'end' (at source.lt3 line 6)
@@ -1 +0,0 @@
1
- Error: Expecting .end, found end of file (at source.lt3 line 6)
@@ -1 +0,0 @@
1
- Error: No such file 'nosuchfile.txt' to copy (at source.lt3 line 5)
@@ -1 +0,0 @@
1
- Error: No such include file 'nosuchinc.lt3' (at source.lt3 line 5)
@@ -1 +0,0 @@
1
- Error: No such mixin 'nosuchthing' (at source.lt3 line 6)