livetext 0.8.78 → 0.8.79
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 +11 -8
- data/lib/livetext.rb +10 -9
- data/lib/processor.rb +1 -1
- data/lib/standard.rb +8 -6
- data/lib/userapi.rb +41 -28
- data/plugin/bookish.rb +5 -5
- data/plugin/calibre.rb +1 -1
- data/plugin/markdown.rb +1 -1
- metadata +3 -6
- data/lib/SAVE.formatline +0 -297
- data/lib/SAVE2.formatline.rb +0 -707
- data/test/data/SAVE.lines +0 -284
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b10afcc4cb31c7ee535b019ad71dceb81642288b
|
4
|
+
data.tar.gz: 31071b49e22b3a45638588cfc626364e47a1c205
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6174fa5fd3f5c0b4169adf59f89fe8aa438d324819ddb382210cf6e1ef3a4f26a2120f69d9c3fd8d85dcd709a081cdfb6ba35a68ae1be2c94958c95751718678
|
7
|
+
data.tar.gz: 2ff43baa577625b28d82b7ba2dcfaee894216124de6ed60c4252369dd28f158dc94141954d7b92243acd57469eee9f6e6af319bf691900bc3c82a705c916496c
|
data/lib/formatline.rb
CHANGED
@@ -28,7 +28,7 @@ class FormatLine
|
|
28
28
|
|
29
29
|
attr_reader :out
|
30
30
|
|
31
|
-
def initialize(line, context)
|
31
|
+
def initialize(line, context=nil)
|
32
32
|
context ||= binding
|
33
33
|
@context = context
|
34
34
|
@line = line
|
@@ -38,8 +38,9 @@ class FormatLine
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.parse!(line, context = nil)
|
41
|
+
return nil if line.nil?
|
41
42
|
x = self.new(line.chomp, context)
|
42
|
-
|
43
|
+
t = x.tokenize(line)
|
43
44
|
x.evaluate # (context)
|
44
45
|
end
|
45
46
|
|
@@ -49,7 +50,7 @@ class FormatLine
|
|
49
50
|
case curr
|
50
51
|
when Escape; go; add curr; grab
|
51
52
|
when "$"
|
52
|
-
|
53
|
+
dollar
|
53
54
|
when "*", "_", "`", "~"
|
54
55
|
marker curr
|
55
56
|
add curr
|
@@ -78,6 +79,8 @@ class FormatLine
|
|
78
79
|
break if token.nil?
|
79
80
|
sym, val = *token
|
80
81
|
case sym
|
82
|
+
when :ddot
|
83
|
+
return [@out, val]
|
81
84
|
when :str
|
82
85
|
@out << val unless val == "\n" # BUG
|
83
86
|
when :var
|
@@ -97,7 +100,7 @@ class FormatLine
|
|
97
100
|
end
|
98
101
|
token = gen.next
|
99
102
|
end
|
100
|
-
@out
|
103
|
+
[@out, nil]
|
101
104
|
end
|
102
105
|
|
103
106
|
def curr
|
@@ -181,14 +184,14 @@ class FormatLine
|
|
181
184
|
str
|
182
185
|
end
|
183
186
|
|
184
|
-
def
|
187
|
+
def dollar
|
185
188
|
grab
|
186
189
|
case curr
|
187
190
|
when LF; add "$"; add_token :str
|
188
191
|
when " "; add "$ "; add_token :str
|
189
192
|
when nil; add "$"; add_token :str
|
190
|
-
when "$";
|
191
|
-
when ".";
|
193
|
+
when "$"; double_dollar
|
194
|
+
when "."; dollar_dot
|
192
195
|
when /[A-Za-z]/
|
193
196
|
add_token :str
|
194
197
|
var = curr + grab_alpha
|
@@ -199,7 +202,7 @@ class FormatLine
|
|
199
202
|
end
|
200
203
|
end
|
201
204
|
|
202
|
-
def
|
205
|
+
def double_dollar
|
203
206
|
case next!
|
204
207
|
when Space; add_token :string, "$$ "; grab; return
|
205
208
|
when LF, nil; add "$$"; add_token :str
|
data/lib/livetext.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Livetext
|
2
|
-
VERSION = "0.8.
|
2
|
+
VERSION = "0.8.79"
|
3
3
|
Path = File.expand_path(File.join(File.dirname(__FILE__)))
|
4
4
|
end
|
5
5
|
|
@@ -32,6 +32,7 @@ class Livetext
|
|
32
32
|
end
|
33
33
|
|
34
34
|
Space = " "
|
35
|
+
Sigil = "." # Can't change yet
|
35
36
|
|
36
37
|
def initialize(output = ::STDOUT)
|
37
38
|
@source = nil
|
@@ -45,17 +46,17 @@ class Livetext
|
|
45
46
|
def process_line(line, context=nil)
|
46
47
|
context ||= binding
|
47
48
|
@context = context
|
48
|
-
sigil = "." # Can't change yet
|
49
49
|
nomarkup = true
|
50
50
|
# FIXME inefficient
|
51
|
-
scomment = rx(
|
52
|
-
sname = rx(
|
51
|
+
scomment = rx(Sigil, Livetext::Space) # apply these in order
|
52
|
+
sname = rx(Sigil)
|
53
53
|
if line =~ scomment
|
54
54
|
handle_scomment(line)
|
55
55
|
elsif line =~ sname
|
56
|
-
|
56
|
+
handle_dotcmd(line)
|
57
57
|
else
|
58
58
|
@main._passthru(line, context)
|
59
|
+
# Can output extra line(s) in $. scenario
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -142,7 +143,7 @@ class Livetext
|
|
142
143
|
Regexp.compile("^" + Regexp.escape(str) + "#{space}")
|
143
144
|
end
|
144
145
|
|
145
|
-
def handle_scomment(line
|
146
|
+
def handle_scomment(line)
|
146
147
|
end
|
147
148
|
|
148
149
|
def _check_name(name)
|
@@ -153,15 +154,15 @@ class Livetext
|
|
153
154
|
name
|
154
155
|
end
|
155
156
|
|
156
|
-
def _get_name(line
|
157
|
+
def _get_name(line)
|
157
158
|
name, data = line.split(" ", 2)
|
158
159
|
name = name[1..-1] # chop off sigil
|
159
160
|
@main.data = data
|
160
161
|
name = _check_name(name)
|
161
162
|
end
|
162
163
|
|
163
|
-
def
|
164
|
-
name = _get_name(line
|
164
|
+
def handle_dotcmd(line)
|
165
|
+
name = _get_name(line)
|
165
166
|
result = nil
|
166
167
|
if @main.respond_to?(name)
|
167
168
|
result = @main.send(name)
|
data/lib/processor.rb
CHANGED
@@ -34,7 +34,7 @@ class Livetext
|
|
34
34
|
where = @sources.last || @save_location
|
35
35
|
puts @parent.body
|
36
36
|
STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
|
37
|
-
|
37
|
+
STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
|
38
38
|
exit if abort
|
39
39
|
end
|
40
40
|
|
data/lib/standard.rb
CHANGED
@@ -59,13 +59,13 @@ module Livetext::Standard
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def say
|
62
|
-
str =
|
62
|
+
str = _format(@_data)
|
63
63
|
TTY.puts str
|
64
64
|
_optional_blank_line
|
65
65
|
end
|
66
66
|
|
67
67
|
def banner
|
68
|
-
str =
|
68
|
+
str = _format(@_data)
|
69
69
|
n = str.length - 1
|
70
70
|
_errout "-"*n
|
71
71
|
_errout str
|
@@ -157,7 +157,8 @@ module Livetext::Standard
|
|
157
157
|
var, val = a.split("=")
|
158
158
|
val = val[1..-2] if val[0] == ?" and val[-1] == ?"
|
159
159
|
val = val[1..-2] if val[0] == ?' and val[-1] == ?'
|
160
|
-
Livetext::Vars[var] = val
|
160
|
+
Livetext::Vars[var.to_sym] = val
|
161
|
+
Livetext::Vars[var] = val # FIXME
|
161
162
|
end
|
162
163
|
_optional_blank_line
|
163
164
|
end
|
@@ -199,6 +200,7 @@ module Livetext::Standard
|
|
199
200
|
meths = grab_file(file)
|
200
201
|
modname = name.gsub("/","_").capitalize
|
201
202
|
string = "module ::#{modname}\n#{meths}\nend"
|
203
|
+
# puts string # .inspect
|
202
204
|
eval(string)
|
203
205
|
newmod = Object.const_get("::" + modname)
|
204
206
|
self.extend(newmod)
|
@@ -284,7 +286,7 @@ module Livetext::Standard
|
|
284
286
|
delim = _args.first
|
285
287
|
_out "<dl>"
|
286
288
|
_body do |line|
|
287
|
-
line =
|
289
|
+
line = _format(line)
|
288
290
|
term, defn = line.split(delim)
|
289
291
|
_out "<dt>#{term}</dt>"
|
290
292
|
_out "<dd>#{defn}</dd>"
|
@@ -296,7 +298,7 @@ module Livetext::Standard
|
|
296
298
|
delim = _args.first
|
297
299
|
_out "<table>"
|
298
300
|
_body do |line|
|
299
|
-
line =
|
301
|
+
line = _format(line)
|
300
302
|
term, defn = line.split(delim)
|
301
303
|
_out "<tr>"
|
302
304
|
_out "<td width=3%><td width=10%>#{term}</td><td>#{defn}</td>"
|
@@ -318,7 +320,7 @@ module Livetext::Standard
|
|
318
320
|
lines = _body(true)
|
319
321
|
maxw = nil
|
320
322
|
lines.each do |line|
|
321
|
-
|
323
|
+
line = _format(line)
|
322
324
|
line.gsub!(/\n+/, "<br>")
|
323
325
|
cells = line.split(delim)
|
324
326
|
wide = cells.map {|x| x.length }
|
data/lib/userapi.rb
CHANGED
@@ -24,7 +24,8 @@ module Livetext::UserAPI
|
|
24
24
|
@line = nextline if peek_nextline =~ /^ *$/
|
25
25
|
end
|
26
26
|
|
27
|
-
def _comment?(str
|
27
|
+
def _comment?(str)
|
28
|
+
sigil = Livetext::Sigil
|
28
29
|
c1 = sigil + Livetext::Space
|
29
30
|
c2 = sigil + sigil + Livetext::Space
|
30
31
|
str.index(c1) == 0 || str.index(c2) == 0
|
@@ -35,21 +36,20 @@ module Livetext::UserAPI
|
|
35
36
|
return false
|
36
37
|
end
|
37
38
|
|
38
|
-
def _end?(str
|
39
|
+
def _end?(str)
|
39
40
|
return false if str.nil?
|
40
|
-
cmd =
|
41
|
+
cmd = Livetext::Sigil + "end"
|
41
42
|
return false if str.index(cmd) != 0
|
42
43
|
return false unless _trailing?(str[5])
|
43
44
|
return true
|
44
45
|
end
|
45
46
|
|
46
|
-
def _raw_body(tag = "__EOF__"
|
47
|
+
def _raw_body(tag = "__EOF__")
|
47
48
|
lines = []
|
48
49
|
@save_location = @sources.last
|
49
50
|
loop do
|
50
51
|
@line = nextline
|
51
52
|
break if @line.chomp.strip == tag
|
52
|
-
# STDERR.puts "_raw_body adds: #{@line.inspect}"
|
53
53
|
lines << @line
|
54
54
|
end
|
55
55
|
_optional_blank_line
|
@@ -58,39 +58,39 @@ module Livetext::UserAPI
|
|
58
58
|
else
|
59
59
|
lines
|
60
60
|
end
|
61
|
-
# STDERR.puts "_raw_body returns: #{lines.inspect}"
|
62
61
|
lines
|
63
62
|
end
|
64
63
|
|
65
|
-
def _body(raw=false
|
64
|
+
def _body(raw=false)
|
66
65
|
lines = []
|
67
66
|
@save_location = @sources.last
|
68
67
|
loop do
|
69
68
|
@line = nextline
|
70
69
|
raise if @line.nil?
|
71
|
-
break if _end?(@line
|
72
|
-
next if _comment?(@line
|
73
|
-
|
74
|
-
|
70
|
+
break if _end?(@line)
|
71
|
+
next if _comment?(@line)
|
72
|
+
# FIXME Will cause problem with $. ?
|
73
|
+
@line = _format(@line) unless raw
|
74
|
+
lines << @line
|
75
75
|
end
|
76
76
|
_optional_blank_line
|
77
77
|
if block_given?
|
78
|
-
lines.each {|line| yield line }
|
78
|
+
lines.each {|line| yield line } # FIXME what about $. ?
|
79
79
|
else
|
80
80
|
lines
|
81
81
|
end
|
82
82
|
rescue => err
|
83
|
-
|
83
|
+
p err.inspect
|
84
|
+
puts err.backtrace
|
84
85
|
_error!("Expecting .end, found end of file")
|
85
|
-
# puts @body
|
86
86
|
end
|
87
87
|
|
88
|
-
def _body_text(raw=false
|
89
|
-
_body(
|
88
|
+
def _body_text(raw=false)
|
89
|
+
_body(Livetext::Sigil).join("")
|
90
90
|
end
|
91
91
|
|
92
|
-
def _raw_body!
|
93
|
-
_raw_body(
|
92
|
+
def _raw_body!
|
93
|
+
_raw_body(Livetext::Sigil).join("\n")
|
94
94
|
end
|
95
95
|
|
96
96
|
def _handle_escapes(str, set)
|
@@ -101,26 +101,39 @@ module Livetext::UserAPI
|
|
101
101
|
str
|
102
102
|
end
|
103
103
|
|
104
|
-
def
|
104
|
+
def _format(line, context = nil)
|
105
|
+
return ["", nil] if line == "\n"
|
106
|
+
l2 = FormatLine.parse!(line, context)
|
107
|
+
line1, line2 = *l2
|
108
|
+
line.replace(line1) unless line.nil?
|
109
|
+
line
|
110
|
+
end
|
111
|
+
|
112
|
+
def _format!(line, context = nil)
|
113
|
+
return ["", nil] if line == "\n"
|
105
114
|
l2 = FormatLine.parse!(line, context)
|
106
|
-
|
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]
|
107
121
|
end
|
108
122
|
|
109
123
|
def _passthru(line, context = nil)
|
110
124
|
return if @_nopass
|
111
125
|
_out "<p>" if line == "\n" and ! @_nopara
|
112
|
-
line =
|
126
|
+
line, line2 = *_format!(line, context)
|
127
|
+
p line
|
128
|
+
p line2
|
113
129
|
_out line
|
130
|
+
_out line2
|
114
131
|
end
|
115
132
|
|
116
133
|
def _out(str = "")
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
@parent.body << "\n" unless str.end_with?("\n")
|
121
|
-
# else
|
122
|
-
# _puts str
|
123
|
-
# end
|
134
|
+
return if str.nil?
|
135
|
+
@parent.body << str
|
136
|
+
@parent.body << "\n" unless str.end_with?("\n")
|
124
137
|
end
|
125
138
|
|
126
139
|
def _out!(str = "")
|
data/plugin/bookish.rb
CHANGED
@@ -25,7 +25,7 @@ def list!
|
|
25
25
|
lines = _body.each # {|line| _out "<li>#{line}</li>" }
|
26
26
|
loop do
|
27
27
|
line = lines.next
|
28
|
-
line =
|
28
|
+
line = _format(line)
|
29
29
|
if line[0] == " "
|
30
30
|
_out line
|
31
31
|
else
|
@@ -77,7 +77,7 @@ def figure
|
|
77
77
|
name = @_args[0]
|
78
78
|
num = @_args[1]
|
79
79
|
title = @_args[2..-1].join(" ")
|
80
|
-
title =
|
80
|
+
title = _format(title)
|
81
81
|
_out "<img src='#{name}'></img>"
|
82
82
|
_out "<center><b>Figure #{num}</b> #{title}</center>"
|
83
83
|
end
|
@@ -138,7 +138,7 @@ def table2
|
|
138
138
|
delim = " :: "
|
139
139
|
_out "<br><center><table border=1 width=#{wide}% cellpadding=5>"
|
140
140
|
lines = _body(true)
|
141
|
-
lines.map! {|line|
|
141
|
+
lines.map! {|line| _format(line) }
|
142
142
|
|
143
143
|
lines.each do |line|
|
144
144
|
cells = line.split(delim)
|
@@ -162,7 +162,7 @@ def simple_table
|
|
162
162
|
lines = _body(true)
|
163
163
|
maxw = nil
|
164
164
|
lines.each do |line|
|
165
|
-
|
165
|
+
_format(line)
|
166
166
|
cells = line.split(delim)
|
167
167
|
wide = cells.map {|x| x.length }
|
168
168
|
maxw = [0] * cells.size
|
@@ -193,7 +193,7 @@ def table
|
|
193
193
|
lines = _body(true)
|
194
194
|
maxw = nil
|
195
195
|
lines.each do |line|
|
196
|
-
|
196
|
+
_format(line)
|
197
197
|
cells = line.split(delim)
|
198
198
|
wide = cells.map {|x| x.length }
|
199
199
|
maxw = [0] * cells.size
|
data/plugin/calibre.rb
CHANGED
data/plugin/markdown.rb
CHANGED
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.79
|
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-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|
@@ -20,8 +20,6 @@ files:
|
|
20
20
|
- "./README.lt3"
|
21
21
|
- "./README.md"
|
22
22
|
- bin/livetext
|
23
|
-
- lib/SAVE.formatline
|
24
|
-
- lib/SAVE2.formatline.rb
|
25
23
|
- lib/formatline.rb
|
26
24
|
- lib/functions.rb
|
27
25
|
- lib/livetext.rb
|
@@ -38,7 +36,6 @@ files:
|
|
38
36
|
- test/affirm/kbks.jpg
|
39
37
|
- test/affirm/lm-kbks.lt
|
40
38
|
- test/cleanup
|
41
|
-
- test/data/SAVE.lines
|
42
39
|
- test/data/basic_formatting/expected-error.txt
|
43
40
|
- test/data/basic_formatting/expected-output.txt
|
44
41
|
- test/data/basic_formatting/source.lt3
|
@@ -153,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
150
|
version: '0'
|
154
151
|
requirements: []
|
155
152
|
rubyforge_project:
|
156
|
-
rubygems_version: 2.
|
153
|
+
rubygems_version: 2.4.6
|
157
154
|
signing_key:
|
158
155
|
specification_version: 4
|
159
156
|
summary: A smart processor for text
|