livetext 0.8.96 → 0.8.97

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: 61efdb7cdd7d3a5c6597796d18922ba7f405c7b421a35d7b8708031a3a1d56c3
4
- data.tar.gz: f6452c5a4bc7c1c28154774e9847a6502072be8e63ecb33ba6e85799452c10a0
3
+ metadata.gz: 42bc8ee5bb8b06789cb472fb038081a29fb00fce64583248ffe15f66cd88b9c8
4
+ data.tar.gz: 7a4acc91072072ae4dffe193ce4e410ecd7251ebe323fb3c038f76e8da5ee6d9
5
5
  SHA512:
6
- metadata.gz: cc2c1c48f54e7411a9f6571256fa8ba1612d7e056010440a86be6d4038b1593c3771032f9305024d9fa0adfdc6543893a0f4183b435c22aab66cd40684b679e8
7
- data.tar.gz: d45545ba38eec5669650e7171c285acc1627599fadce73cb80b5c3c7b38e9ef01be1d12ca4bbfd54e89d8e9c6b8e45b7779b7685cdb46812b64a5f6dae6471f4
6
+ metadata.gz: bd8c49581292b3fbf9a25849f0a3403f29dc73ac4e81bb115ef471a5fab413665e32d763b67571f6ecf095b273b36acdc61ff1790c5522d00c3b9de676395e38
7
+ data.tar.gz: 4573738653920bd64d296e3f9d65f909a10bf438942dabb0b92aac07a2f0d207e33bf5ed00ea5d89db8adcdd9fa655846f936c3ef11e19b13e14b005a53f8896
@@ -51,13 +51,11 @@ class FormatLine
51
51
  loop do
52
52
  case curr
53
53
  when Escape; grab; add curr; grab; add curr
54
- # puts "Found #{curr.inspect}"
55
54
  when "$"
56
55
  dollar
57
56
  when "*", "_", "`", "~"
58
57
  marker curr
59
58
  add curr
60
- # grab
61
59
  when LF
62
60
  break if @i >= line.size - 1
63
61
  when nil
@@ -22,7 +22,6 @@ class Livetext::Functions # Functions will go here... user-def AND pre-def??
22
22
  end
23
23
 
24
24
  def rand(param=nil)
25
- # STDERR.puts "param = #{param.inspect}"
26
25
  n1, n2 = param.split.map(&:to_i)
27
26
  ::Kernel.rand(n1..n2).to_s
28
27
  end
@@ -1,5 +1,5 @@
1
1
  class Livetext
2
- VERSION = "0.8.96"
2
+ VERSION = "0.8.97"
3
3
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
4
4
  end
5
5
 
@@ -34,6 +34,14 @@ class Livetext
34
34
  Space = " "
35
35
  Sigil = "." # Can't change yet
36
36
 
37
+ def self.rx(str, space=nil)
38
+ Regexp.compile("^" + Regexp.escape(str) + "#{space}")
39
+ end
40
+
41
+ Comment = rx(Sigil, Livetext::Space)
42
+ Dotcmd = rx(Sigil)
43
+ Ddotcmd = /^ *\$\.[A-Za-z]/
44
+
37
45
  def initialize(output = ::STDOUT)
38
46
  @source = nil
39
47
  @_mixins = []
@@ -63,18 +71,14 @@ class Livetext
63
71
  _setvar(:File, file)
64
72
  end
65
73
 
66
- def process_line(line)
74
+ def process_line(line) # FIXME inefficient?
67
75
  nomarkup = true
68
- # FIXME inefficient
69
- comment = rx(Sigil, Livetext::Space) # apply these in order
70
- dotcmd = rx(Sigil)
71
- ddotcmd = /^ *\$\.[A-Za-z]/
72
- case line
73
- when comment
76
+ case line # must apply these in order
77
+ when Comment
74
78
  handle_scomment(line)
75
- when dotcmd
79
+ when Dotcmd
76
80
  handle_dotcmd(line)
77
- when ddotcmd
81
+ when Ddotcmd
78
82
  indent = line.index("$") + 1
79
83
  @indentation.push(indent)
80
84
  line.sub!(/^ *\$/, "")
@@ -97,7 +101,23 @@ class Livetext
97
101
  end
98
102
  end
99
103
 
100
- def xform_file(file)
104
+ # EXPERIMENTAL and incomplete
105
+ def xform(*args, file: nil, text: nil, vars: nil)
106
+ case
107
+ when file && text.nil?
108
+ xform_file(file)
109
+ when file.nil? && text
110
+ when file.nil? && text.nil?
111
+ raise "Must specify file or text"
112
+ when file && text
113
+ raise "Cannot specify file and text"
114
+ end
115
+ self.process_file(file)
116
+ self.body
117
+ end
118
+
119
+ def xform_file(file, vars: nil)
120
+ Livetext::Vars.replace(vars) unless vars.nil?
101
121
  self.process_file(file)
102
122
  self.body
103
123
  end
@@ -106,7 +126,7 @@ class Livetext
106
126
  _setfile!("(string)")
107
127
  @output = ::Livetext.output
108
128
  enum = text.each_line
109
- front = text.match(/.*?\n/).to_a.first.chomp
129
+ front = text.match(/.*?\n/).to_a.first.chomp rescue "..."
110
130
  @main.source(enum, "STDIN: '#{front}...'", 0)
111
131
  loop do
112
132
  line = @main.nextline
@@ -135,8 +155,8 @@ class Livetext
135
155
  rescue => err
136
156
  puts "process_text: err = #{err}"
137
157
  # puts err.backtrace.join("\n")
138
- puts @body
139
- @body = ""
158
+ puts @body
159
+ @body = ""
140
160
  return @body
141
161
  end
142
162
 
