livetext 0.9.44 → 0.9.45
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 +4 -4
- data/bin/livetext +1 -1
- data/lib/livetext/errors.rb +58 -0
- data/lib/livetext/global_helpers.rb +0 -1
- data/lib/livetext/helpers.rb +24 -6
- data/lib/livetext/more.rb +30 -15
- data/lib/livetext/processor.rb +3 -2
- data/lib/livetext/standard.rb +2 -41
- data/lib/livetext/userapi.rb +13 -3
- data/lib/livetext/version.rb +1 -1
- data/lib/livetext.rb +2 -1
- data/test/snapshots.rb +8 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b37a1a3e7407f6425178e5013641f1df43ec03a4aeac69936bfa1b4b000a9d5
|
4
|
+
data.tar.gz: e7ecf71a35779e59c21d2e013996cfcaa21554d99eddb8f5c89a91edd7b3e1bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 103265f837aceed3e5452d8c73d50d91077ca0191b0eebc30f78e1b230e566c841560372c258d45f687131257041abb1aa189af76521181ec22973441e5cc548
|
7
|
+
data.tar.gz: 75029926a177ca59d984dc564a693091b0518a9d91563a8d754092b5fceca0e6867ebd96d1709c45b225a4c57687b2b2d4bfc97dc6b734457f31bd15b048529a
|
data/bin/livetext
CHANGED
@@ -115,7 +115,7 @@ def parse_command_line
|
|
115
115
|
STDERR.puts "Command line - #{arg.inspect} is unknown"
|
116
116
|
end
|
117
117
|
end
|
118
|
-
@live.dump if success
|
118
|
+
@live.api.dump if success
|
119
119
|
rescue => err
|
120
120
|
STDERR.puts "Unexpected error! #{err.inspect}\n#{err.backtrace.join("\n")}"
|
121
121
|
end
|
data/lib/livetext/errors.rb
CHANGED
@@ -1,3 +1,51 @@
|
|
1
|
+
private def whence(back = 0)
|
2
|
+
file, line, inmeth = caller[back].split(":")
|
3
|
+
meth = inmeth[4..-2]
|
4
|
+
[file, line, meth]
|
5
|
+
end
|
6
|
+
|
7
|
+
private def display(file, line, meth, msg)
|
8
|
+
puts "--- #{meth} #{line} in #{file}"
|
9
|
+
puts "::: " + msg if msg
|
10
|
+
end
|
11
|
+
|
12
|
+
def checkpoint(msg = nil)
|
13
|
+
file, line, meth = whence(1)
|
14
|
+
display(file, line, meth, msg)
|
15
|
+
end
|
16
|
+
|
17
|
+
def checkpoint?(msg = nil) # with sleep 3
|
18
|
+
file, line, meth = whence(1)
|
19
|
+
display(file, line, meth, msg)
|
20
|
+
end
|
21
|
+
|
22
|
+
def checkpoint!(msg = nil) # with pause
|
23
|
+
file, line, meth = whence(1)
|
24
|
+
display(file, line, meth, msg)
|
25
|
+
print "::: Pause..."
|
26
|
+
gets
|
27
|
+
end
|
28
|
+
|
29
|
+
def warning(err)
|
30
|
+
file, line, meth = whence(2) # 2 = skip rescue
|
31
|
+
puts "Error in #{meth} in #{file} (non-fatal?)"
|
32
|
+
puts " err = #{err.inspect}"
|
33
|
+
puts " #{err.backtrace[0]}" if err.respond_to?(:backtrace)
|
34
|
+
puts
|
35
|
+
end
|
36
|
+
|
37
|
+
def fatal(err)
|
38
|
+
file, line, meth = whence(2) # 2 = skip rescue
|
39
|
+
puts "Error in #{meth} in #{file}"
|
40
|
+
puts "WTF??"
|
41
|
+
puts " err = #{err.inspect}"
|
42
|
+
if err.respond_to?(:backtrace)
|
43
|
+
context = err.backtrace.map {|x| " " + x + "\n" }
|
44
|
+
puts context
|
45
|
+
end
|
46
|
+
abort "Terminated."
|
47
|
+
end
|
48
|
+
|
1
49
|
|
2
50
|
# More later?
|
3
51
|
|
@@ -16,3 +64,13 @@ end
|
|
16
64
|
make_exception(:EndWithoutOpening, "Error: found .end with no opening command")
|
17
65
|
make_exception(:UnknownMethod, "Error: name '%1' is unknown")
|
18
66
|
make_exception(:NoSuchFile, "Error: can't find file '%1' (method '%2')")
|
67
|
+
|
68
|
+
# Move others here? DisallowedName, etc.
|
69
|
+
|
70
|
+
make_exception(:ExpectedDotEnd, "Error: expected .end but found end of file")
|
71
|
+
make_exception(:ExpectedAlphaNum, "Error: expected an alphanumeric but foun '%1'") # parser/set.rb
|
72
|
+
make_exception(:ExpectedCommaEOS, "Error: expected comma or end of string") # parser/set.rb
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
data/lib/livetext/helpers.rb
CHANGED
@@ -17,8 +17,8 @@ module Livetext::Helpers
|
|
17
17
|
return graceful_error(err) if self.respond_to?(:graceful_error)
|
18
18
|
return self.parent.graceful_error(err) if self.respond_to?(:parent)
|
19
19
|
raise err
|
20
|
-
rescue => myerr
|
21
|
-
TTY.puts "--- Warning: friendly_error #{myerr.inspect}"
|
20
|
+
# rescue => myerr
|
21
|
+
# TTY.puts "--- Warning: friendly_error #{myerr.inspect}"
|
22
22
|
end
|
23
23
|
|
24
24
|
def escape_html(string)
|
@@ -75,7 +75,10 @@ module Livetext::Helpers
|
|
75
75
|
## FIXME process_file[!] should call process[_text] ?
|
76
76
|
|
77
77
|
def process_file(fname, btrace=false)
|
78
|
-
|
78
|
+
unless File.exist?(fname)
|
79
|
+
api.dump
|
80
|
+
raise FileNotFound(fname)
|
81
|
+
end
|
79
82
|
setfile(fname)
|
80
83
|
text = File.readlines(fname)
|
81
84
|
enum = text.each
|
@@ -107,7 +110,7 @@ module Livetext::Helpers
|
|
107
110
|
end
|
108
111
|
success
|
109
112
|
rescue => err
|
110
|
-
STDERR.puts "ERROR: #{err}\n#{err.backtrace.join("\n")}"
|
113
|
+
STDERR.puts "ERROR: #{err.inspect}\n#{err.backtrace.join("\n")}"
|
111
114
|
exit
|
112
115
|
end
|
113
116
|
|
@@ -186,8 +189,9 @@ module Livetext::Helpers
|
|
186
189
|
def grab_file(fname)
|
187
190
|
File.read(fname)
|
188
191
|
rescue
|
189
|
-
|
190
|
-
|
192
|
+
graceful_error NoSuchFile(fname)
|
193
|
+
# ::STDERR.puts "Can't find #{fname.inspect} \n "
|
194
|
+
# return nil
|
191
195
|
end
|
192
196
|
|
193
197
|
def search_upward(file)
|
@@ -212,6 +216,7 @@ module Livetext::Helpers
|
|
212
216
|
end
|
213
217
|
|
214
218
|
def include_file(file)
|
219
|
+
api.data = file
|
215
220
|
api.args = [file]
|
216
221
|
dot_include
|
217
222
|
end
|
@@ -253,5 +258,18 @@ module Livetext::Helpers
|
|
253
258
|
api.setvar(:File, file)
|
254
259
|
end
|
255
260
|
|
261
|
+
# def dump(file = nil) # not a dot command!
|
262
|
+
# file ||= ::STDOUT
|
263
|
+
# TTY.puts "--- Writing body (#{@body.size} bytes)" if @body
|
264
|
+
# file.puts @body
|
265
|
+
# rescue => err
|
266
|
+
# TTY.puts "#dump had an error: #{err.inspect}"
|
267
|
+
# end
|
268
|
+
|
269
|
+
def graceful_error(err, msg = nil)
|
270
|
+
api.dump
|
271
|
+
STDERR.puts msg if msg
|
272
|
+
raise err
|
273
|
+
end
|
256
274
|
end
|
257
275
|
|
data/lib/livetext/more.rb
CHANGED
@@ -10,7 +10,21 @@ class Livetext
|
|
10
10
|
|
11
11
|
def initialize(hash = {})
|
12
12
|
@vars = {}
|
13
|
-
hash.each_pair
|
13
|
+
hash.each_pair do |k, v|
|
14
|
+
sym = k.to_sym
|
15
|
+
str = k.to_s
|
16
|
+
@vars[sym] = v
|
17
|
+
@vars[str] = v
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def inspect
|
22
|
+
syms = @vars.keys.select {|x| x.is_a? Symbol }
|
23
|
+
out = "\nVariables:"
|
24
|
+
syms.each do |sym|
|
25
|
+
out << " #{sym}: #{@vars[sym].inspect}\n"
|
26
|
+
end
|
27
|
+
out
|
14
28
|
end
|
15
29
|
|
16
30
|
def [](var)
|
@@ -84,19 +98,6 @@ class Livetext
|
|
84
98
|
@save_location = where # delegate
|
85
99
|
end
|
86
100
|
|
87
|
-
def dump(file = nil) # not a dot command!
|
88
|
-
file ||= ::STDOUT
|
89
|
-
file.puts @body
|
90
|
-
rescue => err
|
91
|
-
TTY.puts "#dump had an error: #{err.inspect}"
|
92
|
-
end
|
93
|
-
|
94
|
-
def graceful_error(err, msg = nil)
|
95
|
-
dump
|
96
|
-
STDERR.puts msg if msg
|
97
|
-
raise err
|
98
|
-
end
|
99
|
-
|
100
101
|
def self.customize(mix: [], call: [], vars: {})
|
101
102
|
obj = self.new
|
102
103
|
mix = Array(mix)
|
@@ -126,13 +127,25 @@ class Livetext
|
|
126
127
|
@_outdir = "."
|
127
128
|
@no_puts = output.nil?
|
128
129
|
@body = ""
|
129
|
-
@main = Processor.new(self, output)
|
130
|
+
@main = Processor.new(self, output) # nil = make @main its own parent??
|
130
131
|
@indentation = [0]
|
131
132
|
@_vars = Livetext::Vars
|
132
133
|
@api = UserAPI.new(self)
|
133
134
|
initial_vars
|
134
135
|
end
|
135
136
|
|
137
|
+
def inspect
|
138
|
+
"Livetext:\n" +
|
139
|
+
" source = #{@source.inspect}\n" +
|
140
|
+
" mixins = #{@_mixins.inspect}\n" +
|
141
|
+
" import = #{@_mixins.inspect}\n" +
|
142
|
+
" main = (not shown)\n" +
|
143
|
+
" indent = #{@indentation.inspect}\n" +
|
144
|
+
" vars = #{@_vars.inspect}\n" +
|
145
|
+
" api = (not shown)\n" +
|
146
|
+
" body = (#{@body.size} bytes)"
|
147
|
+
end
|
148
|
+
|
136
149
|
def api
|
137
150
|
@api
|
138
151
|
end
|
@@ -181,7 +194,9 @@ class Livetext
|
|
181
194
|
def xform_file(file, vars: nil)
|
182
195
|
Livetext::Vars.replace(vars) unless vars.nil?
|
183
196
|
@_vars.replace(vars) unless vars.nil?
|
197
|
+
# checkpoint! "Calling process_file..."
|
184
198
|
self.process_file(file)
|
199
|
+
# checkpoint! "...returned"
|
185
200
|
self.body
|
186
201
|
end
|
187
202
|
|
data/lib/livetext/processor.rb
CHANGED
@@ -26,7 +26,7 @@ class Processor
|
|
26
26
|
attr_reader :parent, :sources
|
27
27
|
|
28
28
|
def initialize(parent, output = nil)
|
29
|
-
@parent = parent
|
29
|
+
@parent = parent || self
|
30
30
|
# STDERR.puts "PARENT.api = #{parent.api.inspect}"
|
31
31
|
@parent.api ||= Livetext::UserAPI.new(@parent)
|
32
32
|
@nopass = false
|
@@ -65,7 +65,6 @@ class Processor
|
|
65
65
|
|
66
66
|
def disallowed?(name)
|
67
67
|
flag = Disallowed.include?(name.to_sym)
|
68
|
-
# api.tty "disa name = #{name.inspect} flag = #{flag}"
|
69
68
|
flag
|
70
69
|
end
|
71
70
|
|
@@ -95,4 +94,6 @@ class Processor
|
|
95
94
|
@sources.pop
|
96
95
|
nil
|
97
96
|
end
|
97
|
+
|
98
|
+
|
98
99
|
end
|
data/lib/livetext/standard.rb
CHANGED
@@ -179,39 +179,6 @@ module Livetext::Standard
|
|
179
179
|
api.optional_blank_line
|
180
180
|
end
|
181
181
|
|
182
|
-
=begin
|
183
|
-
Filename: foobar
|
184
|
-
get_globals - 1 - transforming /private/tmp/.blogs/views/foobar/data/global.lt3
|
185
|
-
|
186
|
-
>> variables: fdir = /private/tmp/.blogs/views/foobar/data/
|
187
|
-
fname = ../settings/view.txt
|
188
|
-
path = /private/tmp/.blogs/views/foobar/data/../settings/view.txt
|
189
|
-
|
190
|
-
rpath = /private/tmp/.blogs/views/foobar/settings/view.txt
|
191
|
-
path = /private/tmp/.blogs/views/foobar/settings/view.txt
|
192
|
-
dir = /private/tmp/.blogs/views/foobar/settings
|
193
|
-
base = view.txt
|
194
|
-
|
195
|
-
>> variables: fdir = /private/tmp/.blogs/views/foobar/data/
|
196
|
-
fname = ../settings/recent.txt
|
197
|
-
path = /private/tmp/.blogs/views/foobar/data/../settings/recent.txt
|
198
|
-
rpath = /private/tmp/.blogs/views/foobar/settings/recent.txt
|
199
|
-
path = /private/tmp/.blogs/views/foobar/settings/recent.txt
|
200
|
-
dir = /private/tmp/.blogs/views/foobar/settings
|
201
|
-
base = recent.txt
|
202
|
-
|
203
|
-
>> variables: fdir = /private/tmp/.blogs/views/foobar/data/
|
204
|
-
fname = ../settings/publish.txt
|
205
|
-
path = /private/tmp/.blogs/views/foobar/data/../settings/publish.txt
|
206
|
-
rpath = /private/tmp/.blogs/views/foobar/settings/publish.txt
|
207
|
-
path = /private/tmp/.blogs/views/foobar/settings/publish.txt
|
208
|
-
dir = /private/tmp/.blogs/views/foobar/settings
|
209
|
-
base = publish.txt
|
210
|
-
|
211
|
-
get_globals - 2
|
212
|
-
|
213
|
-
=end
|
214
|
-
|
215
182
|
def variables(args = nil, body = nil)
|
216
183
|
prefix = api.args[0]
|
217
184
|
fname = api.args[1]
|
@@ -221,7 +188,7 @@ get_globals - 2
|
|
221
188
|
path0 = fdir + fname
|
222
189
|
# puts ">> variables: fdir = #{fdir} fname = #{fname} path = #{path0}"
|
223
190
|
pname = Pathname.new(path0)
|
224
|
-
rpath = pname.realpath
|
191
|
+
rpath = pname.realpath
|
225
192
|
path, dir, base = rpath.to_s, rpath.dirname.to_s, rpath.basename.to_s
|
226
193
|
# puts " rpath = #{rpath} path = #{path} dir = #{dir} base = #{base}"
|
227
194
|
dok, fok = Dir.exist?(dir), File.exist?(path)
|
@@ -235,13 +202,7 @@ get_globals - 2
|
|
235
202
|
api.setvars(pairs)
|
236
203
|
api.optional_blank_line
|
237
204
|
rescue => err
|
238
|
-
|
239
|
-
puts " #{err.inspect}"
|
240
|
-
if err.respond_to?(:backtrace)
|
241
|
-
context = err.backtrace.map {|x| " " + x}.join("\n")
|
242
|
-
puts context
|
243
|
-
end
|
244
|
-
abort "\nTerminated."
|
205
|
+
fatal(err)
|
245
206
|
end
|
246
207
|
|
247
208
|
def heredoc(args = nil, body = nil)
|
data/lib/livetext/userapi.rb
CHANGED
@@ -25,6 +25,14 @@ class Livetext::UserAPI
|
|
25
25
|
@live.api
|
26
26
|
end
|
27
27
|
|
28
|
+
def dump(file = nil) # not a dot command!
|
29
|
+
file ||= ::STDOUT
|
30
|
+
# TTY.puts "--- Writing body (#{@live.body.size} bytes)"
|
31
|
+
file.puts @live.body
|
32
|
+
rescue => err
|
33
|
+
TTY.puts "#dump had an error: #{err.inspect}"
|
34
|
+
end
|
35
|
+
|
28
36
|
def html
|
29
37
|
@html
|
30
38
|
end
|
@@ -34,9 +42,9 @@ class Livetext::UserAPI
|
|
34
42
|
end
|
35
43
|
|
36
44
|
def include_file(file)
|
45
|
+
# checkpoint "DATA = #{file.inspect}"
|
37
46
|
api.data = file
|
38
47
|
api.args = [file]
|
39
|
-
STDERR.puts "incfile: #{api.methods.sort.inspect}\n "
|
40
48
|
api.dot_include
|
41
49
|
end
|
42
50
|
|
@@ -191,11 +199,13 @@ STDERR.puts "incfile: #{api.methods.sort.inspect}\n "
|
|
191
199
|
end
|
192
200
|
|
193
201
|
def puts(*args)
|
194
|
-
@live.output.puts *args
|
202
|
+
# @live.output.puts *args
|
203
|
+
@live.api.out *args
|
195
204
|
end
|
196
205
|
|
197
206
|
def print(*args)
|
198
|
-
@live.output.print *args
|
207
|
+
# @live.output.print *args
|
208
|
+
@live.api.out! *args
|
199
209
|
end
|
200
210
|
|
201
211
|
def debug=(val)
|
data/lib/livetext/version.rb
CHANGED
data/lib/livetext.rb
CHANGED
@@ -12,7 +12,8 @@ require_relative 'livetext/userapi'
|
|
12
12
|
require_relative 'livetext/formatter'
|
13
13
|
require_relative 'livetext/processor'
|
14
14
|
require_relative 'livetext/helpers'
|
15
|
+
require_relative 'livetext/more'
|
16
|
+
|
15
17
|
require_relative 'livetext/handler'
|
16
18
|
|
17
|
-
require_relative 'livetext/more'
|
18
19
|
|
data/test/snapshots.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'simplecov' # These two lines must go first
|
2
|
-
SimpleCov.use_merging(true)
|
3
|
-
SimpleCov.start do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
1
|
+
# require 'simplecov' # These two lines must go first
|
2
|
+
# SimpleCov.use_merging(true)
|
3
|
+
# SimpleCov.start do
|
4
|
+
# puts "SimpleCov: Snapshots"
|
5
|
+
# add_filter "/test/"
|
6
|
+
# enable_coverage :branch
|
7
|
+
# primary_coverage :branch
|
8
|
+
# end
|
9
9
|
|
10
10
|
require 'minitest/autorun'
|
11
11
|
|
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.9.
|
4
|
+
version: 0.9.45
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|