livetext 0.8.78 → 0.8.79
Sign up to get free protection for your applications and to get access to all the features.
- 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
|