livetext 0.7.5 → 0.7.6
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 +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
|
-
|