livetext 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/livetext +13 -5
- data/lib/livetext.rb +1 -1
- data/lib/standard.rb +231 -0
- data/lib/userapi.rb +181 -0
- data/livetext.gemspec +9 -86
- data/test/affirm/kbks.jpg +0 -0
- data/test/affirm/lm-kbks.lt +19 -0
- data/test/testfiles/copy_is_raw/rawtext.inc +4 -0
- data/test/testfiles/crap +16 -0
- data/test/testfiles/error_inc_line_num/expected-error.txt +1 -0
- data/test/testfiles/error_inc_line_num/expected-output.txt +7 -0
- data/test/testfiles/error_inc_line_num/file2.ltx +7 -0
- data/test/testfiles/error_inc_line_num/source.ltx +8 -0
- data/test/testfiles/error_invalid_name/expected-error.txt +1 -0
- data/test/testfiles/error_invalid_name/expected-output.txt +5 -0
- data/test/testfiles/error_invalid_name/source.ltx +9 -0
- data/test/testfiles/error_line_num/expected-error.txt +1 -0
- data/test/testfiles/error_line_num/expected-output.txt +3 -0
- data/test/testfiles/error_line_num/source.ltx +6 -0
- data/test/testfiles/error_mismatched_end/expected-error.txt +1 -0
- data/test/testfiles/error_mismatched_end/expected-output.txt +6 -0
- data/test/testfiles/error_mismatched_end/source.ltx +8 -0
- data/test/testfiles/error_missing_end/expected-error.txt +1 -0
- data/test/testfiles/error_missing_end/expected-output.txt +4 -0
- data/test/testfiles/error_missing_end/source.ltx +6 -0
- data/test/testfiles/error_name_not_permitted/expected-error.txt +1 -0
- data/test/testfiles/error_name_not_permitted/expected-output.txt +4 -0
- data/test/testfiles/error_name_not_permitted/source.ltx +6 -0
- data/test/testfiles/error_no_such_copy/expected-error.txt +1 -0
- data/test/testfiles/error_no_such_copy/expected-output.txt +5 -0
- data/test/testfiles/error_no_such_copy/source.ltx +8 -0
- data/test/testfiles/error_no_such_inc/expected-error.txt +1 -0
- data/test/testfiles/error_no_such_inc/expected-output.txt +5 -0
- data/test/testfiles/error_no_such_inc/source.ltx +8 -0
- data/test/testfiles/error_no_such_mixin/expected-error.txt +1 -0
- data/test/testfiles/error_no_such_mixin/expected-output.txt +6 -0
- data/test/testfiles/error_no_such_mixin/source.ltx +10 -0
- data/test/testfiles/functions/expected-error.txt +0 -0
- data/test/testfiles/functions/expected-output.txt +8 -0
- data/test/testfiles/functions/source.ltx +11 -0
- data/test/testfiles/raw_text_block/rawtext.inc +4 -0
- data/test/testfiles/simple_copy/simplefile.inc +2 -0
- data/test/testfiles/simple_include/simplefile.inc +2 -0
- data/test/testfiles/simple_mixin/simple_mixin.rb +3 -0
- data/test/try.lt +20 -0
- data/test/try2.lt +20 -0
- metadata +106 -63
- data/notes.txt +0 -146
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7059d92044e10b0b6434ca10c8fca98495abd9c
|
4
|
+
data.tar.gz: 7811dac366af024bd3257d31278902d023a5d4ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09c0a9e24e023e36a26c3b176a5ddb7d1e4f474ffe372da8595d947b88f2e7bce49269190dc2e76f4d293354b8582974da41b64dd801dd10c5b0fb84a59d99db
|
7
|
+
data.tar.gz: eba59a3e5dde7c6c609bbc0e5c6d093d7dc2dacee41301451e06eb5ceb770754025180694fe1cafde14e141301e8d9fc2f273e1e46f76ebe87f74422e67f8d18
|
data/bin/livetext
CHANGED
@@ -4,18 +4,26 @@ require_relative '../lib/livetext'
|
|
4
4
|
|
5
5
|
def handle_ltx(src)
|
6
6
|
abort "Unknown file extension" unless src =~ /.ltx$/
|
7
|
-
|
8
7
|
x = Livetext.new
|
9
8
|
x.process_file(src)
|
10
9
|
end
|
11
10
|
|
12
11
|
# Main
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
case ARGV.first
|
14
|
+
when "-v", "--version"
|
15
|
+
puts "livetext version #{Livetext::VERSION}\n "
|
16
|
+
exit
|
17
|
+
when nil
|
18
|
+
puts "Usage: "
|
19
|
+
puts " livetext -v"
|
20
|
+
puts " livetext --version"
|
21
|
+
puts " livetext filename"
|
22
|
+
puts
|
23
|
+
exit
|
24
|
+
else
|
25
|
+
src = ARGV.first
|
17
26
|
end
|
18
27
|
|
19
|
-
src = ARGV.first
|
20
28
|
handle_ltx(src)
|
21
29
|
|
data/lib/livetext.rb
CHANGED
data/lib/standard.rb
ADDED
@@ -0,0 +1,231 @@
|
|
1
|
+
module Livetext::Standard
|
2
|
+
|
3
|
+
def data=(val)
|
4
|
+
@_data = val
|
5
|
+
@_args = val.split
|
6
|
+
@_mixins = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def comment
|
10
|
+
junk = _body # do nothing with contents
|
11
|
+
end
|
12
|
+
|
13
|
+
def shell
|
14
|
+
cmd = @_data
|
15
|
+
_errout("Running: #{cmd}")
|
16
|
+
system(cmd)
|
17
|
+
end
|
18
|
+
|
19
|
+
def func
|
20
|
+
funcname = @_args[0]
|
21
|
+
_error! "Illegal name '#{funcname}'" if _disallowed?(funcname)
|
22
|
+
func_def = <<-EOS
|
23
|
+
def #{funcname}
|
24
|
+
#{_body!}
|
25
|
+
end
|
26
|
+
EOS
|
27
|
+
Livetext::Functions.class_eval func_def
|
28
|
+
end
|
29
|
+
|
30
|
+
def shell!
|
31
|
+
cmd = @_data
|
32
|
+
system(cmd)
|
33
|
+
end
|
34
|
+
|
35
|
+
def errout
|
36
|
+
TTY.puts @_data
|
37
|
+
end
|
38
|
+
|
39
|
+
def say
|
40
|
+
str = _substitution(@_data)
|
41
|
+
TTY.puts str
|
42
|
+
_optional_blank_line
|
43
|
+
end
|
44
|
+
|
45
|
+
def banner
|
46
|
+
str = _substitution(@_data)
|
47
|
+
n = str.length - 1
|
48
|
+
_errout "-"*n
|
49
|
+
_errout str
|
50
|
+
_errout "-"*n
|
51
|
+
end
|
52
|
+
|
53
|
+
def quit
|
54
|
+
@output.close
|
55
|
+
exit
|
56
|
+
end
|
57
|
+
|
58
|
+
def outdir
|
59
|
+
@_outdir = @_args.first
|
60
|
+
_optional_blank_line
|
61
|
+
end
|
62
|
+
|
63
|
+
def outdir! # FIXME ?
|
64
|
+
@_outdir = @_args.first
|
65
|
+
raise "No output directory specified" if @_outdir.nil?
|
66
|
+
raise "No output directory specified" if @_outdir.empty?
|
67
|
+
system("rm -f #@_outdir/*.html")
|
68
|
+
_optional_blank_line
|
69
|
+
end
|
70
|
+
|
71
|
+
def _output(name)
|
72
|
+
@output.close unless @output == STDOUT
|
73
|
+
@output = File.open(@_outdir + "/" + name, "w")
|
74
|
+
@output.puts "<meta charset='UTF-8'>\n\n"
|
75
|
+
end
|
76
|
+
|
77
|
+
def _append(name)
|
78
|
+
@output.close unless @output == STDOUT
|
79
|
+
@output = File.open(@_outdir + "/" + name, "a")
|
80
|
+
@output.puts "<meta charset='UTF-8'>\n\n"
|
81
|
+
end
|
82
|
+
|
83
|
+
def output
|
84
|
+
name = @_args.first
|
85
|
+
_debug "Redirecting output to: #{name}"
|
86
|
+
_output(name)
|
87
|
+
end
|
88
|
+
|
89
|
+
def append
|
90
|
+
file = @_args[0]
|
91
|
+
_append(file)
|
92
|
+
end
|
93
|
+
|
94
|
+
def next_output
|
95
|
+
tag, num = @_args
|
96
|
+
_next_output(tag, num)
|
97
|
+
_optional_blank_line
|
98
|
+
end
|
99
|
+
|
100
|
+
def cleanup
|
101
|
+
@_args.each do |item|
|
102
|
+
if ::File.directory?(item)
|
103
|
+
system("rm -f #{item}/*")
|
104
|
+
else
|
105
|
+
::FileUtils.rm(item)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def _next_output(tag = "sec", num = nil)
|
111
|
+
@_file_num = num ? num : @_file_num + 1
|
112
|
+
@_file_num = @_file_num.to_i
|
113
|
+
name = "#{'%03d' % @_file_num}-#{tag}.html"
|
114
|
+
_output(name)
|
115
|
+
end
|
116
|
+
|
117
|
+
def _def
|
118
|
+
name = @_args[0]
|
119
|
+
str = "def #{name}\n"
|
120
|
+
raise "Illegal name '#{name}'" if _disallowed?(name)
|
121
|
+
str += _body!
|
122
|
+
str += "end\n"
|
123
|
+
eval str
|
124
|
+
rescue => err
|
125
|
+
_error!(err)
|
126
|
+
end
|
127
|
+
|
128
|
+
def nopass
|
129
|
+
@_nopass = true
|
130
|
+
end
|
131
|
+
|
132
|
+
def set
|
133
|
+
assigns = @_data.chomp.split(/, */)
|
134
|
+
assigns.each do |a|
|
135
|
+
var, val = a.split("=")
|
136
|
+
val = val[1..-2] if val[0] == ?" and val[-1] == ?"
|
137
|
+
val = val[1..-2] if val[0] == ?' and val[-1] == ?'
|
138
|
+
@vars[var] = val
|
139
|
+
end
|
140
|
+
_optional_blank_line
|
141
|
+
end
|
142
|
+
|
143
|
+
def _include
|
144
|
+
file = @_args.first
|
145
|
+
_check_existence(file, "No such include file '#{file}'")
|
146
|
+
@parent.process_file(file)
|
147
|
+
_optional_blank_line
|
148
|
+
end
|
149
|
+
|
150
|
+
def include! # FIXME huh?
|
151
|
+
file = @_args.first
|
152
|
+
return unless File.exist?(file)
|
153
|
+
|
154
|
+
lines = @parent.process_file(file)
|
155
|
+
File.delete(file)
|
156
|
+
_optional_blank_line
|
157
|
+
end
|
158
|
+
|
159
|
+
def mixin
|
160
|
+
name = @_args.first # Expect a module name
|
161
|
+
file = "#{Plugins}/" + name.downcase + ".rb"
|
162
|
+
return if @_mixins.include?(name)
|
163
|
+
file = "./#{name}.rb" unless File.exist?(file)
|
164
|
+
_check_existence(file, "No such mixin '#{name}'")
|
165
|
+
|
166
|
+
@_mixins << name
|
167
|
+
meths = grab_file(file)
|
168
|
+
modname = name.gsub("/","_").capitalize
|
169
|
+
string = "module ::#{modname}\n#{meths}\nend"
|
170
|
+
eval(string)
|
171
|
+
newmod = Object.const_get("::" + modname)
|
172
|
+
self.extend(newmod)
|
173
|
+
init = "init_#{name}"
|
174
|
+
self.send(init) if self.respond_to? init
|
175
|
+
_optional_blank_line
|
176
|
+
end
|
177
|
+
|
178
|
+
def copy
|
179
|
+
file = @_args.first
|
180
|
+
_check_existence(file, "No such file '#{file}' to copy")
|
181
|
+
@output.puts grab_file(file)
|
182
|
+
_optional_blank_line
|
183
|
+
end
|
184
|
+
|
185
|
+
def r
|
186
|
+
_puts @_data # No processing at all
|
187
|
+
end
|
188
|
+
|
189
|
+
def raw
|
190
|
+
# No processing at all (terminate with __EOF__)
|
191
|
+
_puts _raw_body
|
192
|
+
end
|
193
|
+
|
194
|
+
def debug
|
195
|
+
arg = @_args.first
|
196
|
+
self._debug = true
|
197
|
+
self._debug = false if arg == "off"
|
198
|
+
end
|
199
|
+
|
200
|
+
def nopara
|
201
|
+
@_nopara = true
|
202
|
+
end
|
203
|
+
|
204
|
+
def heading
|
205
|
+
_print "<center><font size=+1><b>"
|
206
|
+
_print @_data
|
207
|
+
_print "</b></font></center>"
|
208
|
+
end
|
209
|
+
|
210
|
+
def newpage
|
211
|
+
_puts '<p style="page-break-after:always;"></p>'
|
212
|
+
_puts "<p/>"
|
213
|
+
end
|
214
|
+
|
215
|
+
def invoke(str)
|
216
|
+
end
|
217
|
+
|
218
|
+
def dlist
|
219
|
+
delim = "~~"
|
220
|
+
_puts "<table>"
|
221
|
+
_body do |line|
|
222
|
+
line = _formatting(line)
|
223
|
+
term, defn = line.split(delim)
|
224
|
+
_puts "<tr>"
|
225
|
+
_puts "<td width=3%><td width=10%>#{term}</td><td>#{defn}</td>"
|
226
|
+
_puts "</tr>"
|
227
|
+
end
|
228
|
+
_puts "</table>"
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
data/lib/userapi.rb
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
# User API
|
2
|
+
|
3
|
+
module Livetext::UserAPI
|
4
|
+
|
5
|
+
def _check_existence(file, msg)
|
6
|
+
_error! msg unless File.exist?(file)
|
7
|
+
# puts "ERROR" unless File.exist?(file)
|
8
|
+
end
|
9
|
+
|
10
|
+
def _source
|
11
|
+
@input
|
12
|
+
end
|
13
|
+
|
14
|
+
def _args
|
15
|
+
if block_given?
|
16
|
+
@_args.each {|arg| yield arg }
|
17
|
+
else
|
18
|
+
@_args
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def _optional_blank_line
|
23
|
+
@line = nextline if peek_nextline =~ /^ *$/
|
24
|
+
end
|
25
|
+
|
26
|
+
def _comment?(str, sigil=".")
|
27
|
+
c1 = sigil + Livetext::Space
|
28
|
+
c2 = sigil + sigil + Livetext::Space
|
29
|
+
str.index(c1) == 0 || str.index(c2) == 0
|
30
|
+
end
|
31
|
+
|
32
|
+
def _trailing?(char)
|
33
|
+
return true if ["\n", " ", nil].include?(char)
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
|
37
|
+
def _end?(str, sigil=".")
|
38
|
+
cmd = sigil + "end"
|
39
|
+
return false if str.index(cmd) != 0
|
40
|
+
return false unless _trailing?(str[5])
|
41
|
+
return true
|
42
|
+
end
|
43
|
+
|
44
|
+
def _raw_body(tag = "__EOF__", sigil = ".")
|
45
|
+
lines = []
|
46
|
+
@save_location = @sources.last
|
47
|
+
loop do
|
48
|
+
@line = nextline
|
49
|
+
break if @line.chomp.strip == tag
|
50
|
+
lines << @line
|
51
|
+
end
|
52
|
+
_optional_blank_line
|
53
|
+
if block_given?
|
54
|
+
lines.each {|line| yield @line }
|
55
|
+
else
|
56
|
+
lines
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def _body(sigil=".")
|
61
|
+
lines = []
|
62
|
+
@save_location = @sources.last
|
63
|
+
loop do
|
64
|
+
@line = nextline
|
65
|
+
break if _end?(@line, sigil)
|
66
|
+
next if _comment?(@line, sigil) # FIXME?
|
67
|
+
lines << @line
|
68
|
+
end
|
69
|
+
_optional_blank_line
|
70
|
+
if block_given?
|
71
|
+
lines.each {|line| yield line }
|
72
|
+
else
|
73
|
+
lines
|
74
|
+
end
|
75
|
+
rescue => err
|
76
|
+
_error!("Expecting .end, found end of file")
|
77
|
+
end
|
78
|
+
|
79
|
+
def _body!(sigil=".")
|
80
|
+
_body(sigil).join("\n")
|
81
|
+
end
|
82
|
+
|
83
|
+
def _basic_format(line, delim, tag)
|
84
|
+
s = line.each_char
|
85
|
+
c = s.next
|
86
|
+
last = nil
|
87
|
+
getch = -> { last = c; c = s.next }
|
88
|
+
buffer = ""
|
89
|
+
loop do
|
90
|
+
case c
|
91
|
+
when " "
|
92
|
+
buffer << " "
|
93
|
+
last = " "
|
94
|
+
when delim
|
95
|
+
if last == " " || last == nil
|
96
|
+
buffer << "<#{tag}>"
|
97
|
+
c = getch.call
|
98
|
+
if c == "("
|
99
|
+
loop { getch.call; break if c == ")"; buffer << c }
|
100
|
+
buffer << "</#{tag}>"
|
101
|
+
else
|
102
|
+
loop { buffer << c; getch.call; break if c == " " || c == nil || c == "\n" }
|
103
|
+
buffer << "</#{tag}>"
|
104
|
+
buffer << " " if c == " "
|
105
|
+
end
|
106
|
+
else
|
107
|
+
buffer << delim
|
108
|
+
end
|
109
|
+
else
|
110
|
+
buffer << c
|
111
|
+
end
|
112
|
+
getch.call
|
113
|
+
end
|
114
|
+
buffer
|
115
|
+
end
|
116
|
+
|
117
|
+
def _handle_escapes(str, set)
|
118
|
+
str = str.dup
|
119
|
+
set.each_char do |ch|
|
120
|
+
str.gsub!("\\#{ch}", ch)
|
121
|
+
end
|
122
|
+
str
|
123
|
+
end
|
124
|
+
|
125
|
+
def _formatting(line)
|
126
|
+
l2 = _basic_format(line, "_", "i")
|
127
|
+
l2 = _basic_format(l2, "*", "b")
|
128
|
+
l2 = _basic_format(l2, "`", "tt")
|
129
|
+
l2 = _handle_escapes(l2, "_*`")
|
130
|
+
line.replace(l2)
|
131
|
+
end
|
132
|
+
|
133
|
+
def _func_sub
|
134
|
+
end
|
135
|
+
|
136
|
+
def _substitution(line)
|
137
|
+
# FIXME handle vars/functions separately later??
|
138
|
+
# FIXME permit parameters to functions
|
139
|
+
fobj = ::Livetext::Functions.new
|
140
|
+
@funcs = ::Livetext::Functions.instance_methods
|
141
|
+
@funcs.each do |func|
|
142
|
+
name = ::Regexp.escape("$$#{func}")
|
143
|
+
rx = /#{name}\b/
|
144
|
+
line.gsub!(rx) do |str|
|
145
|
+
val = fobj.send(func)
|
146
|
+
str.sub(rx, val)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
@vars.each_pair do |var, val|
|
150
|
+
name = ::Regexp.escape("$#{var}")
|
151
|
+
rx = /#{name}\b/
|
152
|
+
line.gsub!(rx, val)
|
153
|
+
end
|
154
|
+
line
|
155
|
+
end
|
156
|
+
|
157
|
+
def _passthru(line)
|
158
|
+
return if @_nopass
|
159
|
+
_puts "<p>" if line == "\n" and ! @_nopara
|
160
|
+
_formatting(line)
|
161
|
+
_substitution(line)
|
162
|
+
_puts line
|
163
|
+
end
|
164
|
+
|
165
|
+
def _puts(*args)
|
166
|
+
@output.puts *args
|
167
|
+
end
|
168
|
+
|
169
|
+
def _print(*args)
|
170
|
+
@output.print *args
|
171
|
+
end
|
172
|
+
|
173
|
+
def _debug=(val)
|
174
|
+
@_debug = val
|
175
|
+
end
|
176
|
+
|
177
|
+
def _debug(*args)
|
178
|
+
TTY.puts *args if @_debug
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
data/livetext.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'date'
|
2
|
+
require 'find'
|
2
3
|
|
3
4
|
$: << "."
|
4
5
|
require "lib/livetext"
|
@@ -12,92 +13,14 @@ Gem::Specification.new do |s|
|
|
12
13
|
s.description = "A smart text processor extensible in Ruby"
|
13
14
|
s.authors = ["Hal Fulton"]
|
14
15
|
s.email = 'rubyhacker@gmail.com'
|
15
|
-
s.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
./dsl/calibre.rb
|
24
|
-
./dsl/liveblog.rb
|
25
|
-
./dsl/livemagick.rb
|
26
|
-
./dsl/markdown.rb
|
27
|
-
./dsl/pyggish.rb
|
28
|
-
./dsl/tutorial.rb
|
29
|
-
./livetext.gemspec
|
30
|
-
./notes.txt
|
31
|
-
./README.html
|
32
|
-
./README.ltx
|
33
|
-
./README.md
|
34
|
-
./test
|
35
|
-
./test/cleanup
|
36
|
-
./test/newtest
|
37
|
-
./test/test.rb
|
38
|
-
./test/testfiles
|
39
|
-
./test/testfiles/basic_formatting
|
40
|
-
./test/testfiles/basic_formatting/expected-error.txt
|
41
|
-
./test/testfiles/basic_formatting/expected-output.txt
|
42
|
-
./test/testfiles/basic_formatting/source.ltx
|
43
|
-
./test/testfiles/block_comment
|
44
|
-
./test/testfiles/block_comment/expected-error.txt
|
45
|
-
./test/testfiles/block_comment/expected-output.txt
|
46
|
-
./test/testfiles/block_comment/source.ltx
|
47
|
-
./test/testfiles/comments_ignored_1
|
48
|
-
./test/testfiles/comments_ignored_1/expected-error.txt
|
49
|
-
./test/testfiles/comments_ignored_1/expected-output.txt
|
50
|
-
./test/testfiles/comments_ignored_1/source.ltx
|
51
|
-
./test/testfiles/copy_is_raw
|
52
|
-
./test/testfiles/copy_is_raw/expected-error.txt
|
53
|
-
./test/testfiles/copy_is_raw/expected-output.txt
|
54
|
-
./test/testfiles/copy_is_raw/source.ltx
|
55
|
-
./test/testfiles/def_method
|
56
|
-
./test/testfiles/def_method/expected-error.txt
|
57
|
-
./test/testfiles/def_method/expected-output.txt
|
58
|
-
./test/testfiles/def_method/source.ltx
|
59
|
-
./test/testfiles/example_alpha
|
60
|
-
./test/testfiles/example_alpha/expected-error.txt
|
61
|
-
./test/testfiles/example_alpha/expected-output.txt
|
62
|
-
./test/testfiles/example_alpha/source.ltx
|
63
|
-
./test/testfiles/example_alpha2
|
64
|
-
./test/testfiles/example_alpha2/expected-error.txt
|
65
|
-
./test/testfiles/example_alpha2/expected-output.txt
|
66
|
-
./test/testfiles/example_alpha2/source.ltx
|
67
|
-
./test/testfiles/fixit
|
68
|
-
./test/testfiles/hello_world
|
69
|
-
./test/testfiles/hello_world/expected-error.txt
|
70
|
-
./test/testfiles/hello_world/expected-output.txt
|
71
|
-
./test/testfiles/hello_world/source.ltx
|
72
|
-
./test/testfiles/more_complex_vars
|
73
|
-
./test/testfiles/more_complex_vars/expected-error.txt
|
74
|
-
./test/testfiles/more_complex_vars/expected-output.txt
|
75
|
-
./test/testfiles/more_complex_vars/source.ltx
|
76
|
-
./test/testfiles/raw_text_block
|
77
|
-
./test/testfiles/raw_text_block/expected-error.txt
|
78
|
-
./test/testfiles/raw_text_block/expected-output.txt
|
79
|
-
./test/testfiles/raw_text_block/source.ltx
|
80
|
-
./test/testfiles/simple_copy
|
81
|
-
./test/testfiles/simple_copy/expected-error.txt
|
82
|
-
./test/testfiles/simple_copy/expected-output.txt
|
83
|
-
./test/testfiles/simple_copy/source.ltx
|
84
|
-
./test/testfiles/simple_include
|
85
|
-
./test/testfiles/simple_include/expected-error.txt
|
86
|
-
./test/testfiles/simple_include/expected-output.txt
|
87
|
-
./test/testfiles/simple_include/source.ltx
|
88
|
-
./test/testfiles/simple_mixin
|
89
|
-
./test/testfiles/simple_mixin/expected-error.txt
|
90
|
-
./test/testfiles/simple_mixin/expected-output.txt
|
91
|
-
./test/testfiles/simple_mixin/source.ltx
|
92
|
-
./test/testfiles/simple_vars
|
93
|
-
./test/testfiles/simple_vars/expected-error.txt
|
94
|
-
./test/testfiles/simple_vars/expected-output.txt
|
95
|
-
./test/testfiles/simple_vars/source.ltx
|
96
|
-
./test/testfiles/single_raw_line
|
97
|
-
./test/testfiles/single_raw_line/expected-error.txt
|
98
|
-
./test/testfiles/single_raw_line/expected-output.txt
|
99
|
-
./test/testfiles/single_raw_line/source.ltx
|
100
|
-
]
|
16
|
+
s.executables << "livetext"
|
17
|
+
|
18
|
+
# Files...
|
19
|
+
main = Find.find("bin").to_a + Find.find("lib").to_a + Find.find("dsl").to_a
|
20
|
+
misc = %w[./README.html ./README.ltx ./README.md livetext.gemspec]
|
21
|
+
test = Find.find("test").to_a
|
22
|
+
|
23
|
+
s.files = main + misc + test
|
101
24
|
s.homepage = 'https://github.com/Hal9000/livetext'
|
102
25
|
s.license = "Ruby's license"
|
103
26
|
end
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.mixin livemagick
|
2
|
+
|
3
|
+
.nopass
|
4
|
+
|
5
|
+
.image 300 100 lightgray
|
6
|
+
.canvas green 1 0
|
7
|
+
.pen red red
|
8
|
+
.font 80 Arial
|
9
|
+
|
10
|
+
.rectangle 100,50 300x300 green 9
|
11
|
+
|
12
|
+
.text! 100,50 100x100
|
13
|
+
K B K Z
|
14
|
+
.end
|
15
|
+
.draw
|
16
|
+
.save! myfile.jpg
|
17
|
+
|
18
|
+
.def foobar
|
19
|
+
|
data/test/testfiles/crap
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
./fixit block_comment
|
2
|
+
./fixit comments_ignored_1
|
3
|
+
./fixit comments_ignored_2
|
4
|
+
./fixit copy_is_raw
|
5
|
+
./fixit def_method
|
6
|
+
./fixit example_alpha
|
7
|
+
./fixit example_alpha2
|
8
|
+
./fixit hello_world
|
9
|
+
./fixit more_complex_vars
|
10
|
+
./fixit raw_text_block
|
11
|
+
./fixit sigil_can_change
|
12
|
+
./fixit simple_copy
|
13
|
+
./fixit simple_include
|
14
|
+
./fixit simple_mixin
|
15
|
+
./fixit simple_vars
|
16
|
+
./fixit single_raw_line
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Name 'foobar' is unknown (at file2.ltx line 5)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Illegal name 'to_s' (at source.ltx line 5)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Name 'foobar' is unknown (at source.ltx line 4)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Mismatched 'end' (at source.ltx line 6)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Expecting .end, found end of file (at source.ltx line 6)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: Name 'class' is not permitted (at source.ltx line 4)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: No such file 'nosuchfile.txt' to copy (at source.ltx line 5)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: No such include file 'nosuchinc.ltx' (at source.ltx line 5)
|
@@ -0,0 +1 @@
|
|
1
|
+
Error: No such mixin 'nosuchthing' (at source.ltx line 6)
|
File without changes
|
data/test/try.lt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
.mixin livemagick
|
2
|
+
|
3
|
+
.nopass
|
4
|
+
|
5
|
+
.image 800 600 skyblue
|
6
|
+
.canvas green 1 0
|
7
|
+
.pen red red
|
8
|
+
.font 80 AvantGarde
|
9
|
+
|
10
|
+
.rectangle 100,100 300x300 green 9
|
11
|
+
|
12
|
+
.text! 150,200 500x200
|
13
|
+
This is
|
14
|
+
only
|
15
|
+
a test.
|
16
|
+
.end
|
17
|
+
.draw
|
18
|
+
.save! somefile.jpg
|
19
|
+
|
20
|
+
|
data/test/try2.lt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
.mixin livemagick
|
2
|
+
|
3
|
+
.nopass
|
4
|
+
|
5
|
+
.image 400 400 skyblue
|
6
|
+
.canvas green 1 0
|
7
|
+
.pen red red
|
8
|
+
.font 80 Arial
|
9
|
+
|
10
|
+
.rectangle 50,50 300x300 green 9
|
11
|
+
|
12
|
+
.text! 0,150 400x200
|
13
|
+
This is
|
14
|
+
only
|
15
|
+
a test.
|
16
|
+
.end
|
17
|
+
.draw
|
18
|
+
.save! myfile.jpg
|
19
|
+
|
20
|
+
|
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.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -12,74 +12,117 @@ date: 2017-03-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|
15
|
-
executables:
|
15
|
+
executables:
|
16
|
+
- livetext
|
16
17
|
extensions: []
|
17
18
|
extra_rdoc_files: []
|
18
19
|
files:
|
19
20
|
- "./README.html"
|
20
21
|
- "./README.ltx"
|
21
22
|
- "./README.md"
|
22
|
-
-
|
23
|
-
-
|
24
|
-
-
|
25
|
-
-
|
26
|
-
-
|
27
|
-
-
|
28
|
-
-
|
29
|
-
-
|
30
|
-
-
|
31
|
-
-
|
32
|
-
-
|
33
|
-
-
|
34
|
-
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
23
|
+
- bin/livetext
|
24
|
+
- dsl/bookish.rb
|
25
|
+
- dsl/calibre.rb
|
26
|
+
- dsl/liveblog.rb
|
27
|
+
- dsl/livemagick.rb
|
28
|
+
- dsl/markdown.rb
|
29
|
+
- dsl/pyggish.rb
|
30
|
+
- dsl/tutorial.rb
|
31
|
+
- lib/functions.rb
|
32
|
+
- lib/livetext.rb
|
33
|
+
- lib/standard.rb
|
34
|
+
- lib/userapi.rb
|
35
|
+
- livetext.gemspec
|
36
|
+
- test/affirm/kbks.jpg
|
37
|
+
- test/affirm/lm-kbks.lt
|
38
|
+
- test/cleanup
|
39
|
+
- test/newtest
|
40
|
+
- test/test.rb
|
41
|
+
- test/testfiles/basic_formatting/expected-error.txt
|
42
|
+
- test/testfiles/basic_formatting/expected-output.txt
|
43
|
+
- test/testfiles/basic_formatting/source.ltx
|
44
|
+
- test/testfiles/block_comment/expected-error.txt
|
45
|
+
- test/testfiles/block_comment/expected-output.txt
|
46
|
+
- test/testfiles/block_comment/source.ltx
|
47
|
+
- test/testfiles/comments_ignored_1/expected-error.txt
|
48
|
+
- test/testfiles/comments_ignored_1/expected-output.txt
|
49
|
+
- test/testfiles/comments_ignored_1/source.ltx
|
50
|
+
- test/testfiles/copy_is_raw/expected-error.txt
|
51
|
+
- test/testfiles/copy_is_raw/expected-output.txt
|
52
|
+
- test/testfiles/copy_is_raw/rawtext.inc
|
53
|
+
- test/testfiles/copy_is_raw/source.ltx
|
54
|
+
- test/testfiles/crap
|
55
|
+
- test/testfiles/def_method/expected-error.txt
|
56
|
+
- test/testfiles/def_method/expected-output.txt
|
57
|
+
- test/testfiles/def_method/source.ltx
|
58
|
+
- test/testfiles/error_inc_line_num/expected-error.txt
|
59
|
+
- test/testfiles/error_inc_line_num/expected-output.txt
|
60
|
+
- test/testfiles/error_inc_line_num/file2.ltx
|
61
|
+
- test/testfiles/error_inc_line_num/source.ltx
|
62
|
+
- test/testfiles/error_invalid_name/expected-error.txt
|
63
|
+
- test/testfiles/error_invalid_name/expected-output.txt
|
64
|
+
- test/testfiles/error_invalid_name/source.ltx
|
65
|
+
- test/testfiles/error_line_num/expected-error.txt
|
66
|
+
- test/testfiles/error_line_num/expected-output.txt
|
67
|
+
- test/testfiles/error_line_num/source.ltx
|
68
|
+
- test/testfiles/error_mismatched_end/expected-error.txt
|
69
|
+
- test/testfiles/error_mismatched_end/expected-output.txt
|
70
|
+
- test/testfiles/error_mismatched_end/source.ltx
|
71
|
+
- test/testfiles/error_missing_end/expected-error.txt
|
72
|
+
- test/testfiles/error_missing_end/expected-output.txt
|
73
|
+
- test/testfiles/error_missing_end/source.ltx
|
74
|
+
- test/testfiles/error_name_not_permitted/expected-error.txt
|
75
|
+
- test/testfiles/error_name_not_permitted/expected-output.txt
|
76
|
+
- test/testfiles/error_name_not_permitted/source.ltx
|
77
|
+
- test/testfiles/error_no_such_copy/expected-error.txt
|
78
|
+
- test/testfiles/error_no_such_copy/expected-output.txt
|
79
|
+
- test/testfiles/error_no_such_copy/source.ltx
|
80
|
+
- test/testfiles/error_no_such_inc/expected-error.txt
|
81
|
+
- test/testfiles/error_no_such_inc/expected-output.txt
|
82
|
+
- test/testfiles/error_no_such_inc/source.ltx
|
83
|
+
- test/testfiles/error_no_such_mixin/expected-error.txt
|
84
|
+
- test/testfiles/error_no_such_mixin/expected-output.txt
|
85
|
+
- test/testfiles/error_no_such_mixin/source.ltx
|
86
|
+
- test/testfiles/example_alpha/expected-error.txt
|
87
|
+
- test/testfiles/example_alpha/expected-output.txt
|
88
|
+
- test/testfiles/example_alpha/source.ltx
|
89
|
+
- test/testfiles/example_alpha2/expected-error.txt
|
90
|
+
- test/testfiles/example_alpha2/expected-output.txt
|
91
|
+
- test/testfiles/example_alpha2/source.ltx
|
92
|
+
- test/testfiles/fixit
|
93
|
+
- test/testfiles/functions/expected-error.txt
|
94
|
+
- test/testfiles/functions/expected-output.txt
|
95
|
+
- test/testfiles/functions/source.ltx
|
96
|
+
- test/testfiles/hello_world/expected-error.txt
|
97
|
+
- test/testfiles/hello_world/expected-output.txt
|
98
|
+
- test/testfiles/hello_world/source.ltx
|
99
|
+
- test/testfiles/more_complex_vars/expected-error.txt
|
100
|
+
- test/testfiles/more_complex_vars/expected-output.txt
|
101
|
+
- test/testfiles/more_complex_vars/source.ltx
|
102
|
+
- test/testfiles/raw_text_block/expected-error.txt
|
103
|
+
- test/testfiles/raw_text_block/expected-output.txt
|
104
|
+
- test/testfiles/raw_text_block/rawtext.inc
|
105
|
+
- test/testfiles/raw_text_block/source.ltx
|
106
|
+
- test/testfiles/simple_copy/expected-error.txt
|
107
|
+
- test/testfiles/simple_copy/expected-output.txt
|
108
|
+
- test/testfiles/simple_copy/simplefile.inc
|
109
|
+
- test/testfiles/simple_copy/source.ltx
|
110
|
+
- test/testfiles/simple_include/expected-error.txt
|
111
|
+
- test/testfiles/simple_include/expected-output.txt
|
112
|
+
- test/testfiles/simple_include/simplefile.inc
|
113
|
+
- test/testfiles/simple_include/source.ltx
|
114
|
+
- test/testfiles/simple_mixin/expected-error.txt
|
115
|
+
- test/testfiles/simple_mixin/expected-output.txt
|
116
|
+
- test/testfiles/simple_mixin/simple_mixin.rb
|
117
|
+
- test/testfiles/simple_mixin/source.ltx
|
118
|
+
- test/testfiles/simple_vars/expected-error.txt
|
119
|
+
- test/testfiles/simple_vars/expected-output.txt
|
120
|
+
- test/testfiles/simple_vars/source.ltx
|
121
|
+
- test/testfiles/single_raw_line/expected-error.txt
|
122
|
+
- test/testfiles/single_raw_line/expected-output.txt
|
123
|
+
- test/testfiles/single_raw_line/source.ltx
|
124
|
+
- test/try.lt
|
125
|
+
- test/try2.lt
|
83
126
|
homepage: https://github.com/Hal9000/livetext
|
84
127
|
licenses:
|
85
128
|
- Ruby's license
|
data/notes.txt
DELETED
@@ -1,146 +0,0 @@
|
|
1
|
-
Mostly done
|
2
|
-
-----------
|
3
|
-
define variables
|
4
|
-
define methods
|
5
|
-
allow switching sigils, etc.
|
6
|
-
.raw
|
7
|
-
.mixin
|
8
|
-
.include
|
9
|
-
double sigil + blank = true comment
|
10
|
-
sigil + blank = passthru comment
|
11
|
-
double sigil + token = internal sigil
|
12
|
-
.comment/.end
|
13
|
-
.func
|
14
|
-
|
15
|
-
|
16
|
-
To Be Done
|
17
|
-
----------
|
18
|
-
Bug: Optional blank line at EOF causes problem
|
19
|
-
turn "blank=para" on/off?
|
20
|
-
keyword args
|
21
|
-
.defaults
|
22
|
-
better variable support
|
23
|
-
need a 'require' (with sigil?)
|
24
|
-
.init ?
|
25
|
-
.method or .private
|
26
|
-
Prioritized formatting: markdown b/i/c, lt b/i/c, emdash, varsub, funcsub, etc.?
|
27
|
-
em dash
|
28
|
-
variable for source file
|
29
|
-
variable for line number
|
30
|
-
ignore trailing punctuation for * _ `
|
31
|
-
args vs bare args (quotes)
|
32
|
-
comment! pass this thru as comment
|
33
|
-
comment!/end
|
34
|
-
.proc
|
35
|
-
.break to eof ?
|
36
|
-
warn when overriding?
|
37
|
-
.meth?/.end (.else?)
|
38
|
-
$var.subvar
|
39
|
-
$$func $$func(params)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
Undecided
|
44
|
-
---------
|
45
|
-
encourage overriding passthru?
|
46
|
-
disallow leading underscore
|
47
|
-
HTML entities?
|
48
|
-
explicit Unicode support?
|
49
|
-
intermediate format prior to output?
|
50
|
-
.say
|
51
|
-
.debug
|
52
|
-
.dump
|
53
|
-
links?
|
54
|
-
images?
|
55
|
-
safe level?
|
56
|
-
exceptions?
|
57
|
-
.if, .else ?
|
58
|
-
.shell ?
|
59
|
-
table styles?
|
60
|
-
define "quotes" such as * _ ?
|
61
|
-
Issues:
|
62
|
-
- substitution and bold/italics on @data and @args?
|
63
|
-
- substitution before or after bold/italics?
|
64
|
-
.run Arbitrary Ruby code?
|
65
|
-
BEGIN/END for require or mixin?
|
66
|
-
other langs??
|
67
|
-
configurable delimiters (tables, etc.)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
For bookish
|
72
|
-
-----------
|
73
|
-
.index
|
74
|
-
.indexable
|
75
|
-
|
76
|
-
|
77
|
-
Assignment
|
78
|
-
----------
|
79
|
-
myvar=foo
|
80
|
-
myvar.x = "This and that"
|
81
|
-
$myvar
|
82
|
-
$myvar.x
|
83
|
-
$(myvar.x)
|
84
|
-
|
85
|
-
Functions
|
86
|
-
---------
|
87
|
-
$$func
|
88
|
-
$$func.blah
|
89
|
-
$$(func.blah)
|
90
|
-
$$proc ?
|
91
|
-
$$(func args)
|
92
|
-
|
93
|
-
Predef functions?
|
94
|
-
-----------------
|
95
|
-
$$sourceline
|
96
|
-
$index
|
97
|
-
|
98
|
-
What is Livetext?
|
99
|
-
-----------------
|
100
|
-
It's a text transformer
|
101
|
-
Agnostic about output format
|
102
|
-
Like a macro processor but not
|
103
|
-
Like markdown but not
|
104
|
-
Like erb or HAML but not
|
105
|
-
Later on - language agnostic?
|
106
|
-
Like an old-fashioned text formatter, but extensible
|
107
|
-
Plugin-oriented
|
108
|
-
Aims to be easy/flexible but not too dangerous
|
109
|
-
Predefine but don't clutter namespace
|
110
|
-
Mention softcover
|
111
|
-
|
112
|
-
Tutorial
|
113
|
-
--------
|
114
|
-
What is it?
|
115
|
-
Any text file is (probably) valid
|
116
|
-
Simple built-in methods
|
117
|
-
Pass-through mode
|
118
|
-
Comments
|
119
|
-
Methods with bodies
|
120
|
-
Changing sigils
|
121
|
-
Reusing text and code
|
122
|
-
Predefined stuff: methods, functions, variables, libs?
|
123
|
-
Defining your own code: inline, methods, func, proc, ...
|
124
|
-
require, include
|
125
|
-
variables
|
126
|
-
functions
|
127
|
-
|
128
|
-
Mixins etc
|
129
|
-
----------
|
130
|
-
PlainHTML
|
131
|
-
PDFout
|
132
|
-
Bookish
|
133
|
-
InlineMarkdown
|
134
|
-
Pygments
|
135
|
-
|
136
|
-
|
137
|
-
Logic:
|
138
|
-
------
|
139
|
-
Handle . .. .name
|
140
|
-
In each body:
|
141
|
-
- allow . and ..
|
142
|
-
- handle ..name
|
143
|
-
- disallow .name ?
|
144
|
-
- handle italics
|
145
|
-
- handle substitution
|
146
|
-
|