livetext 0.8.80 → 0.8.81

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: 326f2e6a0599793edfe3db620a0e00a68516422615962fbb6cb0b814ceff04da
4
- data.tar.gz: 2d58bd744f5756c4b844d1127e29c079a6e35cb1ae9999f79bce2dc2aac14062
3
+ metadata.gz: ef8d4d20d509f85b02f3bec9fd06a3e9d6f54968b634b386bea7baa1c84eeb47
4
+ data.tar.gz: 926e1b7cf4f8e0aa1b9ee13bea39a31d59a79a606bcd13d5dcb3135d02a23c6b
5
5
  SHA512:
6
- metadata.gz: a6662f81750092b1c51388c98f2ed72c282a7f295ad1a6d9e26f11536567515e15776b1b760ed7134783ed63f3eaa8754a871b05a8cd1e76b71522377973ff95
7
- data.tar.gz: e0d711da1a52bb922fc2a07f9e1aee454bf759cb2d48eb49763f896001a6a95e5a18b1ddabaebd4709dbc8a582286f41075800856d47963d5349e303af36c955
6
+ metadata.gz: d8b95158a230fba31c2d0226e8bec2d778ae9a569c9cb9fd0af97b6b5788dcb6618adcf52777d383d1a4cab1d140dafe5f3a257693c48fe6c51ca9050a7d9cd3
7
+ data.tar.gz: 9d27ab12a8166ca694fd9248a3c7e37b62dec3642a00090f3ae71718785bb4f1ab74f1113afc9c89aaf44cade6c7084a63abce9f2bded440b5723cd33d958e78
data/lib/formatline.rb CHANGED
@@ -27,6 +27,7 @@ class FormatLine
27
27
  end
28
28
 
29
29
  attr_reader :out
30
+ attr_reader :tokenlist
30
31
 
31
32
  def initialize(line, context=nil)
32
33
  context ||= binding
@@ -54,7 +55,10 @@ class FormatLine
54
55
  when "*", "_", "`", "~"
55
56
  marker curr
56
57
  add curr
57
- when LF, nil
58
+ # grab
59
+ when LF
60
+ break if @i >= line.size - 1
61
+ when nil
58
62
  break
59
63
  else
60
64
  add curr
@@ -65,6 +69,29 @@ class FormatLine
65
69
  @tokenlist
66
70
  end
67
71
 
72
+ def self.var_func_parse(str, context = nil)
73
+ return nil if str.nil?
74
+ x = self.new(str.chomp, context)
75
+ # t = x.tokenize(line)
76
+ x.grab
77
+ loop do
78
+ case x.curr
79
+ when Escape; x.go; x.add x.curr; x.grab
80
+ when "$"
81
+ x.dollar
82
+ when LF, nil
83
+ break
84
+ else
85
+ x.add x.curr
86
+ end
87
+ x.grab
88
+ end
89
+ x.add_token(:str)
90
+ # built tokenlist
91
+ # x.tokenlist.each {|pair| puts " #{pair.inspect}" }
92
+ x.evaluate # (context)
93
+ end
94
+
68
95
  def embed(sym, str)
69
96
  pre, post = SimpleFormats[sym]
70
97
  pre + str + post
@@ -89,9 +116,11 @@ class FormatLine
89
116
  if [:colon, :brackets].include? arg[0]
90
117
  arg = gen.next # for real
91
118
  param = arg[1]
119
+ param = FormatLine.var_func_parse(param)
92
120
  end
93
121
  @out << funcall(val, param)
94
122
  when :b, :i, :t, :s
123
+ val = FormatLine.var_func_parse(val)
95
124
  @out << embed(sym, val)
96
125
  else
97
126
  add_token :str
data/lib/livetext.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Livetext
2
- VERSION = "0.8.80"
2
+ VERSION = "0.8.81"
3
3
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
4
4
  end
5
5
 
data/lib/processor.rb CHANGED
@@ -48,10 +48,12 @@ class Livetext
48
48
  end
49
49
 
50
50
  def peek_nextline
51
- @sources.last[0].peek
51
+ line = @sources.last[0].peek
52
52
  rescue StopIteration
53
53
  @sources.pop
54
54
  nil
55
+ rescue
56
+ nil
55
57
  end
56
58
 
57
59
  def nextline
data/lib/standard.rb CHANGED
@@ -67,9 +67,9 @@ module Livetext::Standard
67
67
  def banner
68
68
  str = _format(@_data)
69
69
  n = str.length - 1
70
- _errout "-"*n
71
- _errout str
72
- _errout "-"*n
70
+ puts "-"*n
71
+ puts str
72
+ puts "-"*n
73
73
  end
74
74
 
75
75
  def quit
@@ -143,7 +143,7 @@ module Livetext::Standard
143
143
  str = "def #{name}\n"
144
144
  raise "Illegal name '#{name}'" if _disallowed?(name)
145
145
  str += _body_text(true)
146
- str += "end\n"
146
+ str += "\nend\n"
147
147
  eval str