@@ -176,18 +196,13 @@ class Livetext
176
196
  @main.finalize if @main.respond_to? :finalize
177
197
  end
178
198
 
179
- def rx(str, space=nil)
180
- Regexp.compile("^" + Regexp.escape(str) + "#{space}")
181
- end
182
-
183
199
  def handle_scomment(line)
184
200
  end
185
201
 
186
202
  def _check_name(name)
187
203
  @main._error! "Name '#{name}' is not permitted" if @main._disallowed?(name)
188
- name = "_def" if name == "def"
189
- name = "_include" if name == "include"
190
204
  @main._error! "Mismatched 'end'" if name == "end"
205
+ name = "_" + name if %w[def include].include?(name)
191
206
  name
192
207
  end
193
208
 
@@ -211,8 +226,8 @@ class Livetext
211
226
  result
212
227
  rescue => err
213
228
  @main._error!(err)
214
- puts @body
215
- @body = ""
229
+ puts @body
230
+ @body = ""
216
231
  return @body
217
232
  end
218
233
 
@@ -34,7 +34,6 @@ class Livetext
34
34
 
35
35
  def _error!(err, abort=true, trace=false)
36
36
  where = @sources.last || @save_location
37
- # puts "-- body = "
38
37
  puts @parent.body
39
38
  STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
40
39
  STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
@@ -99,7 +99,6 @@ EOS
99
99
  eval str
100
100
  rescue => err
101
101
  _error!(err)
102
- # puts @body
103
102
  end
104
103
 
105
104
  def set
@@ -109,7 +108,6 @@ EOS
109
108
  # FIXME *Must* allow for vars/functions
110
109
  assigns.each do |a|
111
110
  var, val = a.split("=")
112
- # STDERR.puts "-- var=val #{[var, val].inspect}"
113
111
  var.strip!
114
112
  val.strip!
115
113
  val = val[1..-2] if val[0] == ?" && val[-1] == ?"
@@ -222,17 +220,6 @@ EOS
222
220
  end
223
221
  indent = @parent.indentation.last
224
222
  indented = " " * indent
225
- # s2 = ""
226
- # str.each_line do |line|
227
- # if line.start_with?(indented)
228
- # line.replace(line[indent..-1])
229
- # else
230
- # STDERR.puts "Error? heredoc not indented?"
231
- # return
232
- # end
233
- # s2 << line
234
- # end
235
- # STDERR.puts "HERE: #{var} = #{s2.chomp.inspect}"
236
223
  @parent._setvar(var, s2.chomp)
237
224
  _optional_blank_line
238
225
  end
@@ -263,7 +250,6 @@ EOS
263
250
  # like include, but search upward as needed
264
251
  file = @_args.first
265
252
  file = _seek(file)
266
- # STDERR.puts "---- _seek found: #{file.inspect}"
267
253
  _error!(file, "No such include file '#{file}'") unless file
268
254
  @parent.process_file(file)
269
255
  _optional_blank_line
@@ -45,9 +45,7 @@ module Livetext::UserAPI
45
45
  end
46
46
 
47
47
  def _end?(str)
48
- str = str.dup
49
- str.gsub!(/^ */, "")
50
- return true if str == ".end" || str == "$.end"
48
+ return true if str == ".end" || str =~ / *\$\.end/
51
49
  return false
52
50
  end
53
51
 
@@ -70,24 +68,19 @@ module Livetext::UserAPI
70
68
  end
71
69
 
72
70
  def _body(raw=false)
73
- lines = []
74
- # @save_location = @sources.last
71
+ lines = [] # @save_location = @sources.last
75
72
  end_found = false
76
73
  loop do
77
74
  @line = nextline
78
75
  break if @line.nil?
79
76
  @line.chomp!
80
- # STDERR.puts "LINE = #{@line.inspect}"
81
- if _end?(@line)
82
- end_found = true
83
- break
84
- end
85
- next if _comment?(@line)
86
- # FIXME Will cause problem with $. ?
77
+ end_found = _end?(@line)
78
+ break if end_found
79
+ next if _comment?(@line) # FIXME Will cause problem with $. ?
87
80
  @line = _format(@line) unless raw
88
81
  lines << @line
89
82
  end
90
- raise "this stupid error again" unless end_found
83
+
91
84
  _optional_blank_line
92
85
  if block_given?
93
86
  lines.each {|line| yield line } # FIXME what about $. ?
@@ -9,14 +9,9 @@ def section
9
9
  end
10
10
 
11
11
  def code
12
- # _out "<pre>"
13
12
  first = true # dumb hack! fixes blank space
14
13
  _body do |line|
15
- if first
16
- tag = "<pre>"
17
- first = false
18
- else
19
- end
14
+ tag, first = "<pre>", false if first
20
15
  _out "#{tag} #{::CGI.escape_html(line)}" # indentation
21
16
  end
22
17
  _out "</pre>"
@@ -34,7 +29,7 @@ def inout
34
29
  t1 = t1.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
35
30
  t2 = t2.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
36
31
 
37
- puts <<-HTML
32
+ _out <<-HTML
38
33
  <table width=80% cellpadding=4>
39
34
  <tr>
40
35
  <td width=50%><b>Input</b></td>
@@ -58,7 +53,7 @@ def put_table(src, exp)
58
53
  t1 = t1.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
59
54
  t2 = t2.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
60
55
 
61
- puts <<-HTML
56
+ _out <<-HTML
62
57
  <font size=+1>
63
58
  <table width=80% cellpadding=4>
64
59
  <tr>
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.8.96
4
+ version: 0.8.97
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-12 00:00:00.000000000 Z
11
+ date: 2019-12-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A smart text processor extensible in Ruby
14
14
  email: rubyhacker@gmail.com