livetext 0.6.5 → 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.ltx +5 -5
- data/bin/livetext +1 -1
- data/lib/livetext.rb +71 -58
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13347ab8dd844db4d4bd6b65038c3d8a57b6c102
|
4
|
+
data.tar.gz: 146caebefc11e7c98604ed238c135b084c0e35ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21b01a30d65224433e06f456354882169298f96f822aa92f556303d596393bfa9244525884cd2ebc53a2d8cda777f920d4cd04e059267d3457110fa8e20a011c
|
7
|
+
data.tar.gz: d57ad1df788529d5e0748eee9b01482f9c509ca246254f672ff9315eb3b441e426e0c5e8977df2e776d9f033edc6915f301b5fb2df28dcccc77ec3fdc1d1c681
|
data/README.ltx
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.mixin
|
1
|
+
.mixin dsl/tutorial
|
2
2
|
.title Livetext: A smart processor for text
|
3
3
|
|
4
4
|
.p Livetext is simply a tool for transforming text from one format into another. The source file
|
@@ -59,8 +59,8 @@ in commented form.
|
|
59
59
|
a block of lines rather than just a few parameters. (A text block is like a here-document.)
|
60
60
|
There is no method name corresponding to the `.end command.
|
61
61
|
|
62
|
-
.p The file extension I've chosen is `.
|
63
|
-
README is a `.
|
62
|
+
.p The file extension I've chosen is `.ltx (though this may change). *Note: The source for this
|
63
|
+
README is a `.ltx file which uses its own little _(ad hoc) library (called `(readme.rb)). Refer to
|
64
64
|
the repo to see these.
|
65
65
|
|
66
66
|
.section Syntax, comments, and more
|
@@ -117,7 +117,7 @@ Here is the current list:
|
|
117
117
|
.dlist
|
118
118
|
`comment ~~ Start a comment block
|
119
119
|
`errout ~~ Write an error message to STDERR
|
120
|
-
`sigil ~~ Change the default sigil from `. to some other character
|
120
|
+
`sigil ~~ Change the default sigil from `. to some other character (*(removed for now))
|
121
121
|
`_def ~~ Define a new method inline
|
122
122
|
`set ~~ Assign values to variables for later interpolation
|
123
123
|
`include ~~ Include an outside text file (to be interpreted as Livetext)
|
@@ -259,7 +259,7 @@ def alpha
|
|
259
259
|
end
|
260
260
|
.end
|
261
261
|
|
262
|
-
.p Now the `.
|
262
|
+
.p Now the `.ltx file can be written this way:
|
263
263
|
|
264
264
|
.code
|
265
265
|
.mixin mylib
|
data/bin/livetext
CHANGED
data/lib/livetext.rb
CHANGED
@@ -15,7 +15,7 @@ class Enumerator
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class Livetext
|
18
|
-
VERSION = "0.6.
|
18
|
+
VERSION = "0.6.7"
|
19
19
|
|
20
20
|
Space = " "
|
21
21
|
|
@@ -37,6 +37,7 @@ class Livetext
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.handle_line(line)
|
40
|
+
# ::TTY.puts "---- hline - #{line.inspect}"
|
40
41
|
nomarkup = true
|
41
42
|
sigil = "."
|
42
43
|
scomment = rx(sigil, Livetext::Space) # apply these in order
|
@@ -48,6 +49,41 @@ class Livetext
|
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
52
|
+
def self.peek_nextline
|
53
|
+
@sources.last[0].peek
|
54
|
+
rescue StopIteration
|
55
|
+
# @sources.pop # FIXME??
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.nextline
|
60
|
+
return nil if @sources.empty?
|
61
|
+
line = @sources.last[0].next
|
62
|
+
@sources.last[2] += 1
|
63
|
+
line
|
64
|
+
rescue StopIteration
|
65
|
+
# @sources.pop # FIXME??
|
66
|
+
# retry
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.process_file(fname, &block)
|
70
|
+
block ||= proc {|line| handle_line(line) }
|
71
|
+
@sources ||= []
|
72
|
+
enum = File.readlines(fname).each
|
73
|
+
@main ||= Livetext::System.new(enum)
|
74
|
+
@sources.push [enum, fname, 0]
|
75
|
+
loop do
|
76
|
+
line = nextline
|
77
|
+
break if line.nil?
|
78
|
+
block.call(line) # handle_line(line)
|
79
|
+
end
|
80
|
+
# @sources.pop # FIXME ?
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.grab_file(fname)
|
84
|
+
File.read(fname)
|
85
|
+
end
|
86
|
+
|
51
87
|
def self.handle_file(file)
|
52
88
|
fname = "<<none>>"
|
53
89
|
if file.is_a? String
|
@@ -56,13 +92,12 @@ class Livetext
|
|
56
92
|
end
|
57
93
|
source = file.each_line
|
58
94
|
@main = Livetext::System.new(source)
|
59
|
-
# @main._switch_file(fname)
|
60
95
|
@main.file = fname
|
61
96
|
@main.lnum = 0
|
62
97
|
|
63
98
|
loop do
|
64
|
-
line =
|
65
|
-
handle_line(line)
|
99
|
+
line = ::Livetext.nextline
|
100
|
+
::Livetext.handle_line(line)
|
66
101
|
end
|
67
102
|
|
68
103
|
val = @main.finalize if @main.respond_to?(:finalize)
|
@@ -71,7 +106,6 @@ class Livetext
|
|
71
106
|
STDERR.puts "handle_file: #{err}"
|
72
107
|
end
|
73
108
|
|
74
|
-
|
75
109
|
def self.rx(str, space=nil)
|
76
110
|
Regexp.compile("^" + Regexp.escape(str) + "#{space}")
|
77
111
|
end
|
@@ -84,7 +118,7 @@ class Livetext
|
|
84
118
|
end
|
85
119
|
|
86
120
|
def self._get_name(sigil, line)
|
87
|
-
blank = line.index(" ") || line.index("\n")
|
121
|
+
blank = line.index(" ") || -1 # line.index("\n")
|
88
122
|
name = line[1..(blank-1)]
|
89
123
|
abort "#{@main.where}: Name '#{name}' is not permitted" if _disallowed?(name)
|
90
124
|
@main._data = line[(blank+1)..-1]
|
@@ -106,9 +140,9 @@ class Livetext
|
|
106
140
|
rescue => err
|
107
141
|
STDERR.puts "ERROR on #{@main.file} line #{@main.lnum} : #{err}"
|
108
142
|
# STDERR.puts " self = #{self.inspect} @main = #{@main.inspect}"
|
109
|
-
|
143
|
+
# STDERR.puts " sources = #{@main.source_files.inspect}"
|
110
144
|
STDERR.puts err.backtrace
|
111
|
-
|
145
|
+
# STDERR.puts "--- Methods = #{(@main.methods - Object.methods).sort}\n "
|
112
146
|
end
|
113
147
|
|
114
148
|
end
|
@@ -157,7 +191,7 @@ module Livetext::Helpers
|
|
157
191
|
end
|
158
192
|
|
159
193
|
def _optional_blank_line
|
160
|
-
@line =
|
194
|
+
@line = ::Livetext.nextline if ::Livetext.peek_nextline =~ /^ *$/
|
161
195
|
end
|
162
196
|
|
163
197
|
def _comment?(str, sigil=".")
|
@@ -181,7 +215,7 @@ module Livetext::Helpers
|
|
181
215
|
def _raw_body(tag = "__EOF__", sigil = ".")
|
182
216
|
lines = []
|
183
217
|
loop do
|
184
|
-
@line =
|
218
|
+
@line = ::Livetext.nextline
|
185
219
|
break if @line.chomp.strip == tag
|
186
220
|
lines << @line
|
187
221
|
end
|
@@ -196,7 +230,7 @@ module Livetext::Helpers
|
|
196
230
|
def _body(sigil=".")
|
197
231
|
lines = []
|
198
232
|
loop do
|
199
|
-
@line =
|
233
|
+
@line = ::Livetext.nextline # no chomp needed
|
200
234
|
break if _end?(@line, sigil)
|
201
235
|
next if _comment?(@line, sigil)
|
202
236
|
lines << @line # _formatting(line) # FIXME ??
|
@@ -304,16 +338,21 @@ module Livetext::Helpers
|
|
304
338
|
@output.print *args
|
305
339
|
end
|
306
340
|
|
307
|
-
|
308
|
-
|
309
|
-
|
341
|
+
# def peek_next_line
|
342
|
+
# @sources.last[0].peek
|
343
|
+
# rescue StopIteration
|
344
|
+
# @sources.pop
|
345
|
+
# nil
|
346
|
+
# end
|
310
347
|
|
311
|
-
def _next_line
|
312
|
-
@line = @
|
313
|
-
@
|
314
|
-
_debug "Line: #@lnum: #@line"
|
315
|
-
@line
|
316
|
-
|
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
|
317
356
|
|
318
357
|
def _debug=(val)
|
319
358
|
@_debug = val
|
@@ -457,35 +496,15 @@ module Livetext::Standard
|
|
457
496
|
_optional_blank_line
|
458
497
|
end
|
459
498
|
|
460
|
-
def _switch_file(fname)
|
461
|
-
::STDERR.puts " switching to #{fname}, pushing #@file"
|
462
|
-
@source_files ||= []
|
463
|
-
@source_files.push(@file)
|
464
|
-
@file = fname
|
465
|
-
::STDERR.puts " sources = #{@source_files.inspect}"
|
466
|
-
@file
|
467
|
-
end
|
468
|
-
|
469
|
-
def _popfile
|
470
|
-
@file = @source_files.pop
|
471
|
-
end
|
472
|
-
|
473
499
|
def _include
|
474
500
|
file = _args.first
|
475
|
-
|
476
|
-
_switch_file(file)
|
477
|
-
# STDERR.puts "_include: ****** Set @file = #@file"
|
478
|
-
lines.each {|line| _debug " inc: #{line}" }
|
479
|
-
rem = @input.remaining
|
480
|
-
array = lines + rem
|
481
|
-
@input = array.each # FIXME .with_index
|
501
|
+
::Livetext.process_file(file) # {|line| ::Livetext.handle_line(line) }
|
482
502
|
_optional_blank_line
|
483
|
-
_popfile
|
484
503
|
end
|
485
504
|
|
486
|
-
def include!
|
505
|
+
def include! # FIXME huh?
|
487
506
|
file = _args.first
|
488
|
-
|
507
|
+
# _switch_file(file)
|
489
508
|
existing = File.exist?(file)
|
490
509
|
return if not existing
|
491
510
|
lines = ::File.readlines(file)
|
@@ -495,27 +514,25 @@ module Livetext::Standard
|
|
495
514
|
array = lines + rem
|
496
515
|
@input = array.each # FIXME .with_index
|
497
516
|
_optional_blank_line
|
498
|
-
_popfile
|
499
517
|
end
|
500
518
|
|
501
519
|
def mixin
|
502
520
|
name = _args.first # Expect a module name
|
503
521
|
file = "#{Plugins}/" + name.downcase + ".rb"
|
504
|
-
return if @_mixins.include?(
|
522
|
+
return if @_mixins.include?(name)
|
505
523
|
file = "./#{name}.rb" unless File.exist?(file)
|
506
524
|
_check_existence(file)
|
507
525
|
|
508
|
-
@_mixins <<
|
509
|
-
|
510
|
-
modname = name.capitalize
|
511
|
-
string = "module ::#{modname}\n
|
526
|
+
@_mixins << name
|
527
|
+
meths = ::Livetext.grab_file(file)
|
528
|
+
modname = name.gsub("/","_").capitalize
|
529
|
+
string = "module ::#{modname}\n#{meths}\nend"
|
512
530
|
eval(string)
|
513
531
|
newmod = Object.const_get("::" + modname)
|
514
|
-
Livetext.main.extend(newmod)
|
532
|
+
Livetext.main.extend(newmod)
|
515
533
|
init = "init_#{name}"
|
516
534
|
self.send(init) if self.respond_to? init
|
517
535
|
_optional_blank_line
|
518
|
-
_popfile
|
519
536
|
end
|
520
537
|
|
521
538
|
def old_mixin
|
@@ -526,7 +543,7 @@ module Livetext::Standard
|
|
526
543
|
raise "No such file: #{name}.rb found" unless File.exist?(file)
|
527
544
|
|
528
545
|
@_mixins << file
|
529
|
-
|
546
|
+
# process_file(file)
|
530
547
|
main = Livetext.main
|
531
548
|
m0 = main.methods.reject {|x| x.to_s[0] == "_" }
|
532
549
|
self.class.class_eval(::File.read(file))
|
@@ -535,16 +552,12 @@ module Livetext::Standard
|
|
535
552
|
init = "init_#{name}"
|
536
553
|
self.send(init) if self.respond_to? init
|
537
554
|
_optional_blank_line
|
538
|
-
_popfile
|
539
555
|
end
|
540
556
|
|
541
557
|
def copy
|
542
558
|
file = _args.first
|
543
|
-
|
544
|
-
text = ::File.readlines(file)
|
545
|
-
@output.puts text
|
559
|
+
@output.puts ::Livetext.grab_file(file)
|
546
560
|
_optional_blank_line
|
547
|
-
_popfile
|
548
561
|
end
|
549
562
|
|
550
563
|
def r
|
@@ -644,6 +657,6 @@ class Livetext::System # < BasicObject
|
|
644
657
|
end
|
645
658
|
|
646
659
|
if $0 == __FILE__
|
647
|
-
Livetext.
|
660
|
+
Livetext.process_file(ARGV[0] || STDIN) # {|line| Livetext.handle_line(line) }
|
648
661
|
end
|
649
662
|
|
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.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|
@@ -102,8 +102,9 @@ 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.4.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:
|