148
148
  rescue => err
149
149
  _error!(err)
@@ -153,10 +153,14 @@ module Livetext::Standard
153
153
  def set
154
154
  assigns = @_data.chomp.split(/, */)
155
155
  # Do a better way?
156
+ # FIXME *Must* allow for vars/functions
156
157
  assigns.each do |a|
157
158
  var, val = a.split("=")
158
- val = val[1..-2] if val[0] == ?" and val[-1] == ?"
159
- val = val[1..-2] if val[0] == ?' and val[-1] == ?'
159
+ var.strip!
160
+ val.strip!
161
+ val = val[1..-2] if val[0] == ?" && val[-1] == ?"
162
+ val = val[1..-2] if val[0] == ?' && val[-1] == ?'
163
+ val = FormatLine.var_func_parse(val)
160
164
  Livetext::Vars[var.to_sym] = val
161
165
  Livetext::Vars[var] = val # FIXME
162
166
  end
@@ -166,6 +170,10 @@ module Livetext::Standard
166
170
  def heredoc
167
171
  var = @_args[0]
168
172
  str = _body_text
173
+ s2 = ""
174
+ str.each_line do |s|
175
+ s2 << s.chomp + "<br>"
176
+ end
169
177
  indent = @parent.indentation.last
170
178
  indented = " " * indent
171
179
  # s2 = ""
@@ -178,9 +186,8 @@ module Livetext::Standard
178
186
  # end
179
187
  # s2 << line
180
188
  # end
181
- s2 = str
182
189
  Livetext::Vars[var.to_sym] = s2
183
- Livetext::Vars[var] = s2 # FIXME
190
+ Livetext::Vars[var] = s2.chomp # FIXME?
184
191
  _optional_blank_line
185
192
  end
186
193
 
@@ -211,6 +218,9 @@ module Livetext::Standard
211
218
  meths = grab_file(file)
212
219
  modname = name.gsub("/","_").capitalize
213
220
  string = "module ::#{modname}\n#{meths}\nend"
221
+ # puts "==========="
222
+ # string.each_line.with_index {|line, i| puts "#{'%3d' % (i+1)} : #{line}" }
223
+ # puts "==========="
214
224
  eval(string)
215
225
  newmod = Object.const_get("::" + modname)
216
226
  self.extend(newmod)
data/lib/userapi.rb CHANGED
@@ -21,7 +21,9 @@ module Livetext::UserAPI
21
21
  end
22
22
 
23
23
  def _optional_blank_line
24
- @line = nextline if peek_nextline =~ /^ *$/
24
+ peek = peek_nextline
25
+ return if peek.nil?
26
+ @line = nextline if peek =~ /^ *$/
25
27
  end
26
28
 
27
29
  def _comment?(str)
@@ -38,8 +40,10 @@ module Livetext::UserAPI
38
40
 
39
41
  def _end?(str)
40
42
  indent = ""
41
- indent = " " * (@parent.indentation.last - 1)
42
- indent << "$" unless indent.empty?
43
+ # n = @parent.indentation.last - 1
44
+ # n = 0 if n < 0 # Gahhh FIXM
45
+ # indent = " " * n
46
+ # indent << "$" unless indent.empty?
43
47
  return false if str.nil?
44
48
  cmd = indent + Livetext::Sigil + "end"
45
49
  return false if str.index(cmd) != 0
@@ -67,15 +71,22 @@ module Livetext::UserAPI
67
71
  def _body(raw=false)
68
72
  lines = []
69
73
  @save_location = @sources.last
74
+ end_found = false
70
75
  loop do
71
76
  @line = nextline
72
- raise if @line.nil?
73
- break if _end?(@line)
77
+ # puts "--- loop: @line = #{@line.inspect}"
78
+ break if @line.nil?
79
+ @line.chomp!
80
+ if _end?(@line)
81
+ end_found = true
82
+ break
83
+ end
74
84
  next if _comment?(@line)
75
85
  # FIXME Will cause problem with $. ?
76
86
  @line = _format(@line) unless raw
77
87
  lines << @line
78
88
  end
89
+ raise unless end_found
79
90
  _optional_blank_line
80
91
  if block_given?
81
92
  lines.each {|line| yield line } # FIXME what about $. ?
@@ -83,13 +94,13 @@ module Livetext::UserAPI
83
94
  lines
84
95
  end
85
96
  rescue => err
86
- p err.inspect
87
- puts err.backtrace
97
+ # p err.inspect
98
+ # puts err.backtrace
88
99
  _error!("Expecting .end, found end of file")
89
100
  end
90
101
 
91
102
  def _body_text(raw=false)
92
- _body(Livetext::Sigil).join("")
103
+ _body(Livetext::Sigil).join("\n")
93
104
  end
94
105
 
95
106
  def _raw_body!
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.80
4
+ version: 0.8.81
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-04-29 00:00:00.000000000 Z
11
+ date: 2019-05-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