deplate 0.8 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- 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/common.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# common.rb -- The base class for deplate building blocks
|
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: 02-Aug-2004.
|
6
|
-
# @Last Change:
|
7
|
-
# @Revision: 0.
|
6
|
+
# @Last Change: 2007-09-30.
|
7
|
+
# @Revision: 0.896
|
8
8
|
#
|
9
9
|
# = Description:
|
10
10
|
# Misc classes
|
@@ -40,7 +40,21 @@ module Deplate::CommonGround
|
|
40
40
|
@deplate = deplate
|
41
41
|
# @args = {:class => self.class, :self => self, :deplate => deplate}
|
42
42
|
@args = args[:args] || {:self => self, :deplate => deplate}
|
43
|
+
if (cn = self.class.name)
|
44
|
+
cn = cn.split(/::/)
|
45
|
+
if cn[0] == 'Deplate'
|
46
|
+
acc = []
|
47
|
+
cn[-2..-1].each do |cnpart|
|
48
|
+
acc << cnpart
|
49
|
+
globalargs = @deplate.variables["$#{acc.join}"]
|
50
|
+
if globalargs
|
51
|
+
@args.merge!(globalargs) {|k,o,n| o}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
43
56
|
self.level_as_string = args[:level_as_string] || deplate.get_current_heading
|
57
|
+
@heading = deplate.current_heading_element
|
44
58
|
@level_as_list = args[:level_as_string] || deplate.current_heading.dup
|
45
59
|
@elt = args[:elt] || nil
|
46
60
|
@text = args[:text] || nil
|
@@ -63,17 +77,34 @@ module Deplate::CommonGround
|
|
63
77
|
return nil
|
64
78
|
end
|
65
79
|
end
|
66
|
-
|
80
|
+
|
81
|
+
def top_container
|
82
|
+
c = container
|
83
|
+
return c && c.top_heading
|
84
|
+
end
|
85
|
+
|
86
|
+
def heading_level
|
87
|
+
@heading && @heading.level_as_string
|
88
|
+
end
|
89
|
+
|
67
90
|
def update_args(opts={})
|
68
91
|
update_styles
|
69
92
|
update_id(opts)
|
70
93
|
end
|
71
94
|
|
72
95
|
def update_styles(styles=nil)
|
73
|
-
styles ||= @args['style']
|
96
|
+
styles ||= @args['style'] || []
|
74
97
|
case styles
|
75
98
|
when String
|
76
|
-
styles =
|
99
|
+
styles = Deplate::Core.split_list(styles, ',', ';', @source)
|
100
|
+
end
|
101
|
+
if @deplate.variables['styledTags']
|
102
|
+
tags = @args['tag']
|
103
|
+
if tags
|
104
|
+
tags = Deplate::Core.split_list(tags, ',', nil, @source)
|
105
|
+
tags.map! {|t| "TAG#{t}"}
|
106
|
+
styles += tags
|
107
|
+
end
|
77
108
|
end
|
78
109
|
if styles and !styles.empty?
|
79
110
|
@styles += styles
|
@@ -93,7 +124,16 @@ module Deplate::CommonGround
|
|
93
124
|
end
|
94
125
|
end
|
95
126
|
end
|
96
|
-
|
127
|
+
|
128
|
+
def tagged_as?(*tag)
|
129
|
+
tags = @args['tag']
|
130
|
+
if tags
|
131
|
+
tags = Deplate::Core.split_list(tags, ',', nil, @source)
|
132
|
+
return tags.any? {|t| tag.include?(t)}
|
133
|
+
end
|
134
|
+
false
|
135
|
+
end
|
136
|
+
|
97
137
|
def get_explicit_id(args=@args)
|
98
138
|
args[:id] || args['id']
|
99
139
|
end
|
@@ -279,6 +319,20 @@ module Deplate::CommonGround
|
|
279
319
|
text
|
280
320
|
end
|
281
321
|
module_function :post_process_text
|
322
|
+
|
323
|
+
def filter_template(template, vars=nil, args={})
|
324
|
+
d = args[:deplate] ||@deplate
|
325
|
+
v = vars || d.variables
|
326
|
+
s = args[:source] || @source
|
327
|
+
c = args[:container] || @container || self
|
328
|
+
t = Deplate::Template.new(:template => template,
|
329
|
+
:source => s,
|
330
|
+
:container => c)
|
331
|
+
Deplate::Define.let_variables(d, v) do
|
332
|
+
t = t.fill_in(d, :source => s)
|
333
|
+
end
|
334
|
+
t
|
335
|
+
end
|
282
336
|
end
|
283
337
|
|
284
338
|
|
@@ -314,6 +368,8 @@ module Deplate::CommonElement
|
|
314
368
|
attr_accessor :top_heading
|
315
369
|
#### accumulated lines
|
316
370
|
attr_accessor :accum
|
371
|
+
attr_reader :regNote
|
372
|
+
attr_accessor :indent
|
317
373
|
|
318
374
|
def format_as_string
|
319
375
|
klass = self.class
|
@@ -475,6 +531,36 @@ class Deplate::Base < Deplate::CommonObject
|
|
475
531
|
self.class.label_mode
|
476
532
|
end
|
477
533
|
|
534
|
+
def pop(array)
|
535
|
+
array.pop
|
536
|
+
end
|
537
|
+
|
538
|
+
def exclude?(filter, container=nil)
|
539
|
+
unless filter
|
540
|
+
return false
|
541
|
+
end
|
542
|
+
tags = @args['tag'] || 'any'
|
543
|
+
taglist = Deplate::Core.split_list(tags)
|
544
|
+
if container and (tags = @container.args['tag'])
|
545
|
+
taglist += Deplate::Core.split_list(tags)
|
546
|
+
end
|
547
|
+
if (globaltags = @deplate.variables['tag'])
|
548
|
+
taglist += Deplate::Core.split_list(globaltags)
|
549
|
+
end
|
550
|
+
Deplate::Core.split_list(filter).each do |ftag|
|
551
|
+
if ftag == 'any' and taglist.empty?
|
552
|
+
return false
|
553
|
+
else
|
554
|
+
taglist.each do |tag|
|
555
|
+
if ftag == tag
|
556
|
+
return false
|
557
|
+
end
|
558
|
+
end
|
559
|
+
end
|
560
|
+
end
|
561
|
+
return true
|
562
|
+
end
|
563
|
+
|
478
564
|
class_attribute :formatter
|
479
565
|
class_attribute :formatter2
|
480
566
|
class_attribute :rx
|
data/lib/deplate/converter.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# converter.rb
|
3
|
-
# @Author: Thomas Link (
|
3
|
+
# @Author: Thomas Link (micathom AT gmail com)
|
4
4
|
# @Website: http://deplate.sf.net/
|
5
5
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
6
6
|
# @Created: 14-Okt-2004.
|
7
|
-
# @Last Change:
|
8
|
-
# @Revision: 0.
|
7
|
+
# @Last Change: 2007-09-01.
|
8
|
+
# @Revision: 0.145
|
9
9
|
#
|
10
10
|
# = Description
|
11
11
|
# = Usage
|
@@ -79,10 +79,16 @@ end
|
|
79
79
|
|
80
80
|
# if __FILE__ == $0
|
81
81
|
# t = <<EOF
|
82
|
+
# #DefCmd id=FOO <<
|
83
|
+
# FOO {arg: @body} FOO
|
84
|
+
#
|
82
85
|
# * Introduction
|
83
86
|
#
|
84
87
|
# ''deplate'' is a tool for converting wiki-like markup to latex, html, or
|
85
88
|
# "html-slides".
|
89
|
+
#
|
90
|
+
# #FOO: bla bla
|
91
|
+
#
|
86
92
|
# EOF
|
87
93
|
# to_html = Deplate::Converter.new
|
88
94
|
# to_latex = Deplate::Converter.new("latex")
|
@@ -102,4 +108,4 @@ end
|
|
102
108
|
# puts "----------------------------------------------------------------"
|
103
109
|
#
|
104
110
|
# end
|
105
|
-
#
|
111
|
+
#
|
data/lib/deplate/core.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# core.rb -- Convert wiki-like plain text pseudo markup to something else
|
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: 24-Feb-2004.
|
6
|
-
# @Last Change:
|
6
|
+
# @Last Change: 2007-10-21.
|
7
7
|
|
8
8
|
require 'uri'
|
9
9
|
require 'optparse'
|
@@ -26,10 +26,10 @@ module Deplate; end
|
|
26
26
|
class Deplate::Core
|
27
27
|
extend Forwardable
|
28
28
|
|
29
|
-
Version = '0.8'
|
29
|
+
Version = '0.8.1'
|
30
30
|
# VersionSfx = 'a'
|
31
31
|
VersionSfx = 'final'
|
32
|
-
MicroRev = '
|
32
|
+
MicroRev = '2965'
|
33
33
|
|
34
34
|
if ENV['HOME']
|
35
35
|
CfgDir = File.join(ENV['HOME'].gsub(/\\/, '/'), '.deplate')
|
@@ -43,7 +43,7 @@ class Deplate::Core
|
|
43
43
|
end
|
44
44
|
# CfgDir = File.join(Dir.pwd.gsub(/\\/, '/'), 'deplate.rc')
|
45
45
|
puts <<MESSAGE
|
46
|
-
|
46
|
+
Cannot find your personal configuration directory. Neither HOME nor
|
47
47
|
USERPROFILE is set. I will look for configuration files in:
|
48
48
|
#{CfgDir}
|
49
49
|
MESSAGE
|
@@ -107,6 +107,7 @@ MESSAGE
|
|
107
107
|
:user_packages => 20,
|
108
108
|
:head => 30,
|
109
109
|
:head_meta => 31,
|
110
|
+
:meta => 31,
|
110
111
|
:head_identifier => 32,
|
111
112
|
:head_title => 33,
|
112
113
|
:head_extra => 34,
|
@@ -170,8 +171,9 @@ MESSAGE
|
|
170
171
|
# arguments, sets up a Deplate::Core object, and makes it convert the
|
171
172
|
# input files.
|
172
173
|
def deplate(args=ARGV)
|
174
|
+
log(['Configuration directory', CfgDir], :debug)
|
173
175
|
if ENV['DeplateOptions']
|
174
|
-
for keyval in ENV['DeplateOptions']
|
176
|
+
for keyval in Deplate::Core.split_list(ENV['DeplateOptions'], ';')
|
175
177
|
key, val = keyval.split(/\s*=\s*/)
|
176
178
|
case key
|
177
179
|
when 'vanilla'
|
@@ -199,7 +201,7 @@ MESSAGE
|
|
199
201
|
|
200
202
|
opts.on('-A', '--allow ALLOW',
|
201
203
|
'Allow certain things: l, r, t, w, W, x, X, $') do |string|
|
202
|
-
allow(options.allow, string)
|
204
|
+
allow(options.allow, string, '[COMMAND LINE ARGUMENT]')
|
203
205
|
log("options.allow = #{string}")
|
204
206
|
end
|
205
207
|
|
@@ -402,7 +404,7 @@ MESSAGE
|
|
402
404
|
'Allow the execution of ruby code') do |level|
|
403
405
|
if level
|
404
406
|
options.allow_ruby = level
|
405
|
-
allow(options.allow, level)
|
407
|
+
allow(options.allow, level, '[COMMAND LINE ARGUMENT]')
|
406
408
|
else
|
407
409
|
options.allow_ruby = true
|
408
410
|
allow(options.allow, 'x')
|
@@ -413,7 +415,7 @@ MESSAGE
|
|
413
415
|
opts.on('-X', '--[no-]allow-exec', '--[no-]external',
|
414
416
|
'Allow the execution of helper applications') do |bool|
|
415
417
|
options.allow_external = bool
|
416
|
-
allow(options.allow, 'X')
|
418
|
+
allow(options.allow, 'X', '[COMMAND LINE ARGUMENT]')
|
417
419
|
log("options.allow_external = #{bool}")
|
418
420
|
end
|
419
421
|
|
@@ -538,26 +540,7 @@ MESSAGE
|
|
538
540
|
# end
|
539
541
|
|
540
542
|
if formatter_class
|
541
|
-
|
542
|
-
case f
|
543
|
-
when '-'
|
544
|
-
options.ext = ''
|
545
|
-
options.srcdir ||= Dir.pwd
|
546
|
-
options.out ||= '-'
|
547
|
-
else
|
548
|
-
options.ext = File.extname(f)
|
549
|
-
options.srcdir ||= File.dirname(f)
|
550
|
-
options.suffix ||= formatter_class.suffix
|
551
|
-
if options.out
|
552
|
-
options.out = Deplate::Core.file_join(options.dir, options.out)
|
553
|
-
# if options.out != '-'
|
554
|
-
# options.out = options.dir ? Deplate::Core.file_join(options.dir, options.out) : options.out
|
555
|
-
# end
|
556
|
-
else
|
557
|
-
options.out = get_out_fullname(f, options.suffix, options)
|
558
|
-
end
|
559
|
-
end
|
560
|
-
|
543
|
+
formatter_class.set_options_for_file(options, options.files[0])
|
561
544
|
prc = Deplate::Core.new(options.fmt,
|
562
545
|
:formatter => formatter_class,
|
563
546
|
:options => options,
|
@@ -579,7 +562,8 @@ MESSAGE
|
|
579
562
|
require_module(options, m) if m
|
580
563
|
end
|
581
564
|
|
582
|
-
require 'deplate/mod/en' unless @@messages_last
|
565
|
+
# require 'deplate/mod/en' unless @@messages_last
|
566
|
+
require_module(options, 'lang-en') unless @@messages_last
|
583
567
|
|
584
568
|
# load general user config
|
585
569
|
options.cfg ||= ['config.rb', CfgDir]
|
@@ -590,14 +574,14 @@ MESSAGE
|
|
590
574
|
end
|
591
575
|
|
592
576
|
# Set certain allow flags in array.
|
593
|
-
def allow(arr, ids)
|
577
|
+
def allow(arr, ids, source=nil)
|
594
578
|
case ids
|
595
579
|
when String
|
596
|
-
ids =
|
580
|
+
ids = Deplate::Core.split_list(ids, ',', '; ', source)
|
597
581
|
# ids = ids.scan(/[a-zA-Z.:]/)
|
598
582
|
when Array
|
599
583
|
else
|
600
|
-
log(['Internal error', 'allow', ids], :error)
|
584
|
+
log(['Internal error', 'allow', ids], :error, source)
|
601
585
|
end
|
602
586
|
ids.each do |i|
|
603
587
|
m = i[0..0]
|
@@ -618,7 +602,7 @@ MESSAGE
|
|
618
602
|
arr = options.allow
|
619
603
|
case ids
|
620
604
|
when String
|
621
|
-
ids =
|
605
|
+
ids = Deplate::Core.split_list(ids, ',', '; ')
|
622
606
|
when Array
|
623
607
|
else
|
624
608
|
log(['Internal error', 'allow', ids], :error)
|
@@ -670,9 +654,14 @@ MESSAGE
|
|
670
654
|
options.ini_command_line_arguments << $1
|
671
655
|
options.ini_command_line_arguments << $3 if $3
|
672
656
|
elsif line =~ /^\s*allow\s+(.+?)\s*$/
|
673
|
-
allow(options.allow, $1)
|
657
|
+
allow(options.allow, $1, Deplate::Source.new(inifile))
|
674
658
|
elsif line =~ /^\s*mod\s+(\S+)/
|
675
|
-
|
659
|
+
mod = $1
|
660
|
+
if mod[0..0] == '-'
|
661
|
+
options.modules.delete(mod[1..-1])
|
662
|
+
else
|
663
|
+
options.modules << $1
|
664
|
+
end
|
676
665
|
elsif line =~ /^\s*fmt\s+(\S+)/
|
677
666
|
options.fmt = $1
|
678
667
|
elsif line =~ /^\s*clip\s+([^\s=]+)\s*=\s*(.+)/
|
@@ -716,6 +705,8 @@ MESSAGE
|
|
716
705
|
setter = lambda {|val| canonic_args(options.variables, $1, val)}
|
717
706
|
elsif line =~ /^\s*(\S+)\s*=\s*(.+)/
|
718
707
|
canonic_args(options.variables, $1, $2)
|
708
|
+
elsif !line.empty?
|
709
|
+
Deplate::Core.log(['Malformed configuration line', line], :error)
|
719
710
|
end
|
720
711
|
when :multiline
|
721
712
|
if line == endm
|
@@ -753,15 +744,17 @@ MESSAGE
|
|
753
744
|
fmtf = @@formatters[fmt]
|
754
745
|
require fmtf
|
755
746
|
end
|
756
|
-
|
757
|
-
|
747
|
+
for fmt in @@formatter_classes[fmt].formatter_family_members.reverse
|
748
|
+
user_config(options, File.join('after', 'fmt', '%s.rb' % fmt), CfgDir)
|
749
|
+
user_config(options, File.join('after', 'fmt', fmt), CfgDir)
|
750
|
+
end
|
758
751
|
end
|
759
752
|
|
760
753
|
# Load a module.
|
761
754
|
# options:: A OpenStruct as returned by Deplate::Core.deplate_options
|
762
755
|
# module_name:: The name of the module to be loaded
|
763
756
|
def require_module(options, module_name)
|
764
|
-
Deplate::Core.log([
|
757
|
+
Deplate::Core.log(['Require module', module_name])
|
765
758
|
mf = @@modules[module_name]
|
766
759
|
vsave, $VERBOSE = $VERBOSE, false
|
767
760
|
begin
|
@@ -770,7 +763,8 @@ MESSAGE
|
|
770
763
|
user_config(options, File.join('after', 'mod', module_name), CfgDir)
|
771
764
|
return true
|
772
765
|
rescue Exception => e
|
773
|
-
Deplate::Core.log([
|
766
|
+
Deplate::Core.log(['Loading module failed', module_name, e], :error)
|
767
|
+
Deplate::Core.log(['Known modules', @@modules], :debug)
|
774
768
|
return false
|
775
769
|
ensure
|
776
770
|
$VERBOSE = vsave
|
@@ -831,6 +825,7 @@ MESSAGE
|
|
831
825
|
options.force ||= true
|
832
826
|
options.css ||= []
|
833
827
|
options.variables ||= Deplate::Variables.new
|
828
|
+
deplate_predefined_variables(options)
|
834
829
|
options.clips ||= {}
|
835
830
|
options.ext ||= ''
|
836
831
|
# options.dir ||= '.'
|
@@ -839,11 +834,16 @@ MESSAGE
|
|
839
834
|
options.split_level ||= 1
|
840
835
|
options.disabled_particles ||= []
|
841
836
|
options.autoindexed ||= []
|
837
|
+
options.abbrevs ||= {}
|
842
838
|
reset_listings_and_counters(options, true)
|
843
839
|
read_ini(options) unless inherit
|
844
840
|
return options
|
845
841
|
end
|
846
842
|
|
843
|
+
def deplate_predefined_variables(options)
|
844
|
+
options.variables['env'] = ENV
|
845
|
+
end
|
846
|
+
|
847
847
|
def reset_listings_and_counters(options, conditionally=false)
|
848
848
|
unless conditionally and options.counters
|
849
849
|
c = options.counters = Deplate::Counters.new(self)
|
@@ -965,7 +965,7 @@ MESSAGE
|
|
965
965
|
end
|
966
966
|
end
|
967
967
|
|
968
|
-
def canonic_args(hash, key, val)
|
968
|
+
def canonic_args(hash, key, val, source=nil)
|
969
969
|
if key[-1..-1] == '!'
|
970
970
|
key = key[0..-2]
|
971
971
|
type = :bool
|
@@ -990,6 +990,14 @@ MESSAGE
|
|
990
990
|
if val =~ /^"(.*?)"$/
|
991
991
|
val = val[1..-2]
|
992
992
|
else
|
993
|
+
# val.scan(/\\\\|\s/).each do |s|
|
994
|
+
# if s =~ /\s/
|
995
|
+
# Deplate::Core.log(['Deprecated syntax',
|
996
|
+
# 'Character should be preceded by a backslash',
|
997
|
+
# s.inspect, val],
|
998
|
+
# :anyway, source)
|
999
|
+
# end
|
1000
|
+
# end
|
993
1001
|
val = val.strip
|
994
1002
|
end
|
995
1003
|
val = Deplate::Core.remove_backslashes(val)
|
@@ -1018,9 +1026,34 @@ MESSAGE
|
|
1018
1026
|
return text.gsub(/\\(.)/, '\\1') if text
|
1019
1027
|
end
|
1020
1028
|
|
1029
|
+
def split_list(string, chars=nil, deprecated=nil, source=nil, doubt=:use_deprecated)
|
1030
|
+
if string
|
1031
|
+
chars ||= ','
|
1032
|
+
list = string.scan(/((?:\\.|[^#{chars}\\]+)+)(?:[#{chars}]\s*|\Z)/).flatten
|
1033
|
+
list = list.map {|e| remove_backslashes(e)}
|
1034
|
+
if deprecated
|
1035
|
+
list1 = split_list(string, deprecated)
|
1036
|
+
if list1 != list and
|
1037
|
+
# (list1.size > 1 or list1[0] != string) and
|
1038
|
+
string !~ /[#{chars}]/ and string =~ /[#{deprecated}]/
|
1039
|
+
# case doubt
|
1040
|
+
# when :use_deprecated
|
1041
|
+
Deplate::Core.log(['Assuming the use of deprecated list separators', deprecated.inspect, string.inspect], :error, source)
|
1042
|
+
return list1
|
1043
|
+
# else
|
1044
|
+
# Deplate::Core.log(['Possible use of deprecated list separators', deprecated.inspect, string.inspect], :anyway, source)
|
1045
|
+
# end
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
return list
|
1049
|
+
else
|
1050
|
+
return []
|
1051
|
+
end
|
1052
|
+
end
|
1053
|
+
|
1021
1054
|
def escape_characters(text, args)
|
1022
1055
|
esc = args[:esc] || args[:escape] || args['esc'] || args['escape'] || ''
|
1023
|
-
ebs = args[:escapebackslash] || args['escapebackslash'] || 0
|
1056
|
+
ebs = args[:escapebackslash] || args['escapebackslash'] || args['template'] || 0
|
1024
1057
|
case ebs
|
1025
1058
|
when true
|
1026
1059
|
ebs = 1
|
@@ -1054,7 +1087,7 @@ MESSAGE
|
|
1054
1087
|
# specifying column widths in tables
|
1055
1088
|
def props(proplist, field)
|
1056
1089
|
if proplist
|
1057
|
-
|
1090
|
+
Deplate::Core.split_list(proplist, ',', ';').collect do |c|
|
1058
1091
|
rv = nil
|
1059
1092
|
for key, val in c.scan(/(\w+?)[:.](\S+)/)
|
1060
1093
|
if key == field
|
@@ -1073,7 +1106,7 @@ MESSAGE
|
|
1073
1106
|
# correspond to section numbers.
|
1074
1107
|
def canonic_file_name(name, sfx, maj=nil, min=nil, dir=nil)
|
1075
1108
|
name = File.basename(name, '.*')
|
1076
|
-
name =
|
1109
|
+
name = clean_name(name)
|
1077
1110
|
if !name or (maj and maj != 0)
|
1078
1111
|
canonic_numbered_file_name(name, sfx, maj, min, dir)
|
1079
1112
|
elsif min and min != 0
|
@@ -1085,10 +1118,18 @@ MESSAGE
|
|
1085
1118
|
end
|
1086
1119
|
end
|
1087
1120
|
|
1088
|
-
# Return
|
1089
|
-
def
|
1090
|
-
|
1091
|
-
|
1121
|
+
# Return an encoded name
|
1122
|
+
def clean_name(text, args={})
|
1123
|
+
if text
|
1124
|
+
replacement = args[:replacement] || '_'
|
1125
|
+
chars = args[:chars] || '_[:cntrl:].+*:"?<>|&\\\/'
|
1126
|
+
if (extrachars = args[:extra])
|
1127
|
+
chars += extrachars
|
1128
|
+
end
|
1129
|
+
text.gsub(/[#{chars}]/) do |text|
|
1130
|
+
replacement + "%02X" % text[0]
|
1131
|
+
end
|
1132
|
+
end
|
1092
1133
|
end
|
1093
1134
|
|
1094
1135
|
# Make sure +dir+ exists
|
@@ -1569,6 +1610,8 @@ MESSAGE
|
|
1569
1610
|
|
1570
1611
|
def_delegator(:@input, :initialize_particles)
|
1571
1612
|
def_delegator(:@input, :register_particle)
|
1613
|
+
def_delegator(:@input, :register_element)
|
1614
|
+
def_delegator(:@input, :register_region)
|
1572
1615
|
def_delegator(:@input, :parse_with_particles)
|
1573
1616
|
def_delegator(:@input, :parse_with_source)
|
1574
1617
|
def_delegator(:@input, :parse)
|
@@ -1578,7 +1621,12 @@ MESSAGE
|
|
1578
1621
|
def initialize_input(args=@args)
|
1579
1622
|
@input = args[:input] || @options.input
|
1580
1623
|
unless @input
|
1581
|
-
|
1624
|
+
# @options.input_class is only considered when defined on
|
1625
|
+
# startup (i.e. on the command-line), which is why we check
|
1626
|
+
# for :now
|
1627
|
+
input_class = args[:input_class] ||
|
1628
|
+
(args[:now] && @options.input_class) ||
|
1629
|
+
Deplate::Input
|
1582
1630
|
@input = input_class.new(self, args)
|
1583
1631
|
end
|
1584
1632
|
end
|
@@ -1619,6 +1667,15 @@ MESSAGE
|
|
1619
1667
|
end
|
1620
1668
|
end
|
1621
1669
|
|
1670
|
+
def get_formatter_class(fmt)
|
1671
|
+
case fmt
|
1672
|
+
when String
|
1673
|
+
@@formatter_classes[fmt]
|
1674
|
+
else
|
1675
|
+
fmt
|
1676
|
+
end
|
1677
|
+
end
|
1678
|
+
|
1622
1679
|
# Define a new slot or reset the position of an already known slot.
|
1623
1680
|
# <+TBD+>There is no information on whether the slot belongs to the
|
1624
1681
|
# prematter/postmatter/body.
|
@@ -1768,7 +1825,7 @@ MESSAGE
|
|
1768
1825
|
if msg_class
|
1769
1826
|
@options.messages = msg_class.new(self)
|
1770
1827
|
@@message_object ||= @options.messages
|
1771
|
-
elsif is_allowed?('l') and require_module(lang)
|
1828
|
+
elsif is_allowed?('l') and require_module("lang-#{lang}")
|
1772
1829
|
set_lang(lang)
|
1773
1830
|
else
|
1774
1831
|
log(["Bad language definition", lang, "(#{@@messages.keys.join(', ')})"],
|
@@ -1888,7 +1945,7 @@ MESSAGE
|
|
1888
1945
|
else
|
1889
1946
|
prefix = @variables['prefixID']
|
1890
1947
|
if prefix.nil?
|
1891
|
-
prefix = Deplate::Core.
|
1948
|
+
prefix = Deplate::Core.clean_name(File.basename(@dest, '.*'))
|
1892
1949
|
end
|
1893
1950
|
fn = [prefix]
|
1894
1951
|
fn << ["_#{type}_#{idx}"]
|
@@ -1932,8 +1989,8 @@ MESSAGE
|
|
1932
1989
|
pwd = Dir.pwd
|
1933
1990
|
begin
|
1934
1991
|
Dir.chdir(dir)
|
1935
|
-
files = Dir[
|
1936
|
-
match = Dir[@options.file_pattern ||
|
1992
|
+
files = Dir['*']
|
1993
|
+
match = Dir[@options.file_pattern || '*']
|
1937
1994
|
files.delete_if {|f| File.stat(f).file? and !match.include?(f)}
|
1938
1995
|
if @options.file_excl_pattern
|
1939
1996
|
antilist = Dir[@options.file_excl_pattern]
|
@@ -1941,11 +1998,11 @@ MESSAGE
|
|
1941
1998
|
files.delete(anti)
|
1942
1999
|
end
|
1943
2000
|
end
|
1944
|
-
log([
|
2001
|
+
log(['DIR', dir])
|
1945
2002
|
ensure
|
1946
2003
|
Dir.chdir(pwd)
|
1947
2004
|
end
|
1948
|
-
unless dir ==
|
2005
|
+
unless dir == '.'
|
1949
2006
|
files.collect! {|f| File.join(dir, f)}
|
1950
2007
|
end
|
1951
2008
|
return files
|
@@ -1955,42 +2012,31 @@ MESSAGE
|
|
1955
2012
|
if args[:pwd]
|
1956
2013
|
fn = File.join(Deplate::Core.current_pwd(self), fname)
|
1957
2014
|
if Deplate::Core.is_file?(fn)
|
2015
|
+
log(['File in CWD', fn])
|
1958
2016
|
return fn
|
1959
2017
|
end
|
1960
2018
|
end
|
1961
2019
|
files = []
|
1962
2020
|
if @formatter
|
1963
|
-
formatter_family_members do |myname|
|
2021
|
+
@formatter.class.formatter_family_members(:names => args[:formatters]) do |myname|
|
1964
2022
|
dd = File.join('lib', myname, fname)
|
1965
2023
|
files << dd unless files.include?(dd)
|
1966
2024
|
end
|
1967
2025
|
end
|
1968
|
-
files << File.join('lib', fname)
|
2026
|
+
files << File.join(args['subdir'] || 'lib', fname)
|
1969
2027
|
files = Deplate::Core.library_directories(true, *files)
|
1970
2028
|
for fn in files
|
1971
2029
|
if Deplate::Core.is_file?(fn)
|
2030
|
+
log(['File in lib', fn])
|
1972
2031
|
return fn
|
1973
2032
|
end
|
1974
2033
|
end
|
1975
2034
|
return nil
|
1976
2035
|
end
|
1977
2036
|
|
1978
|
-
def formatter_family_members(
|
1979
|
-
|
1980
|
-
|
1981
|
-
myname = fmt.myname
|
1982
|
-
while myname
|
1983
|
-
acc << myname
|
1984
|
-
yield(myname) if block_given?
|
1985
|
-
fmt = fmt.superclass
|
1986
|
-
myname = fmt.myname
|
1987
|
-
end
|
1988
|
-
formatter_class.related.each do |myname|
|
1989
|
-
acc << myname
|
1990
|
-
yield(myname) if block_given?
|
1991
|
-
end
|
1992
|
-
acc
|
1993
|
-
end
|
2037
|
+
# def formatter_family_members(args)
|
2038
|
+
# (args[:formatter_class] || @formatter.class).formatter_family_members(args)
|
2039
|
+
# end
|
1994
2040
|
|
1995
2041
|
# Format either text or, if text is nil, the file "sourcename".
|
1996
2042
|
# This is the method called by the Deplate::Formatter's
|
@@ -2005,14 +2051,14 @@ MESSAGE
|
|
2005
2051
|
|
2006
2052
|
# Format a file by means of formatter_class that is a child of Deplate::Formatter
|
2007
2053
|
def format_file_with_formatter(formatter_class, sourcename)
|
2008
|
-
with_formatter(formatter_class) do
|
2054
|
+
with_formatter(formatter_class, sourcename) do
|
2009
2055
|
go_each([sourcename])
|
2010
2056
|
end
|
2011
2057
|
end
|
2012
2058
|
|
2013
2059
|
# Format text by means of formatter_class that is a child of Deplate::Formatter
|
2014
2060
|
def format_string_with_formatter(formatter_class, text, sourcename=nil)
|
2015
|
-
with_formatter(formatter_class) do
|
2061
|
+
with_formatter(formatter_class, sourcename) do
|
2016
2062
|
format_string(text, sourcename)
|
2017
2063
|
end
|
2018
2064
|
end
|
@@ -2054,7 +2100,7 @@ MESSAGE
|
|
2054
2100
|
end
|
2055
2101
|
|
2056
2102
|
# Read a file and add the parsed elements to array
|
2057
|
-
def include_file(array, filename)
|
2103
|
+
def include_file(array, filename, args={})
|
2058
2104
|
maintain_current_source(filename) do
|
2059
2105
|
log(['Including', filename])
|
2060
2106
|
filename_abs = File.expand_path(filename)
|
@@ -2063,7 +2109,20 @@ MESSAGE
|
|
2063
2109
|
@labels_floating << filename_label
|
2064
2110
|
end
|
2065
2111
|
File.open(filename, 'r') do |io|
|
2066
|
-
|
2112
|
+
range = if (skip = args['skip'])
|
2113
|
+
skip.to_i..-1
|
2114
|
+
elsif (head = args['head'])
|
2115
|
+
0..head.to_i
|
2116
|
+
elsif (tail = args['tail'])
|
2117
|
+
-tail.to_i..-1
|
2118
|
+
else
|
2119
|
+
nil
|
2120
|
+
end
|
2121
|
+
if range
|
2122
|
+
text = io.readlines[range].join
|
2123
|
+
else
|
2124
|
+
text = io.read
|
2125
|
+
end
|
2067
2126
|
include_each(text, array, filename)
|
2068
2127
|
end
|
2069
2128
|
end
|
@@ -2144,7 +2203,7 @@ MESSAGE
|
|
2144
2203
|
unless text or !@options.multi_file_output
|
2145
2204
|
afn = @variables['autoFileNames']
|
2146
2205
|
if afn
|
2147
|
-
fname = Deplate::Core.
|
2206
|
+
fname = Deplate::Core.clean_name(heading.get_text)[0..20]
|
2148
2207
|
c = auto_numbered(fname)
|
2149
2208
|
if c
|
2150
2209
|
fname = Deplate::Core.canonic_file_name(fname, sfx, c, 0)
|
@@ -2190,6 +2249,7 @@ MESSAGE
|
|
2190
2249
|
if fname
|
2191
2250
|
fname = Deplate::Core.get_out_fullname(fname, nil, @options)
|
2192
2251
|
end
|
2252
|
+
@output.simulate_reset
|
2193
2253
|
end
|
2194
2254
|
# if fname and @options.multi_file_output
|
2195
2255
|
if fname
|
@@ -2322,8 +2382,13 @@ MESSAGE
|
|
2322
2382
|
|
2323
2383
|
# Get a clip.
|
2324
2384
|
# id:: The clip's name
|
2385
|
+
# FIXME: This check for @elt should not be necessary.
|
2325
2386
|
def get_clip(id)
|
2326
|
-
@clips[id]
|
2387
|
+
c = @clips[id]
|
2388
|
+
if c and !c.elt
|
2389
|
+
c = @clips[id] = c.process
|
2390
|
+
end
|
2391
|
+
c
|
2327
2392
|
end
|
2328
2393
|
|
2329
2394
|
# Set all clips.
|
@@ -2392,14 +2457,14 @@ MESSAGE
|
|
2392
2457
|
|
2393
2458
|
# Amend +file+'s suffix.
|
2394
2459
|
def file_with_suffix(file, sfx=nil, filename_only=false)
|
2395
|
-
sfx = sfx ||
|
2460
|
+
sfx = sfx || ''
|
2396
2461
|
fn = File.basename(file, '.*')
|
2397
2462
|
if filename_only
|
2398
2463
|
return fn + sfx
|
2399
2464
|
else
|
2400
2465
|
dir = File.dirname(file)
|
2401
2466
|
fname = fn + sfx
|
2402
|
-
if dir ==
|
2467
|
+
if dir == '.'
|
2403
2468
|
return fname
|
2404
2469
|
else
|
2405
2470
|
return File.join(dir, fname)
|
@@ -2427,7 +2492,7 @@ MESSAGE
|
|
2427
2492
|
throw :ok
|
2428
2493
|
end
|
2429
2494
|
end
|
2430
|
-
raise "Internal error: unknown level: #{level_as_string}"
|
2495
|
+
# raise "Internal error: unknown level: #{level_as_string}"
|
2431
2496
|
log(['Internal error: Unknown level', level_as_string], :error)
|
2432
2497
|
return nil
|
2433
2498
|
end
|
@@ -2462,6 +2527,7 @@ MESSAGE
|
|
2462
2527
|
@collected_output << @output
|
2463
2528
|
@output.top_heading = top_heading_by_idx(@collected_output.size - 1)
|
2464
2529
|
@output.index = @output_maj_min.dup
|
2530
|
+
@output.reset
|
2465
2531
|
increase_maj_min
|
2466
2532
|
end
|
2467
2533
|
|
@@ -2562,15 +2628,24 @@ MESSAGE
|
|
2562
2628
|
if file
|
2563
2629
|
# pwd = Dir.pwd
|
2564
2630
|
begin
|
2565
|
-
|
2566
|
-
|
2567
|
-
|
2568
|
-
|
2631
|
+
case file
|
2632
|
+
when 1, 2, 3, '-'
|
2633
|
+
ok = true
|
2634
|
+
case file
|
2635
|
+
when String
|
2636
|
+
file = mode =~ /r/ ? 1 : 2
|
2637
|
+
end
|
2638
|
+
else
|
2639
|
+
# Dir.chdir(@options.dir)
|
2640
|
+
ensure_dir_exists(File.dirname(file))
|
2641
|
+
ok = if File.exist?(file)
|
2642
|
+
Deplate::Core.query_user(@options,
|
2569
2643
|
"File '#{file}' already exists. Overwrite (y/N)? ",
|
2570
2644
|
'y')
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2645
|
+
else
|
2646
|
+
true
|
2647
|
+
end
|
2648
|
+
end
|
2574
2649
|
if ok
|
2575
2650
|
log(['Writing file', file], :debug)
|
2576
2651
|
File.open(file, mode) do |io|
|
@@ -2608,7 +2683,7 @@ MESSAGE
|
|
2608
2683
|
if ok
|
2609
2684
|
ensure_dir_exists(dir)
|
2610
2685
|
File.copy(from, to)
|
2611
|
-
log(['Copy file', to])
|
2686
|
+
log(['Copy file', from, to])
|
2612
2687
|
end
|
2613
2688
|
end
|
2614
2689
|
end
|
@@ -2617,14 +2692,19 @@ MESSAGE
|
|
2617
2692
|
@options.counters.get('toc')
|
2618
2693
|
end
|
2619
2694
|
|
2695
|
+
def current_heading_element
|
2696
|
+
e = @options.counters.get('toc', true)
|
2697
|
+
e && e[:container]
|
2698
|
+
end
|
2699
|
+
|
2620
2700
|
# Get the current section's level as string.
|
2621
2701
|
def get_current_heading
|
2622
2702
|
@options.counters.get_s('toc')
|
2623
2703
|
end
|
2624
2704
|
|
2625
2705
|
# Increase the heading level.
|
2626
|
-
def increase_current_heading(level)
|
2627
|
-
@options.counters.increase('toc', :level => level)
|
2706
|
+
def increase_current_heading(container, level)
|
2707
|
+
@options.counters.increase('toc', :container => container, :level => level)
|
2628
2708
|
end
|
2629
2709
|
|
2630
2710
|
# Get the current top heading object.
|
@@ -2773,11 +2853,14 @@ MESSAGE
|
|
2773
2853
|
id = "idx00#{@index_last_idx}"
|
2774
2854
|
words = names.split(/\s*\|\s*/)
|
2775
2855
|
lname = Deplate::Core.remove_backslashes(words[0])
|
2776
|
-
|
2856
|
+
if container
|
2857
|
+
# container = container.top_container || container
|
2858
|
+
level_as_string = container.level_as_string
|
2859
|
+
end
|
2777
2860
|
if @options.dont_index.delete(lname)
|
2778
2861
|
return nil
|
2779
2862
|
else
|
2780
|
-
i
|
2863
|
+
i = @index[lname]
|
2781
2864
|
unless i
|
2782
2865
|
i = @index.find do |k, a|
|
2783
2866
|
a.find do |i|
|
@@ -2923,15 +3006,21 @@ MESSAGE
|
|
2923
3006
|
end
|
2924
3007
|
|
2925
3008
|
def set_standard_clips
|
2926
|
-
|
2927
|
-
|
2928
|
-
|
2929
|
-
|
2930
|
-
|
3009
|
+
unless @options.clips_initialized
|
3010
|
+
if defined?(@input) and @input
|
3011
|
+
for id, text in @options.clips
|
3012
|
+
if text.kind_of?(Deplate::Element::Clip)
|
3013
|
+
@options.clips[id] = text
|
3014
|
+
else
|
3015
|
+
src = '[clip]'
|
3016
|
+
text = parse_with_source(src, text, false)
|
3017
|
+
@options.clips[id] = Deplate::Element::Clip.new(text, self, src)
|
3018
|
+
end
|
3019
|
+
end
|
3020
|
+
@options.clips_initialized = true
|
2931
3021
|
end
|
2932
|
-
|
3022
|
+
@clips = @options.clips.dup
|
2933
3023
|
end
|
2934
|
-
@clips = @options.clips.dup if options.clips_initialized
|
2935
3024
|
end
|
2936
3025
|
|
2937
3026
|
def reset_footnotes
|
@@ -2959,8 +3048,9 @@ MESSAGE
|
|
2959
3048
|
|
2960
3049
|
# Set @formatter to an instance of formatter_class, call block, and
|
2961
3050
|
# restore the old @formatter
|
2962
|
-
def with_formatter(formatter_class, &block)
|
3051
|
+
def with_formatter(formatter_class, sourcename=nil, &block)
|
2963
3052
|
formatter_orig = @formatter
|
3053
|
+
options_orig = @options
|
2964
3054
|
begin
|
2965
3055
|
if @formatter.instance_of?(formatter_class)
|
2966
3056
|
@formatter = @formatter.dup
|
@@ -2968,9 +3058,11 @@ MESSAGE
|
|
2968
3058
|
else
|
2969
3059
|
@formatter = formatter_class.new(self, @args)
|
2970
3060
|
end
|
2971
|
-
|
3061
|
+
@options = formatter_class.set_options_for_file(options.dup, sourcename)
|
3062
|
+
rv = block.call
|
2972
3063
|
ensure
|
2973
3064
|
@formatter = formatter_orig
|
3065
|
+
@options = options_orig
|
2974
3066
|
end
|
2975
3067
|
end
|
2976
3068
|
|
@@ -3013,9 +3105,23 @@ MESSAGE
|
|
3013
3105
|
@output_headings.first.first_top = true
|
3014
3106
|
@output_headings.last.last_top = true
|
3015
3107
|
end
|
3016
|
-
|
3108
|
+
|
3109
|
+
filter = @variables['efilter']
|
3110
|
+
|
3017
3111
|
for p in preprocess
|
3018
|
-
p.call
|
3112
|
+
p.call unless p.exclude?(filter)
|
3113
|
+
end
|
3114
|
+
|
3115
|
+
for hd in @headings.keys
|
3116
|
+
if @headings[hd].exclude?(filter)
|
3117
|
+
@headings.delete(hd)
|
3118
|
+
end
|
3119
|
+
end
|
3120
|
+
|
3121
|
+
# Basically, this shouldn't be necessary as a filtered element
|
3122
|
+
# should never make it into the listing.
|
3123
|
+
for name,_ in @options.listings
|
3124
|
+
@options.listings.get(name).delete_if {|e| e.exclude?(filter)}
|
3019
3125
|
end
|
3020
3126
|
|
3021
3127
|
for fn in @footnotes.keys
|
@@ -3031,17 +3137,18 @@ MESSAGE
|
|
3031
3137
|
|
3032
3138
|
# process elts
|
3033
3139
|
def process
|
3034
|
-
log(
|
3140
|
+
log('Processing elements')
|
3035
3141
|
call_methods_matching(@formatter, /^hook_pre_process_/)
|
3142
|
+
filter = @variables['efilter']
|
3036
3143
|
@accum_elements.collect! do |e|
|
3037
|
-
e.process
|
3144
|
+
e.process unless e.exclude?(filter)
|
3038
3145
|
end
|
3039
3146
|
@accum_elements.flatten!
|
3040
3147
|
@accum_elements.compact!
|
3041
3148
|
end
|
3042
3149
|
|
3043
3150
|
def print_prepare
|
3044
|
-
log(
|
3151
|
+
log('Preparing formatting')
|
3045
3152
|
call_methods_matching(@formatter, /^hook_pre_prepare_/)
|
3046
3153
|
@formatter.prepare
|
3047
3154
|
call_methods_matching(@formatter, /^prepare_/)
|