livetext 0.8.80 → 0.8.81

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: 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