livetext 0.9.35 → 0.9.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/livetext +2 -2
- data/lib/livetext/helpers.rb +14 -4
- data/lib/livetext/more.rb +2 -1
- data/lib/livetext/standard.rb +51 -50
- data/lib/livetext/version.rb +1 -1
- data/plugin/bookish.rb +35 -31
- data/plugin/pyggish.rb +80 -6
- data/test/unit/html.rb +18 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 784ac1767694b1d098d3e289082070ef3e3df0aab15766cf42105e854da31730
|
4
|
+
data.tar.gz: b6f62f1164873ec613b16067c53abc0e1b8906cacaeaae033bd5e862ca6b4bd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 795730de451f27c2ffccf326fcc976e170ae884fef45d3bc732bb59826cc40bbff0e877d3ee3ed051fa3f20e0836ccede6668c42ba7a21ec1bf51910ebfc7a99
|
7
|
+
data.tar.gz: 1db7dfbb839a6787872df65d591b49fb36db69f9d3ddc86805d981f19266c98abcac4a8bbe8efebdf1137ec674201a3b3f4e0f09d849116acb56f390eefd8cbd
|
data/bin/livetext
CHANGED
data/lib/livetext/helpers.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require_relative 'global_helpers'
|
3
3
|
require_relative 'expansion'
|
4
4
|
|
5
|
+
|
5
6
|
module Livetext::Helpers
|
6
7
|
|
7
8
|
Space = " "
|
@@ -98,13 +99,16 @@ module Livetext::Helpers
|
|
98
99
|
when Comment
|
99
100
|
success = handle_scomment(line)
|
100
101
|
when DotCmd
|
101
|
-
success = handle_dotcmd(line)
|
102
|
+
success = handle_dotcmd(line) # was 102
|
102
103
|
when DollarDot
|
103
104
|
success = handle_dollar_dot(line)
|
104
105
|
else
|
105
106
|
api.passthru(line) # must succeed?
|
106
107
|
end
|
107
108
|
success
|
109
|
+
rescue => err
|
110
|
+
STDERR.puts "ERROR: #{err}\n#{err.backtrace.join("\n")}"
|
111
|
+
exit
|
108
112
|
end
|
109
113
|
|
110
114
|
def handle_dollar_dot(line)
|
@@ -120,10 +124,10 @@ module Livetext::Helpers
|
|
120
124
|
api.data = data0.dup # should permit _ in function names at least
|
121
125
|
args0 = data0.split
|
122
126
|
api.args = args0.dup
|
123
|
-
retval = @main.send(name) # , *args)
|
127
|
+
retval = @main.send(name) # , *args) # was 125
|
124
128
|
retval
|
125
129
|
rescue => err
|
126
|
-
graceful_error(err)
|
130
|
+
graceful_error(err) # , "#{__method__}: name = #{name}")
|
127
131
|
end
|
128
132
|
|
129
133
|
def handle_dotcmd(line, indent = 0)
|
@@ -135,7 +139,7 @@ module Livetext::Helpers
|
|
135
139
|
when name == :end # special case
|
136
140
|
graceful_error EndWithoutOpening()
|
137
141
|
when @main.respond_to?(name)
|
138
|
-
success = invoke_dotcmd(name, data)
|
142
|
+
success = invoke_dotcmd(name, data) # was 141
|
139
143
|
else
|
140
144
|
graceful_error UnknownMethod(name)
|
141
145
|
end
|
@@ -250,3 +254,9 @@ module Livetext::Helpers
|
|
250
254
|
end
|
251
255
|
|
252
256
|
end
|
257
|
+
|
258
|
+
=begin
|
259
|
+
/Users/Hal/.rvm/gems/ruby-2.7.0/gems/livetext-0.9.35/lib/livetext/helpers.rb:125:in `invoke_dotcmd'
|
260
|
+
/Users/Hal/.rvm/gems/ruby-2.7.0/gems/livetext-0.9.35/lib/livetext/helpers.rb:141:in `handle_dotcmd'
|
261
|
+
/Users/Hal/.rvm/gems/ruby-2.7.0/gems/livetext-0.9.35/lib/livetext/helpers.rb:102:in `process_line'
|
262
|
+
=end
|
data/lib/livetext/more.rb
CHANGED
data/lib/livetext/standard.rb
CHANGED
@@ -44,23 +44,23 @@ module Livetext::Standard
|
|
44
44
|
# end
|
45
45
|
# end
|
46
46
|
|
47
|
-
def backtrace
|
47
|
+
def backtrace(args = nil, body = nil)
|
48
48
|
@backtrace = onoff(api.args.first)
|
49
49
|
api.optional_blank_line
|
50
50
|
end
|
51
51
|
|
52
|
-
def comment
|
52
|
+
def comment(args = nil, body = nil)
|
53
53
|
api.body
|
54
54
|
api.optional_blank_line
|
55
55
|
end
|
56
56
|
|
57
|
-
def shell
|
57
|
+
def shell(args = nil, body = nil)
|
58
58
|
cmd = api.data
|
59
59
|
system(cmd)
|
60
60
|
api.optional_blank_line
|
61
61
|
end
|
62
62
|
|
63
|
-
def func
|
63
|
+
def func(args = nil, body = nil)
|
64
64
|
funcname = api.args[0]
|
65
65
|
# check_disallowed(funcname) # should any be invalid?
|
66
66
|
funcname = funcname.gsub(/\./, "__")
|
@@ -74,21 +74,21 @@ module Livetext::Standard
|
|
74
74
|
return true
|
75
75
|
end
|
76
76
|
|
77
|
-
def h1; api.out
|
78
|
-
def h2; api.out
|
79
|
-
def h3; api.out
|
80
|
-
def h4; api.out
|
81
|
-
def h5; api.out
|
82
|
-
def h6; api.out
|
77
|
+
def h1(args = nil, body = nil); api.out html.tag(:h1, api.data); return true; end
|
78
|
+
def h2(args = nil, body = nil); api.out html.tag(:h2, api.data); return true; end
|
79
|
+
def h3(args = nil, body = nil); api.out html.tag(:h3, api.data); return true; end
|
80
|
+
def h4(args = nil, body = nil); api.out html.tag(:h4, api.data); return true; end
|
81
|
+
def h5(args = nil, body = nil); api.out html.tag(:h5, api.data); return true; end
|
82
|
+
def h6(args = nil, body = nil); api.out html.tag(:h6, api.data); return true; end
|
83
83
|
|
84
|
-
def list
|
84
|
+
def list(args = nil, body = nil)
|
85
85
|
html.wrap :ul do
|
86
|
-
api.body {|line| api.out
|
86
|
+
api.body {|line| api.out html.tag(:li, line) }
|
87
87
|
end
|
88
88
|
api.optional_blank_line
|
89
89
|
end
|
90
90
|
|
91
|
-
def list!
|
91
|
+
def list!(args = nil, body = nil)
|
92
92
|
html.wrap(:ul) do
|
93
93
|
lines = api.body.each # enumerator
|
94
94
|
loop do
|
@@ -101,40 +101,41 @@ module Livetext::Standard
|
|
101
101
|
api.optional_blank_line
|
102
102
|
end
|
103
103
|
|
104
|
-
def shell!
|
104
|
+
def shell!(args = nil, body = nil)
|
105
105
|
cmd = api.data
|
106
106
|
system(cmd)
|
107
107
|
api.optional_blank_line
|
108
108
|
end
|
109
109
|
|
110
|
-
def errout
|
110
|
+
def errout(args = nil, body = nil)
|
111
111
|
::STDERR.puts api.data
|
112
112
|
api.optional_blank_line
|
113
113
|
end
|
114
114
|
|
115
|
-
def ttyout
|
115
|
+
def ttyout(args = nil, body = nil)
|
116
116
|
TTY.puts api.data
|
117
117
|
api.optional_blank_line
|
118
118
|
end
|
119
119
|
|
120
|
-
def say
|
121
|
-
|
122
|
-
|
120
|
+
def say(args = nil, body = nil)
|
121
|
+
data = args || api.args.join(" ")
|
122
|
+
str = api.format(data)
|
123
|
+
TTY.puts "(say) #{str}"
|
123
124
|
api.optional_blank_line
|
124
125
|
end
|
125
126
|
|
126
|
-
def banner
|
127
|
+
def banner(args = nil, body = nil)
|
127
128
|
str = api.format(api.data)
|
128
129
|
num = str.length
|
129
130
|
decor = "-"*num + "\n"
|
130
131
|
puts decor + str + "\n" + decor
|
131
132
|
end
|
132
133
|
|
133
|
-
def quit
|
134
|
+
def quit(args = nil, body = nil)
|
134
135
|
@output.close
|
135
136
|
end
|
136
137
|
|
137
|
-
def cleanup
|
138
|
+
def cleanup(args = nil, body = nil)
|
138
139
|
api.args.each do |item|
|
139
140
|
cmd = ::File.directory?(item) ? "rm -f #{item}/*" : "rm #{item}"
|
140
141
|
system(cmd)
|
@@ -142,7 +143,7 @@ module Livetext::Standard
|
|
142
143
|
api.optional_blank_line
|
143
144
|
end
|
144
145
|
|
145
|
-
def dot_def
|
146
|
+
def dot_def(args = nil, body = nil)
|
146
147
|
name = api.args[0]
|
147
148
|
check_disallowed(name)
|
148
149
|
# Difficult to avoid eval here
|
@@ -153,7 +154,7 @@ module Livetext::Standard
|
|
153
154
|
api.optional_blank_line
|
154
155
|
end
|
155
156
|
|
156
|
-
def set
|
157
|
+
def set(args = nil, body = nil)
|
157
158
|
line = api.args.join(" ") # data.chomp
|
158
159
|
pairs = Livetext::ParseSet.new(line).parse
|
159
160
|
api.setvars(pairs)
|
@@ -162,7 +163,7 @@ module Livetext::Standard
|
|
162
163
|
|
163
164
|
# FIXME really these should be one method...
|
164
165
|
|
165
|
-
def variables! # cwd, not FileDir - weird, fix later
|
166
|
+
def variables!(args = nil, body = nil) # cwd, not FileDir - weird, fix later
|
166
167
|
prefix = api.args[0]
|
167
168
|
file = api.args[1]
|
168
169
|
prefix = nil if prefix == "-" # FIXME dumb hack
|
@@ -177,7 +178,7 @@ module Livetext::Standard
|
|
177
178
|
api.optional_blank_line
|
178
179
|
end
|
179
180
|
|
180
|
-
def variables
|
181
|
+
def variables(args = nil, body = nil)
|
181
182
|
prefix = api.args[0]
|
182
183
|
file = api.args[1]
|
183
184
|
prefix = nil if prefix == "-" # FIXME dumb hack
|
@@ -192,7 +193,7 @@ module Livetext::Standard
|
|
192
193
|
api.optional_blank_line
|
193
194
|
end
|
194
195
|
|
195
|
-
def heredoc
|
196
|
+
def heredoc(args = nil, body = nil)
|
196
197
|
var = api.args[0]
|
197
198
|
text = api.body.join("\n")
|
198
199
|
rhs = ""
|
@@ -206,7 +207,7 @@ module Livetext::Standard
|
|
206
207
|
api.optional_blank_line
|
207
208
|
end
|
208
209
|
|
209
|
-
def seek # like include, but search upward as needed
|
210
|
+
def seek(args = nil, body = nil) # like include, but search upward as needed
|
210
211
|
file = api.args.first
|
211
212
|
file = search_upward(file)
|
212
213
|
check_file_exists(file)
|
@@ -214,14 +215,14 @@ module Livetext::Standard
|
|
214
215
|
api.optional_blank_line
|
215
216
|
end
|
216
217
|
|
217
|
-
def dot_include # dot command
|
218
|
+
def dot_include(args = nil, body = nil) # dot command
|
218
219
|
file = api.expand_variables(api.args.first) # allows for variables
|
219
220
|
check_file_exists(file)
|
220
221
|
@parent.process_file(file)
|
221
222
|
api.optional_blank_line
|
222
223
|
end
|
223
224
|
|
224
|
-
def inherit
|
225
|
+
def inherit(args = nil, body = nil)
|
225
226
|
file = api.args.first
|
226
227
|
upper = "../#{file}"
|
227
228
|
got_upper, got_file = File.exist?(upper), File.exist?(file)
|
@@ -233,7 +234,7 @@ module Livetext::Standard
|
|
233
234
|
api.optional_blank_line
|
234
235
|
end
|
235
236
|
|
236
|
-
def mixin
|
237
|
+
def mixin(args = nil, body = nil)
|
237
238
|
name = api.args.first # Expect a module name
|
238
239
|
@mixins ||= []
|
239
240
|
return if @mixins.include?(name)
|
@@ -245,7 +246,7 @@ module Livetext::Standard
|
|
245
246
|
api.optional_blank_line
|
246
247
|
end
|
247
248
|
|
248
|
-
def import
|
249
|
+
def import(args = nil, body = nil)
|
249
250
|
name = api.args.first # Expect a module name
|
250
251
|
@imports ||= []
|
251
252
|
return if @imports.include?(name)
|
@@ -257,7 +258,7 @@ module Livetext::Standard
|
|
257
258
|
api.optional_blank_line
|
258
259
|
end
|
259
260
|
|
260
|
-
def copy
|
261
|
+
def copy(args = nil, body = nil)
|
261
262
|
file = api.args.first
|
262
263
|
ok = check_file_exists(file)
|
263
264
|
|
@@ -267,67 +268,67 @@ module Livetext::Standard
|
|
267
268
|
[ok, file]
|
268
269
|
end
|
269
270
|
|
270
|
-
def r
|
271
|
+
def r(args = nil, body = nil)
|
271
272
|
# FIXME api.data is broken
|
272
273
|
# api.out api.data # No processing at all
|
273
274
|
api.out api.args.join(" ")
|
274
275
|
api.optional_blank_line
|
275
276
|
end
|
276
277
|
|
277
|
-
def raw
|
278
|
+
def raw(args = nil, body = nil)
|
278
279
|
# No processing at all (terminate with __EOF__)
|
279
280
|
api.raw_body {|line| api.out line } # no formatting
|
280
281
|
api.optional_blank_line
|
281
282
|
end
|
282
283
|
|
283
|
-
def debug
|
284
|
-
|
284
|
+
def debug(args = nil, body = nil)
|
285
|
+
@debug = onoff(api.args.first)
|
285
286
|
api.optional_blank_line
|
286
287
|
end
|
287
288
|
|
288
|
-
def passthru
|
289
|
+
def passthru(args = nil, body = nil)
|
289
290
|
# FIXME - add check for args size? (helpers)
|
290
291
|
@nopass = ! onoff(api.args.first)
|
291
292
|
api.optional_blank_line
|
292
293
|
end
|
293
294
|
|
294
|
-
def nopass
|
295
|
+
def nopass(args = nil, body = nil)
|
295
296
|
@nopass = true
|
296
297
|
api.optional_blank_line
|
297
298
|
end
|
298
299
|
|
299
|
-
def para
|
300
|
+
def para(args = nil, body = nil)
|
300
301
|
# FIXME - add check for args size? (helpers)
|
301
302
|
@nopara = ! onoff(api.args.first)
|
302
303
|
api.optional_blank_line
|
303
304
|
end
|
304
305
|
|
305
|
-
def nopara
|
306
|
+
def nopara(args = nil, body = nil)
|
306
307
|
@nopara = true
|
307
308
|
api.optional_blank_line
|
308
309
|
end
|
309
310
|
|
310
|
-
def heading
|
311
|
+
def heading(args = nil, body = nil)
|
311
312
|
api.print "<center><font size=+1><b>"
|
312
313
|
api.print api.data
|
313
314
|
api.print "</b></font></center>"
|
314
315
|
api.optional_blank_line
|
315
316
|
end
|
316
317
|
|
317
|
-
def newpage
|
318
|
+
def newpage(args = nil, body = nil)
|
318
319
|
api.out '<p style="page-break-after:always;"></p>'
|
319
320
|
api.out "<p/>"
|
320
321
|
api.optional_blank_line
|
321
322
|
end
|
322
323
|
|
323
|
-
def mono
|
324
|
+
def mono(args = nil, body = nil)
|
324
325
|
html.wrap ":pre" do
|
325
326
|
api.body(true) {|line| api.out line }
|
326
327
|
end
|
327
328
|
api.optional_blank_line
|
328
329
|
end
|
329
330
|
|
330
|
-
def dlist
|
331
|
+
def dlist(args = nil, body = nil)
|
331
332
|
delim = api.args.first
|
332
333
|
html.wrap(:dl) do
|
333
334
|
api.body do |line|
|
@@ -340,14 +341,14 @@ module Livetext::Standard
|
|
340
341
|
api.optional_blank_line
|
341
342
|
end
|
342
343
|
|
343
|
-
def link
|
344
|
+
def link(args = nil, body = nil)
|
344
345
|
url = api.args.first
|
345
346
|
text = api.args[2..-1].join(" ")
|
346
347
|
api.out "<a style='text-decoration: none' href='#{url}'>#{text}</a>"
|
347
348
|
api.optional_blank_line
|
348
349
|
end
|
349
350
|
|
350
|
-
def xtable # Borrowed from bookish - FIXME
|
351
|
+
def xtable(args = nil, body = nil) # Borrowed from bookish - FIXME
|
351
352
|
title = api.data
|
352
353
|
delim = " :: "
|
353
354
|
api.out "<br><center><table width=90% cellpadding=5>"
|
@@ -377,7 +378,7 @@ module Livetext::Standard
|
|
377
378
|
api.optional_blank_line
|
378
379
|
end
|
379
380
|
|
380
|
-
def image
|
381
|
+
def image(args = nil, body = nil)
|
381
382
|
name, wide, high = api.args
|
382
383
|
geom = ""
|
383
384
|
geom = "width=#{wide} height=#{high}" if wide || high
|
@@ -385,7 +386,7 @@ module Livetext::Standard
|
|
385
386
|
api.optional_blank_line
|
386
387
|
end
|
387
388
|
|
388
|
-
def br
|
389
|
+
def br(args = nil, body = nil)
|
389
390
|
num = api.args.first || "1"
|
390
391
|
str = ""
|
391
392
|
num.to_i.times { str << "<br>" }
|
@@ -393,7 +394,7 @@ module Livetext::Standard
|
|
393
394
|
api.optional_blank_line
|
394
395
|
end
|
395
396
|
|
396
|
-
def reflection # strictly experimental!
|
397
|
+
def reflection(args = nil, body = nil) # strictly experimental!
|
397
398
|
list = self.methods
|
398
399
|
obj = Object.instance_methods
|
399
400
|
diff = (list - obj).sort
|
data/lib/livetext/version.rb
CHANGED
data/plugin/bookish.rb
CHANGED
@@ -15,9 +15,12 @@ end
|
|
15
15
|
|
16
16
|
# These are duplicated. Remove safely
|
17
17
|
|
18
|
-
def h1; api.out
|
19
|
-
def h2; api.out
|
20
|
-
def h3; api.out
|
18
|
+
def h1(args = nil, body = nil); api.out html.tag(:h1, api.data); return true; end
|
19
|
+
def h2(args = nil, body = nil); api.out html.tag(:h2, api.data); return true; end
|
20
|
+
def h3(args = nil, body = nil); api.out html.tag(:h3, api.data); return true; end
|
21
|
+
def h4(args = nil, body = nil); api.out html.tag(:h4, api.data); return true; end
|
22
|
+
def h5(args = nil, body = nil); api.out html.tag(:h5, api.data); return true; end
|
23
|
+
def h6(args = nil, body = nil); api.out html.tag(:h6, api.data); return true; end
|
21
24
|
|
22
25
|
def alpha_columns(args = nil, body = nil)
|
23
26
|
n = api.args.first.to_i # FIXME: what if it's missing?
|
@@ -71,7 +74,7 @@ def figure(args = nil, body = nil)
|
|
71
74
|
api.optional_blank_line
|
72
75
|
end
|
73
76
|
|
74
|
-
def
|
77
|
+
def xchapterN(args = nil, body = nil)
|
75
78
|
@chapter = api.args.first.to_i
|
76
79
|
@sec = @sec2 = 0
|
77
80
|
title = api.data.split(" ",2)[1]
|
@@ -81,13 +84,12 @@ def chapter(args = nil, body = nil)
|
|
81
84
|
api.out "<title>#{@chapter}. #{title}</title>"
|
82
85
|
api.out <<-HTML
|
83
86
|
<h2>Chapter #{@chapter}</h2>
|
84
|
-
<h1>#{title}</h1
|
85
|
-
|
87
|
+
<h1>#{title}</h1>\n
|
86
88
|
HTML
|
87
89
|
api.optional_blank_line
|
88
90
|
end
|
89
91
|
|
90
|
-
def
|
92
|
+
def chapter(args = nil, body = nil)
|
91
93
|
@chapter += 1
|
92
94
|
@sec = @sec2 = 0
|
93
95
|
title = api.data # .split(" ",2)[1]
|
@@ -98,8 +100,7 @@ def chapterN(args = nil, body = nil)
|
|
98
100
|
api.out "<title>#{@chapter}. #{title}</title>"
|
99
101
|
api.out <<-HTML
|
100
102
|
<h2>Chapter #{@chapter}</h2>
|
101
|
-
<h1>#{title}</h1
|
102
|
-
|
103
|
+
<h1>#{title}</h1>\n
|
103
104
|
HTML
|
104
105
|
api.optional_blank_line
|
105
106
|
end
|
@@ -115,8 +116,8 @@ def sec(args = nil, body = nil)
|
|
115
116
|
api.out "<h3>#@section #{title}</h3>\n"
|
116
117
|
api.optional_blank_line
|
117
118
|
rescue => err
|
118
|
-
api.tty "#{err}\n#{err.backtrace}"
|
119
|
-
::STDERR.puts "#{err}\n#{err.backtrace}"
|
119
|
+
api.tty "#{err}\n#{err.backtrace.join("\n")}"
|
120
|
+
::STDERR.puts "#{err}\n#{err.backtrace.join("\n")}"
|
120
121
|
exit
|
121
122
|
end
|
122
123
|
|
@@ -296,22 +297,22 @@ rescue => err
|
|
296
297
|
end
|
297
298
|
|
298
299
|
def init_bookish
|
300
|
+
@_file_num = 0
|
299
301
|
@toc_file = "toc.tmp"
|
300
302
|
@toc = ::File.new(@toc_file, "w")
|
301
303
|
@chapter = -1
|
302
304
|
end
|
303
305
|
|
304
|
-
|
306
|
+
###########
|
305
307
|
|
306
|
-
|
307
|
-
def outdir
|
308
|
+
def outdir(args = nil, body = nil)
|
308
309
|
@_outdir = api.args.first
|
309
310
|
# @output = STDOUT
|
310
311
|
@output = nil
|
311
312
|
api.optional_blank_line
|
312
313
|
end
|
313
314
|
|
314
|
-
def outdir! # FIXME ?
|
315
|
+
def outdir!(args = nil, body = nil) # FIXME ?
|
315
316
|
@_outdir = api.args.first
|
316
317
|
raise "No output directory specified" if @_outdir.nil?
|
317
318
|
raise "No output directory specified" if @_outdir.empty?
|
@@ -327,12 +328,12 @@ def _append(name)
|
|
327
328
|
end
|
328
329
|
|
329
330
|
|
330
|
-
def append
|
331
|
+
def append(args = nil, body = nil)
|
331
332
|
file = api.args[0]
|
332
333
|
_append(file)
|
333
334
|
end
|
334
335
|
|
335
|
-
def close_output
|
336
|
+
def close_output(args = nil, body = nil)
|
336
337
|
return if @output == STDOUT
|
337
338
|
@_outdir ||= "."
|
338
339
|
@output.puts "<meta charset='UTF-8'>\n\n"
|
@@ -343,16 +344,19 @@ def close_output
|
|
343
344
|
end
|
344
345
|
|
345
346
|
def _prep_next_output(args)
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
347
|
+
*title = args # _next_output(tag, num)
|
348
|
+
title = title.join(" ")
|
349
|
+
slug = _slug(title)
|
350
|
+
api.tty "title = #{title.inspect}"
|
351
|
+
@_file_num += 1
|
352
|
+
fname = "#{'%03d' % @_file_num}-#{slug}.html"
|
353
|
+
api.tty "slug, fnum, fname= #{[slug, @_file_num, fname].inspect}"
|
354
|
+
fname
|
355
|
+
end
|
356
|
+
|
357
|
+
def next_output(args = nil, body = nil)
|
358
|
+
args ||= api.args
|
359
|
+
fname = _prep_next_output(args)
|
356
360
|
@_outdir ||= "."
|
357
361
|
unless @output.nil?
|
358
362
|
@output.puts "<meta charset='UTF-8'>\n\n"
|
@@ -360,12 +364,12 @@ def next_output
|
|
360
364
|
@parent.body = ""
|
361
365
|
@output.close unless @output == STDOUT
|
362
366
|
end
|
363
|
-
fname = @_outdir + "/" +
|
367
|
+
fname = @_outdir + "/" + fname
|
364
368
|
@output = File.open(fname, "w")
|
365
369
|
api.optional_blank_line
|
366
370
|
end
|
367
371
|
|
368
|
-
def output
|
372
|
+
def output(args = nil, body = nil)
|
369
373
|
name = api.args.first
|
370
374
|
_debug "Redirecting output to: #{name}"
|
371
375
|
# _output(name)
|
@@ -378,7 +382,7 @@ def output
|
|
378
382
|
@output = File.open(fname, "w") #; STDERR.puts "---- @out = #{@output.inspect}"
|
379
383
|
end
|
380
384
|
|
381
|
-
def columns
|
385
|
+
def columns(args = nil, body = nil)
|
382
386
|
api.out "<table border=1><tr><td valign=top><br>\n"
|
383
387
|
api.body.to_a.each do |line|
|
384
388
|
if line.start_with?("##col")
|
@@ -392,7 +396,7 @@ def columns
|
|
392
396
|
api.out "<br>\n</td></tr></table>"
|
393
397
|
end
|
394
398
|
|
395
|
-
def quote
|
399
|
+
def quote(args = nil, body = nil)
|
396
400
|
api.out "<blockquote>"
|
397
401
|
lines = api.body.to_a
|
398
402
|
# STDERR.puts "-----------------------------------------------------"
|
data/plugin/pyggish.rb
CHANGED
@@ -82,14 +82,26 @@ def self.pyg_finalize(code, lexer=:elixir)
|
|
82
82
|
result
|
83
83
|
end
|
84
84
|
|
85
|
-
def fragment
|
85
|
+
def fragment(args = nil, body = nil)
|
86
86
|
lang = api.args.empty? ? :elixir : api.args.first.to_sym # ruby or elixir
|
87
87
|
api.args = []
|
88
|
-
#
|
89
|
-
send(lang)
|
88
|
+
lines = api.body(true) # .to_a # raw
|
89
|
+
result = send(lang, lines)
|
90
|
+
api.out result
|
90
91
|
api.out "\n"
|
92
|
+
api.optional_blank_line
|
93
|
+
rescue => err
|
94
|
+
STDERR.puts "fragment Error: #{__method__} err = #{err}\n#{err.backtrace.join("\n")}"
|
91
95
|
end
|
92
96
|
|
97
|
+
def dammit(args = nil, body = nil)
|
98
|
+
lines = api.body(true)
|
99
|
+
api.out "BODY:"
|
100
|
+
lines.each {|x| api.out x }
|
101
|
+
api.out "END BODY"
|
102
|
+
api.optional_blank_line
|
103
|
+
end
|
104
|
+
|
93
105
|
def code # FIXME ?
|
94
106
|
text = ""
|
95
107
|
api.body {|line| api.out " " + line }
|
@@ -145,8 +157,9 @@ def self.pyg_finalize(code, lexer=:elixir)
|
|
145
157
|
text
|
146
158
|
end
|
147
159
|
|
148
|
-
def
|
160
|
+
def xruby
|
149
161
|
file = api.args.first
|
162
|
+
code = nil
|
150
163
|
if file.nil?
|
151
164
|
code = " # Ruby code\n\n"
|
152
165
|
api.body {|line| code << " " + line + "\n" }
|
@@ -158,15 +171,76 @@ def self.pyg_finalize(code, lexer=:elixir)
|
|
158
171
|
api.out html
|
159
172
|
end
|
160
173
|
|
161
|
-
def
|
174
|
+
def xelixir
|
162
175
|
file = api.args.first
|
176
|
+
code = nil
|
163
177
|
if file.nil?
|
164
178
|
code = ""
|
165
179
|
api.body {|line| code << " " + line + "\n" }
|
166
180
|
else
|
167
181
|
code = ::File.read(file)
|
168
182
|
end
|
169
|
-
|
170
183
|
html = format_elixir(code)
|
171
184
|
api.out html
|
185
|
+
end
|
186
|
+
|
187
|
+
def ruby(lines)
|
188
|
+
theme = :Github # default
|
189
|
+
source = lines.join("\n")
|
190
|
+
formatter = Rouge::Formatters::HTML.new
|
191
|
+
lexer = Rouge::Lexers::Ruby.new
|
192
|
+
body = formatter.format(lexer.lex(source))
|
193
|
+
|
194
|
+
# css = Rouge::Themes.const_get(theme.to_s).render(scope: '.highlight')
|
195
|
+
# added = ".highlight { font-family: courier; white-space: pre }"
|
196
|
+
|
197
|
+
result = <<~HTML
|
198
|
+
<div class="highlight">
|
199
|
+
#{body}
|
200
|
+
</div>
|
201
|
+
<br>
|
202
|
+
HTML
|
203
|
+
return result
|
204
|
+
|
205
|
+
iheight = lines.size * 25
|
206
|
+
api.out <<~HTML
|
207
|
+
<center>
|
208
|
+
<iframe width=90% height=#{iheight} src='#{File.basename(html_file)}'></iframe>
|
209
|
+
</center>
|
210
|
+
<br>
|
211
|
+
HTML
|
212
|
+
rescue => err
|
213
|
+
STDERR.puts "Error: #{__method__} err = #{err}\n#{err.backtrace.join("\n")}"
|
172
214
|
end
|
215
|
+
|
216
|
+
|
217
|
+
def elixir(lines)
|
218
|
+
theme = :Github # default
|
219
|
+
source = lines.join("\n")
|
220
|
+
formatter = Rouge::Formatters::HTML.new
|
221
|
+
lexer = Rouge::Lexers::Elixir.new
|
222
|
+
body = formatter.format(lexer.lex(source))
|
223
|
+
|
224
|
+
# css = Rouge::Themes.const_get(theme.to_s).render(scope: '.highlight')
|
225
|
+
# added = ".highlight { font-family: courier; white-space: pre }"
|
226
|
+
|
227
|
+
result = <<~HTML
|
228
|
+
<div class="highlight">
|
229
|
+
#{body}
|
230
|
+
</div>
|
231
|
+
<br>
|
232
|
+
HTML
|
233
|
+
return result
|
234
|
+
|
235
|
+
iheight = lines.size * 25
|
236
|
+
api.out <<~HTML
|
237
|
+
<center>
|
238
|
+
<iframe width=90% height=#{iheight} src='#{File.basename(html_file)}'></iframe>
|
239
|
+
</center>
|
240
|
+
<br>
|
241
|
+
HTML
|
242
|
+
rescue => err
|
243
|
+
STDERR.puts "Error: #{__method__} err = #{err}\n#{err.backtrace}"
|
244
|
+
end
|
245
|
+
|
246
|
+
|
data/test/unit/html.rb
CHANGED
@@ -9,29 +9,27 @@ class TestingLivetext < MiniTest::Test
|
|
9
9
|
# Same is probably true of the methods that are testing them.
|
10
10
|
|
11
11
|
def test_wrapped
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
assert_equal
|
17
|
-
|
12
|
+
live = Livetext.new
|
13
|
+
html = HTML.new(live.api)
|
14
|
+
str = "nothing much"
|
15
|
+
assert_equal html.tag(:b, cdata: str), "<b>#{str}</b>"
|
16
|
+
assert_equal html.tag(:b, :i, cdata: str), "<b><i>#{str}</i></b>"
|
17
|
+
|
18
|
+
assert_equal html.tag(:table, :tr, :td, cdata: str),
|
19
|
+
"<table><tr><td>#{str}</td></tr></table>"
|
18
20
|
end
|
19
21
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
assert_equal
|
25
|
-
|
26
|
-
assert_equal
|
22
|
+
def test_wrapped_extra
|
23
|
+
live = Livetext.new
|
24
|
+
html = HTML.new(live.api)
|
25
|
+
str = "nothing much"
|
26
|
+
assert_equal html.tag(:td, cdata: str, valign: :top),
|
27
|
+
"<td valign='top'>#{str}</td>"
|
28
|
+
assert_equal html.tag(:img, cdata: str, src: "foo.jpg"),
|
29
|
+
"<img src='foo.jpg'>#{str}</img>"
|
30
|
+
assert_equal html.tag(:a, cdata: str, style: 'text-decoration: none',
|
27
31
|
href: 'foo.com'),
|
28
|
-
"<a style='text-decoration: none' href='foo.com'>#{
|
29
|
-
end
|
30
|
-
|
31
|
-
def xtest_wrap
|
32
|
-
# bogus!
|
33
|
-
wrap(:ul) { 2.times {|i| _out i } }
|
34
|
-
dump # puts @body
|
32
|
+
"<a style='text-decoration: none' href='foo.com'>#{str}</a>"
|
35
33
|
end
|
36
34
|
|
37
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: livetext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|