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.
Files changed (163) hide show
  1. data/AUTHORS.TXT +19 -16
  2. data/CHANGES.TXT +214 -248
  3. data/NEWS.TXT +47 -30
  4. data/README.TXT +0 -1
  5. data/TODO.TXT +93 -20
  6. data/VERSION.TXT +1 -1
  7. data/bin/deplate.exy +192 -0
  8. data/etc/deplate.ini +70 -9
  9. data/lib/action_view/helpers/deplate.rb +33 -33
  10. data/lib/deplate.rb +2 -2
  11. data/lib/deplate/bib.rb +72 -41
  12. data/lib/deplate/builtin.rb +1 -1
  13. data/lib/deplate/cache.rb +1 -1
  14. data/lib/deplate/commands.rb +161 -102
  15. data/lib/deplate/common.rb +93 -7
  16. data/lib/deplate/converter.rb +10 -4
  17. data/lib/deplate/core.rb +215 -108
  18. data/lib/deplate/counters.rb +23 -8
  19. data/lib/deplate/css/article.css +9 -5
  20. data/lib/deplate/css/deplate.css +37 -3
  21. data/lib/deplate/css/heading-navbar.css +1 -1
  22. data/lib/deplate/css/highstep.css +18 -0
  23. data/lib/deplate/css/htmldoc.css +43 -0
  24. data/lib/deplate/css/layout-deplate-print.css +1 -1
  25. data/lib/deplate/css/layout-deplate.css +1 -1
  26. data/lib/deplate/css/play.css +101 -0
  27. data/lib/deplate/css/sans-serif.css +1 -1
  28. data/lib/deplate/css/serif-e.css +1 -1
  29. data/lib/deplate/css/serif-rel.css +1 -1
  30. data/lib/deplate/css/serif.css +1 -1
  31. data/lib/deplate/css/slides.css +1 -1
  32. data/lib/deplate/css/styles.css +4 -0
  33. data/lib/deplate/css/tabbar-right.css +54 -8
  34. data/lib/deplate/css/tabbar-top.css +28 -9
  35. data/lib/deplate/css/text-sans-serif.css +1 -1
  36. data/lib/deplate/css/text-serif.css +1 -1
  37. data/lib/deplate/define.rb +71 -38
  38. data/lib/deplate/deplate-string.rb +3 -3
  39. data/lib/deplate/docbook.rb +9 -9
  40. data/lib/deplate/elements.rb +173 -84
  41. data/lib/deplate/etc.rb +6 -8
  42. data/lib/deplate/external.rb +9 -5
  43. data/lib/deplate/fmt/dbk-article-4.1.2.rb +4 -3
  44. data/lib/deplate/fmt/dbk-article.rb +9 -8
  45. data/lib/deplate/fmt/dbk-book.rb +4 -3
  46. data/lib/deplate/fmt/dbk-ref.rb +5 -4
  47. data/lib/deplate/fmt/dbk-slides.rb +4 -3
  48. data/lib/deplate/fmt/dbk-snippet.rb +4 -3
  49. data/lib/deplate/fmt/html-snippet.rb +1 -1
  50. data/lib/deplate/fmt/html.rb +186 -46
  51. data/lib/deplate/fmt/htmlsite.rb +19 -9
  52. data/lib/deplate/fmt/htmlslides.rb +1 -1
  53. data/lib/deplate/fmt/htmlwebsite.rb +1 -1
  54. data/lib/deplate/fmt/latex-dramatist.rb +175 -0
  55. data/lib/deplate/fmt/latex-snippet.rb +1 -1
  56. data/lib/deplate/fmt/latex.rb +132 -80
  57. data/lib/deplate/fmt/null.rb +1 -1
  58. data/lib/deplate/fmt/php.rb +1 -1
  59. data/lib/deplate/fmt/phpsite.rb +1 -1
  60. data/lib/deplate/fmt/plain.rb +16 -9
  61. data/lib/deplate/fmt/template.rb +1 -1
  62. data/lib/deplate/fmt/xhtml10t.rb +1 -1
  63. data/lib/deplate/formatter-snippet.rb +1 -1
  64. data/lib/deplate/formatter.rb +272 -81
  65. data/lib/deplate/guesslanguage.rb +57 -0
  66. data/lib/deplate/input.rb +205 -50
  67. data/lib/deplate/input/deplate-headings.rb +9 -11
  68. data/lib/deplate/input/deplate-restricted.rb +3 -23
  69. data/lib/deplate/input/deplate.rb +1 -1
  70. data/lib/deplate/input/play.rb +208 -0
  71. data/lib/deplate/input/rdoc.rb +37 -15
  72. data/lib/deplate/input/template.rb +6 -11
  73. data/lib/deplate/lib/Makefile.config +53 -4
  74. data/lib/deplate/lib/html/parbreak +3 -0
  75. data/lib/deplate/lib/javascript/StepwiseNextPage.js +8 -0
  76. data/lib/deplate/lib/javascript/StepwiseNextPage_confirm.js +8 -0
  77. data/lib/deplate/lib/latex/deplate.sty +36 -0
  78. data/lib/deplate/lib/latex/parbreak +6 -0
  79. data/lib/deplate/lib/php/page-comment.inc.php +5 -5
  80. data/lib/deplate/lib/plain/parbreak +6 -0
  81. data/lib/deplate/locale/de.latin1 +87 -15
  82. data/lib/deplate/locale/de.latin1_data +60 -0
  83. data/lib/deplate/locale/en.latin1_data +46 -0
  84. data/lib/deplate/locale/fr.latin1_data +74 -0
  85. data/lib/deplate/locale/ru.koi8-r_data +63 -0
  86. data/lib/deplate/locale/{zh_cn.gb2312 → zh_CN.GB2312} +0 -0
  87. data/lib/deplate/macros.rb +106 -32
  88. data/lib/deplate/messages.rb +22 -8
  89. data/lib/deplate/metadata.rb +1 -1
  90. data/lib/deplate/metadata/marshal.rb +1 -1
  91. data/lib/deplate/metadata/xml.rb +1 -1
  92. data/lib/deplate/metadata/yaml.rb +1 -1
  93. data/lib/deplate/mod/anyword.rb +4 -4
  94. data/lib/deplate/mod/babelfish.rb +1 -1
  95. data/lib/deplate/mod/code-gvim.rb +14 -8
  96. data/lib/deplate/mod/code-gvim71.rb +52 -0
  97. data/lib/deplate/mod/code-highlight.rb +35 -19
  98. data/lib/deplate/mod/colored-log.rb +1 -1
  99. data/lib/deplate/mod/endnotes.rb +1 -1
  100. data/lib/deplate/mod/guesslanguage.rb +75 -0
  101. data/lib/deplate/mod/html-asciimath.rb +1 -1
  102. data/lib/deplate/mod/html-deplate-button.rb +1 -1
  103. data/lib/deplate/mod/html-headings-navbar.rb +1 -1
  104. data/lib/deplate/mod/html-highstep.rb +43 -0
  105. data/lib/deplate/mod/html-jsmath.rb +1 -1
  106. data/lib/deplate/mod/html-obfuscate-email.rb +1 -1
  107. data/lib/deplate/mod/html-sidebar.rb +1 -1
  108. data/lib/deplate/mod/iconv.rb +1 -1
  109. data/lib/deplate/mod/imgurl.rb +1 -1
  110. data/lib/deplate/mod/inlatex-compound.rb +1 -1
  111. data/lib/deplate/mod/koma.rb +4 -4
  112. data/lib/deplate/mod/{de.rb → lang-de.rb} +1 -1
  113. data/lib/deplate/mod/{en.rb → lang-en.rb} +1 -1
  114. data/lib/deplate/mod/{ru_koi8-r.rb → lang-ru-koi8-r.rb} +1 -1
  115. data/lib/deplate/mod/lang-ru.rb +9 -0
  116. data/lib/deplate/mod/{zh-cn-autospace.rb → lang-zh_CN-autospace.rb} +3 -3
  117. data/lib/deplate/mod/{zh-cn.rb → lang-zh_CN.rb} +8 -8
  118. data/lib/deplate/mod/latex-emph-table-head.rb +1 -1
  119. data/lib/deplate/mod/latex-styles.rb +6 -6
  120. data/lib/deplate/mod/latex-verbatim-small.rb +1 -1
  121. data/lib/deplate/mod/linkmap.rb +128 -0
  122. data/lib/deplate/mod/makefile.rb +23 -22
  123. data/lib/deplate/mod/mark-external-urls.rb +13 -7
  124. data/lib/deplate/mod/markup-1-warn.rb +1 -1
  125. data/lib/deplate/mod/markup-1.rb +1 -1
  126. data/lib/deplate/mod/navbar-png.rb +5 -4
  127. data/lib/deplate/mod/noindent.rb +1 -1
  128. data/lib/deplate/mod/numpara.rb +1 -1
  129. data/lib/deplate/mod/particle-math.rb +1 -1
  130. data/lib/deplate/mod/php-extra.rb +1 -1
  131. data/lib/deplate/mod/pstoedit.rb +1 -1
  132. data/lib/deplate/mod/recode.rb +1 -1
  133. data/lib/deplate/mod/smart-dash.rb +1 -1
  134. data/lib/deplate/mod/smiley.rb +1 -1
  135. data/lib/deplate/mod/soffice.rb +1 -1
  136. data/lib/deplate/mod/symbols-latin1.rb +1 -1
  137. data/lib/deplate/mod/symbols-od-utf-8.rb +1 -1
  138. data/lib/deplate/mod/symbols-plain.rb +1 -1
  139. data/lib/deplate/mod/symbols-sgml.rb +1 -1
  140. data/lib/deplate/mod/symbols-utf-8.rb +1 -1
  141. data/lib/deplate/mod/symbols-xml.rb +1 -1
  142. data/lib/deplate/mod/syntax-region-alt.rb +1 -1
  143. data/lib/deplate/mod/utf8.rb +1 -1
  144. data/lib/deplate/mod/validate-html.rb +1 -1
  145. data/lib/deplate/mod/xmlrpc.rb +37 -36
  146. data/lib/deplate/nukumi2.rb +4 -4
  147. data/lib/deplate/once-method.rb +1 -1
  148. data/lib/deplate/output.rb +12 -4
  149. data/lib/deplate/particles.rb +52 -22
  150. data/lib/deplate/regions.rb +160 -90
  151. data/lib/deplate/skeletons.rb +4 -3
  152. data/lib/deplate/structured.rb +19 -13
  153. data/lib/deplate/template.rb +17 -9
  154. data/lib/deplate/templates/html-doc.html +8 -11
  155. data/lib/deplate/templates/html-tabbar-right.html +1 -1
  156. data/lib/deplate/templates/html-tabbar-top.html +3 -3
  157. data/lib/deplate/variables.rb +25 -9
  158. data/lib/deplate/wiki-markup.rb +14 -3
  159. data/lib/deplate/xml.rb +3 -4
  160. data/lib/deplate/{zh-cn.rb → zh_CN.rb} +16 -16
  161. data/man/man1/deplate.1 +80 -65
  162. metadata +72 -48
  163. data/lib/deplate/mod/fr.rb +0 -46
