livetext 0.9.04 → 0.9.09

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: 953abc29d2faf2ff8d8ae5e1c7e4033efbc1dbd57b69144634b3287b71424b77
4
- data.tar.gz: 3086f96e6226ada9787338b26d08950667e44b65029e5bc5d80bc4c72b50b7bb
3
+ metadata.gz: a5b79c9b4bec7d50d6514a46d2d4b459cb769748316a1aa3c124943292862e2d
4
+ data.tar.gz: 970dfa9d9838a555619491723c4ddacd62764767bcbe427dd407d2f541c7c887
5
5
  SHA512:
6
- metadata.gz: d8a49669fc15a3a5aad4151cf190f8d527edc1349fb30a7abfdf9141648f32bbb56d507a6f7ccfc983c9335d7f2df037a9dbf30325e27c02e1d68590ffb1c2bd
7
- data.tar.gz: 9e4c56a912009b7332fd9702c1fd7a8a27fdbb9c639d0ae62ec4adabd31e8e70554a7ab4645ba6595a138712c0dfcb47430805d69530f26e5d9479dd90148b38
6
+ metadata.gz: 7f8402adab86a07e37c3e663de62bc2681c84cfe4bc0fb0791e6a2413c2f94991fe861712183c7e82061cd8134a1d6ae6fbc225d90ed57eb78f3cf09a42e5731
7
+ data.tar.gz: 4f8a97b146ca5e73c65a01681ee7871e198e0d49fa94866122d06dff35f0266cac54b24ae7d559020210ba49479ed041836d8e3e3a1b150a669e54236d8aeb56
@@ -1,5 +1,5 @@
1
1
  class Livetext
2
- VERSION = "0.9.04"
2
+ VERSION = "0.9.09"
3
3
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
4
4
  end
5
5
 
@@ -126,6 +126,7 @@ class Livetext
126
126
  when Comment
127
127
  handle_scomment(line)
128
128
  when Dotcmd
129
+ STDERR.puts "line = #{line.inspect}"
129
130
  handle_dotcmd(line)
130
131
  when Ddotcmd
131
132
  indent = line.index("$") + 1
@@ -184,6 +185,7 @@ class Livetext
184
185
  enum = text.each
185
186
  @backtrace = btrace
186
187
  @main.source(enum, fname, 0)
188
+ line = nil
187
189
  loop do
188
190
  line = @main.nextline
189
191
  break if line.nil?
@@ -192,6 +194,7 @@ class Livetext
192
194
  val = @main.finalize if @main.respond_to? :finalize
193
195
  @body
194
196
  rescue => err
197
+ STDERR.puts "[process_file] fname = #{fname.inspect}\n line = #{line.inspect}"
195
198
  STDERR.puts "ERROR #{err} in process_file"
196
199
  err.backtrace.each {|x| STDERR.puts " " + x }
197
200
  @body = ""
@@ -227,8 +230,10 @@ class Livetext
227
230
  end
228
231
  result
229
232
  rescue => err
233
+ STDERR.puts "Error was: #{err.inspect} (calling @main._error!)"
234
+ STDERR.puts err.backtrace
230
235
  @main._error!(err)
231
- puts @body
236
+ # puts @body
232
237
  @body = ""
233
238
  return @body
234
239
  end
@@ -34,8 +34,11 @@ class Livetext
34
34
 
35
35
  def _error!(err, abort=true, trace=false)
36
36
  where = @sources.last || @save_location
37
- puts @parent.body
38
- STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
37
+ # puts @parent.body
38
+ puts "[lib/processor] Error: #{err}"
39
+ puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
40
+ STDERR.puts "[lib/processor] Error: #{err}" # (at #{where[1]} line #{where[2]})"
41
+ raise "lib/processor error!"
39
42
  STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
40
43
  exit if abort
41
44
  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,26 @@ 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
- file = @_args.first
276
- _check_existence(file, "No such include file '#{file}'")
339
+ STDERR.puts "_include: vars View/ViewDir #{::Livetext::Vars[:View]} #{::Livetext::Vars[:ViewDir]} "
340
+ file = _format(@_args.first) # allows for variables
341
+ _check_existence(file, "No such include file #{file.inspect}")
277
342
  @parent.process_file(file)
278
343
  _optional_blank_line
279
344
  end
@@ -320,7 +385,7 @@ EOS
320
385
  Dir.chdir("..") { mixin }
321
386
  return
322
387
  else
323
- STDERR.puts "No such mixin '#{name}"
388
+ STDERR.puts "No such mixin '#{name}'"
324
389
  puts @body
325
390
  exit!
326
391
  end
@@ -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
@@ -94,7 +94,7 @@ module Livetext::UserAPI
94
94
  lines
95
95
  end
96
96
  rescue => err
97
- str << err.inspect + "\n"
97
+ str = err.inspect + "\n"
98
98
  str << err.backtrace.map {|x| " " + x }.join("\n")
99
99
  _error!(str)
100
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.04
4
+ version: 0.9.09
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-02-03 00:00:00.000000000 Z
11
+ date: 2020-12-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
@@ -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.0.8
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)