livetext 0.9.37 → 0.9.39
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/livetext/functions.rb +8 -0
- data/lib/livetext/helpers.rb +0 -5
- data/lib/livetext/standard.rb +45 -15
- data/lib/livetext/userapi.rb +1 -0
- data/lib/livetext/version.rb +1 -1
- data/plugin/{bookish.rb → booktool.rb} +73 -23
- data/plugin/{pyggish.rb → codetool.rb} +30 -33
- data/test/snapshots/{mixin_bookish → mixin_booktool}/source.lt3 +1 -1
- metadata +9 -10
- data/plugin/calibre.rb +0 -26
- /data/test/snapshots/{mixin_bookish → mixin_booktool}/expected-error.txt +0 -0
- /data/test/snapshots/{mixin_bookish → mixin_booktool}/expected-output.txt +0 -0
- /data/test/snapshots/{mixin_bookish → mixin_booktool}/toc.tmp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1acd3333afca72468cfc97d2dcdf7d7018700e08d7c0defe4b68d7da53d0824
|
4
|
+
data.tar.gz: 32495892978828e9e75d619b9df32891829fd6d6fca9eea46efc5d372fc172c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8c3e9ad8689636fbe83f63117e75461a2a12ca8b716f96f26ca89752f8404093bfd77d1a25ec62dd200263a79f7584960c66a2a2df699b314d909cba82995a7
|
7
|
+
data.tar.gz: bee8d442bd0755f18c64851241907569d9150af1a051f04729d82bd84ca814049e14a71c1e9257caea9f26ad3af547ebaaf0a55012f837c37ea4cb2699b22283
|
data/lib/livetext/functions.rb
CHANGED
@@ -11,6 +11,14 @@ class Livetext::Functions
|
|
11
11
|
attr_accessor :param # kill this?
|
12
12
|
end
|
13
13
|
|
14
|
+
def code_lines(param = nil)
|
15
|
+
$code_lines.to_i # FIXME pleeease
|
16
|
+
end
|
17
|
+
|
18
|
+
def ns(param = nil)
|
19
|
+
"\b"
|
20
|
+
end
|
21
|
+
|
14
22
|
# FIXME Function parameters need to be fixed...
|
15
23
|
|
16
24
|
def isqrt(param = nil) # "integer square root" - Just for testing
|
data/lib/livetext/helpers.rb
CHANGED
@@ -255,8 +255,3 @@ module Livetext::Helpers
|
|
255
255
|
|
256
256
|
end
|
257
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/standard.rb
CHANGED
@@ -74,16 +74,16 @@ module Livetext::Standard
|
|
74
74
|
return true
|
75
75
|
end
|
76
76
|
|
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
|
77
|
+
def h1(args = nil, body = nil); api.out html.tag(:h1, cdata: api.data); return true; end
|
78
|
+
def h2(args = nil, body = nil); api.out html.tag(:h2, cdata: api.data); return true; end
|
79
|
+
def h3(args = nil, body = nil); api.out html.tag(:h3, cdata: api.data); return true; end
|
80
|
+
def h4(args = nil, body = nil); api.out html.tag(:h4, cdata: api.data); return true; end
|
81
|
+
def h5(args = nil, body = nil); api.out html.tag(:h5, cdata: api.data); return true; end
|
82
|
+
def h6(args = nil, body = nil); api.out html.tag(:h6, cdata: api.data); return true; end
|
83
83
|
|
84
84
|
def list(args = nil, body = nil)
|
85
85
|
html.wrap :ul do
|
86
|
-
api.body {|line| api.out html.tag(:li, line) }
|
86
|
+
api.body {|line| api.out html.tag(:li, cdata: line) }
|
87
87
|
end
|
88
88
|
api.optional_blank_line
|
89
89
|
end
|
@@ -94,7 +94,7 @@ module Livetext::Standard
|
|
94
94
|
loop do
|
95
95
|
line = lines.next
|
96
96
|
line = api.format(line)
|
97
|
-
str = line[0] == " " ? line :
|
97
|
+
str = line[0] == " " ? line : html.tag(:li, cdata: line)
|
98
98
|
api.out str
|
99
99
|
end
|
100
100
|
end
|
@@ -120,7 +120,7 @@ module Livetext::Standard
|
|
120
120
|
def say(args = nil, body = nil)
|
121
121
|
data = args || api.args.join(" ")
|
122
122
|
str = api.format(data)
|
123
|
-
TTY.puts
|
123
|
+
TTY.puts str
|
124
124
|
api.optional_blank_line
|
125
125
|
end
|
126
126
|
|
@@ -128,7 +128,8 @@ module Livetext::Standard
|
|
128
128
|
str = api.format(api.data)
|
129
129
|
num = str.length
|
130
130
|
decor = "-"*num + "\n"
|
131
|
-
|
131
|
+
api.tty decor + str + "\n" + decor
|
132
|
+
api.optional_blank_line
|
132
133
|
end
|
133
134
|
|
134
135
|
def quit(args = nil, body = nil)
|
@@ -199,7 +200,21 @@ module Livetext::Standard
|
|
199
200
|
rhs = ""
|
200
201
|
text.each_line do |line|
|
201
202
|
str = api.format(line.chomp)
|
202
|
-
rhs << str + "<br
|
203
|
+
rhs << str + "<br>\n"
|
204
|
+
end
|
205
|
+
indent = @parent.indentation.last
|
206
|
+
indented = " " * indent
|
207
|
+
api.setvar(var, rhs.chomp)
|
208
|
+
api.optional_blank_line
|
209
|
+
end
|
210
|
+
|
211
|
+
def heredoc!(args = nil, body = nil) # no <br>
|
212
|
+
var = api.args[0]
|
213
|
+
text = api.body.join("\n")
|
214
|
+
rhs = ""
|
215
|
+
text.each_line do |line|
|
216
|
+
str = api.format(line.chomp)
|
217
|
+
rhs << str + "\n"
|
203
218
|
end
|
204
219
|
indent = @parent.indentation.last
|
205
220
|
indented = " " * indent
|
@@ -215,6 +230,20 @@ module Livetext::Standard
|
|
215
230
|
api.optional_blank_line
|
216
231
|
end
|
217
232
|
|
233
|
+
def cinclude(args = nil, body = nil) # dot command
|
234
|
+
file = api.expand_variables(api.args.first) # allows for variables
|
235
|
+
if api.args.size > 1 # there is an HTML file
|
236
|
+
processed = api.expand_variables(api.args[1])
|
237
|
+
if File.exist?(processed) && File.mtime(processed) > File.mtime(file)
|
238
|
+
api.args = [processed]
|
239
|
+
copy
|
240
|
+
end
|
241
|
+
end
|
242
|
+
check_file_exists(file)
|
243
|
+
@parent.process_file(file)
|
244
|
+
api.optional_blank_line
|
245
|
+
end
|
246
|
+
|
218
247
|
def dot_include(args = nil, body = nil) # dot command
|
219
248
|
file = api.expand_variables(api.args.first) # allows for variables
|
220
249
|
check_file_exists(file)
|
@@ -334,10 +363,11 @@ module Livetext::Standard
|
|
334
363
|
api.body do |line|
|
335
364
|
line = api.format(line)
|
336
365
|
term, defn = line.split(delim)
|
337
|
-
api.out
|
338
|
-
api.out
|
366
|
+
api.out html.tag(:dt, cdata: term)
|
367
|
+
api.out " " + html.tag(:dd, cdata: defn)
|
339
368
|
end
|
340
369
|
end
|
370
|
+
api.out ""
|
341
371
|
api.optional_blank_line
|
342
372
|
end
|
343
373
|
|
@@ -351,13 +381,13 @@ module Livetext::Standard
|
|
351
381
|
def xtable(args = nil, body = nil) # Borrowed from bookish - FIXME
|
352
382
|
title = api.data
|
353
383
|
delim = " :: "
|
354
|
-
api.out "<br
|
384
|
+
api.out "<br>\n\n<center><table width=90% cellpadding=5>"
|
355
385
|
lines = api.body(true)
|
356
386
|
maxw = nil
|
357
387
|
processed = []
|
358
388
|
lines.each do |line|
|
359
389
|
line = api.format(line)
|
360
|
-
line.gsub!(/\n+/, "<br
|
390
|
+
line.gsub!(/\n+/, "<br>\n")
|
361
391
|
processed << line
|
362
392
|
cells = line.split(delim)
|
363
393
|
wide = cells.map {|cell| cell.length }
|
data/lib/livetext/userapi.rb
CHANGED
@@ -173,6 +173,7 @@ STDERR.puts "incfile: #{api.methods.sort.inspect}\n "
|
|
173
173
|
def out(str = "", file = nil)
|
174
174
|
return if str.nil?
|
175
175
|
return file.puts str unless file.nil?
|
176
|
+
str.gsub!("\b ", "") # ignore spaces
|
176
177
|
@live.body << str
|
177
178
|
@live.body << "\n" unless str.end_with?("\n")
|
178
179
|
end
|
data/lib/livetext/version.rb
CHANGED
@@ -1,3 +1,53 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
def mobi(args = nil, body = nil)
|
4
|
+
out = api.format(api.args[0])
|
5
|
+
src = api.args[1]
|
6
|
+
@cover = api.args[2]
|
7
|
+
if ::File.directory?(src)
|
8
|
+
files = ::Dir["#{src}/*"].grep /\.html$/
|
9
|
+
files = files.sort # why is this necessary now?
|
10
|
+
cmd = "cat #{files.join(' ')} >TEMP.html"
|
11
|
+
system(cmd)
|
12
|
+
else
|
13
|
+
raise "Not supported yet"
|
14
|
+
end
|
15
|
+
|
16
|
+
cmd = "ebook-convert "
|
17
|
+
cmd << "TEMP.html #{out}.mobi "
|
18
|
+
cmd << "--cover #@cover " if @cover
|
19
|
+
system(cmd)
|
20
|
+
|
21
|
+
system("links -dump TEMP.html >/tmp/links.out")
|
22
|
+
str = `wc -w /tmp/links.out`
|
23
|
+
nw = str.split[0]
|
24
|
+
end
|
25
|
+
|
26
|
+
def epub(args = nil, body = nil)
|
27
|
+
out = api.format(api.args[0])
|
28
|
+
src = api.args[1]
|
29
|
+
@cover = api.args[2]
|
30
|
+
if ::File.directory?(src)
|
31
|
+
files = ::Dir["#{src}/*"].grep /\.html$/
|
32
|
+
files = files.sort # why is this necessary now?
|
33
|
+
cmd = "cat #{files.join(' ')} >TEMP.html"
|
34
|
+
system(cmd)
|
35
|
+
else
|
36
|
+
raise "Not supported yet"
|
37
|
+
end
|
38
|
+
|
39
|
+
cmd = "ebook-convert "
|
40
|
+
cmd << "TEMP.html #{out}.epub "
|
41
|
+
cmd << "--cover #@cover " if @cover
|
42
|
+
system(cmd)
|
43
|
+
|
44
|
+
system("links -dump TEMP.html >/tmp/links.out")
|
45
|
+
str = `wc -w /tmp/links.out`
|
46
|
+
nw = str.split[0]
|
47
|
+
puts "Approx words: #{nw}"
|
48
|
+
# ::FileUtils.rm("TEMP.html")
|
49
|
+
end
|
50
|
+
|
1
51
|
def hardbreaks(args = nil, body = nil)
|
2
52
|
@hard = false
|
3
53
|
@hard = true unless api.args.first == "off"
|
@@ -78,7 +128,7 @@ def xchapterN(args = nil, body = nil)
|
|
78
128
|
@chapter = api.args.first.to_i
|
79
129
|
@sec = @sec2 = 0
|
80
130
|
title = api.data.split(" ",2)[1]
|
81
|
-
@toc << "<br
|
131
|
+
@toc << "<br>\n\n<b>#@chapter</b> #{title}<br>\n\n"
|
82
132
|
api.data = _slug(title)
|
83
133
|
next_output
|
84
134
|
api.out "<title>#{@chapter}. #{title}</title>"
|
@@ -94,7 +144,7 @@ def chapter(args = nil, body = nil)
|
|
94
144
|
@sec = @sec2 = 0
|
95
145
|
title = api.data # .split(" ",2)[1]
|
96
146
|
_errout("Chapter #@chapter: #{title}")
|
97
|
-
@toc << "<br
|
147
|
+
@toc << "<br>\n\n<b>#@chapter</b> #{title}<br>\n\n"
|
98
148
|
api.data = _slug(title)
|
99
149
|
next_output
|
100
150
|
api.out "<title>#{@chapter}. #{title}</title>"
|
@@ -110,10 +160,10 @@ def sec(args = nil, body = nil)
|
|
110
160
|
@sec2 = 0
|
111
161
|
@section = "#@chapter.#@sec"
|
112
162
|
title = api.data.dup
|
113
|
-
@toc << "#{_nbsp(3)}<b>#@section</b> #{title}<br
|
163
|
+
@toc << "#{_nbsp(3)}<b>#@section</b> #{title}<br>\n"
|
114
164
|
api.data = _slug(api.data)
|
115
165
|
next_output
|
116
|
-
api.out "<h3>#@section #{title}</h3>\n"
|
166
|
+
api.out "<h3>#@section #{title}</h3>\n\n"
|
117
167
|
api.optional_blank_line
|
118
168
|
rescue => err
|
119
169
|
api.tty "#{err}\n#{err.backtrace.join("\n")}"
|
@@ -125,10 +175,10 @@ def subsec(args = nil, body = nil)
|
|
125
175
|
@sec2 += 1
|
126
176
|
@subsec = "#@chapter.#@sec.#@sec2"
|
127
177
|
title = api.data.dup
|
128
|
-
@toc << "#{_nbsp(6)}<b>#@subsec</b> #{title}<br
|
178
|
+
@toc << "#{_nbsp(6)}<b>#@subsec</b> #{title}<br>\n"
|
129
179
|
api.data = _slug(api.data)
|
130
180
|
next_output
|
131
|
-
api.out "<h3>#@subsec #{title}</h3>\n"
|
181
|
+
api.out "<h3>#@subsec #{title}</h3>\n\n"
|
132
182
|
api.optional_blank_line
|
133
183
|
end
|
134
184
|
|
@@ -136,7 +186,7 @@ def definition_table(args = nil, body = nil)
|
|
136
186
|
title = api.data
|
137
187
|
wide = "95"
|
138
188
|
delim = " :: "
|
139
|
-
api.out "<br
|
189
|
+
api.out "<br>\n\n<center><table width=#{wide}% cellpadding=5>"
|
140
190
|
lines = api.body(true)
|
141
191
|
lines.map! {|line| api.format(line) }
|
142
192
|
|
@@ -149,7 +199,7 @@ def definition_table(args = nil, body = nil)
|
|
149
199
|
end
|
150
200
|
api.out "</tr>"
|
151
201
|
end
|
152
|
-
api.out "</table></center
|
202
|
+
api.out "</table></center>\n\n<br><br>\n\n"
|
153
203
|
|
154
204
|
api.optional_blank_line
|
155
205
|
end
|
@@ -159,7 +209,7 @@ def table2(args = nil, body = nil)
|
|
159
209
|
wide = "90"
|
160
210
|
extra = api.args[2]
|
161
211
|
delim = " :: "
|
162
|
-
api.out "<br
|
212
|
+
api.out "<br>\n\n<center><table width=#{wide}% cellpadding=5>"
|
163
213
|
lines = api.body(true)
|
164
214
|
lines.map! {|line| api.format(line) }
|
165
215
|
|
@@ -173,7 +223,7 @@ def table2(args = nil, body = nil)
|
|
173
223
|
end
|
174
224
|
api.out "</tr>"
|
175
225
|
end
|
176
|
-
api.out "</table></center
|
226
|
+
api.out "</table></center>\n\n<br><br>\n\n"
|
177
227
|
api.optional_blank_line
|
178
228
|
end
|
179
229
|
|
@@ -212,11 +262,12 @@ def table(args = nil, body = nil)
|
|
212
262
|
@table_num += 1
|
213
263
|
title = api.data
|
214
264
|
delim = " :: "
|
215
|
-
api.out "<br
|
265
|
+
api.out "<br>\n\n<center><table width=90% cellpadding=5>"
|
266
|
+
|
216
267
|
lines = api.body(true)
|
268
|
+
# Find max width for each column
|
217
269
|
maxw = nil
|
218
270
|
lines.each do |line|
|
219
|
-
api.format(line)
|
220
271
|
cells = line.split(delim)
|
221
272
|
wide = cells.map {|x| x.length }
|
222
273
|
maxw = [0] * cells.size
|
@@ -224,21 +275,22 @@ def table(args = nil, body = nil)
|
|
224
275
|
end
|
225
276
|
|
226
277
|
sum = maxw.inject(0, :+)
|
227
|
-
maxw.map! {|x| (x/sum*100).floor }
|
278
|
+
maxw.map! {|x| (x/sum*100.0).floor }
|
228
279
|
|
229
280
|
lines.each do |line|
|
281
|
+
line = api.format(line)
|
230
282
|
cells = line.split(delim)
|
231
283
|
api.out "<tr>"
|
232
284
|
cells.each.with_index do |cell, i|
|
233
|
-
api.out " <td width=#{maxw}% valign=top>"
|
234
|
-
|
285
|
+
api.out " <td width=#{maxw[i]}% valign=top>#{cell}</td>"
|
286
|
+
# api.out " <td valign=top>#{cell}</td>"
|
235
287
|
end
|
236
288
|
api.out "</tr>"
|
237
289
|
end
|
238
290
|
api.out "</table>"
|
239
|
-
@toc << "#{_nbsp(8)}<b>Table #@chapter.#@table_num</b> #{title}<br
|
291
|
+
@toc << "#{_nbsp(8)}<b>Table #@chapter.#@table_num</b> #{title}<br>\n"
|
240
292
|
# _next_output(_slug("table_#{title}"))
|
241
|
-
api.out "<b>Table #@chapter.#@table_num #{title}</b></center><br
|
293
|
+
api.out "\n<br><b>Table #@chapter.#@table_num #{title}</b></center><br>\n\n"
|
242
294
|
api.optional_blank_line
|
243
295
|
end
|
244
296
|
|
@@ -267,20 +319,20 @@ EOS
|
|
267
319
|
end
|
268
320
|
|
269
321
|
def missing(args = nil, body = nil)
|
270
|
-
@toc << "#{_nbsp(8)}<font color=red>TBD: #{api.data}</font><br
|
322
|
+
@toc << "#{_nbsp(8)}<font color=red>TBD: #{api.data}</font><br>\n"
|
271
323
|
stuff = api.data.empty? ? "" : ": #{api.data}"
|
272
324
|
api.out "<br><font color=red><i>[Material missing#{stuff}]</i></font><br>\n "
|
273
325
|
api.optional_blank_line
|
274
326
|
end
|
275
327
|
|
276
328
|
def TBC(args = nil, body = nil)
|
277
|
-
@toc << "#{_nbsp(8)}<font color=red>To be continued...</font><br
|
329
|
+
@toc << "#{_nbsp(8)}<font color=red>To be continued...</font><br>\n"
|
278
330
|
api.out "<br><font color=red><i>To be continued...</i></font><br>"
|
279
331
|
api.optional_blank_line
|
280
332
|
end
|
281
333
|
|
282
334
|
def note(args = nil, body = nil)
|
283
|
-
api.out "<br
|
335
|
+
api.out "\n<br>\n<font color=red><i>Note: "
|
284
336
|
api.out api.data
|
285
337
|
api.out "</i></font><br>\n "
|
286
338
|
api.optional_blank_line
|
@@ -296,7 +348,7 @@ rescue => err
|
|
296
348
|
exit
|
297
349
|
end
|
298
350
|
|
299
|
-
def
|
351
|
+
def init_booktool
|
300
352
|
@_file_num = 0
|
301
353
|
@toc_file = "toc.tmp"
|
302
354
|
@toc = ::File.new(@toc_file, "w")
|
@@ -347,10 +399,8 @@ def _prep_next_output(args)
|
|
347
399
|
*title = args # _next_output(tag, num)
|
348
400
|
title = title.join(" ")
|
349
401
|
slug = _slug(title)
|
350
|
-
api.tty "title = #{title.inspect}"
|
351
402
|
@_file_num += 1
|
352
403
|
fname = "#{'%03d' % @_file_num}-#{slug}.html"
|
353
|
-
api.tty "slug, fnum, fname= #{[slug, @_file_num, fname].inspect}"
|
354
404
|
fname
|
355
405
|
end
|
356
406
|
|
@@ -83,25 +83,19 @@ def self.pyg_finalize(code, lexer=:elixir)
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def fragment(args = nil, body = nil)
|
86
|
+
$code_lines ||= 0 # FIXME later
|
86
87
|
lang = api.args.empty? ? :elixir : api.args.first.to_sym # ruby or elixir
|
87
88
|
api.args = []
|
88
89
|
lines = api.body(true) # .to_a # raw
|
89
|
-
|
90
|
+
$code_lines += lines.size
|
91
|
+
result = send("format_#{lang}", lines)
|
90
92
|
api.out result
|
91
|
-
api.out "
|
93
|
+
api.out "<br>\n"
|
92
94
|
api.optional_blank_line
|
93
95
|
rescue => err
|
94
96
|
STDERR.puts "fragment Error: #{__method__} err = #{err}\n#{err.backtrace.join("\n")}"
|
95
97
|
end
|
96
98
|
|
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
|
-
|
105
99
|
def code # FIXME ?
|
106
100
|
text = ""
|
107
101
|
api.body {|line| api.out " " + line }
|
@@ -138,26 +132,7 @@ end
|
|
138
132
|
File.write("#{dir}/elixir.css", css)
|
139
133
|
end
|
140
134
|
|
141
|
-
|
142
|
-
def format_ruby(source, theme = "Github", back = "black")
|
143
|
-
# theme/back not used now
|
144
|
-
formatter = Rouge::Formatters::HTML.new
|
145
|
-
lexer = Rouge::Lexers::Ruby.new
|
146
|
-
body = formatter.format(lexer.lex(source))
|
147
|
-
text = "<div class=rb_highlight>#{body}</div>"
|
148
|
-
text
|
149
|
-
end
|
150
|
-
|
151
|
-
def format_elixir(source, theme = "Github", back = "black")
|
152
|
-
# theme/back not used now
|
153
|
-
formatter = Rouge::Formatters::HTML.new
|
154
|
-
lexer = Rouge::Lexers::Elixir.new
|
155
|
-
body = formatter.format(lexer.lex(source))
|
156
|
-
text = "<div class=ex_highlight>#{body}</div>"
|
157
|
-
text
|
158
|
-
end
|
159
|
-
|
160
|
-
def xruby
|
135
|
+
def ruby(args = nil, body = nil)
|
161
136
|
file = api.args.first
|
162
137
|
code = nil
|
163
138
|
if file.nil?
|
@@ -171,7 +146,7 @@ end
|
|
171
146
|
api.out html
|
172
147
|
end
|
173
148
|
|
174
|
-
def
|
149
|
+
def elixir(args = nil, body = nil)
|
175
150
|
file = api.args.first
|
176
151
|
code = nil
|
177
152
|
if file.nil?
|
@@ -184,7 +159,29 @@ end
|
|
184
159
|
api.out html
|
185
160
|
end
|
186
161
|
|
187
|
-
def
|
162
|
+
def format_ruby(lines, theme = "Github", back = "black")
|
163
|
+
# theme/back not used now
|
164
|
+
source = lines
|
165
|
+
source = source.join("\n") if source.is_a?(Array)
|
166
|
+
formatter = Rouge::Formatters::HTML.new
|
167
|
+
lexer = Rouge::Lexers::Ruby.new
|
168
|
+
body = formatter.format(lexer.lex(source))
|
169
|
+
text = "<div class=rb_highlight>#{body}</div>"
|
170
|
+
text
|
171
|
+
end
|
172
|
+
|
173
|
+
def format_elixir(lines, theme = "Github", back = "black")
|
174
|
+
# theme/back not used now
|
175
|
+
source = lines
|
176
|
+
source = source.join("\n") if source.is_a?(Array)
|
177
|
+
formatter = Rouge::Formatters::HTML.new
|
178
|
+
lexer = Rouge::Lexers::Elixir.new
|
179
|
+
body = formatter.format(lexer.lex(source))
|
180
|
+
text = "<div class=ex_highlight>#{body}</div>"
|
181
|
+
text
|
182
|
+
end
|
183
|
+
|
184
|
+
def __ruby(lines)
|
188
185
|
theme = :Github # default
|
189
186
|
source = lines.join("\n")
|
190
187
|
formatter = Rouge::Formatters::HTML.new
|
@@ -214,7 +211,7 @@ rescue => err
|
|
214
211
|
end
|
215
212
|
|
216
213
|
|
217
|
-
def
|
214
|
+
def __elixir(lines)
|
218
215
|
theme = :Github # default
|
219
216
|
source = lines.join("\n")
|
220
217
|
formatter = Rouge::Formatters::HTML.new
|
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.39
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A smart text processor extensible in Ruby
|
14
14
|
email: rubyhacker@gmail.com
|
@@ -52,13 +52,12 @@ files:
|
|
52
52
|
- lib/livetext/userapi.rb
|
53
53
|
- lib/livetext/version.rb
|
54
54
|
- livetext.gemspec
|
55
|
-
- plugin/
|
55
|
+
- plugin/booktool.rb
|
56
56
|
- plugin/bootstrap_menu.rb
|
57
|
-
- plugin/
|
57
|
+
- plugin/codetool.rb
|
58
58
|
- plugin/livemagick.rb
|
59
59
|
- plugin/markdown.rb
|
60
60
|
- plugin/misc/navbar.rb
|
61
|
-
- plugin/pyggish.rb
|
62
61
|
- plugin/tutorial.rb
|
63
62
|
- test/all.rb
|
64
63
|
- test/extra/README.txt
|
@@ -142,10 +141,10 @@ files:
|
|
142
141
|
- test/snapshots/import_bookish/expected-output.txt
|
143
142
|
- test/snapshots/import_bookish/source.lt3
|
144
143
|
- test/snapshots/import_bookish/toc.tmp
|
145
|
-
- test/snapshots/
|
146
|
-
- test/snapshots/
|
147
|
-
- test/snapshots/
|
148
|
-
- test/snapshots/
|
144
|
+
- test/snapshots/mixin_booktool/expected-error.txt
|
145
|
+
- test/snapshots/mixin_booktool/expected-output.txt
|
146
|
+
- test/snapshots/mixin_booktool/source.lt3
|
147
|
+
- test/snapshots/mixin_booktool/toc.tmp
|
149
148
|
- test/snapshots/more_complex_vars/expected-error.txt
|
150
149
|
- test/snapshots/more_complex_vars/expected-output.txt
|
151
150
|
- test/snapshots/more_complex_vars/source.lt3
|
@@ -220,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
219
|
- !ruby/object:Gem::Version
|
221
220
|
version: '0'
|
222
221
|
requirements: []
|
223
|
-
rubygems_version: 3.
|
222
|
+
rubygems_version: 3.5.4
|
224
223
|
signing_key:
|
225
224
|
specification_version: 4
|
226
225
|
summary: A smart processor for text
|
data/plugin/calibre.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
def epub!(args = nil, body = nil)
|
4
|
-
out = api.format(api.args[0])
|
5
|
-
src = api.args[1]
|
6
|
-
@cover = api.args[2]
|
7
|
-
if ::File.directory?(src)
|
8
|
-
files = ::Dir["#{src}/*"].grep /\.html$/
|
9
|
-
files = files.sort # why is this necessary now?
|
10
|
-
cmd = "cat #{files.join(' ')} >TEMP.html"
|
11
|
-
system(cmd)
|
12
|
-
else
|
13
|
-
raise "Not supported yet"
|
14
|
-
end
|
15
|
-
|
16
|
-
cmd = "ebook-convert "
|
17
|
-
cmd << "TEMP.html #{out}.epub "
|
18
|
-
cmd << "--cover #@cover " if @cover
|
19
|
-
system(cmd)
|
20
|
-
|
21
|
-
system("links -dump TEMP.html >/tmp/links.out")
|
22
|
-
str = `wc -w /tmp/links.out`
|
23
|
-
nw = str.split[0]
|
24
|
-
puts "Approx words: #{nw}"
|
25
|
-
# ::FileUtils.rm("TEMP.html")
|
26
|
-
end
|
File without changes
|
File without changes
|
File without changes
|