@@ -1,10 +1,10 @@
1
1
  # htmlsite.rb
2
- # @Author: Thomas Link (samul AT web.de)
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: 25-Apr-2006.
7
- # @Revision: 0.1008
6
+ # @Last Change: 2007-09-28.
7
+ # @Revision: 0.1026
8
8
 
9
9
  require "deplate/fmt/html"
10
10
 
@@ -79,8 +79,12 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
79
79
  end
80
80
 
81
81
  def format_heading(invoker)
82
- output_at(:body, :inner_body_end, %{</div>\n})
83
- [super, %{<div class="pagebody">\n}].join
82
+ if invoker.is_top_heading?
83
+ output_at(:body, :inner_body_end, %{</div>\n})
84
+ [super, %{<div class="pagebody">\n}].join
85
+ else
86
+ super
87
+ end
84
88
  end
85
89
 
86
90
 
@@ -197,7 +201,7 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
197
201
  urlp, prv = navbar_button_prev(nil, nil, idx, type, idx > @deplate.home_index)
198
202
  url, home = navbar_button_home(nil, nil, idx, type, idx > @deplate.home_index)
199
203
  urln, nxt = navbar_button_next(nil, nil, idx, type, idx < @deplate.top_heading_idx)
200
-
204
+
201
205
  tabbar = []
