livetext 0.9.13 → 0.9.19
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/README.lt3 +2 -2
- data/imports/bookish.rb +288 -0
- data/imports/calibre.rb +28 -0
- data/imports/livemagick.rb +133 -0
- data/imports/markdown.rb +44 -0
- data/imports/markdown_importable.rb +46 -0
- data/imports/pyggish.rb +204 -0
- data/imports/tutorial.rb +95 -0
- data/lib/cmdargs.rb +93 -0
- data/lib/errors.rb +4 -2
- data/lib/formatline.rb +56 -83
- data/lib/functions.rb +1 -1
- data/lib/handler/icanhaz.rb +35 -0
- data/lib/handler.rb +1 -0
- data/lib/helpers.rb +177 -4
- data/lib/livetext.rb +20 -139
- data/lib/parser/file.rb +8 -0
- data/lib/parser/general.rb +1 -1
- data/lib/parser/import.rb +1 -3
- data/lib/parser/mixin.rb +22 -30
- data/lib/parser/set.rb +35 -26
- data/lib/parser/string.rb +19 -4
- data/lib/processor.rb +2 -12
- data/lib/standard.rb +73 -107
- data/lib/userapi.rb +1 -4
- data/livetext.gemspec +2 -1
- data/plugin/bookish.rb +26 -22
- data/plugin/calibre.rb +1 -1
- data/plugin/livemagick.rb +10 -10
- data/plugin/markdown.rb +13 -11
- data/plugin/pyggish.rb +94 -84
- data/plugin/tutorial.rb +10 -5
- data/test/snapshots/OMIT.txt +11 -0
- data/test/snapshots/clusion.txt +84 -0
- data/test/snapshots/error_inc_line_num/match-error.txt +1 -0
- data/test/snapshots/error_invalid_name/match-error.txt +1 -0
- data/test/snapshots/error_line_num/match-error.txt +1 -0
- data/test/snapshots/error_mismatched_end/expected-output.txt +0 -2
- data/test/snapshots/error_mismatched_end/match-error.txt +1 -0
- data/test/snapshots/error_missing_end/match-error.txt +1 -0
- data/test/snapshots/error_no_such_copy/match-error.txt +1 -0
- data/test/snapshots/error_no_such_copy/source.lt3 +0 -1
- data/test/snapshots/error_no_such_inc/match-error.txt +1 -0
- data/test/snapshots/error_no_such_mixin/match-error.txt +1 -0
- data/test/snapshots/icanhaz/expected-output.txt +5 -0
- data/test/snapshots/icanhaz/match-error.txt +1 -0
- data/test/snapshots/icanhaz/simple_import.rb +5 -0
- data/test/snapshots/{error_no_such_mixin/actual-output.txt → icanhaz/source.lt3} +3 -4
- data/test/snapshots/{error_invalid_name/actual-output.txt → icanhaz2/expected-error.txt} +0 -0
- data/test/snapshots/icanhaz2/expected-output.txt +6 -0
- data/test/snapshots/icanhaz2/simple_canhaz.rb +5 -0
- data/test/snapshots/icanhaz2/source.lt3 +6 -0
- data/test/snapshots/predef_vars/match-output.txt +6 -0
- data/test/snapshots/{error_no_such_copy/actual-output.txt → simple_import/expected-error.txt} +0 -0
- data/test/snapshots/simple_import/expected-output.txt +7 -0
- data/test/snapshots/simple_import/simple_import.rb +5 -0
- data/test/snapshots/simple_import/source.lt3 +7 -0
- data/test/snapshots/simple_include/source.lt3 +0 -1
- data/test/snapshots.rb +103 -107
- data/test/unit/all.rb +1 -0
- data/test/unit/formatline.rb +650 -0
- data/test/unit/parser/general.rb +21 -21
- data/test/unit/parser/importable.rb +1 -1
- data/test/unit/parser/mixin.rb +2 -2
- data/test/unit/parser/set.rb +19 -12
- data/test/unit/parser/string.rb +14 -14
- data/test/unit/parser.rb +2 -0
- metadata +37 -46
- data/test/formatting.rb +0 -103
- data/test/snapshots/error_inc_line_num/actual-error.txt +0 -1
- data/test/snapshots/error_inc_line_num/actual-output.txt +0 -13
- data/test/snapshots/error_inc_line_num/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_inc_line_num/out-sdiff.txt +0 -14
- data/test/snapshots/error_invalid_name/actual-error.txt +0 -10
- data/test/snapshots/error_invalid_name/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_invalid_name/out-sdiff.txt +0 -6
- data/test/snapshots/error_line_num/actual-error.txt +0 -1
- data/test/snapshots/error_line_num/actual-output.txt +0 -5
- data/test/snapshots/error_line_num/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_line_num/out-sdiff.txt +0 -6
- data/test/snapshots/error_mismatched_end/actual-error.txt +0 -1
- data/test/snapshots/error_mismatched_end/actual-output.txt +0 -8
- data/test/snapshots/error_mismatched_end/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_mismatched_end/out-sdiff.txt +0 -9
- data/test/snapshots/error_missing_end/actual-error.txt +0 -1
- data/test/snapshots/error_missing_end/actual-output.txt +0 -5
- data/test/snapshots/error_missing_end/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_missing_end/out-sdiff.txt +0 -6
- data/test/snapshots/error_name_not_permitted/OLD-exp-out +0 -4
- data/test/snapshots/error_no_such_copy/actual-error.txt +0 -10
- data/test/snapshots/error_no_such_copy/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_no_such_copy/out-sdiff.txt +0 -5
- data/test/snapshots/error_no_such_inc/actual-error.txt +0 -10
- data/test/snapshots/error_no_such_inc/actual-output.txt +0 -0
- data/test/snapshots/error_no_such_inc/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_no_such_inc/out-sdiff.txt +0 -6
- data/test/snapshots/error_no_such_mixin/actual-error.txt +0 -1
- data/test/snapshots/error_no_such_mixin/expected-err-line1match.txt +0 -1
- data/test/snapshots/error_no_such_mixin/out-sdiff.txt +0 -12
- data/test/snapshots/lines.txt +0 -124
- data/test/snapshots/predef_vars/actual-error.txt +0 -0
- data/test/snapshots/predef_vars/actual-output.txt +0 -6
- data/test/snapshots/predef_vars/expected-output.txt +0 -6
- data/test/snapshots/predef_vars/out-sdiff.txt +0 -7
- data/test/snapshots/simple_mixin/actual-error.txt +0 -2
- data/test/snapshots/simple_mixin/actual-output.txt +0 -4
- data/test/snapshots/simple_mixin/out-sdiff.txt +0 -6
- data/test/unit/parse_misc.rb +0 -60
- data/test/unit/parse_set.rb +0 -157
data/lib/parser/string.rb
CHANGED
|
@@ -5,14 +5,13 @@ class StringParser
|
|
|
5
5
|
def initialize(line)
|
|
6
6
|
raise NilValue if line.nil?
|
|
7
7
|
raise ExpectedString unless String === line
|
|
8
|
-
# raise NullString if line.empty?
|
|
9
8
|
@line = line
|
|
10
9
|
@len = @line.length
|
|
11
10
|
@eos = @len == 0 ? true : false
|
|
12
11
|
@i = 0
|
|
13
12
|
end
|
|
14
13
|
|
|
15
|
-
def
|
|
14
|
+
def grab
|
|
16
15
|
return nil if @eos
|
|
17
16
|
char = @line[@i]
|
|
18
17
|
@i += 1
|
|
@@ -20,6 +19,19 @@ class StringParser
|
|
|
20
19
|
char
|
|
21
20
|
end
|
|
22
21
|
|
|
22
|
+
def ungrab
|
|
23
|
+
@i -= 1 # FIXME what about eos...?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def next!
|
|
27
|
+
@line[@i + 1]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def prev
|
|
31
|
+
return nil if @i <= 0
|
|
32
|
+
@line[@i-1]
|
|
33
|
+
end
|
|
34
|
+
|
|
23
35
|
def last?
|
|
24
36
|
@i > @len - 1
|
|
25
37
|
end
|
|
@@ -35,11 +47,14 @@ class StringParser
|
|
|
35
47
|
end
|
|
36
48
|
|
|
37
49
|
def skip_spaces
|
|
50
|
+
char = nil
|
|
38
51
|
loop do
|
|
39
|
-
|
|
52
|
+
char = peek
|
|
40
53
|
break if eos?
|
|
41
|
-
|
|
54
|
+
break if char != " "
|
|
55
|
+
grab
|
|
42
56
|
end
|
|
57
|
+
char
|
|
43
58
|
end
|
|
44
59
|
|
|
45
60
|
end
|
data/lib/processor.rb
CHANGED
|
@@ -40,16 +40,12 @@ class Livetext
|
|
|
40
40
|
|
|
41
41
|
def _error!(err, raise_error=false, trace=false) # FIXME much bullshit happens here
|
|
42
42
|
where = @sources.last || @save_location
|
|
43
|
-
#
|
|
44
|
-
# puts "[lib/processor] Error: #{err}"
|
|
45
|
-
# puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
|
46
|
-
STDERR.puts "Error: #{err}" # (at #{where[1]} line #{where[2]})"
|
|
43
|
+
STDERR.puts "Error: #{err} (at #{where[1]} line #{where[2]})"
|
|
47
44
|
STDERR.puts err.backtrace if err.respond_to?(:backtrace) # && trace
|
|
48
|
-
# raise "lib/processor error!" # FIXME
|
|
49
45
|
raise GenericError.new("Error: #{err}") if raise_error
|
|
50
46
|
end
|
|
51
47
|
|
|
52
|
-
def
|
|
48
|
+
def disallowed?(name)
|
|
53
49
|
Disallowed.include?(name.to_sym)
|
|
54
50
|
end
|
|
55
51
|
|
|
@@ -75,11 +71,5 @@ class Livetext
|
|
|
75
71
|
@sources.pop
|
|
76
72
|
nil
|
|
77
73
|
end
|
|
78
|
-
|
|
79
|
-
def grab_file(fname)
|
|
80
|
-
File.read(fname)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
74
|
end
|
|
84
|
-
|
|
85
75
|
end
|
data/lib/standard.rb
CHANGED
|
@@ -5,8 +5,8 @@ require_relative 'html'
|
|
|
5
5
|
require_relative 'helpers'
|
|
6
6
|
|
|
7
7
|
make_exception(:ExpectedOnOff, "Error: expected 'on' or 'off'")
|
|
8
|
-
make_exception(:DisallowedName, "Error: name %1 is invalid")
|
|
9
|
-
make_exception(:FileNotFound, "Error: file %1 not found")
|
|
8
|
+
make_exception(:DisallowedName, "Error: name '%1' is invalid")
|
|
9
|
+
make_exception(:FileNotFound, "Error: file '%1' not found")
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
# Module Standard comprises most of the standard or "common" methods.
|
|
@@ -24,13 +24,14 @@ module Livetext::Standard
|
|
|
24
24
|
|
|
25
25
|
attr_reader :_data
|
|
26
26
|
|
|
27
|
-
def data=(val) # FIXME this is weird, let's
|
|
27
|
+
def data=(val) # FIXME this is weird, let's remove it soonish
|
|
28
28
|
@_data = val.chomp
|
|
29
29
|
@_args = val.split rescue []
|
|
30
30
|
@_mixins = []
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
# dumb name - bold, italic, teletype, striketrough
|
|
34
|
+
def bits(args = nil, body = nil)
|
|
34
35
|
b0, b1, i0, i1, t0, t1, s0, s1 = *@_args
|
|
35
36
|
SimpleFormats[:b] = [b0, b1]
|
|
36
37
|
SimpleFormats[:i] = [i0, i1]
|
|
@@ -38,23 +39,23 @@ module Livetext::Standard
|
|
|
38
39
|
SimpleFormats[:s] = [s0, s1]
|
|
39
40
|
end
|
|
40
41
|
|
|
41
|
-
def backtrace
|
|
42
|
+
def backtrace(args = nil, body = nil)
|
|
42
43
|
@backtrace = onoff(@_args.first)
|
|
43
44
|
_optional_blank_line
|
|
44
45
|
end
|
|
45
46
|
|
|
46
|
-
def comment
|
|
47
|
+
def comment(args = nil, body = nil)
|
|
47
48
|
_body
|
|
48
49
|
_optional_blank_line
|
|
49
50
|
end
|
|
50
51
|
|
|
51
|
-
def shell
|
|
52
|
+
def shell(args = nil, body = nil)
|
|
52
53
|
cmd = @_data.chomp
|
|
53
54
|
system(cmd)
|
|
54
55
|
_optional_blank_line
|
|
55
56
|
end
|
|
56
57
|
|
|
57
|
-
def func
|
|
58
|
+
def func(args = nil, body = nil)
|
|
58
59
|
funcname = @_args[0]
|
|
59
60
|
check_disallowed(funcname)
|
|
60
61
|
func_def = <<~EOS
|
|
@@ -63,25 +64,24 @@ module Livetext::Standard
|
|
|
63
64
|
end
|
|
64
65
|
EOS
|
|
65
66
|
_optional_blank_line
|
|
66
|
-
|
|
67
67
|
Livetext::Functions.class_eval func_def
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
def h1; _out wrapped(@_data, :h1); end
|
|
71
|
-
def h2; _out wrapped(@_data, :h2); end
|
|
72
|
-
def h3; _out wrapped(@_data, :h3); end
|
|
73
|
-
def h4; _out wrapped(@_data, :h4); end
|
|
74
|
-
def h5; _out wrapped(@_data, :h5); end
|
|
75
|
-
def h6; _out wrapped(@_data, :h6); end
|
|
70
|
+
def h1(args = nil, body = nil); _out wrapped(@_data, :h1); end
|
|
71
|
+
def h2(args = nil, body = nil); _out wrapped(@_data, :h2); end
|
|
72
|
+
def h3(args = nil, body = nil); _out wrapped(@_data, :h3); end
|
|
73
|
+
def h4(args = nil, body = nil); _out wrapped(@_data, :h4); end
|
|
74
|
+
def h5(args = nil, body = nil); _out wrapped(@_data, :h5); end
|
|
75
|
+
def h6(args = nil, body = nil); _out wrapped(@_data, :h6); end
|
|
76
76
|
|
|
77
|
-
def list
|
|
77
|
+
def list(args = nil, body = nil)
|
|
78
78
|
wrap :ul do
|
|
79
79
|
_body {|line| _out wrapped(line, :li) }
|
|
80
80
|
end
|
|
81
81
|
_optional_blank_line
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
def list!
|
|
84
|
+
def list!(args = nil, body = nil)
|
|
85
85
|
wrap(:ul) do
|
|
86
86
|
lines = _body.each # enumerator
|
|
87
87
|
loop do
|
|
@@ -94,49 +94,49 @@ module Livetext::Standard
|
|
|
94
94
|
_optional_blank_line
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
def shell!
|
|
97
|
+
def shell!(args = nil, body = nil)
|
|
98
98
|
cmd = @_data.chomp
|
|
99
99
|
system(cmd)
|
|
100
100
|
_optional_blank_line
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
def errout
|
|
103
|
+
def errout(args = nil, body = nil)
|
|
104
104
|
STDERR.puts @_data.chomp
|
|
105
105
|
_optional_blank_line
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
-
def ttyout
|
|
108
|
+
def ttyout(args = nil, body = nil)
|
|
109
109
|
TTY.puts @_data.chomp
|
|
110
110
|
_optional_blank_line
|
|
111
111
|
end
|
|
112
112
|
|
|
113
|
-
def say
|
|
113
|
+
def say(args = nil, body = nil)
|
|
114
114
|
str = _format(@_data.chomp)
|
|
115
115
|
TTY.puts str
|
|
116
116
|
_optional_blank_line
|
|
117
117
|
end
|
|
118
118
|
|
|
119
|
-
def banner
|
|
119
|
+
def banner(args = nil, body = nil)
|
|
120
120
|
str = _format(@_data.chomp)
|
|
121
|
-
num = str.length
|
|
121
|
+
num = str.length
|
|
122
122
|
decor = "-"*num + "\n"
|
|
123
123
|
puts decor + str + "\n" + decor
|
|
124
124
|
end
|
|
125
125
|
|
|
126
|
-
def quit
|
|
126
|
+
def quit(args = nil, body = nil)
|
|
127
127
|
puts @body
|
|
128
128
|
@body = ""
|
|
129
129
|
@output.close
|
|
130
130
|
end
|
|
131
131
|
|
|
132
|
-
def cleanup
|
|
132
|
+
def cleanup(args = nil, body = nil)
|
|
133
133
|
@_args.each do |item|
|
|
134
134
|
cmd = ::File.directory?(item) ? "rm -f #{item}/*" : "rm #{item}"
|
|
135
135
|
system(cmd)
|
|
136
136
|
end
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
-
def
|
|
139
|
+
def dot_def(args = nil, body = nil)
|
|
140
140
|
name = @_args[0]
|
|
141
141
|
str = "def #{name}\n"
|
|
142
142
|
check_disallowed(name)
|
|
@@ -144,17 +144,17 @@ module Livetext::Standard
|
|
|
144
144
|
str << _body(true).join("\n")
|
|
145
145
|
str << "\nend\n"
|
|
146
146
|
eval str
|
|
147
|
-
# rescue => err
|
|
148
|
-
# _error!(err)
|
|
149
147
|
end
|
|
150
148
|
|
|
151
|
-
def set
|
|
149
|
+
def set(args = nil, body = nil)
|
|
152
150
|
line = _data.chomp
|
|
153
151
|
pairs = Livetext::ParseSet.new(line).parse
|
|
154
152
|
set_variables(pairs)
|
|
155
153
|
end
|
|
156
154
|
|
|
157
|
-
|
|
155
|
+
# FIXME really these should be one method...
|
|
156
|
+
|
|
157
|
+
def variables!(args = nil, body = nil) # cwd, not FileDir - weird, fix later
|
|
158
158
|
prefix = _args[0]
|
|
159
159
|
file = _args[1]
|
|
160
160
|
prefix = nil if prefix == "-" # FIXME dumb hack
|
|
@@ -164,11 +164,11 @@ module Livetext::Standard
|
|
|
164
164
|
else
|
|
165
165
|
lines = _body
|
|
166
166
|
end
|
|
167
|
-
pairs = Livetext::
|
|
167
|
+
pairs = Livetext::ParseGeneral.parse_vars(prefix, lines)
|
|
168
168
|
set_variables(pairs)
|
|
169
169
|
end
|
|
170
170
|
|
|
171
|
-
def variables
|
|
171
|
+
def variables(args = nil, body = nil)
|
|
172
172
|
prefix = _args[0]
|
|
173
173
|
file = _args[1]
|
|
174
174
|
prefix = nil if prefix == "-" # FIXME dumb hack
|
|
@@ -178,11 +178,11 @@ module Livetext::Standard
|
|
|
178
178
|
else
|
|
179
179
|
lines = _body
|
|
180
180
|
end
|
|
181
|
-
pairs = Livetext::
|
|
181
|
+
pairs = Livetext::ParseGeneral.parse_vars(prefix, lines)
|
|
182
182
|
set_variables(pairs)
|
|
183
183
|
end
|
|
184
184
|
|
|
185
|
-
def heredoc
|
|
185
|
+
def heredoc(args = nil, body = nil)
|
|
186
186
|
var = @_args[0]
|
|
187
187
|
text = _body.join("\n")
|
|
188
188
|
rhs = ""
|
|
@@ -192,59 +192,26 @@ module Livetext::Standard
|
|
|
192
192
|
end
|
|
193
193
|
indent = @parent.indentation.last
|
|
194
194
|
indented = " " * indent
|
|
195
|
-
@parent.
|
|
195
|
+
@parent.setvar(var, rhs.chomp)
|
|
196
196
|
_optional_blank_line
|
|
197
197
|
end
|
|
198
198
|
|
|
199
|
-
def
|
|
200
|
-
value = nil
|
|
201
|
-
return file if File.exist?(file)
|
|
202
|
-
|
|
203
|
-
count = 1
|
|
204
|
-
loop do
|
|
205
|
-
front = "../" * count
|
|
206
|
-
count += 1
|
|
207
|
-
here = Pathname.new(front).expand_path.dirname.to_s
|
|
208
|
-
break if here == "/"
|
|
209
|
-
path = front + file
|
|
210
|
-
value = path if File.exist?(path)
|
|
211
|
-
break if value
|
|
212
|
-
end
|
|
213
|
-
STDERR.puts "Cannot find #{file.inspect} from #{Dir.pwd}" unless value
|
|
214
|
-
return value
|
|
215
|
-
rescue
|
|
216
|
-
STDERR.puts "Can't find #{file.inspect} from #{Dir.pwd}"
|
|
217
|
-
return nil
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
def seek # like include, but search upward as needed
|
|
199
|
+
def seek(args = nil, body = nil) # like include, but search upward as needed
|
|
221
200
|
file = @_args.first
|
|
222
|
-
file =
|
|
201
|
+
file = search_upward(file)
|
|
223
202
|
check_file_exists(file)
|
|
224
203
|
@parent.process_file(file)
|
|
225
204
|
_optional_blank_line
|
|
226
205
|
end
|
|
227
206
|
|
|
228
|
-
def
|
|
229
|
-
file, dest = *@_args
|
|
230
|
-
check_file_exists(file)
|
|
231
|
-
@parent.process_file(file, dest)
|
|
232
|
-
_optional_blank_line
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
def _include # dot command
|
|
207
|
+
def dot_include(args = nil, body = nil) # dot command
|
|
236
208
|
file = _format(@_args.first) # allows for variables
|
|
237
209
|
check_file_exists(file)
|
|
238
210
|
@parent.process_file(file)
|
|
239
211
|
_optional_blank_line
|
|
240
212
|
end
|
|
241
213
|
|
|
242
|
-
def
|
|
243
|
-
@_args = [file]
|
|
244
|
-
_include
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
def inherit
|
|
214
|
+
def inherit(args = nil, body = nil)
|
|
248
215
|
file = @_args.first
|
|
249
216
|
upper = "../#{file}"
|
|
250
217
|
got_upper, got_file = File.exist?(upper), File.exist?(file)
|
|
@@ -256,95 +223,94 @@ module Livetext::Standard
|
|
|
256
223
|
_optional_blank_line
|
|
257
224
|
end
|
|
258
225
|
|
|
259
|
-
def mixin
|
|
226
|
+
def mixin(args = nil, body = nil)
|
|
260
227
|
name = @_args.first # Expect a module name
|
|
261
228
|
return if @_mixins.include?(name)
|
|
262
229
|
@_mixins << name
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
230
|
+
mod = Livetext::ParseMixin.get_module(name) # FIXME??
|
|
231
|
+
self.extend(mod)
|
|
232
|
+
init = "init_#{name}"
|
|
233
|
+
self.send(init) if self.respond_to? init
|
|
266
234
|
_optional_blank_line
|
|
267
235
|
end
|
|
268
236
|
|
|
269
|
-
def
|
|
237
|
+
def icanhaz(args = nil, body = nil)
|
|
270
238
|
name = @_args.first # Expect a module name
|
|
271
239
|
return if @_mixins.include?(name)
|
|
272
240
|
@_mixins << name
|
|
273
|
-
|
|
241
|
+
mod = Livetext::Handler::ICanHaz.get_module(name) # FIXME??
|
|
242
|
+
self.extend(mod)
|
|
243
|
+
init = "init_#{name}"
|
|
244
|
+
self.send(init) if self.respond_to? init
|
|
245
|
+
_optional_blank_line
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def import(args = nil, body = nil)
|
|
249
|
+
name = @_args.first # Expect a module name
|
|
250
|
+
return if @_mixins.include?(name)
|
|
251
|
+
@_mixins << name
|
|
252
|
+
mod = Livetext::ParseImport.get_module(name)
|
|
274
253
|
parse.use_import(name)
|
|
275
254
|
_optional_blank_line
|
|
276
255
|
end
|
|
277
256
|
|
|
278
|
-
def copy
|
|
257
|
+
def copy(args = nil, body = nil)
|
|
279
258
|
file = @_args.first
|
|
280
259
|
check_file_exists(file)
|
|
281
260
|
_out grab_file(file)
|
|
282
261
|
_optional_blank_line
|
|
283
262
|
end
|
|
284
263
|
|
|
285
|
-
def r
|
|
264
|
+
def r(args = nil, body = nil)
|
|
286
265
|
_out @_data.chomp # No processing at all
|
|
287
266
|
end
|
|
288
267
|
|
|
289
|
-
def raw
|
|
268
|
+
def raw(args = nil, body = nil)
|
|
290
269
|
# No processing at all (terminate with __EOF__)
|
|
291
270
|
_raw_body {|line| _out line } # no formatting
|
|
292
271
|
end
|
|
293
272
|
|
|
294
|
-
def debug
|
|
273
|
+
def debug(args = nil, body = nil)
|
|
295
274
|
self._debug = onoff(@_args.first)
|
|
296
275
|
end
|
|
297
276
|
|
|
298
|
-
def passthru
|
|
277
|
+
def passthru(args = nil, body = nil)
|
|
299
278
|
# FIXME - add check for args size? (helpers)
|
|
300
279
|
@_nopass = ! onoff(_args.first)
|
|
301
280
|
end
|
|
302
281
|
|
|
303
|
-
def nopass
|
|
282
|
+
def nopass(args = nil, body = nil)
|
|
304
283
|
@_nopass = true
|
|
305
284
|
end
|
|
306
285
|
|
|
307
|
-
def para
|
|
286
|
+
def para(args = nil, body = nil)
|
|
308
287
|
# FIXME - add check for args size? (helpers)
|
|
309
288
|
@_nopara = ! onoff(_args.first)
|
|
310
289
|
end
|
|
311
290
|
|
|
312
|
-
def
|
|
313
|
-
arg ||= "on"
|
|
314
|
-
raise ExpectedOnOff unless String === arg
|
|
315
|
-
case arg.downcase
|
|
316
|
-
when "on"
|
|
317
|
-
return true
|
|
318
|
-
when "off"
|
|
319
|
-
return false
|
|
320
|
-
else
|
|
321
|
-
raise ExpectedOnOff
|
|
322
|
-
end
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
def nopara
|
|
291
|
+
def nopara(args = nil, body = nil)
|
|
326
292
|
@_nopara = true
|
|
327
293
|
end
|
|
328
294
|
|
|
329
|
-
def heading
|
|
295
|
+
def heading(args = nil, body = nil)
|
|
330
296
|
_print "<center><font size=+1><b>"
|
|
331
297
|
_print @_data.chomp
|
|
332
298
|
_print "</b></font></center>"
|
|
333
299
|
end
|
|
334
300
|
|
|
335
|
-
def newpage
|
|
301
|
+
def newpage(args = nil, body = nil)
|
|
336
302
|
_out '<p style="page-break-after:always;"></p>'
|
|
337
303
|
_out "<p/>"
|
|
338
304
|
end
|
|
339
305
|
|
|
340
|
-
def mono
|
|
306
|
+
def mono(args = nil, body = nil)
|
|
341
307
|
wrap ":pre" do
|
|
342
308
|
_body(true) {|line| _out line }
|
|
343
309
|
end
|
|
344
310
|
_optional_blank_line
|
|
345
311
|
end
|
|
346
312
|
|
|
347
|
-
def dlist
|
|
313
|
+
def dlist(args = nil, body = nil)
|
|
348
314
|
delim = _args.first
|
|
349
315
|
wrap(:dl) do
|
|
350
316
|
_body do |line|
|
|
@@ -356,13 +322,13 @@ module Livetext::Standard
|
|
|
356
322
|
end
|
|
357
323
|
end
|
|
358
324
|
|
|
359
|
-
def link
|
|
325
|
+
def link(args = nil, body = nil)
|
|
360
326
|
url = _args.first
|
|
361
327
|
text = _args[2..-1].join(" ")
|
|
362
328
|
_out "<a style='text-decoration: none' href='#{url}'>#{text}</a>"
|
|
363
329
|
end
|
|
364
330
|
|
|
365
|
-
def xtable # Borrowed from bookish - FIXME
|
|
331
|
+
def xtable(args = nil, body = nil) # Borrowed from bookish - FIXME
|
|
366
332
|
title = @_data.chomp
|
|
367
333
|
delim = " :: "
|
|
368
334
|
_out "<br><center><table width=90% cellpadding=5>"
|
|
@@ -389,12 +355,12 @@ module Livetext::Standard
|
|
|
389
355
|
_out "</table></center>"
|
|
390
356
|
end
|
|
391
357
|
|
|
392
|
-
def image
|
|
358
|
+
def image(args = nil, body = nil)
|
|
393
359
|
name = @_args[0]
|
|
394
360
|
_out "<img src='#{name}'></img>"
|
|
395
361
|
end
|
|
396
362
|
|
|
397
|
-
def br
|
|
363
|
+
def br(args = nil, body = nil)
|
|
398
364
|
num = _args.first || "1"
|
|
399
365
|
out = ""
|
|
400
366
|
num.to_i.times { out << "<br>" }
|
data/lib/userapi.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require_relative 'formatline'
|
|
4
4
|
|
|
5
5
|
# UserAPI deals mostly with user-level methods.
|
|
6
|
+
|
|
6
7
|
module Livetext::UserAPI
|
|
7
8
|
|
|
8
9
|
def setvar(var, val)
|
|
@@ -94,10 +95,6 @@ module Livetext::UserAPI
|
|
|
94
95
|
else
|
|
95
96
|
lines
|
|
96
97
|
end
|
|
97
|
-
# rescue => err
|
|
98
|
-
# str = err.inspect + "\n"
|
|
99
|
-
# str << err.backtrace.map {|x| " " + x }.join("\n")
|
|
100
|
-
# _error!(str)
|
|
101
98
|
end
|
|
102
99
|
|
|
103
100
|
def _body_text(raw=false)
|
data/livetext.gemspec
CHANGED
|
@@ -15,7 +15,8 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.executables << "livetext"
|
|
16
16
|
|
|
17
17
|
# Files...
|
|
18
|
-
main = Find.find("bin").to_a + Find.find("lib").to_a +
|
|
18
|
+
main = Find.find("bin").to_a + Find.find("lib").to_a +
|
|
19
|
+
Find.find("plugin").to_a + Find.find("imports").to_a
|
|
19
20
|
misc = %w[./README.lt3 ./README.md livetext.gemspec]
|
|
20
21
|
test = Find.find("test").to_a
|
|
21
22
|
|
data/plugin/bookish.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
def hardbreaks
|
|
1
|
+
def hardbreaks(args = nil, body = nil)
|
|
2
2
|
@hard = false
|
|
3
3
|
@hard = true unless @_args.first == "off"
|
|
4
4
|
end
|
|
@@ -7,15 +7,17 @@ def hardbreaks?
|
|
|
7
7
|
@hard
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def credit
|
|
10
|
+
def credit(args = nil, body = nil)
|
|
11
11
|
# really just a place marker in source
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
# These are duplicated. Remove safely
|
|
15
|
+
|
|
14
16
|
def h1; _out "<h1>#{@_data}</h1>"; end
|
|
15
17
|
def h2; _out "<h2>#{@_data}</h2>"; end
|
|
16
18
|
def h3; _out "<h3>#{@_data}</h3>"; end
|
|
17
19
|
|
|
18
|
-
def alpha_columns
|
|
20
|
+
def alpha_columns(args = nil, body = nil)
|
|
19
21
|
n = @_args.first.to_i # FIXME: what if missing?
|
|
20
22
|
words = []
|
|
21
23
|
_body do |line|
|
|
@@ -30,9 +32,9 @@ def alpha_columns
|
|
|
30
32
|
_out "</table>"
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
def comment
|
|
34
|
-
|
|
35
|
-
end
|
|
35
|
+
# def comment
|
|
36
|
+
# _body { } # ignore body
|
|
37
|
+
# end
|
|
36
38
|
|
|
37
39
|
def _errout(*args)
|
|
38
40
|
::STDERR.puts *args
|
|
@@ -48,12 +50,14 @@ def _slug(str)
|
|
|
48
50
|
s2
|
|
49
51
|
end
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
|
|
54
|
+
# FIXME duplicated?
|
|
55
|
+
def image(args = nil, body = nil)
|
|
52
56
|
name = @_args[0]
|
|
53
57
|
_out "<img src='#{name}'></img>"
|
|
54
58
|
end
|
|
55
59
|
|
|
56
|
-
def figure
|
|
60
|
+
def figure(args = nil, body = nil)
|
|
57
61
|
name = @_args[0]
|
|
58
62
|
num = @_args[1]
|
|
59
63
|
title = @_args[2..-1].join(" ")
|
|
@@ -62,7 +66,7 @@ def figure
|
|
|
62
66
|
_out "<center><b>Figure #{num}</b> #{title}</center>"
|
|
63
67
|
end
|
|
64
68
|
|
|
65
|
-
def chapter
|
|
69
|
+
def chapter(args = nil, body = nil)
|
|
66
70
|
# _errout("chapter")
|
|
67
71
|
@chapter = @_args.first.to_i
|
|
68
72
|
@sec = @sec2 = 0
|
|
@@ -78,7 +82,7 @@ def chapter
|
|
|
78
82
|
HTML
|
|
79
83
|
end
|
|
80
84
|
|
|
81
|
-
def chapterN
|
|
85
|
+
def chapterN(args = nil, body = nil)
|
|
82
86
|
@chapter += 1
|
|
83
87
|
@sec = @sec2 = 0
|
|
84
88
|
title = @_data # .split(" ",2)[1]
|
|
@@ -94,7 +98,7 @@ def chapterN
|
|
|
94
98
|
HTML
|
|
95
99
|
end
|
|
96
100
|
|
|
97
|
-
def sec
|
|
101
|
+
def sec(args = nil, body = nil)
|
|
98
102
|
@sec += 1
|
|
99
103
|
@sec2 = 0
|
|
100
104
|
@section = "#@chapter.#@sec"
|
|
@@ -108,7 +112,7 @@ rescue => err
|
|
|
108
112
|
exit
|
|
109
113
|
end
|
|
110
114
|
|
|
111
|
-
def subsec
|
|
115
|
+
def subsec(args = nil, body = nil)
|
|
112
116
|
@sec2 += 1
|
|
113
117
|
@subsec = "#@chapter.#@sec.#@sec2"
|
|
114
118
|
title = @_data.dup
|
|
@@ -118,7 +122,7 @@ def subsec
|
|
|
118
122
|
_out "<h3>#@subsec #{title}</h3>\n"
|
|
119
123
|
end
|
|
120
124
|
|
|
121
|
-
def definition_table
|
|
125
|
+
def definition_table(args = nil, body = nil)
|
|
122
126
|
title = @_data
|
|
123
127
|
wide = "95"
|
|
124
128
|
delim = " :: "
|
|
@@ -140,7 +144,7 @@ def definition_table
|
|
|
140
144
|
_optional_blank_line
|
|
141
145
|
end
|
|
142
146
|
|
|
143
|
-
def table2
|
|
147
|
+
def table2(args = nil, body = nil)
|
|
144
148
|
title = @_data
|
|
145
149
|
wide = "90"
|
|
146
150
|
extra = _args[2]
|
|
@@ -164,7 +168,7 @@ def table2
|
|
|
164
168
|
_optional_blank_line
|
|
165
169
|
end
|
|
166
170
|
|
|
167
|
-
def simple_table
|
|
171
|
+
def simple_table(args = nil, body = nil)
|
|
168
172
|
title = @_data
|
|
169
173
|
delim = " :: "
|
|
170
174
|
_out "<table cellpadding=2>"
|
|
@@ -193,7 +197,7 @@ def simple_table
|
|
|
193
197
|
_out "</table>"
|
|
194
198
|
end
|
|
195
199
|
|
|
196
|
-
def table
|
|
200
|
+
def table(args = nil, body = nil)
|
|
197
201
|
@table_num ||= 0
|
|
198
202
|
@table_num += 1
|
|
199
203
|
title = @_data
|
|
@@ -227,7 +231,7 @@ def table
|
|
|
227
231
|
_out "<b>Table #@chapter.#@table_num #{title}</b></center><br>"
|
|
228
232
|
end
|
|
229
233
|
|
|
230
|
-
def toc!
|
|
234
|
+
def toc!(args = nil, body = nil)
|
|
231
235
|
_debug "Closing TOC"
|
|
232
236
|
@toc.close
|
|
233
237
|
rescue => err
|
|
@@ -236,7 +240,7 @@ rescue => err
|
|
|
236
240
|
_errout "Exception: #{err.inspect}"
|
|
237
241
|
end
|
|
238
242
|
|
|
239
|
-
def toc2
|
|
243
|
+
def toc2(args = nil, body = nil)
|
|
240
244
|
file = @_args[0]
|
|
241
245
|
@toc.close
|
|
242
246
|
::File.write(file, <<-EOS)
|
|
@@ -249,24 +253,24 @@ EOS
|
|
|
249
253
|
system("cat toc.tmp >>#{file}")
|
|
250
254
|
end
|
|
251
255
|
|
|
252
|
-
def missing
|
|
256
|
+
def missing(args = nil, body = nil)
|
|
253
257
|
@toc << "#{_nbsp(8)}<font color=red>TBD: #@_data</font><br>"
|
|
254
258
|
stuff = @_data.empty? ? "" : ": #@_data"
|
|
255
259
|
_out "<br><font color=red><i>[Material missing#{stuff}]</i></font><br>\n "
|
|
256
260
|
end
|
|
257
261
|
|
|
258
|
-
def TBC
|
|
262
|
+
def TBC(args = nil, body = nil)
|
|
259
263
|
@toc << "#{_nbsp(8)}<font color=red>To be continued...</font><br>"
|
|
260
264
|
_out "<br><font color=red><i>To be continued...</i></font><br>"
|
|
261
265
|
end
|
|
262
266
|
|
|
263
|
-
def note
|
|
267
|
+
def note(args = nil, body = nil)
|
|
264
268
|
_out "<br><font color=red><i>Note: "
|
|
265
269
|
_out @_data
|
|
266
270
|
_out "</i></font><br>\n "
|
|
267
271
|
end
|
|
268
272
|
|
|
269
|
-
def quote
|
|
273
|
+
def quote(args = nil, body = nil)
|
|
270
274
|
_out "<blockquote>"
|
|
271
275
|
_body {|line| _out line }
|
|
272
276
|
_out "</blockquote>"
|