livetext 0.8.79 → 0.8.80
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 +5 -5
- data/lib/formatline.rb +6 -8
- data/lib/livetext.rb +19 -10
- data/lib/processor.rb +2 -1
- data/lib/standard.rb +15 -5
- data/lib/userapi.rb +10 -22
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 326f2e6a0599793edfe3db620a0e00a68516422615962fbb6cb0b814ceff04da
|
|
4
|
+
data.tar.gz: 2d58bd744f5756c4b844d1127e29c079a6e35cb1ae9999f79bce2dc2aac14062
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a6662f81750092b1c51388c98f2ed72c282a7f295ad1a6d9e26f11536567515e15776b1b760ed7134783ed63f3eaa8754a871b05a8cd1e76b71522377973ff95
|
|
7
|
+
data.tar.gz: e0d711da1a52bb922fc2a07f9e1aee454bf759cb2d48eb49763f896001a6a95e5a18b1ddabaebd4709dbc8a582286f41075800856d47963d5349e303af36c955
|
data/lib/formatline.rb
CHANGED
|
@@ -40,7 +40,7 @@ class FormatLine
|
|
|
40
40
|
def self.parse!(line, context = nil)
|
|
41
41
|
return nil if line.nil?
|
|
42
42
|
x = self.new(line.chomp, context)
|
|
43
|
-
t = x.tokenize(line)
|
|
43
|
+
t = x.tokenize(line)
|
|
44
44
|
x.evaluate # (context)
|
|
45
45
|
end
|
|
46
46
|
|
|
@@ -79,8 +79,6 @@ t = x.tokenize(line)
|
|
|
79
79
|
break if token.nil?
|
|
80
80
|
sym, val = *token
|
|
81
81
|
case sym
|
|
82
|
-
when :ddot
|
|
83
|
-
return [@out, val]
|
|
84
82
|
when :str
|
|
85
83
|
@out << val unless val == "\n" # BUG
|
|
86
84
|
when :var
|
|
@@ -100,7 +98,7 @@ t = x.tokenize(line)
|
|
|
100
98
|
end
|
|
101
99
|
token = gen.next
|
|
102
100
|
end
|
|
103
|
-
|
|
101
|
+
@out
|
|
104
102
|
end
|
|
105
103
|
|
|
106
104
|
def curr
|
|
@@ -191,7 +189,7 @@ t = x.tokenize(line)
|
|
|
191
189
|
when " "; add "$ "; add_token :str
|
|
192
190
|
when nil; add "$"; add_token :str
|
|
193
191
|
when "$"; double_dollar
|
|
194
|
-
|
|
192
|
+
# when "."; dollar_dot
|
|
195
193
|
when /[A-Za-z]/
|
|
196
194
|
add_token :str
|
|
197
195
|
var = curr + grab_alpha
|
|
@@ -220,9 +218,9 @@ t = x.tokenize(line)
|
|
|
220
218
|
end
|
|
221
219
|
end
|
|
222
220
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
221
|
+
# def dollar_dot
|
|
222
|
+
# add_token :ddot, @line[@i..-1]
|
|
223
|
+
# end
|
|
226
224
|
|
|
227
225
|
def marker(char)
|
|
228
226
|
add_token :str
|
data/lib/livetext.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
class Livetext
|
|
2
|
-
VERSION = "0.8.
|
|
2
|
+
VERSION = "0.8.80"
|
|
3
3
|
Path = File.expand_path(File.join(File.dirname(__FILE__)))
|
|
4
4
|
end
|
|
5
5
|
|
|
@@ -22,7 +22,7 @@ class Livetext
|
|
|
22
22
|
|
|
23
23
|
attr_reader :main, :context
|
|
24
24
|
attr_accessor :no_puts
|
|
25
|
-
attr_accessor :body
|
|
25
|
+
attr_accessor :body, :indentation
|
|
26
26
|
|
|
27
27
|
# FIXME - phase out stupid 'parameters' method
|
|
28
28
|
|
|
@@ -41,6 +41,7 @@ class Livetext
|
|
|
41
41
|
@no_puts = output.nil?
|
|
42
42
|
@body = ""
|
|
43
43
|
@main = Processor.new(self, output)
|
|
44
|
+
@indentation = [0]
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
def process_line(line, context=nil)
|
|
@@ -48,15 +49,22 @@ class Livetext
|
|
|
48
49
|
@context = context
|
|
49
50
|
nomarkup = true
|
|
50
51
|
# FIXME inefficient
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
comment = rx(Sigil, Livetext::Space) # apply these in order
|
|
53
|
+
dotcmd = rx(Sigil)
|
|
54
|
+
ddotcmd = /^ *\$\.[A-Za-z]/
|
|
55
|
+
case line
|
|
56
|
+
when comment
|
|
57
|
+
handle_scomment(line)
|
|
58
|
+
when dotcmd
|
|
59
|
+
handle_dotcmd(line)
|
|
60
|
+
when ddotcmd
|
|
61
|
+
indent = line.index("$") + 1
|
|
62
|
+
@indentation.push(indent)
|
|
63
|
+
line.sub!(/^ *\$/, "")
|
|
64
|
+
handle_dotcmd(line)
|
|
65
|
+
indentation.pop
|
|
57
66
|
else
|
|
58
67
|
@main._passthru(line, context)
|
|
59
|
-
# Can output extra line(s) in $. scenario
|
|
60
68
|
end
|
|
61
69
|
end
|
|
62
70
|
|
|
@@ -161,7 +169,8 @@ class Livetext
|
|
|
161
169
|
name = _check_name(name)
|
|
162
170
|
end
|
|
163
171
|
|
|
164
|
-
def handle_dotcmd(line)
|
|
172
|
+
def handle_dotcmd(line, indent = 0)
|
|
173
|
+
indent = @indentation.last # top of stack
|
|
165
174
|
name = _get_name(line)
|
|
166
175
|
result = nil
|
|
167
176
|
if @main.respond_to?(name)
|
data/lib/processor.rb
CHANGED
|
@@ -24,6 +24,7 @@ class Livetext
|
|
|
24
24
|
# Meh?
|
|
25
25
|
@output = ::Livetext.output = (output || File.open("/dev/null", "w"))
|
|
26
26
|
@sources = []
|
|
27
|
+
@indentation = @parent.indentation
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def output=(io)
|
|
@@ -34,7 +35,7 @@ class Livetext
|
|
|
34
35
|
where = @sources.last || @save_location
|
|
35
36
|
puts @parent.body
|
|
36
37
|
STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
|
|
37
|
-
|
|
38
|
+
# STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
|
|
38
39
|
exit if abort
|
|
39
40
|
end
|
|
40
41
|
|
data/lib/standard.rb
CHANGED
|
@@ -165,11 +165,22 @@ module Livetext::Standard
|
|
|
165
165
|
|
|
166
166
|
def heredoc
|
|
167
167
|
var = @_args[0]
|
|
168
|
-
# STDERR.puts "var = #{var.inspect}"
|
|
169
168
|
str = _body_text
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
#
|
|
169
|
+
indent = @parent.indentation.last
|
|
170
|
+
indented = " " * indent
|
|
171
|
+
# s2 = ""
|
|
172
|
+
# str.each_line do |line|
|
|
173
|
+
# if line.start_with?(indented)
|
|
174
|
+
# line.replace(line[indent..-1])
|
|
175
|
+
# else
|
|
176
|
+
# STDERR.puts "Error? heredoc not indented?"
|
|
177
|
+
# return
|
|
178
|
+
# end
|
|
179
|
+
# s2 << line
|
|
180
|
+
# end
|
|
181
|
+
s2 = str
|
|
182
|
+
Livetext::Vars[var.to_sym] = s2
|
|
183
|
+
Livetext::Vars[var] = s2 # FIXME
|
|
173
184
|
_optional_blank_line
|
|
174
185
|
end
|
|
175
186
|
|
|
@@ -200,7 +211,6 @@ module Livetext::Standard
|
|
|
200
211
|
meths = grab_file(file)
|
|
201
212
|
modname = name.gsub("/","_").capitalize
|
|
202
213
|
string = "module ::#{modname}\n#{meths}\nend"
|
|
203
|
-
# puts string # .inspect
|
|
204
214
|
eval(string)
|
|
205
215
|
newmod = Object.const_get("::" + modname)
|
|
206
216
|
self.extend(newmod)
|
data/lib/userapi.rb
CHANGED
|
@@ -37,8 +37,11 @@ module Livetext::UserAPI
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def _end?(str)
|
|
40
|
+
indent = ""
|
|
41
|
+
indent = " " * (@parent.indentation.last - 1)
|
|
42
|
+
indent << "$" unless indent.empty?
|
|
40
43
|
return false if str.nil?
|
|
41
|
-
cmd = Livetext::Sigil + "end"
|
|
44
|
+
cmd = indent + Livetext::Sigil + "end"
|
|
42
45
|
return false if str.index(cmd) != 0
|
|
43
46
|
return false unless _trailing?(str[5])
|
|
44
47
|
return true
|
|
@@ -80,8 +83,8 @@ module Livetext::UserAPI
|
|
|
80
83
|
lines
|
|
81
84
|
end
|
|
82
85
|
rescue => err
|
|
83
|
-
p err.inspect
|
|
84
|
-
puts err.backtrace
|
|
86
|
+
p err.inspect
|
|
87
|
+
puts err.backtrace
|
|
85
88
|
_error!("Expecting .end, found end of file")
|
|
86
89
|
end
|
|
87
90
|
|
|
@@ -102,32 +105,17 @@ puts err.backtrace
|
|
|
102
105
|
end
|
|
103
106
|
|
|
104
107
|
def _format(line, context = nil)
|
|
105
|
-
return
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
line.replace(line1) unless line.nil?
|
|
108
|
+
return "" if line == "\n"
|
|
109
|
+
line2 = FormatLine.parse!(line, context)
|
|
110
|
+
line.replace(line2) unless line.nil?
|
|
109
111
|
line
|
|
110
112
|
end
|
|
111
113
|
|
|
112
|
-
def _format!(line, context = nil)
|
|
113
|
-
return ["", nil] if line == "\n"
|
|
114
|
-
l2 = FormatLine.parse!(line, context)
|
|
115
|
-
# maybe move fix back toward parse! ?
|
|
116
|
-
line1, line2 = *l2
|
|
117
|
-
line2 = line2.dup
|
|
118
|
-
line.replace(line1) unless line.nil?
|
|
119
|
-
line2 = @parent.handle_dotcmd(line2) unless line2.nil?
|
|
120
|
-
[line, line2]
|
|
121
|
-
end
|
|
122
|
-
|
|
123
114
|
def _passthru(line, context = nil)
|
|
124
115
|
return if @_nopass
|
|
125
116
|
_out "<p>" if line == "\n" and ! @_nopara
|
|
126
|
-
line
|
|
127
|
-
p line
|
|
128
|
-
p line2
|
|
117
|
+
line = _format(line, context)
|
|
129
118
|
_out line
|
|
130
|
-
_out line2
|
|
131
119
|
end
|
|
132
120
|
|
|
133
121
|
def _out(str = "")
|
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.
|
|
4
|
+
version: 0.8.80
|
|
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-
|
|
11
|
+
date: 2019-04-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A smart text processor extensible in Ruby
|
|
14
14
|
email: rubyhacker@gmail.com
|
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
150
150
|
version: '0'
|
|
151
151
|
requirements: []
|
|
152
152
|
rubyforge_project:
|
|
153
|
-
rubygems_version: 2.
|
|
153
|
+
rubygems_version: 2.7.7
|
|
154
154
|
signing_key:
|
|
155
155
|
specification_version: 4
|
|
156
156
|
summary: A smart processor for text
|