202
206
  tabbar << invoke_service('navigation_keys', {'next' => urln}) if args['nextKey']
203
207
  # tabbar << %{<#{tagsl0} width="#{width}" class="#{style}" summary="Navigation bar">} if tagsl0
@@ -210,7 +214,7 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
210
214
  c = htmlsite_tabbar_accum_tags(tagsl2, s, false)
211
215
  if @variables['tabBarButtons']
212
216
  buttons = []
213
- for b in @variables['tabBarButtons'].split(/[ ,;]/)
217
+ for b in Deplate::Core.split_list(@variables['tabBarButtons'], ',', '; ')
214
218
  case b
215
219
  when 'home', 'h'
216
220
  buttons << home
@@ -276,14 +280,20 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
276
280
  i = invoke_service('progressPercent')
277
281
  tabbar << [o, spacer, pb, i, c].compact.join
278
282
  end
279
-
283
+
284
+ if (about = (args['about'] || @variables['tabBarAbout']))
285
+ title = @deplate.msg('About this page')
286
+ html = %{<a class="tabBarAbout tabBarEntry" href="#{about}">#{title}</a>}
287
+ tabbar << tabbar_entry(html, tagsl2, "#{style}Inactive #{style}About", tabsize)
288
+ end
289
+
280
290
  tabbar << htmlsite_tabbar_accum_tags(tagsl1, style, false)
281
291
  tabbar << %{</#{tagsl0}>} if tagsl0
282
292
  return tabbar.compact.join("\n")
283
293
  end
284
294
 
285
295
  def htmlsite_progress_bar(args, horizontal)
286
- idx = @deplate.output_index
296
+ idx = @deplate.output_index || 0
287
297
  percent = 100 * idx / @deplate.top_heading_idx
288
298
  anti = 100 - percent
289
299
  all = percent + anti
@@ -1,5 +1,5 @@
1
1
  # fmt-html.rb
2
- # @Author: Thomas Link (samul AT web.de)
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.
@@ -1,5 +1,5 @@
1
1
  # fmt-html.rb
2
- # @Author: Thomas Link (samul AT web.de)
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.
@@ -0,0 +1,175 @@
1
+ # latex-dramatist.rb
2
+ # @Last Change: 2007-09-30.
3
+ # Author:: Thomas Link (micathom AT gmail com)
4
+ # License:: GPL (see http://www.gnu.org/licenses/gpl.txt)
5
+ # Created:: 2007-08-09.
6
+ #
7
+ # = Description
8
+ # = Usage
9
+ # = TODO
10
+ # = CHANGES
11
+
12
+ require 'deplate/fmt/latex.rb'
13
+
14
+ class Deplate::Formatter::LaTeX_Dramatist < Deplate::Formatter::LaTeX
15
+ self.myname = 'latex-dramatist'
16
+ self.rx = /(la)?tex(-dramatist)?/i
17
+ self.related = ['latex']
18
+
19
+ self.latexDocClass = 'book'
20
+ # self.latexVariables = ['11pt', 'a4paper']
21
+
22
+
23
+ def formatter_initialize_dramatist
24
+ @ignored_styles << /^play/
25
+ end
26
+
27
+ def prepare_headings
28
+ @headings = ['Scene']
29
+ @headings0 = ['scene']
30
+ end
31
+
32
+ def prepare_dramatist
33
+ add_package('dramatist')
34
+ # output_at(:pre, :body_beg, %{\\pagestyle{myheadings}})
35
+ end
36
+
37
+ # +++
38
+ def format_heading(invoker, level=nil, elt=nil, args=nil)
39
+ # elt ||= invoker.elt
40
+ # if elt.empty?
41
+ args ||= invoker.args
42
+ level ||= invoker.level
43
+ hd = @headings0[level - 1]
44
+ mod = heading_mod(args)
45
+ cap = heading_caption(invoker)
46
+ labels = invoker && format_label(invoker, :string)
47
+ join_blocks(["\n\\#{hd}#{mod}#{cap}{}", labels])
48
+ # else
49
+ # super
50
+ # end
51
+ end
52
+
53
+
54
+ # Open stage directions.
55
+ # \StageDir{...}
56
+ def format_paragraph(invoker)
57
+ if invoker.args['plain']
58
+ super
59
+ else
60
+ join_blocks([wrap_text("\\StageDir{%s}" % invoker.elt), ""])
61
+ end
62
+ end
63
+
64
+
65
+ def format_CAST(invoker)
66
+ return '\\DramPer{}'
67
+ end
68
+
69
+
70
+ def format_ACT(invoker)
71
+ elt = invoker.elt
72
+ if elt.empty?
73
+ return '\\act{}'
74
+ else
75
+ return '\\Act{%s}' % elt
76
+ end
77
+ end
78
+
79
+ # * Unordered -> stage directions or cast group
80
+ # * Descriptions -> dialog or cast
81
+ #
82
+ # Cast list:
83
+ # \Character[NAME]{Name}{name}
84
+ # \begin{CharacterGroup}{NAME}
85
+ # \GCharacter[NAME]{Name}{name}
86
+ # ...
87
+ # \end{CharacterGroup}
88
+ # \DramPer
89
+ #
90
+ # Dialog:
91
+ # \namespeaks \direct{...} ...
92
+ def format_list_item(invoker, type, level, item, args={})
93
+ indent = format_indent(level, true)
94
+ ctag = list_wide? ? '' : :empty
95
+ explv = list_item_explicit_value(item)
96
+ if explv
97
+ explv = %{[#{explv}]}
98
+ end
99
+ case type
100
+ when 'Itemize'
101
+ if is_cast?(invoker)
102
+ return wrap_text("#{indent}\\begin{CharacterGroup}{#{item.body}}", :indent => " "), "#{indent}\\end{CharacterGroup}"
103
+ else
104
+ return wrap_text("#{indent}\\StageDir{#{item.body}}", :indent => " "), ctag
105
+ end
106
+ when 'Description'
107
+ if is_cast?(invoker)
108
+ full_name = [item.item.upcase, item.body].compact.join(', ')
109
+ display_name = item.item
110
+ tex_name = speaker(item.item)
111
+ if level > 1
112
+ char = '%s\\GCharacter{%s}{%s}{%s}'
113
+ full_name << ','
114
+ else
115
+ char = '%s\\Character[%s]{%s}{%s}'
116
+ full_name << '.'
117
+ end
118
+ return wrap_text(char % [indent, full_name, display_name, tex_name], :indent => " "), ctag
119
+ else
120
+ speaker = item.item.sub(/^(\S+)/) {|t| speaker($1) + 'speaks'}
121
+ return wrap_text("#{indent}\\#{speaker} #{item.body}", :indent => " "), ctag
122
+ end
123
+ else
124
+ super
125
+ end
126
+ end
127
+
128
+
129
+ def is_cast?(invoker)
130
+ return invoker.args['cast'] || invoker.tagged_as?('cast')
131
+ end
132
+
133
+
134
+ def speaker(name)
135
+ name.downcase
136
+ end
137
+
138
+
139
+ def format_list_env(invoker, type, level, what, subtype=nil)
140
+ indent = format_indent(level)
141
+ if is_cast?(invoker)
142
+ return ''
143
+ else
144
+ case what
145
+ when :open
146
+ w = "begin"
147
+ if list_wide?
148
+ pre = "\n#{indent}"
149
+ post = "\n"
150
+ else
151
+ pre = indent
152
+ post = ""
153
+ end
154
+ when :close
155
+ w = "end"
156
+ pre = indent
157
+ post = ""
158
+ end
159
+ if level == 0 and type == 'Description' and !invoker.args['plain']
160
+ "#{pre}\\#{w}{drama}#{post}"
161
+ else
162
+ ''
163
+ end
164
+ end
165
+ end
166
+
167
+
168
+ # Stage direction
169
+ # \direct{...}
170
+ def format_direct(invoker, text=nil)
171
+ "\\direct{%s}" % (text || invoker.elt || invoker.text)
172
+ end
173
+
174
+ end
175
+
@@ -1,5 +1,5 @@
1
1
  # latex-snippet.rb
2
- # @Author: Thomas Link (samul AT web.de)
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: 11-Aug-2005.
@@ -1,10 +1,10 @@
1
1
  # fmt-latex.rb
2
- # @Author: Thomas Link (samul AT web.de)
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: 05-Jun-2006.
7
- # @Revision: 0.2042
6
+ # @Last Change: 2007-09-30.
7
+ # @Revision: 0.2110
8
8
 
9
9
  require "deplate/formatter"
10
10
 
@@ -31,8 +31,8 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
31
31
  :format_anchor,
32
32
  ]
33
33
 
34
- @@latexDocClass = "article"
35
- @@latexVariables = ["11pt", "a4paper"]
34
+ class_attribute :latexDocClass, 'article'
35
+ class_attribute :latexVariables, ['11pt', 'a4paper']
36
36
 
37
37
 
38
38
  ################################################ Setup {{{1
@@ -59,26 +59,36 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
59
59
  escaped ? "~" : " "
60
60
  end,
61
61
  }
62
+ @encodings = {
63
+ 'utf-8' => 'utf8',
64
+ }
62
65
  @packages = {}
63
66
  @consumed_preludes = []
64
67
  build_plain_text_rx
68
+ ignore_styles
65
69
  end
66
70
 
67
71
  def prepare
68
- @document_class = @deplate.variables['class'] || @@latexDocClass
72
+ @document_class = @deplate.variables['class'] || self.class.latexDocClass
73
+ ignore_styles
69
74
 
70
75
  lco = @deplate.variables['classOptions']
71
- lco = lco ? lco.strip.split(/[, ]/) : @@latexVariables
76
+ lco = lco ? Deplate::Core.split_list(lco.strip, ',', '; ') : self.class.latexVariables
72
77
  lang = @deplate.options.messages.prop('lang', self)
78
+ # p "DBG", lang
73
79
  if lang
74
80
  lco << lang
75
81
  end
76
82
 
77
- div = @deplate.variables['DIV']
83
+ div = @deplate.variables['DIV'] || @deplate.variables['typeareaDIV']
78
84
  if div
79
- # add_package("typearea", "DIV#{div}")
80
- add_package('typearea')
81
- lco.unshift("DIV#{div}")
85
+ add_package("typearea", "DIV#{div}")
86
+ else
87
+ div = @deplate.variables['DIV_'] || @deplate.variables['typeareaDIV_']
88
+ if div
89
+ add_package('typearea')
90
+ lco.unshift("DIV#{div}")
91
+ end
82
92
  end
83
93
 
84
94
  lco = lco.uniq.join(',')
@@ -103,10 +113,21 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
103
113
 
104
114
  output_at(:post, :body_end, "\\end{document}")
105
115
  end
106
-
116
+
117
+ def ignore_styles
118
+ @ignored_styles ||= []
119
+ @ignored_styles += Deplate::Core.split_list(@deplate.variables['ignoredStyles']).map {|s| Regexp.new(s)}
120
+ end
121
+
107
122
  def prepare_headings
108
- case @document_class
109
- when 'book'
123
+ as_book = case @document_class
124
+ when 'book', 'memoir', 'scrbook', 'report', 'scrreprt'
125
+ true
126
+ else
127
+ bc = @deplate.variables['bookClass']
128
+ bc == true || Deplate::Core.split_list(bc).include?(@document_class)
129
+ end
130
+ if as_book
110
131
  @headings = ['chapter', 'section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
111
132
  else
112
133
  @headings = ['section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
@@ -119,15 +140,16 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
119
140
  # add_package('ulem')
120
141
  add_package('deplate')
121
142
  pkg = 'deplate.sty'
122
- fn = @deplate.find_in_lib(pkg, :pwd => true)
123
143
  dir = File.dirname(output_destination)
124
144
  dest = File.join(dir, pkg)
125
- # @deplate.copy_file(fn, dest)
126
- Deplate::Template.copy(@deplate, fn, dest)
127
- # if fn
128
- # lines = File.read(fn) {|io| io.readlines}
129
- # output_at(:pre, :styles, lines)
130
- # end
145
+ unless File.exist?(dest)
146
+ fn = @deplate.find_in_lib(pkg, :pwd => true)
147
+ if fn
148
+ Deplate::Template.copy(@deplate, fn, dest)
149
+ else
150
+ log(['Library file not found', pkg], :error)
151
+ end
152
+ end
131
153
  @deplate.variables[:deplate_sty] = true
132
154
  end
133
155
  end
@@ -140,8 +162,8 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
140
162
  value = wrap_inject(value, s,
141
163
  :spre => '\\%sSpan{',
142
164
  :post => '}') do |s, pre, post|
143
- ltx = '%s}' % pre.strip
144
- @deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
165
+ ltx = '%s}' % pre.strip
166
+ @deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
145
167
  end
146
168
  # else
147
169
  # value = wrap_accumulate(value, args[:styles]) do |s, ltx|
@@ -174,33 +196,42 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
174
196
  value
175
197
  end
176
198
 
177
- def preferred_style_markup(invoker, what, style)
178
- what = "#{what}Style"
179
- (invoker.args[what] || @deplate.variables[what]) == style
180
- end
181
- private :preferred_style_markup
199
+ # def preferred_style_markup(invoker, what, style)
200
+ # what = "#{what}Style"
201
+ # (invoker.args[what] || @deplate.variables[what]) == style
202
+ # end
203
+ # private :preferred_style_markup
182
204
 
183
205
  def wrap_inject(text, styles, args={})
184
206
  styles.inject(text) do |v, s|
185
- pfx = args[:pre]
186
- unless pfx
187
- pfx = args[:spre] % s
188
- end
189
- sfx = args[:post]
190
- unless sfx
191
- sfx = args[:spost] % s
192
- end
193
- if block_given?
194
- yield(s, pfx, sfx)
207
+ if @ignored_styles.any? {|i| s =~ i}
208
+ v
209
+ else
210
+ s = clean_style_name(s)
211
+ pfx = args[:pre]
212
+ unless pfx
213
+ pfx = args[:spre] % s
214
+ end
215
+ sfx = args[:post]
216
+ unless sfx
217
+ sfx = args[:spost] % s
218
+ end
219
+ if block_given?
220
+ yield(s, pfx, sfx)
221
+ end
222
+ [pfx, v, sfx].join
195
223
  end
196
- [pfx, v, sfx].join
197
224
  end
198
225
  end
199
226
  private :wrap_inject
200
227
 
228
+ def clean_style_name(style)
229
+ style.gsub(/\W(.)/) {|t| $1.capitalize}
230
+ end
231
+
201
232
  def wrap_accumulate(text, styles, template='\\%sStyle{}')
202
233
  styles = styles.collect do |s|
203
- l = template % s
234
+ l = template % clean_style_name(s)
204
235
  if block_given?
205
236
  yield(s, l)
206
237
  end
@@ -244,7 +275,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
244
275
  if m
245
276
  pkg = m[4]
246
277
  if m[3]
247
- add_package(pkg, m[3].split(","))
278
+ add_package(pkg, m[3].split(/,/))
248
279
  else
249
280
  add_package(pkg)
250
281
  end
@@ -278,7 +309,12 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
278
309
  cat = item.opts[:category]
279
310
  due = item.opts[:due]
280
311
  due = " (#{due})" if due
281
- lab = cat ? "\\task#{cat}{#{cat}#{pri}#{due}}" : "#{cat}#{pri}"
312
+ if cat
313
+ task = plain_text([cat, pri, due].join)
314
+ lab = "\\task#{cat}{#{task}}"
315
+ else
316
+ lab = plain_text([pri, due].join)
317
+ end
282
318
  body = item.body
283
319
  if item.opts[:done]
284
320
  lab = "\\taskdone{#{lab}}"
@@ -413,7 +449,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
413
449
  def include_image(invoker, file, args, inline=false)
414
450
  file = args['file'] if args['file']
415
451
  if file =~ Deplate::HyperLink::Url.rx
416
- Deplate::Core.log([%{Can't include remote images in current document}, file], :error)
452
+ Deplate::Core.log([%{Cannot include remote images in current document}, file], :error)
417
453
  file = File.basename(file)
418
454
  end
419
455
  ff = use_image_filename(file, args)
@@ -510,34 +546,38 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
510
546
  end
511
547
  end
512
548
 
549
+ def include_package?(pkg)
550
+ @packages.include?(pkg)
551
+ end
552
+
513
553
 
514
554
  ################################################ Elements {{{1
515
555
  def format_note(invoker)
516
556
  elt = invoker.elt
517
557
  marker = invoker.marker
518
558
  case marker
519
- when "#"
520
- note = "Note"
521
- when "+"
522
- note = "Elaborate"
523
- when "?"
524
- note = "Discussion"
525
- when "!"
526
- note = "Important"
559
+ when '#'
560
+ note = 'Note'
561
+ when '+'
562
+ note = 'Elaborate'
563
+ when '?'
564
+ note = 'Discussion'
565
+ when '!'
566
+ note = 'Important'
527
567
  else
528
- invoker.log(["Unknown marker", marker], :error)
529
- note = "Note"
568
+ invoker.log(['Unknown marker', marker], :error)
569
+ note = 'Note'
530
570
  end
531
- note = "%s: " % @deplate.msg(note)
532
- size = @deplate.variables["noteSize"] || "footnotesize"
533
- "\\protect\\marginpar{\\%s{}%s%s}" % [size, note, elt]
571
+ note = '%s: ' % @deplate.msg(note)
572
+ size = @deplate.variables['noteSize'] || 'footnotesize'
573
+ wrap_text('\\protect\\marginpar{\\%s{}%s%s}' % [size, note, elt])
534
574
  end
535
575
 
536
576
  def format_table(invoker)
537
577
  args = invoker.args
538
578
  elt = invoker.elt
539
579
  caption = invoker.caption
540
- capAbove = caption && (caption.args && caption.args.include?("above") || @deplate.variables["floatCaptionAbove"])
580
+ capAbove = caption && (caption.args && caption.args.include?('above') || @deplate.variables['floatCaptionAbove'])
541
581
  indent = format_indent(1)
542
582
  dblindent = format_indent(2)
543
583
  mode = :normal
@@ -591,31 +631,34 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
591
631
  level ||= invoker.level
592
632
  elt ||= invoker.elt
593
633
  if invoker
594
- caption = invoker.caption
595
634
  invoker.label << args[:id]
596
635
  labels = format_label(invoker, :string)
597
636
  else
598
- caption = nil
599
637
  labels = nil
600
638
  end
601
- if caption
602
- cap = "[#{caption.elt}]"
603
- else
604
- cap = ""
605
- end
606
639
  hd = @headings[level - 1]
607
- if args["noList"]
608
- mod = "*"
609
- else
610
- mode = ""
611
- end
612
640
  if hd
641
+ cap = heading_caption(invoker)
642
+ mod = heading_mod(args)
613
643
  join_blocks(["\n\\#{hd}#{mod}#{cap}{#{elt}}", labels])
614
644
  else
615
645
  "\n#{elt}#{labels}: "
616
646
  end
617
647
  end
618
648
 
649
+ def heading_mod(args)
650
+ args["noList"] || args["plain"] ? "*" : ""
651
+ end
652
+
653
+ def heading_caption(invoker)
654
+ caption = invoker && invoker.caption
655
+ if caption
656
+ return "[#{caption.elt}]"
657
+ else
658
+ return ""
659
+ end
660
+ end
661
+
619
662
  def format_list(invoker)
620
663
  add_package("hyperref")
621
664
  acc = list_wide? ? [""] : []
@@ -782,7 +825,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
782
825
  # dest = "file://" + File.expand_path(dest)
783
826
  # end
784
827
  dest = Deplate::HyperLink.url_anchor(dest, anchor)
785
- dest.gsub!(/([%#])/, "\\\\\\1")
828
+ dest.gsub!(/([&%#])/, "\\\\\\1")
786
829
  "\\href{%s}{%s}" % [dest, name]
787
830
  end
788
831
 
@@ -898,7 +941,11 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
898
941
  end
899
942
 
900
943
  def format_linebreak(invoker)
901
- return "\\newline{}"
944
+ if invoker.args['inline']
945
+ return '\\\\'
946
+ else
947
+ return '\\newline{}'
948
+ end
902
949
  end
903
950
 
904
951
  # Currently assumes the use of natbib
@@ -906,12 +953,15 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
906
953
  args = invoker.args
907
954
  elt = invoker.elt
908
955
  add_package('natbib', 'round')
909
- n = args['n']
910
- p = args['p']
911
- np = args['np']
912
- y = args['y']
913
- c = elt
914
- o = []
956
+ n = args['n']
957
+ p = args['p']
958
+ ip = args['ip']
959
+ np = ip || args['np']
960
+ y = args['y']
961
+ sep = args['sep'] || (np ? '' : '\ ')
962
+ sep = @deplate.parse_and_format(invoker.container, sep) unless sep.empty?
963
+ c = elt
964
+ o = []
915
965
  o << "[#{n}]" if n
916
966
  if p
917
967
  p = @deplate.parse_and_format(invoker.container, "#{@deplate.msg('p.\\ ')}#{p}")
@@ -921,11 +971,13 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
921
971
  end
922
972
  o = o.join unless o.empty?
923
973
  if np
924
- cmd = if y then "citeyear" else "citealp" end
974
+ cmd = if y then 'citeyear' else 'citealp' end
975
+ elsif ip
976
+ cmd = if y then 'citeyear' else 'citet' end
925
977
  else
926
- cmd = if y then "citeyearpar" else "citep" end
978
+ cmd = if y then 'citeyearpar' else 'citep' end
927
979
  end
928
- return "~\\#{cmd}#{o}{#{c.join(",")}}"
980
+ return "#{sep}\\#{cmd}#{o}{#{c.join(",")}}"
929
981
  end
930
982
 
931
983
  def format_subscript(invoker)