docgenerator 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. data/build_test_and_doc.rb +505 -0
  2. data/examples/creole_example.rb +82 -0
  3. data/examples/creole_example_footnote.rb +67 -0
  4. data/examples/creole_example_placeholder.rb +77 -0
  5. data/examples/creole_example_rail.rb +154 -0
  6. data/examples/creole_example_rubycode.rb +144 -0
  7. data/examples/creole_example_struktex.rb +169 -0
  8. data/examples/docgenerator_example.rb +1 -1
  9. data/examples/docgenerator_example_footnote.rb +1 -0
  10. data/examples/docgenerator_example_list.rb +3 -0
  11. data/examples/docgenerator_example_restrictions.rb +1 -1
  12. data/examples/docgenerator_example_tabular.rb +1 -1
  13. data/examples/docgenerator_example_tripfalls.rb +2 -2
  14. data/examples/results/readme +2 -1
  15. data/examples/wiki2docgenerator_example.rb +61 -32
  16. data/lib/creole/creole2doc.rb +57 -58
  17. data/lib/creole/creole_characters.rb +56 -0
  18. data/lib/creole/creole_inclusion_and_plugins.rb +59 -284
  19. data/lib/creole/creole_inclusions.rb +142 -0
  20. data/lib/creole/creole_placeholder.rb +57 -23
  21. data/lib/creole/creole_plugins.rb +198 -0
  22. data/lib/creole/creole_tabular.rb +16 -8
  23. data/lib/creole/plugins/rail.rb +182 -0
  24. data/lib/creole/plugins/rubycode4creole.rb +136 -0
  25. data/lib/creole/plugins/struktex.rb +59 -0
  26. data/lib/creole/plugins/todonotes.rb +70 -0
  27. data/lib/docgenerator.rb +161 -71
  28. data/lib/docgenerator/attribute.rb +189 -156
  29. data/lib/docgenerator/characters.rb +824 -267
  30. data/lib/docgenerator/compatibility_v1.rb +249 -0
  31. data/lib/docgenerator/css.rb +53 -32
  32. data/lib/docgenerator/document.rb +119 -56
  33. data/lib/docgenerator/element.rb +304 -351
  34. data/lib/docgenerator/element_meta.rb +303 -0
  35. data/lib/docgenerator/elements.rb +1112 -481
  36. data/lib/docgenerator/environments.rb +153 -62
  37. data/lib/docgenerator/footnote.rb +30 -9
  38. data/lib/docgenerator/lists.rb +71 -47
  39. data/lib/docgenerator/packages/attachfile.rb +136 -0
  40. data/lib/{packages/docgenerator_caption.rb → docgenerator/packages/caption.rb} +28 -19
  41. data/lib/docgenerator/packages/hyperref.rb +194 -0
  42. data/lib/docgenerator/packages/listings.rb +179 -0
  43. data/lib/docgenerator/packages/pdfpages.rb +43 -0
  44. data/lib/docgenerator/packages/rubycode4doc.rb +227 -0
  45. data/lib/{packages/docgenerator_scrlettr2.rb → docgenerator/packages/scrlettr2.rb} +25 -16
  46. data/lib/docgenerator/packages/scrpage2.rb +410 -0
  47. data/lib/docgenerator/packages/struktex.rb +447 -0
  48. data/lib/docgenerator/packages/todonotes.rb +85 -0
  49. data/lib/{packages/docgenerator_url.rb → docgenerator/packages/url.rb} +7 -6
  50. data/lib/docgenerator/sections.rb +257 -83
  51. data/lib/docgenerator/standard.rb +19 -11
  52. data/lib/docgenerator/tabular.rb +234 -118
  53. data/lib/{templates → docgenerator/templates}/docgenerator_template.rb +52 -44
  54. data/lib/{templates → docgenerator/templates}/docgenerator_template.yaml +0 -0
  55. data/lib/{templates → docgenerator/templates}/docgenerator_template_css.rb +22 -16
  56. data/lib/wiki2doc/plugins/rubycode4wiki.rb +53 -0
  57. data/lib/wiki2doc/plugins/struktex.rb +12 -0
  58. data/lib/wiki2doc/wiki2docgenerator.rb +39 -38
  59. data/lib/wiki2doc/wikimedia_document.rb +24 -0
  60. data/manpage_elements.rb +10411 -0
  61. data/readme.rd +34 -24
  62. data/unittest/creole_testtext.creole +11 -0
  63. data/unittest/expected/test_document_usepackage_undefined.log +2 -2
  64. data/unittest/expected/test_runtex.stdout +0 -1
  65. data/unittest/expected/test_runtex_2.stdout +0 -1
  66. data/unittest/expected/toc_css.css +3 -2
  67. data/unittest/expected_creole/test_creole_characters_all.creole +28 -0
  68. data/unittest/expected_creole/test_creole_characters_all.html +15 -15
  69. data/unittest/expected_creole/test_creole_characters_all.latex +15 -15
  70. data/unittest/expected_creole/test_creole_footnotes_groupid.html +15 -0
  71. data/unittest/expected_creole/test_creole_links_file.html +2 -2
  72. data/unittest/expected_creole/test_creole_links_file.latex +2 -2
  73. data/unittest/expected_creole/test_creole_links_file.text +2 -2
  74. data/unittest/expected_creole/test_creole_picture_link.html +1 -1
  75. data/unittest/expected_creole_rail/test_rail_creole_object.tex +33 -0
  76. data/unittest/expected_creole_rail/test_rail_creole_placeholder.tex +40 -0
  77. data/unittest/expected_rubycode4doc/creole_complete.html +26 -0
  78. data/unittest/expected_rubycode4doc/creole_complete.tex +40 -0
  79. data/unittest/expected_rubycode4doc/creole_in_tab.html +4 -0
  80. data/unittest/expected_rubycode4doc/creole_in_tab.tex +6 -0
  81. data/unittest/expected_rubycode4doc/creole_inline_ruby.html +7 -0
  82. data/unittest/expected_rubycode4doc/creole_output.html +2 -0
  83. data/unittest/expected_rubycode4doc/creole_output.tex +4 -0
  84. data/unittest/expected_rubycode4doc/creole_rubycode.html +1 -0
  85. data/unittest/expected_rubycode4doc/creole_rubycode.tex +3 -0
  86. data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.html +1 -0
  87. data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.tex +3 -0
  88. data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.html +3 -0
  89. data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.tex +5 -0
  90. data/unittest/expected_rubycode4doc/wiki_1.html +8 -0
  91. data/unittest/expected_rubycode4doc/wiki_2.html +8 -0
  92. data/unittest/expected_rubycode4doc/wiki_3.html +9 -0
  93. data/unittest/expected_rubycode4doc/wiki_immediate_1.html +5 -0
  94. data/unittest/expected_rubycode4doc/wiki_immediate_2.html +5 -0
  95. data/unittest/expected_rubycode4doc/wiki_immediate_3.html +8 -0
  96. data/unittest/expected_rubycode4doc/wiki_immediate_full.html +21 -0
  97. data/unittest/expected_struktex/test_struktex_krug.creole +15 -0
  98. data/unittest/expected_struktex/test_struktex_krug.tex +19 -0
  99. data/unittest/expected_struktex/test_struktex_krug.wiki +15 -0
  100. data/unittest/expected_struktex/test_struktex_statement.creole +7 -0
  101. data/unittest/expected_struktex/test_struktex_statement.tex +9 -0
  102. data/unittest/expected_struktex/test_struktex_statement.wiki +7 -0
  103. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki.html +0 -0
  104. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki.latex +0 -0
  105. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki.text +0 -0
  106. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki.wiki +0 -0
  107. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_description.html +1 -1
  108. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_description.latex +1 -1
  109. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_description.text +1 -1
  110. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_description.wiki +1 -1
  111. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote.html +0 -0
  112. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote.latex +0 -0
  113. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote.text +0 -0
  114. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote.wiki +0 -0
  115. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote_2.html +0 -0
  116. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_footnote_groupid.html +0 -0
  117. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_html_code.html +0 -0
  118. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_html_code.latex +0 -0
  119. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_html_code.text +0 -0
  120. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_html_code.wiki +0 -0
  121. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_inline.html +0 -0
  122. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_inline.latex +0 -0
  123. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_inline.text +0 -0
  124. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_inline.wiki +0 -0
  125. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_label.html +0 -0
  126. data/unittest/expected_wikimedia/test_wiki_link.html +8 -0
  127. data/unittest/expected_wikimedia/test_wiki_link.latex +17 -0
  128. data/unittest/expected_wikimedia/test_wiki_link.wiki +11 -0
  129. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol.html +0 -0
  130. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol.latex +0 -0
  131. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol.text +0 -0
  132. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol.wiki +0 -0
  133. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_after_ul.html +0 -0
  134. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_after_ul.latex +0 -0
  135. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_after_ul.text +0 -0
  136. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_after_ul.wiki +0 -0
  137. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_ul.html +0 -0
  138. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_ul.latex +0 -0
  139. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_ul.text +0 -0
  140. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ol_ul.wiki +0 -0
  141. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul.html +0 -0
  142. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul.latex +0 -0
  143. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul.text +0 -0
  144. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul.wiki +0 -0
  145. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul_too_much.html +0 -0
  146. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul_too_much.latex +0 -0
  147. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul_too_much.text +0 -0
  148. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_list_ul_too_much.wiki +0 -0
  149. data/unittest/expected_wikimedia/test_wiki_picture.html +55 -0
  150. data/unittest/expected_wikimedia/test_wiki_picture.latex +76 -0
  151. data/unittest/expected_wikimedia/test_wiki_picture_thumb.html +5 -0
  152. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_tab1.html +0 -0
  153. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_tab1.latex +0 -0
  154. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_tab1.wiki +0 -0
  155. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_textformatting.html +0 -0
  156. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_textformatting.latex +0 -0
  157. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_textformatting.text +0 -0
  158. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_textformatting.wiki +0 -0
  159. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_toc.html +0 -0
  160. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_toc.latex +0 -0
  161. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_toc.text +0 -0
  162. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_toc.wiki +0 -0
  163. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_ul_multiple_line.html +0 -0
  164. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_ul_multiple_line.latex +0 -0
  165. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_ul_multiple_line.text +0 -0
  166. data/unittest/{expected_wiki → expected_wikimedia}/test_wiki_ul_multiple_line.wiki +0 -0
  167. data/unittest/{unittest_creole2doc.rb → unittest_creole.rb} +385 -476
  168. data/unittest/unittest_creole_placeholders.rb +272 -0
  169. data/unittest/unittest_creole_plugin_rail.rb +147 -0
  170. data/unittest/unittest_docgenerator.rb +206 -332
  171. data/unittest/unittest_docgenerator_characters.rb +650 -0
  172. data/unittest/unittest_docgenerator_runtex.rb +48 -20
  173. data/unittest/unittest_packages_struktex.rb +187 -0
  174. data/unittest/unittest_rubycode4doc.rb +275 -0
  175. data/unittest/unittest_wikimedia.rb +479 -0
  176. metadata +245 -172
  177. data/examples/results_expected/docgenerator_example.html +0 -39
  178. data/examples/results_expected/docgenerator_example.pdf +0 -0
  179. data/examples/results_expected/docgenerator_example.tex +0 -56
  180. data/examples/results_expected/docgenerator_example_footnote.html +0 -40
  181. data/examples/results_expected/docgenerator_example_footnote.pdf +0 -0
  182. data/examples/results_expected/docgenerator_example_footnote.tex +0 -50
  183. data/examples/results_expected/docgenerator_example_list.html +0 -18
  184. data/examples/results_expected/docgenerator_example_list.pdf +0 -0
  185. data/examples/results_expected/docgenerator_example_list.tex +0 -46
  186. data/examples/results_expected/docgenerator_example_restrictions.html +0 -22
  187. data/examples/results_expected/docgenerator_example_restrictions.pdf +0 -0
  188. data/examples/results_expected/docgenerator_example_restrictions.tex +0 -31
  189. data/examples/results_expected/docgenerator_example_tabular.html +0 -37
  190. data/examples/results_expected/docgenerator_example_tabular.pdf +0 -0
  191. data/examples/results_expected/docgenerator_example_tabular.tex +0 -41
  192. data/examples/results_expected/docgenerator_example_tripfalls.html +0 -27
  193. data/examples/results_expected/docgenerator_example_tripfalls.pdf +0 -0
  194. data/examples/results_expected/docgenerator_example_tripfalls.tex +0 -31
  195. data/lib/packages/docgenerator_attachfile.rb +0 -71
  196. data/lib/packages/docgenerator_hyperref.rb +0 -109
  197. data/lib/packages/docgenerator_listings.rb +0 -103
  198. data/lib/packages/docgenerator_pdfpages.rb +0 -24
  199. data/lib/packages/docgenerator_scrpage2.rb +0 -172
  200. data/self_docgenerator.rb +0 -163
  201. data/unittest/expected_wiki/test_wiki_link.html +0 -8
  202. data/unittest/expected_wiki/test_wiki_link.latex +0 -17
  203. data/unittest/expected_wiki/test_wiki_link.wiki +0 -11
  204. data/unittest/expected_wiki/test_wiki_picture.html +0 -55
  205. data/unittest/expected_wiki/test_wiki_picture.latex +0 -76
  206. data/unittest/expected_wiki/test_wiki_picture_thumb.html +0 -5
  207. data/unittest/test_rakefile_docgenerator.rb +0 -43
  208. data/unittest/unittest_versions.rb +0 -44
  209. data/unittest/unittest_wiki2doc.rb +0 -464
