deplate 0.8 → 0.8.1
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.
- data/AUTHORS.TXT +19 -16
- data/CHANGES.TXT +214 -248
- data/NEWS.TXT +47 -30
- data/README.TXT +0 -1
- data/TODO.TXT +93 -20
- data/VERSION.TXT +1 -1
- data/bin/deplate.exy +192 -0
- data/etc/deplate.ini +70 -9
- data/lib/action_view/helpers/deplate.rb +33 -33
- data/lib/deplate.rb +2 -2
- data/lib/deplate/bib.rb +72 -41
- data/lib/deplate/builtin.rb +1 -1
- data/lib/deplate/cache.rb +1 -1
- data/lib/deplate/commands.rb +161 -102
- data/lib/deplate/common.rb +93 -7
- data/lib/deplate/converter.rb +10 -4
- data/lib/deplate/core.rb +215 -108
- data/lib/deplate/counters.rb +23 -8
- data/lib/deplate/css/article.css +9 -5
- data/lib/deplate/css/deplate.css +37 -3
- data/lib/deplate/css/heading-navbar.css +1 -1
- data/lib/deplate/css/highstep.css +18 -0
- data/lib/deplate/css/htmldoc.css +43 -0
- data/lib/deplate/css/layout-deplate-print.css +1 -1
- data/lib/deplate/css/layout-deplate.css +1 -1
- data/lib/deplate/css/play.css +101 -0
- data/lib/deplate/css/sans-serif.css +1 -1
- data/lib/deplate/css/serif-e.css +1 -1
- data/lib/deplate/css/serif-rel.css +1 -1
- data/lib/deplate/css/serif.css +1 -1
- data/lib/deplate/css/slides.css +1 -1
- data/lib/deplate/css/styles.css +4 -0
- data/lib/deplate/css/tabbar-right.css +54 -8
- data/lib/deplate/css/tabbar-top.css +28 -9
- data/lib/deplate/css/text-sans-serif.css +1 -1
- data/lib/deplate/css/text-serif.css +1 -1
- data/lib/deplate/define.rb +71 -38
- data/lib/deplate/deplate-string.rb +3 -3
- data/lib/deplate/docbook.rb +9 -9
- data/lib/deplate/elements.rb +173 -84
- data/lib/deplate/etc.rb +6 -8
- data/lib/deplate/external.rb +9 -5
- data/lib/deplate/fmt/dbk-article-4.1.2.rb +4 -3
- data/lib/deplate/fmt/dbk-article.rb +9 -8
- data/lib/deplate/fmt/dbk-book.rb +4 -3
- data/lib/deplate/fmt/dbk-ref.rb +5 -4
- data/lib/deplate/fmt/dbk-slides.rb +4 -3
- data/lib/deplate/fmt/dbk-snippet.rb +4 -3
- data/lib/deplate/fmt/html-snippet.rb +1 -1
- data/lib/deplate/fmt/html.rb +186 -46
- data/lib/deplate/fmt/htmlsite.rb +19 -9
- data/lib/deplate/fmt/htmlslides.rb +1 -1
- data/lib/deplate/fmt/htmlwebsite.rb +1 -1
- data/lib/deplate/fmt/latex-dramatist.rb +175 -0
- data/lib/deplate/fmt/latex-snippet.rb +1 -1
- data/lib/deplate/fmt/latex.rb +132 -80
- data/lib/deplate/fmt/null.rb +1 -1
- data/lib/deplate/fmt/php.rb +1 -1
- data/lib/deplate/fmt/phpsite.rb +1 -1
- data/lib/deplate/fmt/plain.rb +16 -9
- data/lib/deplate/fmt/template.rb +1 -1
- data/lib/deplate/fmt/xhtml10t.rb +1 -1
- data/lib/deplate/formatter-snippet.rb +1 -1
- data/lib/deplate/formatter.rb +272 -81
- data/lib/deplate/guesslanguage.rb +57 -0
- data/lib/deplate/input.rb +205 -50
- data/lib/deplate/input/deplate-headings.rb +9 -11
- data/lib/deplate/input/deplate-restricted.rb +3 -23
- data/lib/deplate/input/deplate.rb +1 -1
- data/lib/deplate/input/play.rb +208 -0
- data/lib/deplate/input/rdoc.rb +37 -15
- data/lib/deplate/input/template.rb +6 -11
- data/lib/deplate/lib/Makefile.config +53 -4
- data/lib/deplate/lib/html/parbreak +3 -0
- data/lib/deplate/lib/javascript/StepwiseNextPage.js +8 -0
- data/lib/deplate/lib/javascript/StepwiseNextPage_confirm.js +8 -0
- data/lib/deplate/lib/latex/deplate.sty +36 -0
- data/lib/deplate/lib/latex/parbreak +6 -0
- data/lib/deplate/lib/php/page-comment.inc.php +5 -5
- data/lib/deplate/lib/plain/parbreak +6 -0
- data/lib/deplate/locale/de.latin1 +87 -15
- data/lib/deplate/locale/de.latin1_data +60 -0
- data/lib/deplate/locale/en.latin1_data +46 -0
- data/lib/deplate/locale/fr.latin1_data +74 -0
- data/lib/deplate/locale/ru.koi8-r_data +63 -0
- data/lib/deplate/locale/{zh_cn.gb2312 → zh_CN.GB2312} +0 -0
- data/lib/deplate/macros.rb +106 -32
- data/lib/deplate/messages.rb +22 -8
- data/lib/deplate/metadata.rb +1 -1
- data/lib/deplate/metadata/marshal.rb +1 -1
- data/lib/deplate/metadata/xml.rb +1 -1
- data/lib/deplate/metadata/yaml.rb +1 -1
- data/lib/deplate/mod/anyword.rb +4 -4
- data/lib/deplate/mod/babelfish.rb +1 -1
- data/lib/deplate/mod/code-gvim.rb +14 -8
- data/lib/deplate/mod/code-gvim71.rb +52 -0
- data/lib/deplate/mod/code-highlight.rb +35 -19
- data/lib/deplate/mod/colored-log.rb +1 -1
- data/lib/deplate/mod/endnotes.rb +1 -1
- data/lib/deplate/mod/guesslanguage.rb +75 -0
- data/lib/deplate/mod/html-asciimath.rb +1 -1
- data/lib/deplate/mod/html-deplate-button.rb +1 -1
- data/lib/deplate/mod/html-headings-navbar.rb +1 -1
- data/lib/deplate/mod/html-highstep.rb +43 -0
- data/lib/deplate/mod/html-jsmath.rb +1 -1
- data/lib/deplate/mod/html-obfuscate-email.rb +1 -1
- data/lib/deplate/mod/html-sidebar.rb +1 -1
- data/lib/deplate/mod/iconv.rb +1 -1
- data/lib/deplate/mod/imgurl.rb +1 -1
- data/lib/deplate/mod/inlatex-compound.rb +1 -1
- data/lib/deplate/mod/koma.rb +4 -4
- data/lib/deplate/mod/{de.rb → lang-de.rb} +1 -1
- data/lib/deplate/mod/{en.rb → lang-en.rb} +1 -1
- data/lib/deplate/mod/{ru_koi8-r.rb → lang-ru-koi8-r.rb} +1 -1
- data/lib/deplate/mod/lang-ru.rb +9 -0
- data/lib/deplate/mod/{zh-cn-autospace.rb → lang-zh_CN-autospace.rb} +3 -3
- data/lib/deplate/mod/{zh-cn.rb → lang-zh_CN.rb} +8 -8
- data/lib/deplate/mod/latex-emph-table-head.rb +1 -1
- data/lib/deplate/mod/latex-styles.rb +6 -6
- data/lib/deplate/mod/latex-verbatim-small.rb +1 -1
- data/lib/deplate/mod/linkmap.rb +128 -0
- data/lib/deplate/mod/makefile.rb +23 -22
- data/lib/deplate/mod/mark-external-urls.rb +13 -7
- data/lib/deplate/mod/markup-1-warn.rb +1 -1
- data/lib/deplate/mod/markup-1.rb +1 -1
- data/lib/deplate/mod/navbar-png.rb +5 -4
- data/lib/deplate/mod/noindent.rb +1 -1
- data/lib/deplate/mod/numpara.rb +1 -1
- data/lib/deplate/mod/particle-math.rb +1 -1
- data/lib/deplate/mod/php-extra.rb +1 -1
- data/lib/deplate/mod/pstoedit.rb +1 -1
- data/lib/deplate/mod/recode.rb +1 -1
- data/lib/deplate/mod/smart-dash.rb +1 -1
- data/lib/deplate/mod/smiley.rb +1 -1
- data/lib/deplate/mod/soffice.rb +1 -1
- data/lib/deplate/mod/symbols-latin1.rb +1 -1
- data/lib/deplate/mod/symbols-od-utf-8.rb +1 -1
- data/lib/deplate/mod/symbols-plain.rb +1 -1
- data/lib/deplate/mod/symbols-sgml.rb +1 -1
- data/lib/deplate/mod/symbols-utf-8.rb +1 -1
- data/lib/deplate/mod/symbols-xml.rb +1 -1
- data/lib/deplate/mod/syntax-region-alt.rb +1 -1
- data/lib/deplate/mod/utf8.rb +1 -1
- data/lib/deplate/mod/validate-html.rb +1 -1
- data/lib/deplate/mod/xmlrpc.rb +37 -36
- data/lib/deplate/nukumi2.rb +4 -4
- data/lib/deplate/once-method.rb +1 -1
- data/lib/deplate/output.rb +12 -4
- data/lib/deplate/particles.rb +52 -22
- data/lib/deplate/regions.rb +160 -90
- data/lib/deplate/skeletons.rb +4 -3
- data/lib/deplate/structured.rb +19 -13
- data/lib/deplate/template.rb +17 -9
- data/lib/deplate/templates/html-doc.html +8 -11
- data/lib/deplate/templates/html-tabbar-right.html +1 -1
- data/lib/deplate/templates/html-tabbar-top.html +3 -3
- data/lib/deplate/variables.rb +25 -9
- data/lib/deplate/wiki-markup.rb +14 -3
- data/lib/deplate/xml.rb +3 -4
- data/lib/deplate/{zh-cn.rb → zh_CN.rb} +16 -16
- data/man/man1/deplate.1 +80 -65
- metadata +72 -48
- data/lib/deplate/mod/fr.rb +0 -46
data/lib/deplate/fmt/null.rb
CHANGED
data/lib/deplate/fmt/php.rb
CHANGED
data/lib/deplate/fmt/phpsite.rb
CHANGED
data/lib/deplate/fmt/plain.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# fmt-html.rb
|
|
2
|
-
# @Author: Thomas Link (
|
|
2
|
+
# @Author: Thomas Link (micathom AT gmail com)
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
5
|
# @Created: 17-M�r-2004.
|
|
6
|
-
# @Last Change:
|
|
7
|
-
# @Revision: 0.
|
|
6
|
+
# @Last Change: 2007-09-28.
|
|
7
|
+
# @Revision: 0.3591
|
|
8
8
|
|
|
9
9
|
require "deplate/formatter"
|
|
10
10
|
|
|
@@ -23,6 +23,7 @@ class Deplate::Formatter::Plain < Deplate::Formatter
|
|
|
23
23
|
super
|
|
24
24
|
@color = deplate.variables['ansiColor'] && defined?(Deplate::Color)
|
|
25
25
|
@list_counter = {}
|
|
26
|
+
@references = {}
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def read_bib(bibfiles)
|
|
@@ -275,6 +276,9 @@ class Deplate::Formatter::Plain < Deplate::Formatter
|
|
|
275
276
|
if explicit or item.explicit and item.item
|
|
276
277
|
# and !item.item.empty?
|
|
277
278
|
i = item.item
|
|
279
|
+
elsif (itemize_markers = @deplate.variables['itemizeMarkers'])
|
|
280
|
+
itemize_markers = Deplate::Core.split_list(itemize_markers)
|
|
281
|
+
i = itemize_markers[(level % itemize_markers.size) - 1]
|
|
278
282
|
else
|
|
279
283
|
i = LIST_ITEMIZE_MARKERS[level % LIST_ITEMIZE_MARKERS_N]
|
|
280
284
|
end
|
|
@@ -372,15 +376,17 @@ class Deplate::Formatter::Plain < Deplate::Formatter
|
|
|
372
376
|
|
|
373
377
|
# <+TBD+> [1] + urls at the bottom
|
|
374
378
|
def format_url(invoker, name, dest, anchor, literal=false)
|
|
375
|
-
|
|
376
|
-
fn
|
|
377
|
-
|
|
378
|
-
|
|
379
|
+
hlink = Deplate::HyperLink.url_anchor(dest, anchor)
|
|
380
|
+
fn = @references[hlink]
|
|
381
|
+
unless fn
|
|
382
|
+
idx = @deplate.footnote_last_idx += 1
|
|
383
|
+
fn = "[#{idx}]"
|
|
384
|
+
@references[hlink] = fn
|
|
379
385
|
if @color
|
|
380
386
|
hlink = Deplate::Color.underline(hlink)
|
|
381
387
|
end
|
|
382
388
|
output_at(:body, :footnotes, %{#{fn} #{hlink}})
|
|
383
|
-
|
|
389
|
+
end
|
|
384
390
|
if name and !(name.empty?)
|
|
385
391
|
rv = [name, fn].join
|
|
386
392
|
else
|
|
@@ -435,7 +441,8 @@ class Deplate::Formatter::Plain < Deplate::Formatter
|
|
|
435
441
|
|
|
436
442
|
def format_ref(invoker)
|
|
437
443
|
prefix = invoker.args['prefix'] || ' '
|
|
438
|
-
|
|
444
|
+
text = (invoker.text && @deplate.labels[invoker.text]) || ''
|
|
445
|
+
prefix + text
|
|
439
446
|
end
|
|
440
447
|
|
|
441
448
|
def format_break(invoker)
|
data/lib/deplate/fmt/template.rb
CHANGED
data/lib/deplate/fmt/xhtml10t.rb
CHANGED
data/lib/deplate/formatter.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# formatter.rb
|
|
2
|
-
# @Author: Thomas Link (
|
|
2
|
+
# @Author: Thomas Link (micathom AT gmail com)
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
5
|
# @Created: 31-Okt-2004.
|
|
6
|
-
# @Last Change:
|
|
7
|
-
# @Revision: 0.
|
|
6
|
+
# @Last Change: 2007-10-21.
|
|
7
|
+
# @Revision: 0.1574
|
|
8
8
|
|
|
9
9
|
require 'deplate/abstract-class'
|
|
10
10
|
require 'deplate/common'
|
|
@@ -76,6 +76,54 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
|
+
|
|
80
|
+
def set_options_for_file(options, file=nil)
|
|
81
|
+
case file
|
|
82
|
+
when '-'
|
|
83
|
+
options.ext = ''
|
|
84
|
+
options.srcdir ||= Dir.pwd
|
|
85
|
+
options.out ||= '-'
|
|
86
|
+
else
|
|
87
|
+
options.suffix ||= self.suffix
|
|
88
|
+
unless file.nil?
|
|
89
|
+
options.ext = File.extname(file)
|
|
90
|
+
options.srcdir ||= File.dirname(file)
|
|
91
|
+
end
|
|
92
|
+
if options.out
|
|
93
|
+
options.out = Deplate::Core.file_join(options.dir, options.out)
|
|
94
|
+
# if options.out != '-'
|
|
95
|
+
# options.out = options.dir ? Deplate::Core.file_join(options.dir, options.out) : options.out
|
|
96
|
+
# end
|
|
97
|
+
elsif file.nil?
|
|
98
|
+
options.out = '-'
|
|
99
|
+
else
|
|
100
|
+
options.out = Deplate::Core.get_out_fullname(file, options.suffix, options)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
options
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def formatter_family_members(args={})
|
|
107
|
+
acc = []
|
|
108
|
+
formatter_names = args[:names] || []
|
|
109
|
+
formatter_class = fmt = self
|
|
110
|
+
myname = fmt.myname
|
|
111
|
+
while myname
|
|
112
|
+
acc << myname
|
|
113
|
+
yield(myname) if block_given?
|
|
114
|
+
fmt = fmt.superclass
|
|
115
|
+
myname = fmt.myname
|
|
116
|
+
end
|
|
117
|
+
(formatter_class.related + formatter_names).each do |myname|
|
|
118
|
+
acc << myname
|
|
119
|
+
yield(myname) if block_given?
|
|
120
|
+
end
|
|
121
|
+
acc
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def formatter_related?(name)
|
|
125
|
+
formatter_family_members.include?(name)
|
|
126
|
+
end
|
|
79
127
|
end
|
|
80
128
|
|
|
81
129
|
@@custom_particles = {}
|
|
@@ -99,11 +147,29 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
99
147
|
reset!
|
|
100
148
|
end
|
|
101
149
|
|
|
150
|
+
def formatter_related?(name)
|
|
151
|
+
self.class.formatter_related?(name)
|
|
152
|
+
end
|
|
153
|
+
|
|
102
154
|
def reset!
|
|
103
155
|
@bibentries = {}
|
|
104
156
|
@open_labels = []
|
|
105
|
-
@consumed_labels = []
|
|
106
|
-
@consumed_ids = []
|
|
157
|
+
# @consumed_labels = []
|
|
158
|
+
# @consumed_ids = []
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def consumed_labels
|
|
162
|
+
@deplate.output.attributes[:consumed_labels]
|
|
163
|
+
end
|
|
164
|
+
def consumed_labels=(arg)
|
|
165
|
+
@deplate.output.attributes[:consumed_labels] = arg
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def consumed_ids
|
|
169
|
+
@deplate.output.attributes[:consumed_ids]
|
|
170
|
+
end
|
|
171
|
+
def consumed_ids=(arg)
|
|
172
|
+
@deplate.output.attributes[:consumed_ids] = arg
|
|
107
173
|
end
|
|
108
174
|
|
|
109
175
|
def retrieve_particle(id, body=nil, specific=false)
|
|
@@ -164,8 +230,8 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
164
230
|
log(['Calling service failed', name, e], :error)
|
|
165
231
|
end
|
|
166
232
|
else
|
|
167
|
-
p "DBG"
|
|
168
|
-
puts @doc_services.keys.sort.join("\n")
|
|
233
|
+
# p "DBG"
|
|
234
|
+
# puts @doc_services.keys.sort.join("\n")
|
|
169
235
|
log(['Unknown service', name], :error)
|
|
170
236
|
end
|
|
171
237
|
end
|
|
@@ -274,9 +340,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
274
340
|
begin
|
|
275
341
|
inner = self.send(agent, *args)
|
|
276
342
|
rescue Exception => e
|
|
277
|
-
|
|
343
|
+
log("We shouldn't be here. If you can track down when this happens, please send an example to the author.", :error)
|
|
344
|
+
puts "DBG: #{agent}: #{e}"
|
|
278
345
|
puts e.backtrace[0..10].join("\n")
|
|
279
|
-
raise e
|
|
346
|
+
# raise e
|
|
347
|
+
return nil
|
|
280
348
|
end
|
|
281
349
|
prototype ||= inner.class
|
|
282
350
|
end
|
|
@@ -292,7 +360,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
292
360
|
# return rv
|
|
293
361
|
return inner
|
|
294
362
|
else
|
|
295
|
-
invoker.log([
|
|
363
|
+
invoker.log(['Unknown formatting agent', agent], :error)
|
|
296
364
|
return nil
|
|
297
365
|
end
|
|
298
366
|
end
|
|
@@ -448,7 +516,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
448
516
|
end
|
|
449
517
|
|
|
450
518
|
def encode_id(id)
|
|
451
|
-
id ? Deplate::Core.
|
|
519
|
+
id ? Deplate::Core.clean_name(id) : id
|
|
452
520
|
end
|
|
453
521
|
|
|
454
522
|
def label_mode
|
|
@@ -485,12 +553,15 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
485
553
|
end
|
|
486
554
|
|
|
487
555
|
def matches?(text)
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
556
|
+
self.class.formatter_family_members.any? do |fmtname|
|
|
557
|
+
fmt = @deplate.get_formatter_class(fmtname)
|
|
558
|
+
if text[0..0] == '~'
|
|
559
|
+
rv = (fmt.myname =~ Regexp.new(text[1..-1]))
|
|
560
|
+
else
|
|
561
|
+
rv = (text =~ fmt.rx)
|
|
562
|
+
end
|
|
563
|
+
return rv ? true : false
|
|
492
564
|
end
|
|
493
|
-
return rv ? true : false
|
|
494
565
|
end
|
|
495
566
|
|
|
496
567
|
def format_GET(invoker)
|
|
@@ -533,7 +604,21 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
533
604
|
def format_PAGEBREAK(invoker)
|
|
534
605
|
format_pagebreak(invoker, nil, true)
|
|
535
606
|
end
|
|
536
|
-
|
|
607
|
+
|
|
608
|
+
def format_CAST(invoker)
|
|
609
|
+
return ''
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
def format_ACT(invoker)
|
|
613
|
+
return ''
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
def format_direct(invoker, text=nil)
|
|
617
|
+
# invoker.push_styles(['emphasized'])
|
|
618
|
+
invoker.push_styles(['play-direct'])
|
|
619
|
+
"(%s)" % (text || invoker.elt || invoker.text)
|
|
620
|
+
end
|
|
621
|
+
|
|
537
622
|
def fill_in_template(invoker)
|
|
538
623
|
invoker.elt
|
|
539
624
|
end
|
|
@@ -542,11 +627,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
542
627
|
end
|
|
543
628
|
|
|
544
629
|
def bib_entry(key)
|
|
545
|
-
b = @bibentries[key] ||
|
|
546
|
-
crossref = b
|
|
630
|
+
b = @bibentries[key] || {}
|
|
631
|
+
crossref = b['crossref']
|
|
547
632
|
if crossref
|
|
548
|
-
cb = @bibentries[crossref
|
|
549
|
-
b
|
|
633
|
+
cb = @bibentries[crossref]
|
|
634
|
+
b.update(cb) {|k, o, n| o} if cb
|
|
550
635
|
end
|
|
551
636
|
return b
|
|
552
637
|
end
|
|
@@ -597,7 +682,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
597
682
|
def_abstract :format_index, :format_footnote, :format_ref,
|
|
598
683
|
:format_linebreak, :format_subscript, :format_superscript, :format_stacked,
|
|
599
684
|
:format_pagenumber
|
|
600
|
-
|
|
685
|
+
|
|
686
|
+
def format_region(invoker)
|
|
687
|
+
invoker.elt.strip
|
|
688
|
+
end
|
|
689
|
+
|
|
601
690
|
def format_cite(invoker)
|
|
602
691
|
bib_styler.bib_cite(invoker)
|
|
603
692
|
end
|
|
@@ -661,6 +750,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
661
750
|
rx = /\s+/
|
|
662
751
|
end
|
|
663
752
|
text.each do |text|
|
|
753
|
+
if text.kind_of?(Array)
|
|
754
|
+
log("We shouldn't be here. If you can track down when this happens, please send an example to the author.", :error)
|
|
755
|
+
puts caller[0..10].join("\n")
|
|
756
|
+
return ''
|
|
757
|
+
end
|
|
664
758
|
m = /^(\s*)(.*)$/.match(text)
|
|
665
759
|
idt = m[1] + moreIndent
|
|
666
760
|
accum = [m[1]]
|
|
@@ -671,7 +765,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
671
765
|
this, rest = break_line(rest, rx, imx, block)
|
|
672
766
|
accum << this
|
|
673
767
|
if rest
|
|
674
|
-
accum << "\n"
|
|
768
|
+
accum << " \n"
|
|
675
769
|
accum << idt
|
|
676
770
|
accum << hang_idt if hang_idt
|
|
677
771
|
end
|
|
@@ -714,8 +808,8 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
714
808
|
# Format the Inlatex region
|
|
715
809
|
def format_inlatex(invoker)
|
|
716
810
|
args = invoker.args
|
|
717
|
-
inline = args[
|
|
718
|
-
args[
|
|
811
|
+
inline = args['inline']
|
|
812
|
+
args['h'] ||= (args['inlineLatexHeight'] || args['inlatexHeight']) if inline
|
|
719
813
|
acc = []
|
|
720
814
|
elt = invoker.elt
|
|
721
815
|
if elt
|
|
@@ -732,9 +826,9 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
732
826
|
def format_ltx(invoker, other_args={})
|
|
733
827
|
args = invoker.args
|
|
734
828
|
acc = []
|
|
735
|
-
args[
|
|
736
|
-
args[
|
|
737
|
-
args[
|
|
829
|
+
args['h'] ||= (args['inlineLatexHeight'] || other_args['h'])
|
|
830
|
+
args['alt'] ||= invoker.text
|
|
831
|
+
args['style'] = 'latex'
|
|
738
832
|
inlatex = invoker.elt
|
|
739
833
|
if !inlatex or inlatex.empty?
|
|
740
834
|
acc << invoker.text
|
|
@@ -755,27 +849,30 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
755
849
|
def inlatex(invoker)
|
|
756
850
|
pkgs, body = inlatex_split(invoker.accum)
|
|
757
851
|
id = inlatex_id(invoker)
|
|
758
|
-
sfx = invoker.args[
|
|
852
|
+
sfx = invoker.args['sfx'] || @deplate.variables['ltxSfx'] || inlatex_sfx
|
|
759
853
|
currDir = Dir.pwd
|
|
760
854
|
@deplate.in_working_dir do
|
|
761
|
-
ftex = id +
|
|
762
|
-
flog = id +
|
|
763
|
-
faux = id +
|
|
764
|
-
fdvi = id +
|
|
765
|
-
fps = id +
|
|
855
|
+
ftex = id + '.tex'
|
|
856
|
+
flog = id + '.log'
|
|
857
|
+
faux = id + '.aux'
|
|
858
|
+
fdvi = id + '.dvi'
|
|
859
|
+
fps = id + '.ps'
|
|
766
860
|
checkOW = true
|
|
767
861
|
|
|
768
862
|
case sfx
|
|
769
|
-
when
|
|
863
|
+
when 'ps'
|
|
770
864
|
device = nil
|
|
771
865
|
fout = fps
|
|
772
866
|
checkOW = false
|
|
773
|
-
when
|
|
774
|
-
device =
|
|
775
|
-
fout = id +
|
|
776
|
-
when
|
|
777
|
-
device =
|
|
778
|
-
fout = id +
|
|
867
|
+
when 'pdf'
|
|
868
|
+
device = 'pdfwrite'
|
|
869
|
+
fout = id + '.*.pdf'
|
|
870
|
+
when 'jpeg', 'jpg'
|
|
871
|
+
device = 'jpeg'
|
|
872
|
+
fout = id + '.*.jpeg'
|
|
873
|
+
when "png"
|
|
874
|
+
device = "png"
|
|
875
|
+
fout = id + ".png"
|
|
779
876
|
else
|
|
780
877
|
raise "Unknown device/suffix: #{sfx}"
|
|
781
878
|
end
|
|
@@ -787,6 +884,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
787
884
|
"\\usepackage{amsmath}",
|
|
788
885
|
"\\usepackage{amsfonts}",
|
|
789
886
|
"\\usepackage{amssymb}",
|
|
887
|
+
# "\\usepackage{mathabx}",
|
|
790
888
|
]
|
|
791
889
|
acc += pkgs
|
|
792
890
|
acc << "\\begin{document}" << "\\pagestyle{empty}"
|
|
@@ -794,7 +892,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
794
892
|
acc << "\\end{document}"
|
|
795
893
|
|
|
796
894
|
if Deplate::Region.check_file(invoker, fout, ftex, acc)
|
|
797
|
-
invoker.log([
|
|
895
|
+
invoker.log(['Files exist! Using', fout], :anyway)
|
|
798
896
|
else
|
|
799
897
|
if checkOW and !@deplate.options.force
|
|
800
898
|
for f in [ftex, flog, faux, fdvi, fout]
|
|
@@ -811,11 +909,16 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
811
909
|
if block_given?
|
|
812
910
|
yield(invoker, device, fdvi, fps, fout)
|
|
813
911
|
else
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
912
|
+
case device
|
|
913
|
+
when "png"
|
|
914
|
+
inlatex_process_dvi_png(invoker, fdvi, fout) if File.exist?(fdvi)
|
|
915
|
+
else
|
|
916
|
+
inlatex_process_dvi(invoker, fdvi, fps) if File.exist?(fdvi)
|
|
917
|
+
if device
|
|
918
|
+
inlatex_process_ps(invoker, device, fps, fout, invoker.args)
|
|
919
|
+
elsif fps != fout
|
|
920
|
+
File.rename(fps, fout)
|
|
921
|
+
end
|
|
819
922
|
end
|
|
820
923
|
end
|
|
821
924
|
end
|
|
@@ -848,6 +951,10 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
848
951
|
dvi2ps(invoker, fdvi, fps)
|
|
849
952
|
end
|
|
850
953
|
|
|
954
|
+
def inlatex_process_dvi_png(invoker, fdvi, fout)
|
|
955
|
+
dvi2png(invoker, fdvi, fout)
|
|
956
|
+
end
|
|
957
|
+
|
|
851
958
|
def inlatex_process_ps(invoker, device, fps, fout, args)
|
|
852
959
|
ps2img(invoker, device, fps, fout, args) if File.exist?(fps)
|
|
853
960
|
end
|
|
@@ -913,6 +1020,13 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
913
1020
|
end
|
|
914
1021
|
end
|
|
915
1022
|
|
|
1023
|
+
def dvi2png(invoker, fdvi, fout, other_options=nil)
|
|
1024
|
+
if Deplate::External.dvi2png(invoker, fdvi, fout, other_options) and @deplate.options.clean
|
|
1025
|
+
File.delete(fdvi) if @deplate.options.clean
|
|
1026
|
+
invoker.log(["Deleting", fdvi])
|
|
1027
|
+
end
|
|
1028
|
+
end
|
|
1029
|
+
|
|
916
1030
|
def ps2img(invoker, device, fps, fout, args)
|
|
917
1031
|
if Deplate::External.ps2img(invoker, device, fps, fout, args) and @deplate.options.clean
|
|
918
1032
|
File.delete(fps)
|
|
@@ -1006,6 +1120,15 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1006
1120
|
# end
|
|
1007
1121
|
# end
|
|
1008
1122
|
|
|
1123
|
+
def stepwise_prepare
|
|
1124
|
+
# @deplate.output.attributes[:stepwiseIdx] ||= 0
|
|
1125
|
+
end
|
|
1126
|
+
|
|
1127
|
+
def stepwise_next
|
|
1128
|
+
stepwise_prepare
|
|
1129
|
+
@deplate.output.attributes[:stepwiseIdx] += 1
|
|
1130
|
+
end
|
|
1131
|
+
|
|
1009
1132
|
|
|
1010
1133
|
private
|
|
1011
1134
|
def initialize_services
|
|
@@ -1104,11 +1227,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1104
1227
|
def consume_label(label, warn=false)
|
|
1105
1228
|
if !label
|
|
1106
1229
|
return false
|
|
1107
|
-
elsif
|
|
1230
|
+
elsif consumed_labels.include?(label)
|
|
1108
1231
|
log(['Duplicate label'], label, :error) if warn
|
|
1109
1232
|
return false
|
|
1110
1233
|
else
|
|
1111
|
-
|
|
1234
|
+
consumed_labels << label
|
|
1112
1235
|
return true
|
|
1113
1236
|
end
|
|
1114
1237
|
end
|
|
@@ -1129,7 +1252,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1129
1252
|
args ||= {}
|
|
1130
1253
|
labels = labels ? labels.dup : []
|
|
1131
1254
|
id = use_id(args, opts)
|
|
1132
|
-
l = args[
|
|
1255
|
+
l = args['label']
|
|
1133
1256
|
labels << l if l
|
|
1134
1257
|
# i = opts[:invoker]
|
|
1135
1258
|
# if i
|
|
@@ -1140,11 +1263,11 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1140
1263
|
elsif id
|
|
1141
1264
|
labels.delete(id)
|
|
1142
1265
|
end
|
|
1143
|
-
labels.delete_if {|e|
|
|
1266
|
+
labels.delete_if {|e| consumed_labels.include?(e)}
|
|
1144
1267
|
labels.flatten!
|
|
1145
1268
|
labels.compact!
|
|
1146
1269
|
labels.uniq!
|
|
1147
|
-
|
|
1270
|
+
self.consumed_labels += labels unless labels.empty?
|
|
1148
1271
|
return labels
|
|
1149
1272
|
end
|
|
1150
1273
|
|
|
@@ -1164,7 +1287,7 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1164
1287
|
if kw.kind_of?(Array)
|
|
1165
1288
|
kw
|
|
1166
1289
|
elsif kw.kind_of?(String)
|
|
1167
|
-
|
|
1290
|
+
Deplate::Core.split_list(kw, ';', ',')
|
|
1168
1291
|
elsif kw
|
|
1169
1292
|
log(["Shouldn't be here", kw, kw.class], :error)
|
|
1170
1293
|
else
|
|
@@ -1177,14 +1300,14 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1177
1300
|
def build_plain_text_rx
|
|
1178
1301
|
@plain_text_rx = Regexp.new('(%s)' % @special_symbols.keys.collect {|x| Regexp.escape(x)}.join('|'))
|
|
1179
1302
|
end
|
|
1180
|
-
|
|
1303
|
+
|
|
1181
1304
|
|
|
1182
1305
|
################################################ Bibliography {{{1
|
|
1183
1306
|
def bib_styler
|
|
1184
1307
|
style = @deplate.variables['bibStyle']
|
|
1185
1308
|
@deplate.bib_styler(style)
|
|
1186
1309
|
end
|
|
1187
|
-
|
|
1310
|
+
|
|
1188
1311
|
def simple_bibtex_reader(bibfiles)
|
|
1189
1312
|
acc = []
|
|
1190
1313
|
for b in bibfiles
|
|
@@ -1197,41 +1320,109 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1197
1320
|
end
|
|
1198
1321
|
File.open(b) {|io| acc << io.read}
|
|
1199
1322
|
end
|
|
1323
|
+
text = acc.join("\n")
|
|
1324
|
+
@configuration = self
|
|
1325
|
+
@crossreferenced = []
|
|
1326
|
+
entries, prelude = simple_bibtex_parser(text)
|
|
1327
|
+
@bibentries.update(entries)
|
|
1328
|
+
end
|
|
1329
|
+
|
|
1330
|
+
def simple_bibtex_parser(text, strings_expansion=true)
|
|
1331
|
+
prelude = []
|
|
1200
1332
|
strings = {}
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1333
|
+
entries = {}
|
|
1334
|
+
lineno = 1
|
|
1335
|
+
# m = /^\s*(@(\w+)\{(.*?)\})\s*(?=(^@|\z))/m.match(text)
|
|
1336
|
+
while (m = /^\s*(@(\w+)\{(.*?))\s*(?=(^@|\z))/m.match(text))
|
|
1337
|
+
text = m.post_match
|
|
1338
|
+
body = m[0]
|
|
1339
|
+
type = m[2]
|
|
1340
|
+
inner = m[3]
|
|
1341
|
+
case type.downcase
|
|
1342
|
+
when 'string'
|
|
1343
|
+
prelude << body
|
|
1344
|
+
mi = /^\s*(\S+?)\s*=\s*(.+?)\s*\}?\s*$/m.match(inner)
|
|
1345
|
+
r = mi[2]
|
|
1206
1346
|
if r =~ /^(".*?"|'.*?'|\{.*?\})$/
|
|
1207
1347
|
r = r[1..-2]
|
|
1208
1348
|
end
|
|
1209
|
-
strings[
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
arr
|
|
1218
|
-
|
|
1219
|
-
n = /^\s*\{(.*?)\}\s*($|\}\s*\z)/m.match(val)
|
|
1220
|
-
if n
|
|
1349
|
+
strings[mi[1]] = r
|
|
1350
|
+
else
|
|
1351
|
+
mi = /^\s*(\S+?)\s*,(.*)$/m.match(inner)
|
|
1352
|
+
id = mi[1]
|
|
1353
|
+
e = mi[2]
|
|
1354
|
+
# arr = e.scan(/^\s*(\w+)\s*=\s*(\{.*?\}|\d+)\s*[,}]\s*$/m)
|
|
1355
|
+
arr = e.scan(/^\s*(\w+)\s*=\s*(\{.*?\}|".*?"|\d+)\s*[,}]\s*$/m)
|
|
1356
|
+
entry = {}
|
|
1357
|
+
arr.each do |var, val, rest|
|
|
1358
|
+
# EXPERIMENTAL: something like author={{Top Institute}} didn't work. I'm not sure though if this is able to deal with the last field in a bibtex entry correctly
|
|
1359
|
+
# n = /^\s*\{(.*?)\}\s*($|\}\s*\z)/m.match(val)
|
|
1360
|
+
if (n = /^\s*\{(.*?)\}\s*$/m.match(val))
|
|
1361
|
+
val = n[1]
|
|
1362
|
+
elsif (n = /^\s*"(.*?)"\s*$/m.match(val))
|
|
1221
1363
|
val = n[1]
|
|
1222
1364
|
end
|
|
1223
|
-
if strings[val]
|
|
1365
|
+
if strings_expansion and strings[val]
|
|
1224
1366
|
val = strings[val]
|
|
1225
1367
|
end
|
|
1226
|
-
[var
|
|
1368
|
+
if (oldval = entry[var])
|
|
1369
|
+
if oldval != val
|
|
1370
|
+
meth = "duplicate_field_#{var}"
|
|
1371
|
+
if @configuration.respond_to?(meth)
|
|
1372
|
+
$stderr.puts "Resolve duplicate fields with mismatching values: #{id}.#{var}" if $VERBOSE
|
|
1373
|
+
val = @configuration.send(meth, oldval, val)
|
|
1374
|
+
else
|
|
1375
|
+
$stderr.puts "Cannot resolve duplicate fields with mismatching values: #{id}.#{var}"
|
|
1376
|
+
end
|
|
1377
|
+
end
|
|
1378
|
+
end
|
|
1379
|
+
entry[var] = val
|
|
1380
|
+
case var
|
|
1381
|
+
when 'crossref'
|
|
1382
|
+
@crossreferenced << val
|
|
1383
|
+
end
|
|
1384
|
+
end
|
|
1385
|
+
entry['_lineno'] = lineno.to_s
|
|
1386
|
+
entry['_type'] = type
|
|
1387
|
+
entry['_id'] = id
|
|
1388
|
+
entry['_entry'] = body
|
|
1389
|
+
if entries[id]
|
|
1390
|
+
if entries[id] != entry
|
|
1391
|
+
$stderr.puts "Duplicate key, mismatching entries: #{id}"
|
|
1392
|
+
if $DEBUG
|
|
1393
|
+
$stderr.puts entries[id]['_entry'].chomp
|
|
1394
|
+
$stderr.puts '<=>'
|
|
1395
|
+
$stderr.puts entry['_entry'].chomp
|
|
1396
|
+
$stderr.puts
|
|
1397
|
+
end
|
|
1398
|
+
end
|
|
1399
|
+
entries[id].update(entry)
|
|
1400
|
+
else
|
|
1401
|
+
entries[id] = entry
|
|
1227
1402
|
end
|
|
1228
|
-
arr << ['@type', m[2]] << ['@id', id]
|
|
1229
|
-
@bibentries[id] = arr
|
|
1230
|
-
acc = m.post_match
|
|
1231
|
-
else
|
|
1232
|
-
break
|
|
1233
1403
|
end
|
|
1404
|
+
lineno += (m.pre_match.scan(/\n/).size + body.scan(/\n/).size)
|
|
1405
|
+
end
|
|
1406
|
+
if text =~ /\S/
|
|
1407
|
+
$stderr.puts "Trash in bibtex input: #{text}" if $VERBOSE
|
|
1234
1408
|
end
|
|
1409
|
+
return entries, prelude.join
|
|
1410
|
+
end
|
|
1411
|
+
|
|
1412
|
+
def duplicate_field_author(oldval, val)
|
|
1413
|
+
[oldval, val].join(' and ')
|
|
1414
|
+
end
|
|
1415
|
+
|
|
1416
|
+
def duplicate_field_abstract(oldval, val)
|
|
1417
|
+
[oldval, val].join("\n")
|
|
1418
|
+
end
|
|
1419
|
+
|
|
1420
|
+
def duplicate_field_url(oldval, val)
|
|
1421
|
+
[oldval, val].join(' ')
|
|
1422
|
+
end
|
|
1423
|
+
|
|
1424
|
+
def duplicate_field_keywords(oldval, val)
|
|
1425
|
+
(oldval.split(/[;,]\s*/) | val.split(/[;,]\s*/)).join(', ')
|
|
1235
1426
|
end
|
|
1236
1427
|
|
|
1237
1428
|
def cited_keys
|
|
@@ -1266,8 +1457,8 @@ class Deplate::Formatter < Deplate::CommonObject
|
|
|
1266
1457
|
return @deplate.parse_and_format_without_wikinames(invoker, text)
|
|
1267
1458
|
end
|
|
1268
1459
|
|
|
1269
|
-
def simple_latex_reformat(text)
|
|
1270
|
-
text.gsub!(/^\{(.*)\}$/, "\\1")
|
|
1460
|
+
def simple_latex_reformat(text, remove_brackets=false)
|
|
1461
|
+
text.gsub!(/^\{(.*)\}$/, "\\1") if remove_brackets
|
|
1271
1462
|
text.gsub!(/\s+/m, " ")
|
|
1272
1463
|
text.gsub!(/``/, %{"})
|
|
1273
1464
|
text.gsub!(/''/, %{"})
|