livetext 0.6.7 → 0.6.8
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/lib/livetext.rb +40 -136
- data/test/newtest +7 -3
- data/test/test.rb +3 -0
- data/test/testfiles/simple_include/source.ltx +1 -0
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 941adaa3e54331bd76d20b4af2e8d34efb956f6e
|
4
|
+
data.tar.gz: 7b9f26b201ef3aa3264f1ddf3c7402ddb8e29b66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b464efdb73781affec9be9b62e4d98865951a50ba61ce0657be2f476f9b878e550a4a551a24079fdd97435878c29051601d327e2f665877c3687d0e75255b5a6
|
7
|
+
data.tar.gz: f1a712645a73e293f657604a15a0dd47714dbd197a495f3da710eaa45d0850133d395e30aff64d80b08d2f79603cbead5e978daa9b7746f75b0b9e168849fbfb
|
data/lib/livetext.rb
CHANGED
@@ -6,16 +6,9 @@ TTY = ::File.open("/dev/tty", "w")
|
|
6
6
|
|
7
7
|
require_relative "#{Plugins}/pyggish"
|
8
8
|
|
9
|
-
class Enumerator
|
10
|
-
def remaining
|
11
|
-
array = []
|
12
|
-
loop { array << self.next }
|
13
|
-
array
|
14
|
-
end
|
15
|
-
end
|
16
9
|
|
17
10
|
class Livetext
|
18
|
-
VERSION = "0.6.
|
11
|
+
VERSION = "0.6.8"
|
19
12
|
|
20
13
|
Space = " "
|
21
14
|
|
@@ -36,23 +29,24 @@ class Livetext
|
|
36
29
|
attr_reader :main
|
37
30
|
end
|
38
31
|
|
39
|
-
def self.handle_line(line)
|
40
|
-
# ::TTY.puts "---- hline - #{line.inspect}"
|
32
|
+
def self.handle_line(line, sigil=".")
|
41
33
|
nomarkup = true
|
42
|
-
|
34
|
+
# FIXME inefficient
|
43
35
|
scomment = rx(sigil, Livetext::Space) # apply these in order
|
44
36
|
sname = rx(sigil)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
37
|
+
if line =~ scomment
|
38
|
+
handle_scomment(line)
|
39
|
+
elsif line =~ sname
|
40
|
+
handle_sname(line)
|
41
|
+
else
|
42
|
+
@main._passthru(line)
|
49
43
|
end
|
50
44
|
end
|
51
45
|
|
52
46
|
def self.peek_nextline
|
53
47
|
@sources.last[0].peek
|
54
48
|
rescue StopIteration
|
55
|
-
|
49
|
+
@sources.pop
|
56
50
|
nil
|
57
51
|
end
|
58
52
|
|
@@ -62,62 +56,38 @@ class Livetext
|
|
62
56
|
@sources.last[2] += 1
|
63
57
|
line
|
64
58
|
rescue StopIteration
|
65
|
-
|
66
|
-
|
59
|
+
@sources.pop
|
60
|
+
nil
|
67
61
|
end
|
68
62
|
|
69
|
-
def self.process_file(fname
|
70
|
-
block ||= proc {|line| handle_line(line) }
|
63
|
+
def self.process_file(fname)
|
71
64
|
@sources ||= []
|
72
65
|
enum = File.readlines(fname).each
|
73
|
-
@main ||= Livetext
|
66
|
+
@main ||= Livetext.new(enum)
|
74
67
|
@sources.push [enum, fname, 0]
|
75
68
|
loop do
|
76
69
|
line = nextline
|
77
70
|
break if line.nil?
|
78
|
-
|
71
|
+
handle_line(line)
|
79
72
|
end
|
80
|
-
# @sources.pop # FIXME ?
|
81
73
|
end
|
82
74
|
|
83
75
|
def self.grab_file(fname)
|
84
76
|
File.read(fname)
|
85
77
|
end
|
86
78
|
|
87
|
-
def self.handle_file(file)
|
88
|
-
fname = "<<none>>"
|
89
|
-
if file.is_a? String
|
90
|
-
fname = file
|
91
|
-
file = File.new(fname)
|
92
|
-
end
|
93
|
-
source = file.each_line
|
94
|
-
@main = Livetext::System.new(source)
|
95
|
-
@main.file = fname
|
96
|
-
@main.lnum = 0
|
97
|
-
|
98
|
-
loop do
|
99
|
-
line = ::Livetext.nextline
|
100
|
-
::Livetext.handle_line(line)
|
101
|
-
end
|
102
|
-
|
103
|
-
val = @main.finalize if @main.respond_to?(:finalize)
|
104
|
-
val
|
105
|
-
rescue => err
|
106
|
-
STDERR.puts "handle_file: #{err}"
|
107
|
-
end
|
108
|
-
|
109
79
|
def self.rx(str, space=nil)
|
110
80
|
Regexp.compile("^" + Regexp.escape(str) + "#{space}")
|
111
81
|
end
|
112
82
|
|
113
|
-
def self.handle_scomment(
|
83
|
+
def self.handle_scomment(line, sigil=".")
|
114
84
|
end
|
115
85
|
|
116
86
|
def self._disallowed?(name)
|
117
87
|
Livetext::Disallowed.include?(name.to_sym)
|
118
88
|
end
|
119
89
|
|
120
|
-
def self._get_name(
|
90
|
+
def self._get_name(line, sigil=".")
|
121
91
|
blank = line.index(" ") || -1 # line.index("\n")
|
122
92
|
name = line[1..(blank-1)]
|
123
93
|
abort "#{@main.where}: Name '#{name}' is not permitted" if _disallowed?(name)
|
@@ -128,26 +98,19 @@ class Livetext
|
|
128
98
|
name
|
129
99
|
end
|
130
100
|
|
131
|
-
def self.handle_sname(
|
132
|
-
name = _get_name(
|
101
|
+
def self.handle_sname(line, sigil=".")
|
102
|
+
name = _get_name(line, sigil=".")
|
133
103
|
unless @main.respond_to?(name)
|
134
104
|
raise "'#{name}' is unknown"
|
135
105
|
return
|
136
106
|
end
|
137
|
-
|
138
107
|
@main.send(name)
|
139
|
-
|
140
108
|
rescue => err
|
141
|
-
STDERR.puts "ERROR on #{@
|
142
|
-
|
143
|
-
# STDERR.puts " sources = #{@main.source_files.inspect}"
|
144
|
-
STDERR.puts err.backtrace
|
145
|
-
# STDERR.puts "--- Methods = #{(@main.methods - Object.methods).sort}\n "
|
109
|
+
STDERR.puts "ERROR on #{@sources.last[1]} line #{@sources.last[2]} : #{err}"
|
110
|
+
exit
|
146
111
|
end
|
147
112
|
|
148
|
-
|
149
|
-
|
150
|
-
class Livetext::Functions # Functions will go here... user-def AND pre-def??
|
113
|
+
class Functions # Functions will go here... user-def AND pre-def??
|
151
114
|
def date
|
152
115
|
Time.now.strftime("%F")
|
153
116
|
end
|
@@ -162,8 +125,7 @@ class Livetext::Functions # Functions will go here... user-def AND pre-def??
|
|
162
125
|
end
|
163
126
|
end
|
164
127
|
|
165
|
-
|
166
|
-
|
128
|
+
# include ::Livetext::Helpers
|
167
129
|
def _check_existence(file)
|
168
130
|
raise "No such file found" unless File.exist?(file)
|
169
131
|
end
|
@@ -233,7 +195,7 @@ module Livetext::Helpers
|
|
233
195
|
@line = ::Livetext.nextline # no chomp needed
|
234
196
|
break if _end?(@line, sigil)
|
235
197
|
next if _comment?(@line, sigil)
|
236
|
-
lines << @line
|
198
|
+
lines << @line
|
237
199
|
end
|
238
200
|
_optional_blank_line
|
239
201
|
if block_given?
|
@@ -290,20 +252,14 @@ module Livetext::Helpers
|
|
290
252
|
end
|
291
253
|
|
292
254
|
def _formatting(line)
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
line
|
298
|
-
end
|
299
|
-
|
300
|
-
def OLD_formatting(line)
|
301
|
-
l2 = _formatting(line)
|
255
|
+
l2 = _basic_format(line, "_", "i")
|
256
|
+
l2 = _basic_format(l2, "*", "b")
|
257
|
+
l2 = _basic_format(l2, "`", "tt")
|
258
|
+
l2 = _handle_escapes(l2, "_*`")
|
302
259
|
line.replace(l2)
|
303
|
-
return line
|
304
260
|
end
|
305
261
|
|
306
|
-
def
|
262
|
+
def _substitution(line) # FIXME handle functions separately later??
|
307
263
|
fobj = ::Livetext::Functions.new
|
308
264
|
@funcs = ::Livetext::Functions.instance_methods
|
309
265
|
@funcs.each do |func|
|
@@ -325,8 +281,8 @@ module Livetext::Helpers
|
|
325
281
|
def _passthru(line)
|
326
282
|
return if @_nopass
|
327
283
|
_puts "<p>" if line == "\n" and ! @_nopara
|
328
|
-
|
329
|
-
|
284
|
+
_formatting(line)
|
285
|
+
_substitution(line)
|
330
286
|
_puts line
|
331
287
|
end
|
332
288
|
|
@@ -338,22 +294,6 @@ module Livetext::Helpers
|
|
338
294
|
@output.print *args
|
339
295
|
end
|
340
296
|
|
341
|
-
# def peek_next_line
|
342
|
-
# @sources.last[0].peek
|
343
|
-
# rescue StopIteration
|
344
|
-
# @sources.pop
|
345
|
-
# nil
|
346
|
-
# end
|
347
|
-
|
348
|
-
# def _next_line
|
349
|
-
# @line = @sources.last[0].next
|
350
|
-
# @sources.last[2] += 1
|
351
|
-
# _debug "Line: #@lnum: #@line"
|
352
|
-
# @line
|
353
|
-
# rescue StopIteration
|
354
|
-
# nil
|
355
|
-
# end
|
356
|
-
|
357
297
|
def _debug=(val)
|
358
298
|
@_debug = val
|
359
299
|
end
|
@@ -361,10 +301,8 @@ module Livetext::Helpers
|
|
361
301
|
def _debug(*args)
|
362
302
|
TTY.puts *args if @_debug
|
363
303
|
end
|
364
|
-
end
|
365
|
-
|
366
|
-
module Livetext::Standard
|
367
304
|
|
305
|
+
# include ::Livetext::Standard
|
368
306
|
def comment
|
369
307
|
junk = _body # do nothing with contents
|
370
308
|
end
|
@@ -395,12 +333,12 @@ module Livetext::Standard
|
|
395
333
|
end
|
396
334
|
|
397
335
|
def say
|
398
|
-
str =
|
336
|
+
str = _substitution(_data)
|
399
337
|
_optional_blank_line
|
400
338
|
end
|
401
339
|
|
402
340
|
def banner
|
403
|
-
str =
|
341
|
+
str = _substitution(_data)
|
404
342
|
n = str.length - 1
|
405
343
|
_errout "-"*n
|
406
344
|
_errout str
|
@@ -498,21 +436,16 @@ module Livetext::Standard
|
|
498
436
|
|
499
437
|
def _include
|
500
438
|
file = _args.first
|
501
|
-
::Livetext.process_file(file)
|
439
|
+
::Livetext.process_file(file)
|
502
440
|
_optional_blank_line
|
503
441
|
end
|
504
442
|
|
505
443
|
def include! # FIXME huh?
|
506
444
|
file = _args.first
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
lines = ::File.readlines(file)
|
445
|
+
return unless File.exist?(file)
|
446
|
+
|
447
|
+
lines = process_file(file)
|
511
448
|
File.delete(file)
|
512
|
-
lines.each {|line| _debug " inc: #{line}" }
|
513
|
-
rem = @input.remaining
|
514
|
-
array = lines + rem
|
515
|
-
@input = array.each # FIXME .with_index
|
516
449
|
_optional_blank_line
|
517
450
|
end
|
518
451
|
|
@@ -535,25 +468,6 @@ module Livetext::Standard
|
|
535
468
|
_optional_blank_line
|
536
469
|
end
|
537
470
|
|
538
|
-
def old_mixin
|
539
|
-
name = _args.first
|
540
|
-
file = "#{Plugins}/" + name + ".rb"
|
541
|
-
return if @_mixins.include?(file)
|
542
|
-
file = "./#{name}.rb" unless File.exist?(file)
|
543
|
-
raise "No such file: #{name}.rb found" unless File.exist?(file)
|
544
|
-
|
545
|
-
@_mixins << file
|
546
|
-
# process_file(file)
|
547
|
-
main = Livetext.main
|
548
|
-
m0 = main.methods.reject {|x| x.to_s[0] == "_" }
|
549
|
-
self.class.class_eval(::File.read(file))
|
550
|
-
m1 = main.methods.reject {|x| x.to_s[0] == "_" }
|
551
|
-
$meths[file] = m1 - m0
|
552
|
-
init = "init_#{name}"
|
553
|
-
self.send(init) if self.respond_to? init
|
554
|
-
_optional_blank_line
|
555
|
-
end
|
556
|
-
|
557
471
|
def copy
|
558
472
|
file = _args.first
|
559
473
|
@output.puts ::Livetext.grab_file(file)
|
@@ -606,17 +520,7 @@ module Livetext::Standard
|
|
606
520
|
_puts "</table>"
|
607
521
|
end
|
608
522
|
|
609
|
-
|
610
|
-
|
611
|
-
class Livetext
|
612
|
-
METHS = (Livetext::Standard.instance_methods - Object.methods).sort
|
613
|
-
end
|
614
|
-
|
615
|
-
|
616
|
-
class Livetext::System # < BasicObject
|
617
|
-
include ::Kernel
|
618
|
-
include ::Livetext::Helpers
|
619
|
-
include ::Livetext::Standard
|
523
|
+
###### Livetext
|
620
524
|
|
621
525
|
attr_accessor :file, :lnum, :source_files
|
622
526
|
|
@@ -657,6 +561,6 @@ class Livetext::System # < BasicObject
|
|
657
561
|
end
|
658
562
|
|
659
563
|
if $0 == __FILE__
|
660
|
-
Livetext.process_file(ARGV[0] || STDIN)
|
564
|
+
Livetext.process_file(ARGV[0] || STDIN)
|
661
565
|
end
|
662
566
|
|
data/test/newtest
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
-
mkdir testfiles/$1
|
1
|
+
mkdir test/testfiles/$1
|
2
2
|
|
3
3
|
# actual-error.txt actual-output.txt expected-error.txt expected-output.txt source.ltx
|
4
4
|
|
5
|
-
cd testfiles/$1
|
5
|
+
cd test/testfiles/$1
|
6
6
|
|
7
7
|
touch expected-output.txt expected-error.txt
|
8
8
|
|
9
|
-
vi
|
9
|
+
vi source.ltx
|
10
|
+
|
11
|
+
livetext source.ltx >expected-output.txt 2>expected-error.txt
|
12
|
+
|
13
|
+
vi -O source.ltx expected-output.txt expected-error.txt
|
10
14
|
|
data/test/test.rb
CHANGED
@@ -38,6 +38,9 @@ class TestingLiveText < MiniTest::Test
|
|
38
38
|
def test_comments_ignored_1; external_files end
|
39
39
|
def test_block_comment; external_files end
|
40
40
|
|
41
|
+
def test_error_line_num; external_files end
|
42
|
+
def test_error_inc_line_num; external_files end
|
43
|
+
|
41
44
|
def test_simple_vars; external_files end
|
42
45
|
def test_more_complex_vars; external_files end
|
43
46
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: livetext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -102,9 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 2.
|
105
|
+
rubygems_version: 2.2.2
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: A smart processor for text
|
109
109
|
test_files: []
|
110
|
-
has_rdoc:
|