@@ -0,0 +1,447 @@
1
+ =begin rdoc
2
+ Code-generator for structex, a TeX-package to create Nassi-Shneidermann diagramms.
3
+
4
+ See examples a demonstration.
5
+
6
+ This plugin is defined for Creole and Wikitext.
7
+ Depending which classes are already defined, they are added as plugins.
8
+
9
+ =end
10
+ require 'docgenerator'
11
+
12
+ =begin rdoc
13
+ Extend Array class to build structogramms.
14
+ =end
15
+ class Array
16
+ =begin rdoc
17
+ Recursive extension for all structogramm elements.
18
+ So we can avoid a check, if the method is available.
19
+ =end
20
+ def to_structex
21
+ return self.map{|e|
22
+ if e.respond_to?( :to_structex )
23
+ e.to_structex
24
+ else
25
+ e
26
+ end
27
+ }.flatten
28
+ end
29
+ end
30
+
31
+
32
+ module Docgenerator
33
+ module Packages
34
+ =begin rdoc
35
+ Classes to provide support for the LaTeX-class struktex.
36
+
37
+ * http://www.ctan.org/tex-archive/macros/latex/contrib/struktex/
38
+ =end
39
+ module Struktex
40
+ USEPACKAGE_STRUKTEX = element(:usepackage,{}, 'struktex').cr
41
+ USEPACKAGE_STRUKTEX_PROOF = '\sProofOn '
42
+
43
+ #Bug: \pVar mag entgegen der Doku keine _ mag
44
+ REPL_UNDERSCORE = false
45
+
46
+ =begin rdoc
47
+ Code-generator for structex, a TeX-package to create Nassi-Shneidermann diagramms.
48
+
49
+ This is no subclass of Element, the initialize-method should get it's own
50
+ parameters.
51
+
52
+ To define define ele Element-methods, module Element_methods is included.
53
+ =end
54
+ class Structogramm
55
+
56
+ include Docgenerator::Element_methods #defines to_doc
57
+
58
+ PARSTRUCT = Struct.new('PARSTRUCT', :dir, :name, :text )
59
+ def self.head()
60
+ USEPACKAGE_STRUKTEX
61
+ end
62
+ attr_accessor :sourcecode
63
+ =begin rdoc
64
+ Define a structogramm.
65
+ =end
66
+ def initialize( title, x, y, code = String.new )
67
+ @title = title
68
+ @sourcecode = code
69
+ @x = x
70
+ @y = y
71
+ @elements = []
72
+
73
+ @log = Log4r::Logger.new("Structogramm #{title}")
74
+ @log.outputters = Log4r::StdoutOutputter.new('log_stdout')
75
+ end
76
+
77
+ def <<(code)
78
+ @sourcecode << code
79
+ @sourcecode << "\n"
80
+ end
81
+ #
82
+ #Analyse sourcecode and fill @elements
83
+ def analyse_sourcecode( code = @sourcecode )
84
+ stack = [ @elements ]
85
+ lastcmd = nil
86
+ code.each_line{|l|
87
+ l.strip!
88
+ case l
89
+ when /\A\s*#~/ #comment
90
+ when /\A%/
91
+ stack.last << l
92
+ when /ENDIF\s*(.*)/, /ENDCASE\s*(.*)/,
93
+ /ENDWHILE\s*(.*)/, /ENDFOREVER\s*(.*)/,
94
+ /ENDSELECT\s*(.*)/
95
+ #~ @elements << "\\ifend"
96
+ stack.pop #close actual IF
97
+ lastcmd = nil
98
+ when /IF\s*(.*)/
99
+ #~ @elements << "\\ifthenelse{3}{3}{#{$1}}{\\pTrue}{\\pFalse}"
100
+ struct = Structogramm_IF.new(inline($1))
101
+ stack.last << struct
102
+ stack << struct
103
+ lastcmd = nil
104
+ when /THEN\s*(\d)?\s*(.*)/
105
+ stack.last.thensize = $1 if $1
106
+ stack.last.thentext = inline($2) if $2 and ! $2.empty?
107
+ lastcmd = nil
108
+ when /ELSE\s*(\d)?\s*(.*)/
109
+ stack.last.elsesize = $1 if $1
110
+ stack.last.elsetext = inline($2) if $2 and ! $2.empty?
111
+ #~ @elements << "\\change"
112
+ stack.last.else
113
+ lastcmd = nil
114
+ when /CASE\s*(\d)?\s*(.*)/
115
+ struct = Structogramm_CASE.new( inline($2), $1, @log)
116
+ stack.last << struct
117
+ stack << struct
118
+ lastcmd = nil
119
+ when /(?:SWITCH|WHEN)(?:\[([crl])\])?\s*(.*)/
120
+ stack.last.switch(inline($2), $1)
121
+ lastcmd = nil
122
+ when /WHILE\s*(.*)/, /SELECT\s*(.*)/
123
+ struct = Structogramm_WHILE.new(inline($1))
124
+ stack.last << struct
125
+ stack << struct
126
+ lastcmd = nil
127
+ when /REPEAT\s*(.*)/
128
+ struct = Structogramm_REPEAT.new(inline($1))
129
+ stack.last << struct
130
+ stack << struct
131
+ lastcmd = nil
132
+ when /UNTIL\s*(.*)/
133
+ stack.last.condition = $1
134
+ stack.pop #close actual IF
135
+ lastcmd = nil
136
+ when /FOREVER\s*(.*)/
137
+ struct = Structogramm_FOREVER.new()
138
+ stack.last << struct
139
+ stack << struct
140
+ lastcmd = nil
141
+ when /<=\s*(.*)/
142
+ stack.last << lastcmd = Structogramm_CMD.new( "exit", inline($1) )
143
+ when /=>\s*(.*)/
144
+ stack.last << lastcmd = Structogramm_CMD.new( "sub", inline($1) )
145
+ when /<>\s*(.*)/
146
+ stack.last << lastcmd = Structogramm_CMD.new( "return", inline($1) )
147
+ when /(<->|<-|->)\s*(\S+)\s*(.*)/
148
+ if ! lastcmd
149
+ @log.warn("description #{l} without command") if @log.warn?
150
+ else
151
+ lastcmd.par << PARSTRUCT.new($1, inline($2), $3 )
152
+ end
153
+ else
154
+ stack.last << lastcmd = Structogramm_CMD.new( "assign", inline(l) )
155
+ end
156
+ }
157
+ end
158
+ def inline( inp )
159
+ #~ return inp.gsub(/'(.*?)'/, '\\pKey{\1}')
160
+ return Document.texify(inp).gsub(/'(.*?)'/, '\\pKey{\1}').gsub(/->/, '$\to$')
161
+ end
162
+ def to_s()
163
+ @sourcecode
164
+ end
165
+ #Print the source code in a verbatim environmet
166
+ def verbatim()
167
+ return element(:verbatim,{},@sourcecode.gsub(/\t/, ' ')).cR
168
+ end
169
+ #
170
+ #Option:
171
+ #-:centernss Flag if the structogramm should be entered in an environment.
172
+ def to_latex( options = {} )
173
+ options = options.merge( :centernss => true )
174
+ analyse_sourcecode()
175
+ tex = [nil]
176
+ tex << '\begin{centernss}' if options[:centernss]
177
+ tex << "\\begin{struktogramm}(#{@x},#{@y})[#{@title}]"
178
+ tex << @elements.to_structex.map{|e|
179
+ #~ "\t#{e}"
180
+ "#{e}"
181
+ }
182
+ tex << '\end{struktogramm}'
183
+ tex << '\end{centernss}' if options[:centernss]
184
+ tex << nil
185
+ #Gsub notwendig, da \pVar entgegen der Doku keine _ mag
186
+ if REPL_UNDERSCORE
187
+ return tex.join("\n").gsub(/_/, '\_')
188
+ else
189
+ return tex.join("\n")
190
+ end
191
+ end
192
+ #Return for wiki2docgenerator
193
+ def to_wiki( options = {} )
194
+ return <<xx
195
+ >>>structogramm{#{@title};#{@x};#{@y}}
196
+ #{@sourcecode}
197
+ <<<
198
+ xx
199
+ end #to_wiki
200
+ #Return for creole2doc
201
+ def to_creole( options = {} )
202
+ return <<xx
203
+ <<<structogramm|#{@title};#{@x};#{@y}
204
+ #{@sourcecode}
205
+ >>>
206
+ xx
207
+ end #to_creole
208
+
209
+
210
+ #Save TEX-code
211
+ def save( filename, overwrite = false )
212
+
213
+ old = nil
214
+ File.open( filename ){|f| old = f.readlines.to_s } if File.exists?(filename)
215
+
216
+ if /\.nss/ =~ filename
217
+ new = self.to_latex(:centernss => false)
218
+ else
219
+ new = self.to_latex()
220
+ end
221
+ if old != new
222
+ if overwrite or old == nil
223
+ File.open( filename, 'w'){|f|
224
+ f << new
225
+ }
226
+ @log.INFO("Save changed #{filename}") if @log.INFO?
227
+ else
228
+ @log.info("Changed #{filename}")
229
+ end
230
+ else
231
+ @log.INFO("Unchanged #{filename}") if @log.INFO?
232
+ end
233
+ #~ doc = Document.new(:include)
234
+ #~ doc.body << self.to_tex()
235
+ #~ doc.save( filename, overwrite )
236
+ end
237
+ end #Structogramm
238
+
239
+
240
+ class Structogramm_CMD
241
+ def initialize( type, cmd )
242
+ @type = type
243
+ @cmd = [ cmd ]
244
+ @par = []
245
+ end
246
+ #Interface definition of command.
247
+ attr_reader :par
248
+ #Add command... into if or else-branch
249
+ #~ def << (add)
250
+ #~ @cmd << add
251
+ #~ end
252
+ def to_structex()
253
+ tex = []
254
+ tex << "\\#{@type}{#{@cmd.join}"
255
+ if ! @par.empty?
256
+ #~ tex << "\\\\\\\\\n"
257
+ tex << "\\\\\n"
258
+ tex << interface(@par, nil)
259
+ #~ tex << interface(@par, 'Interface')
260
+ end
261
+ tex << "}"
262
+ return tex.join()
263
+ end
264
+ def interface( list, text )
265
+ return nil if list.empty?
266
+ interface = [ "\\begin{declaration}[#{text}]" ]
267
+ list.each{|par|
268
+ dir = nil
269
+ case par.dir
270
+ when '->'; dir = '$\\Rightarrow$'
271
+ when '<-'; dir = '$\\Leftarrow$'
272
+ when '<->'; dir = '$\\Leftrightarrow$'
273
+ end
274
+ #par.name may contain _
275
+ interface << "\\description{#{dir}\t#{par.name}}{#{par.text}}"
276
+ }
277
+ interface << "\\end{declaration}\n"
278
+ return interface.join("\n")
279
+ end
280
+ def inspect()
281
+ return "#<Structogramm_CMD: #{@type}>"
282
+ #~ return "#<IF: #{@ifstatement}>"
283
+ end
284
+ end
285
+
286
+ class Structogramm_WHILE
287
+ def initialize( whilestatement )
288
+ @whilestatement = whilestatement
289
+ @cmd = []
290
+ end
291
+ #Add command... into if or else-branch
292
+ def << (add)
293
+ @cmd << add
294
+ end
295
+ def to_structex()
296
+ tex = []
297
+ tex << "\\while{#{@whilestatement}}"
298
+ tex << @cmd.to_structex
299
+ tex << "\\whileend"
300
+ return tex.join("\n")
301
+ end
302
+ def inspect()
303
+ return "#<Structogramm_WHILE: #{@whilestatement}>"
304
+ #~ return "#<IF: #{@ifstatement}>"
305
+ end
306
+ end
307
+
308
+ class Structogramm_REPEAT
309
+ def initialize( repeatstatement )
310
+ @condition = repeatstatement
311
+ @cmd = []
312
+ end
313
+ attr_accessor :condition
314
+ #Add command... into if or else-branch
315
+ def << (add)
316
+ @cmd << add
317
+ end
318
+ def to_structex()
319
+ tex = []
320
+ tex << "\\until{#{@condition}}"
321
+ tex << @cmd.to_structex
322
+ tex << "\\untilend"
323
+ return tex.join("\n")
324
+ end
325
+ def inspect()
326
+ return "#<Structogramm_REPEAT: #{@condition}>"
327
+ #~ return "#<IF: #{@ifstatement}>"
328
+ end
329
+ end
330
+
331
+ class Structogramm_FOREVER
332
+ def initialize()
333
+ @cmd = []
334
+ end
335
+ #Add command... into if or else-branch
336
+ def << (add)
337
+ @cmd << add
338
+ end
339
+ def to_structex()
340
+ tex = []
341
+ tex << "\\forever"
342
+ tex << @cmd.to_structex
343
+ tex << "\\foreverend"
344
+ return tex.join("\n")
345
+ end
346
+ def inspect()
347
+ return "#<Structogramm_FOREVER>"
348
+ #~ return "#<IF: #{@ifstatement}>"
349
+ end
350
+ end
351
+
352
+ class Structogramm_IF
353
+ def initialize( ifstatement )
354
+ @ifstatement = ifstatement
355
+ @then = []
356
+ @else = nil #keep it empty, until method 'else' is called
357
+ @thentext = '\\pTrue'
358
+ @elsetext = '\\pFalse'
359
+ @thensize = 3
360
+ @elsesize = 3
361
+ end
362
+ #Text for 'then'-Branch. default: \pTrue
363
+ attr_writer :thentext
364
+ #Text for 'else'-Branch
365
+ attr_writer :elsetext
366
+ #Textwidth for 'then'-Branch
367
+ attr_writer :thensize
368
+ #Textwidth for 'else'-Branch
369
+ attr_writer :elsesize
370
+ #Add command... into if or else-branch
371
+ def << (add)
372
+ @else ? @else << add : @then << add
373
+ end
374
+ #Change from then-branch to else-branch
375
+ def else()
376
+ @else = []
377
+ end
378
+ def to_structex()
379
+ tex = []
380
+ tex << "\\ifthenelse{#{@thensize}}{#{@elsesize}}{#{@ifstatement}}{#{@thentext}}{#{@elsetext}}"
381
+ tex << @then.to_structex
382
+ tex << "\\change"
383
+ tex << @else.to_structex
384
+ tex << "\\ifend"
385
+ return tex.join("\n")
386
+ end
387
+ def inspect()
388
+ return "#<Structogramm_IF: #{@ifstatement}>"
389
+ #~ return "#<IF: #{@ifstatement}>"
390
+ end
391
+ end
392
+
393
+ class Structogramm_CASE
394
+ def initialize( casevar, degree = 4, log = Log4r::Logger.new('log') )
395
+ @casevar = casevar
396
+ @degree = degree.to_i
397
+ if @degree == 0
398
+ @log.warn("CASE #{casevar} mit degree 0") if @log.warn?
399
+ end
400
+ @cmd = []
401
+ @switches = [] #List of branches.
402
+ end
403
+ def << (add)
404
+ @cmd << add
405
+ end
406
+ #Change branch.
407
+ def switch( condition, option = nil )
408
+ switch = Structogramm_SWITCH.new( condition, option )
409
+ #The first branch is part of the \case-statement
410
+ @cmd << switch if ! @switches.empty?
411
+ @switches << switch
412
+ end
413
+ def to_structex()
414
+ tex = []
415
+ tex << "\\case{#{@degree}}{#{@switches.size}}{#{@casevar}}{#{@switches.first.value}}"
416
+ tex << @cmd.to_structex
417
+ tex << "\\caseend"
418
+ return tex.join("\n")
419
+ end
420
+ def inspect()
421
+ return "#<Structogramm_CASE: #{@casestatement}>"
422
+ #~ return "#<IF: #{@ifstatement}>"
423
+ end
424
+ end
425
+
426
+ class Structogramm_SWITCH
427
+ def initialize( value, option )
428
+ @value = value
429
+ @option = option
430
+ end
431
+ attr_reader :value
432
+ def to_structex()
433
+ tex = []
434
+ tex << "\\switch"
435
+ tex << "[#{@option}]" if @option
436
+ tex << "{#{@value}}"
437
+ return tex.join()
438
+ end
439
+ def inspect()
440
+ return "#<Structogramm_SWITCH: #{@value}>"
441
+ #~ return "#<IF: #{@ifstatement}>"
442
+ end
443
+ end
444
+
445
+ end #module Struktex
446
+ end #module Packages
447
+ end #module Docgenerator
@@ -0,0 +1,85 @@
1
+ module Docgenerator
2
+ module Packages
3
+ =begin rdoc
4
+ Support of the LaTeX-package todonotes.
5
+
6
+ * http://ctan.org/pkg/todonotes
7
+ =end
8
+ module Todonotes
9
+ =begin rdoc
10
+
11
+ Example:
12
+ ...
13
+ \usepackage{todonotes}
14
+ ...
15
+ \newcommand{\addref}{\todo[color=red!40]{Addreference.}}
16
+ \newcommand{\rewrite}[1]{\todo[color=green!40]{#1}}
17
+ ...
18
+ % ----------------------------------------------------------------
19
+ \begin{document}
20
+ \blindtext\todo{AAA}\todo{BBB}\todo{CCC}\blindtext
21
+
22
+ \blindtext\todo{AAA}\todo[color=yellow]{BBB}\todo[color=green]{CCC}\blindtext
23
+
24
+ \blindtext\todo[inline]{AAA}\blindtext
25
+ =end
26
+ class Todo < Element
27
+
28
+ add_attributes( {
29
+ #~ disable The disable option can be given directly to the todo command. If given the command has no effect.
30
+ :color => Attribute.create( [ :texkeyval], [ String ] ),
31
+ :backgroundcolor => Attribute.create( [ :texkeyval], [ String ] ),
32
+ :linecolor => Attribute.create( [ :texkeyval], [ String ] ),
33
+ :bordercolor => Attribute.create( [ :texkeyval], [ String ] ),
34
+ :inline => Attribute.create( [ :texkeyval], [ true, false ] ),
35
+ =begin
36
+ more options:
37
+ line / noline
38
+ inline / noinline
39
+ size
40
+ list / nolist When the option nolist is given, the todo item will not appear in the list of todos.
41
+ caption For listoftodos
42
+ =end
43
+ }#.update(HTML_ATTR_ALL)
44
+ )
45
+
46
+ add_output( :latex, '#{linebreak(@crbefore)}\todo[#{texkeyval()}]{#{@content}}#{linebreak(@crafter)}')
47
+
48
+ def self.head()
49
+ element(:usepackage, {}, 'todonotes').cr
50
+ end
51
+ end #Todonotes::Todo
52
+
53
+
54
+ =begin rdoc
55
+ Define Element :missingfigure
56
+
57
+ Create an instance with
58
+ element( :missingfigure, [ attributes, [content]] )
59
+ or
60
+ Missingfigure.new( [ attributes, [content]] )
61
+ Attributes may be:
62
+ * :figwidth:
63
+ =end
64
+ class Missingfigure < Element
65
+ add_attribute :figwidth, Attribute.create([:texkeyval], [Integer, String] ) #String for \textwidth... for HTML use CSS
66
+ add_latex_output '\missingfigure{#{@content}}'
67
+ end #Missingfigure
68
+
69
+ =begin rdoc
70
+ Define Element :listoftodos
71
+
72
+ Create an instance with
73
+ element( :listoftodos, [ attributes, [content]] )
74
+ or
75
+ Listoftodos.new( [ attributes, [content]] )
76
+ Attributes are not defined for this element.
77
+ =end
78
+ class Listoftodos < Element
79
+ has_no_content false
80
+ add_latex_output '\listoftodos'
81
+ end #Listoftodos
82
+
83
+ end #module Todonotes
84
+ end #module Packages
85
+ end #Docgenerator