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
@@ -1,239 +1,46 @@
1
1
  #encoding: utf-8
2
- #This class defines possible elements of a document.
3
- #For each type of elements a class is defined.
4
- #The definition can be done explicite or generic with Element.create.
5
- #
6
- #All types of elements are stored in a hash,
7
- #the elements can be created via the method Element.get (or element() ).
8
- #
9
- #Tracing
10
- #Often there is the problem, that you get an error when you write the element.
11
- #But the error is done, when the element is created.
12
- #When you redefine ELEMENTS_TRACE, some tracing information are stored during creation.
2
+
3
+ #
4
+
5
+ module Docgenerator
6
+ =begin rdoc
7
+ This class defines possible elements of a document.
8
+ For each type of elements a class is defined.
9
+ The definition can be done explicite or generic with Element.create.
10
+
11
+ All types of elements are stored in a hash,
12
+ the elements can be created via the method Element.get (or element() ).
13
+
14
+ Tracing
15
+ Often there is the problem, that you get an error when you write the element.
16
+ But the error is done, when the element is created.
17
+ When you redefine ELEMENTS_TRACE, some tracing information are stored during creation.
18
+ =end
13
19
  class Element
14
20
  include Docgenerator #get VERSION
15
- #Hash with all ids and their corresponding classes.
16
- @@ids = Hash.new( )
17
- #All attributes are stored in this hash.
18
- #The key is the corresponding class.
19
- @@attr = { Element => {} }
20
-
21
- #Flag, if the calling stack should be analysed for each Element
22
- #Only for document debbuging
23
- @@trace = nil
24
- #Set Element tracing on/off
25
- def Element.trace=( val )
26
- @@trace = val
27
- end
28
21
 
29
22
  SUPPORTED_TARGETS = [ :latex, :html, :wiki, :text, :debug ]
30
23
  SUPPORTED_TARGETS << :context #Added later
31
24
  SUPPORTED_TARGETS << :creole #Added later
32
-
33
25
 
34
- #Return a element class.
35
- def Element.get( name )
36
- return @@ids[name]
37
- end
38
- #This method is called, when a subclass of this class is defined.
39
- #This can happen via Element.create or in another programm.
40
- #
41
- #Add subclasses to the list of all element classes and initialize some internal hashes.
42
- def Element.inherited( subclass )
43
- DOCGENERATOR_LOGGER.debug("New subclass for 'Element' created: '#{subclass}'") if DOCGENERATOR_LOGGER.debug?
44
- #All attributes of a class are collected in a hash.
45
- @@attr[subclass] = {}
46
- #Fill @@ids
47
- #There is no possibility to give a list of id's or names to a 'inherit'-method.
48
- #So a special method Element.add is used.
49
- Element.add( [subclass], subclass )
50
- end
51
- #Add a new element class or assign another name (synonym) for a class.
52
- #The initial call is made by Element.inherited.
53
- #
54
- #Element.add( [:element], Element )
55
- def Element.add( idlist, elementClass )
56
- if ! elementClass.new.kind_of?( Element )
57
- raise "Element.add get no Element-class #{elementClass}"
58
- end
59
- idlist = [ idlist ] if ! idlist.kind_of?( Array )
60
- raise "Empty idlist for #{elementClass}" if idlist.empty?
61
-
62
- idlist.each{|id|
63
- if @@ids[ id ] == nil
64
- DOCGENERATOR_LOGGER.debug("Element class '#{id}' is new: #{elementClass}") if DOCGENERATOR_LOGGER.debug?
65
- #All new ids are collected
66
- @@ids[ id ] = elementClass
67
- elsif @@ids[ id ] == elementClass
68
- DOCGENERATOR_LOGGER.warn("Element class '#{id}' is defined double: #{elementClass}") if DOCGENERATOR_LOGGER.warn?
69
- else
70
- DOCGENERATOR_LOGGER.error("Error: ID '#{id}' is redefined #{@@ids[id]} -> #{elementClass}") if DOCGENERATOR_LOGGER.error?
71
- @@ids[id] = elementClass
72
- end
73
- }
74
- end
75
-
76
- #Generic creation of a new class to define a new element.
77
- #- name must be defined.
78
- #- attr is a hash with all attributes.
79
- # For details see Element.add_attributes
80
- #- content is a flag, which defines if the element contains "content".
81
- # Valid values are:
82
- # - true: content available and necessary (e.g. <p>)
83
- # - :empty_ok: content available, but not necessary (e.g. <td> or iframe)
84
- # - false: no content, no endtag, but tag closed with / (example: <br />)
85
- # - nil: no content, no endtag, no closing (example: <br>)
86
- #- output contains a hash with logic, how to handle the output.
87
- # -:htmltag Tag for html-output.
88
- # -:latex Template for LaTeX-output
89
- # -:html Template for HTML-output
90
- def Element.create( name, attr = {}, content = false, output = {} )
91
- #First some checks
92
- if ! attr.kind_of?( Hash )
93
- raise "Type error Element.create: Expected Hash, get #{attr.class}"
94
- end
95
- #Generic class creation
96
- elementclass = Class.new( Element )
97
- #Add the id of the new class to central collection.
98
- Element.add( name, elementclass )
99
-
100
- #Set a flag, if the class can contain 'content'.
101
- #-true: content available and necessary (e.g. <p>)
102
- #-:empty_ok: content available, but not necessary (e.g. <td>)
103
- #-false: no content, no endtag, but tag closed with / (example: <br />)
104
- #-nil: no content, no endtag, no closing (example: <br>)
105
- elementclass.class_eval( %Q|
106
- def content?()
107
- return #{content.inspect}
108
- end|)
109
-
110
- output.each{ |k,v|
111
- case k
112
- when :latex
113
- elementclass.add_output( :latex, v )
114
- when :context
115
- elementclass.add_output( :context, v )
116
- when :html
117
- elementclass.add_output( :html, v )
118
- when :text
119
- elementclass.add_output( :text, v )
120
- when :wiki
121
- elementclass.add_output( :wiki, v )
122
- when :creole
123
- elementclass.add_output( :creole, v )
124
- when :htmltag
125
- if v
126
- elementclass.class_eval( "def htmltag()\n'#{v}'\nend" )
127
- else
128
- elementclass.class_eval( "def htmltag()\nnil\nend" )
129
- end
130
- else
131
- puts "#{__FILE__}##{__LINE__}: Unknown format #{k} for #{name}"
132
- end
133
- }
134
- elementclass.add_attributes( attr )
135
- #Return the class.
136
- return elementclass
137
- end
138
- #Return all id's of the class.
139
- #@@ids is expanded in Element.add.
140
- def ids( )
141
- myids = []
142
- @@ids.each{|k,v| myids << k if v == self.class and k.class != Class }
143
- return myids
144
- end
145
- #Prepares an overview on all Elements.
146
- #Can be used for some debugging.
147
- def Element.overview( list = @@ids.values.uniq )
148
- if ! list.kind_of?(Array)
149
- list = [ list ]
150
- end
151
- result = '=' * 10 + "\nElement overview:"
152
- list.each{ |k|
153
- result += "\n#{k}\n"
154
- result += "\tId's:\t\t"
155
- result += k.new.ids.join("\n\t\t\t")
156
- result += "\n\tAttributes:\t"
157
- result += "can contain "
158
- result += "no " if ! k.new.content?
159
- result += "content\n\t\t\t"
160
- @@attr[k].each{ |k2,v|
161
- result += "#{k2}:\t#{v.inspect}\n\t\t\t"
162
- }
163
- }
164
- return result
165
- end
166
- #Add possible attributes to an element class.
167
- #Attributes are defined in a hash, each key get a array with values.
168
- #The values can be:
169
- #- OBLIGATORY/OPTIONAL
170
- #- Alias (this allows the usage of a position and a name for a parameter).
171
- #- allowed elements ( e.g. list content only list items)
172
- #Problem: Attributes are not inherited. See Element.get_attribute_list
173
- #
174
- #This method is called from a subclass.
175
- #Fixme: add_attributes overwrites everything.
176
- def Element.add_attributes( attr )
177
- elattr = @@attr[self] #self is the class
178
- attr.each{ |k,a |
179
- elattr[k] = a
180
- }
181
- end
182
- #Returns list of attributes.
183
- #Can be used for copying attributes from one class to another class.
184
- def Element.get_attribute_list( elementclass )
185
- return @@attr[elementclass]
186
- end
187
- #Add an output routine.
188
- def Element.add_output( target, string )
189
- case target
190
- when :latex
191
- cmd = "def to_latex(options = {})\n"
192
- when :context
193
- cmd = "def to_context(options = {})\n"
194
- when :html
195
- cmd = "def to_html(options = {})\n"
196
- when :text
197
- cmd = "def to_text(options = {})\n"
198
- when :wiki
199
- cmd = "def to_wiki(options = {})\n"
200
- when :creole
201
- cmd = "def to_creole(options = {})\n"
202
- else
203
- puts "#{self}: Undefined target format #{target}"
204
- end
205
- if ! string.kind_of?( String )
206
- puts "Error element <#{self.new.ids}>: #{string.inspect} is no String"
207
- end
208
- cmd << <<code
209
- o = Docgenerator_logger.set_option_defaults(options)
210
- o[:log].debug("enter to_doc(#{target}) for #{self.inspect}, options: \#{options.keys.inspect}") if o[:log].debug?
211
- code
212
- template = string.gsub(/\\/, '\\\\\\')
213
- template.gsub!(/"/, '\"')
214
- template.gsub!(/@content\}/, "@content.to_doc(#{target.inspect}, o)}")
215
- cmd << " \"#{template}\"\n"
216
- cmd << "end\n"
217
- class_eval( cmd )
218
- cmd #return cmd for unit test
219
- end
220
- #Defines an element.
221
- #
222
- #There are two ways to add values:
223
- #- "named" values in an hash.
224
- # This named values can be attributes of a HTML-Tag or Parameters of a TeX-Makro.
225
- # There is a check, if the attribute exist.
226
- #- Content. Values "inside" the element.
227
- # The content can be the content of a HTML-Tag or the content of a TeX-Environment.
228
- # There is a check, if this class allows content.
229
- #:log is the default attribute for the logger.
230
- #In Element#to_doc you can give another logger!
26
+ =begin rdoc
27
+ Defines an element.
28
+
29
+ There are two ways to add values:
30
+ - "named" values in an hash.
31
+ This named values can be attributes of a HTML-Tag or Parameters of a TeX-Makro.
32
+ There is a check, if the attribute exist.
33
+ - Content. Values "inside" the element.
34
+ The content can be the content of a HTML-Tag or the content of a TeX-Environment.
35
+ There is a check, if this class allows content.
36
+ :log is the default attribute for the logger.
37
+ In Elementto_doc you can give another logger!
38
+ =end
231
39
  def initialize( attr={}, content = nil)
232
40
  #@attr is a hash containing the values for each attribute.
233
41
  @attr = Hash.new( )
234
- #~ @log = DOCGENERATOR_LOGGER
235
42
  #Attention! in to_doc another logger may be given.
236
- @log = attr[:log] ? attr[:log] : DOCGENERATOR_LOGGER
43
+ @log = attr[:log] || DOCGENERATOR_DEFAULT_LOGGER
237
44
  attr.delete(:log) #remove from attr-interface
238
45
  #attr alias
239
46
  @attr_alias = Hash.new( )
@@ -252,7 +59,7 @@ code
252
59
  @suppressed_targets = []
253
60
 
254
61
  #Initialize the attribute hash.
255
- @@attr[self.class].each{ |k,a|
62
+ self.class.attributes.each{ |k,a|
256
63
  #type check on Attribute does not work .
257
64
  if a.kind_of?( Symbol )
258
65
  #Filled in the second run
@@ -264,7 +71,7 @@ code
264
71
  end
265
72
  }
266
73
  #Assign Alias-Attributes
267
- @@attr[self.class].each{ |k,a|
74
+ self.class.attributes.each{ |k,a|
268
75
  next if !a.kind_of?( Symbol )
269
76
  if @attr[a]
270
77
  @attr_alias[k] = @attr[a]
@@ -279,20 +86,59 @@ code
279
86
  elsif @attr_alias[k]
280
87
  @attr_alias[k] << v
281
88
  else
282
- @log.warn("Usage of unknown attribute '#{k}' in '#{self.ids.join(',')}'") if @log.warn?
89
+ @log.warn("Usage of unknown attribute '#{k}' in #{self.inspect}") if @log.warn?
90
+ #~ @log.debug(caller) if @log.debug?
283
91
  end
284
92
  }
285
- @called_by = prepare_tracing_info( @@trace )
93
+ #store info, where the element was created
94
+ @creation_caller = prepare_tracing_info() if Docgenerator.trace_on?
286
95
  self << content if content
287
96
  end
288
- #List (array) of targets, where the element can be used.
289
- #Default are all supported targets.
290
- #
291
- #With restrictions of this attribute, elements can be restricted on special documents.
97
+ =begin rdoc
98
+ Only for debbuging reasons.
99
+
100
+ This method analyse the caller-stack and provides
101
+ the first "no lib/docgenerator-place".
102
+ This should be the location, where the element is created.
103
+
104
+ Via Element#inspect you get access to this information.
105
+ =end
106
+ def prepare_tracing_info()
107
+ caller().each{|c|
108
+ next if ( /lib\/(docgenerator|creole|wiki2doc)/ =~ c )
109
+ return c
110
+ }
111
+ #--> No calling stack outside lib/docgenerator found --> Error
112
+ @log.error('Element#prepare_tracing_info: Found no starting place in caller stack') if @log.error?
113
+ caller().each{|c| @log.debug("\t#{c}") } if @log.debug?
114
+ return caller()
115
+ end
116
+ =begin rdoc
117
+ Set a text for the inspect command.
118
+
119
+ Nil if the information was not collected at Element#new.
120
+ =end
121
+ def inspect_creation_caller
122
+ if @creation_caller
123
+ ", created at #{@creation_caller}"
124
+ else
125
+ nil #'unknown. Please set Elements.trace if needed'
126
+ end
127
+ end
128
+ def inspect()
129
+ return "<#{self.class}#{inspect_creation_caller}>"
130
+ end
131
+
132
+ =begin rdoc
133
+ List (array) of targets, where the element can be used.
134
+ Default are all supported targets.
135
+
136
+ With restrictions of this attribute, elements can be restricted on special documents.
137
+ =end
292
138
  def restrict_to( *argv )
293
139
  @targets = []
294
140
  @suppressed_targets = SUPPORTED_TARGETS.dup
295
- @log.warn("Element#restrict_to: #{self.inspect} restrict to #{argv.inspect}") if @log.warn?
141
+ @log.info("Element#restrict_to: #{self.inspect} restrict to #{argv.inspect}") if @log.warn?
296
142
  argv.each{ |arg|
297
143
  #~ if ! SUPPORTED_TARGETS.include?( arg )
298
144
  if ! @suppressed_targets.delete( arg )
@@ -302,149 +148,176 @@ code
302
148
  }
303
149
  self
304
150
  end
305
- #Only for debbuging reasons.
306
- #Should contain the first "no docgenerator.rb-place, where part is called
307
- #if @@trace is on, some tracing information is stored during creation.
308
- def prepare_tracing_info( doit = @@trace )
309
- return nil if ! doit
310
- caller().each{|c|
311
- next if ( /DocumentGenerator/ =~ c )
312
- return c
313
- }
314
- #--> No calling stack found --> Error
315
- puts '----'*10
316
- puts 'Element#prepare_tracing_info: Found no starting place in caller stack'
317
- caller().each{|c| puts c }
318
- puts '----'*10
319
- return caller()
320
- end
321
- def inspect()
322
- if @@trace
323
- called_by = ", Created in #{@called_by}"
324
- else
325
- called_by = nil #'unknown. Please set Elements.trace if needed'
326
- end
327
- return "<Class Element(#{self.ids.join(',')})#{called_by}>"
328
- #~ if @content
329
- #~ return "<Class Element(#{self.ids.join(',')}) @content=#{@content.inspect}>"
330
- #~ else
331
- #~ return "<Class Element(#{self.ids.join(',')}) @attr=#{@attr.inspect}>"
332
- #~ end
333
- end
334
151
  #Accessor on content
335
152
  attr_reader :content
336
- #Add something to the content.
337
- #Only possible on elements, which supports "content".
153
+ #Logger of the element
154
+ attr_reader :log
155
+ =begin rdoc
156
+ Add something to the content.
157
+ Only possible on elements, which supports "content".
158
+ =end
338
159
  def << ( content )
339
160
  if @content
340
161
  @content << content
341
162
  else
342
- @log.warn("Add content to an element without this feature #{self.ids.inspect}, #{content.inspect}") if @log.warn?
163
+ @log.warn("Add content to an element without this feature #{self.inspect}, #{content.inspect}") if @log.warn?
343
164
  end
344
165
  end
345
166
 
346
- #Add content after a target (other content)
347
- # insertafter(target,*obj)
348
- #Requires the ability of "content".
349
- def insertafter(target,*obj)
350
- self.insert(target, 1, obj)
351
- end
352
- #Add content before a target (other content)
353
- # insertbefore(target,*obj)
354
- #Requires the ability of "content".
355
- def insertbefore(target,*obj)
356
- self.insert(target, 0, obj)
357
- end
358
- #Insert content relative to a given target.
359
- #The target must exist, pos defines the relative position (0=before, 1=one after the element).
360
- #Method called by Element#insertbefore and Element#insertafter.
167
+ =begin rdoc
168
+ Add content after a target (other content)
169
+ insertafter(target,*obj)
170
+ Requires the ability of "content".
171
+ =end
172
+ def insertafter(target,*obj)
173
+ self.insert(target, 1, obj)
174
+ end
175
+ =begin rdoc
176
+ Add content before a target (other content)
177
+ insertbefore(target,*obj)
178
+ Requires the ability of "content".
179
+ =end
180
+ def insertbefore(target,*obj)
181
+ self.insert(target, 0, obj)
182
+ end
183
+ =begin rdoc
184
+ Insert content relative to a given target.
185
+ The target must exist, pos defines the relative position (0=before, 1=one after the element).
186
+ Method called by Element#insertbefore and Element#insertafter.
187
+ =end
361
188
  def insert(target,pos,*obj )
362
189
  if @content
363
190
  if @content.include?( target )
364
191
  @content[@content.index(target)+pos ,0] = obj
365
192
  else
366
193
  @log.warn("Insert content not possible. Reference object does not exist (#{target.inspect})") if @log.warn?
367
- end
194
+ end
368
195
  else
369
196
  @log.warn("Add content to an element without this feature") if @log.warn?
370
197
  end
371
- self
198
+ self
372
199
  end
373
- #Delete the given object.
200
+ =begin rdoc
201
+ Delete the given object from content.
202
+ =end
374
203
  def delete(target )
375
204
  if @content
376
205
  @content.delete( target )
377
206
  else
378
207
  @log.warn("Delete content of an element without this feature") if @log.warn?
379
208
  end
380
- self
209
+ self
381
210
  end
382
- #Insert an empty line after the last entry
211
+ =begin rdoc
212
+ Insert an empty line after the last entry.
213
+
214
+ Example:
215
+ <tag>content</tag>[CR]
216
+ =end
383
217
  def cr()
384
218
  @crafter = true
385
219
  self
386
220
  end
387
- #Insert an empty line before and after the last entry
221
+ =begin rdoc
222
+ Insert an empty line before and after the last entry.
223
+
224
+ Example:
225
+ [CR]<tag>content</tag>[CR]
226
+ =end
388
227
  def Cr()
389
228
  @crbefore = true
390
229
  @crafter = true
391
230
  self
392
231
  end
393
- #Insert an empty line after the last entry and after the opening of the tag.
394
- #This feature has it reason for lists, when each :li-tag gets a cr.
395
- #The first item gets also a cr.
232
+ =begin rdoc
233
+ Insert an empty line after the last entry and after the opening of the tag.
234
+
235
+ Example:
236
+ <tag>[CR]content</tag>[CR]
237
+
238
+ This feature has it reason for lists, when each :li-tag gets a cr.
239
+ The first item gets also a cR.
240
+
241
+ Example:
242
+ <ul>
243
+ <li>item with cR</li>
244
+ <li>item with cr</li>
245
+ </ul>
246
+ =end
396
247
  def cR()
397
248
  @crbefore = false
398
249
  @crmid = true
399
250
  @crafter = true
400
251
  self
401
252
  end
402
- #Insert an empty line before and after the last entry and after the opening of the tag.
253
+ =begin rdoc
254
+ Insert an empty line before and after the last entry and after the opening of the tag.
255
+
256
+ Example:
257
+ [CR]<tag>[CR]content</tag>[CR]
258
+ =end
403
259
  def CR()
404
260
  @crbefore = true
405
261
  @crmid = true
406
262
  @crafter = true
407
263
  self
408
264
  end
409
- #Accessor on attribute list
265
+ =begin rdoc
266
+ Accessor on attribute list
267
+ =end
410
268
  attr_reader :attr
411
- #Return an attribute to add content.
269
+ =begin rdoc
270
+ Return an attribute to add content.
271
+
272
+ Example:
273
+ sec = element(:section, {}, 'title' )
274
+ sec[:shorttitle] << 'shorttitle'
275
+
276
+ Normally, this is the better solution:
277
+ sec = element(:section, { :shorttitle => 'shorttitle'}, 'title' )
278
+ =end
412
279
  def [] (key)
413
280
  attr = @attr[key]
414
281
  #If Attribute does not exist, take a look, if it is an alias-name.
415
282
  attr = @attr_alias[key] if !attr
416
- if !attr
417
- puts "Request unknown attribute '#{key}', return a dummy"
283
+ if ! attr
284
+ @log.warn("Request unknown attribute '#{key}', return a dummy (#{self.inspect})") if @log.warn?
418
285
  attr = Attribute.create( ).new(key, self)
419
286
  end
420
287
  return attr
421
288
  end
422
- #Default setting, each element class may contain contents.
423
- #Can be redefined by Elements.create.
424
- #-true: content available and necessary (e.g. <p>)
425
- #-:empty_ok: content available, but not necessary (e.g. <td>)
426
- #-false: no content, no endtag, but tag closed with / (example: <br />)
427
- #-nil: no content, no endtag, no closing (example: <br>)
289
+ =begin rdoc
290
+ Default setting, each element class may contain contents.
291
+ Can be redefined by meta-method Elements.has_no_content
292
+ - true: content available and necessary (e.g. Docgenerator::Elements::Paragraph)
293
+ - :empty_ok: content available, but not necessary (e.g. Docgenerator::Tables::Column)
294
+ - false: no content, no endtag, but tag closed with / (example: Docgenerator::Elements::Newline as < br/>)
295
+ - nil: no content, no endtag, no closing (example: Docgenerator::Elements::Newline as < br>)
296
+ =end
428
297
  def content?()
429
298
  return true
430
299
  end
431
- #check if there is content assigned.
300
+ =begin rdoc
301
+ check if there is content assigned.
302
+ =end
432
303
  def empty?()
433
304
  return @content.empty?
434
305
  end
435
306
  @@level = 0
436
- #Build a String to be used for the target document.
437
- #Calls
438
- #-Element#to_latex (target :latex),
439
- #-Element#to_context (target :context)
440
- #-Element#to_html (target :html)
441
- #-Element#to_wiki (target :wiki) (support stopped)
442
- #-Element#to_creole (target :creole) (not really good results)
443
- #-Element#to_text (target :text) (not really good results)
444
- #
445
- #Via the options-hash, you can transport additional information.
307
+ =begin rdoc
308
+ Build a String to be used for the target document.
309
+ Calls
310
+ * Element#to_latex (target :latex),
311
+ * Element#to_context (target :context)
312
+ * Element#to_html (target :html)
313
+ * Element#to_wiki (target :wiki) (support stopped)
314
+ * Element#to_creole (target :creole) (not really good results)
315
+ * Element#to_text (target :text) (not really good results)
316
+
317
+ Via the options-hash, you can transport additional information.
318
+ =end
446
319
  def to_doc( target, options = {} )
447
- o = Docgenerator_logger.set_option_defaults(options)
320
+ o = set_option_defaults(options)
448
321
  o[:log].debug("enter to_doc(#{target}) for #{self.inspect}, options: #{options.keys.inspect}") if o[:log].debug?
449
322
  #Return empty string, if target is not requested.
450
323
  if ! @targets.include?( target )
@@ -458,7 +331,7 @@ code
458
331
  #Some checks
459
332
  @attr.each{|k,v|
460
333
  if v.required? and v.to_s == '' and v.settings.include?(target)
461
- o[:log].error "#{self.ids}: Attribut '#{k}' without required value" if o[:log].error?
334
+ o[:log].error "#{self.inspect}: Attribut '#{k}' without required value" if o[:log].error?
462
335
  end
463
336
  }
464
337
  #Build the string.
@@ -485,82 +358,131 @@ code
485
358
  #~ result << "\n" if @crafter
486
359
  return result
487
360
  end
488
- #This is a dummy method, called from Element#to_s for the target format LaTeX.
489
- #This method must be overwritten from the element class.
490
- #
491
- #By default, the concatenation of all ids and the content is taken.
361
+ =begin rdoc
362
+ This is a dummy method, called from Element#to_s for the target format LaTeX.
363
+ This method must be overwritten from the element class.
364
+
365
+ By default, the concatenation of all ids and the content is taken.
366
+ =end
492
367
  def to_latex(options = {})
493
- o = Docgenerator_logger.set_option_defaults(options)
494
- o[:log].error("Missing output routine for LaTeX (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
368
+ o = set_option_defaults(options)
495
369
  makroname = 'dummy'
496
- self.ids.each{|id|
370
+ self.element_ids.each{|id|
497
371
  makroname = id if id.is_a?(Symbol) or id.is_a?(String)
498
372
  }
373
+ o[:log].error("Missing output routine for LaTeX, use \\#{makroname} (#{self.inspect})")
499
374
  cmd = ''
500
375
  cmd << "\n" if @crbefore
501
- cmd << "\\#{makroname}{#{@content}}"
376
+ cmd << "\\#{makroname}{#{@content.to_latex(options)}}"
502
377
  cmd << "\n" if @crafter
503
378
  return cmd
504
379
  end
505
- #Create context-output.
506
- #
507
- #ConTeXt-support is added later and there are a lot of gaps (2009-07-01)
380
+ =begin rdoc
381
+ Create context-output.
382
+
383
+ ConTeXt-support is added later and there are a lot of gaps (2009-07-01)
384
+ =end
508
385
  def to_context(options = {})
509
- o = Docgenerator_logger.set_option_defaults(options)
510
- o[:log].error("Missing output routine for ConTeXt (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
386
+ o = set_option_defaults(options)
511
387
  makroname = 'dummy'
512
- self.ids.each{|id|
388
+ self.element_ids.each{|id|
513
389
  makroname = id if id.is_a?(Symbol) or id.is_a?(String)
514
390
  }
391
+ o[:log].error("Missing output routine for ConTeXt, use \\#{makroname} (#{self.inspect})")
392
+
515
393
  cmd = ''
516
394
  cmd << "\n" if @crbefore
517
- cmd << "\\#{makroname}{#{@content}}"
395
+ cmd << "\\#{makroname}{#{@content.to_context(options)}}"
518
396
  cmd << "\n" if @crafter
519
397
  return cmd
520
398
  end
521
- #Method for definition inside Element.create.
399
+ =begin rdoc
400
+ Method for definition inside Element.create.
401
+ =end
522
402
  def linebreak( flag = true )
523
403
  flag ? "\n" : ''
524
404
  end
525
- #Prints the optional attribut key inside []. If empty, nil is returned
405
+ =begin rdoc
406
+ Prints the optional attribut key inside []. If empty, nil is returned
407
+ =end
526
408
  def texoptional(key)
527
- return nil if ! @attr[key].filled?
409
+ return nil unless @attr[key].filled?
528
410
  return "[#{@attr[key]}]"
529
411
  end
530
- #Build key-val options from attributs.
531
- #Used e.g. by includegraphics.
412
+ =begin rdoc
413
+ Build key-val options from attributs.
414
+ Used e.g. by includegraphics.
415
+
416
+ If the value is true, the value is added without '='.
417
+ false-values are ignored.
418
+
419
+ If you need a "value=true", then add 'true' as a string.
420
+
421
+ Example (Packages::IncludePDF):
422
+ class IncludePDF < Element
423
+ add_attribute :pages, Attribute.create( [ :texkeyval], [ String ] )
424
+ add_attribute :nup, Attribute.create( [ :texkeyval], [ /\d+x\d+/ ] ) #multiple logical pages onto each sheet of paper.
425
+ add_attribute :landscape, Attribute.create( [ :texkeyval], [ true, false ] ) #multiple logical pages onto each sheet of paper.
426
+ #...
427
+ add_output( :latex, '#{linebreak(@crbefore)}\includepdf[#{texkeyval()}]{#{@content}}#{linebreak(@crafter)}')
428
+ end
429
+
430
+ x = element(:includepdf, { :pages => '1-5', :nup => '2x2', :landscape => true }, 'filename')
431
+ puts x.texkeyval #pages={1-5}, nup={2x2}, landscape
432
+
433
+ x = element(:includepdf, { :pages => '1-5', :nup => '2x2', :landscape => false }, 'filename')
434
+ puts x.texkeyval #pages={1-5}, nup={2x2}
435
+
436
+
437
+ =end
532
438
  def texkeyval()
533
439
  keyval = []
534
440
  @attr.sort_by{|k,v| v.sortkey }.each{|k,v|
535
- keyval << "#{k}={#{v}}" if v.to_s != '' and v.texkeyval?
441
+ next unless v.texkeyval?
442
+ case v.content
443
+ when true, [true]; keyval << "#{k}"
444
+ when false, [false] #ignore
445
+ else #take the value
446
+ keyval << "#{k}={#{v}}" unless v.to_s.empty?
447
+ end
536
448
  }
537
449
  return keyval.join(', ')
538
450
  end
539
- #Method for html-output.
540
- #If the method is redefined, the result is taken as a tag.
451
+ =begin rdoc
452
+ Define the tag for html-output.
453
+
454
+ If the method is redefined, the result is taken as a tag.
455
+ Redfinition is made by Element.add_html_tag.
456
+
457
+ htmltag nil/false supress the output.
458
+ =end
541
459
  def htmltag()
542
460
  ''
543
461
  end
544
- #This is a dummy method, called from Element#to_doc for the target format HTML.
545
- #The tag from Element.htmltag is taken and all attributes and the content are used.
546
- #
547
- #This method can be overwritten from the element class.
462
+ =begin rdoc
463
+ This is a dummy method, called from Element#to_doc for the target format HTML.
464
+
465
+ The tag from Element#htmltag is taken and all attributes and the content are used.
466
+ If Element#htmltag is nil/false, nothing '' is returned.
467
+
468
+ This method can be overwritten from the element class.
469
+ =end
548
470
  def to_html(options = {})
549
- o = Docgenerator_logger.set_option_defaults(options)
471
+ o = set_option_defaults(options)
550
472
  tag = htmltag()
551
473
  if ! tag
552
- o[:log].error("No HTML element available (#{self.ids.join(',')})") if o[:log].error?
474
+ o[:log].error("No HTML element available (#{self.inspect})") if o[:log].error?
553
475
  return ''
554
476
  elsif tag == ''
555
477
  tag = 'span'
556
- o[:log].error("Missing output routine for HTML (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
478
+ o[:log].error("Missing output routine for HTML (#{self.inspect})") if o[:log].error?
557
479
  end
558
480
  #Test if the HTML-Tag should contain something, but there is nothing.
559
481
  #If :empty_ok it is ok, that there is no content (e.g <td>)
560
482
  #May make problems, if an empty tag is used to set a id-mark.
561
483
  if content?() and content? != :empty_ok and
562
484
  ( ! @content or @content == [] or @content == [nil] )
563
- o[:log].warn("HTML-Tag #{tag} without content -> ignored #{self.inspect if @@trace}") if o[:log].warn?
485
+ o[:log].warn("HTML-Tag #{tag} without content -> ignored #{self.inspect}") if o[:log].warn?
564
486
  return ''
565
487
  end
566
488
  html = String.new()
@@ -583,19 +505,29 @@ code
583
505
  html << "\n" if @crafter
584
506
  return html
585
507
  end #to_html
508
+ =begin rdoc
509
+ Return content in Wikimedia-Syntax.
510
+ Support stopped.
511
+ =end
586
512
  def to_wiki(options = {})
587
- o = Docgenerator_logger.set_option_defaults(options)
588
- o[:log].error("Missing output routine for Wiki (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
513
+ o = set_option_defaults(options)
514
+ o[:log].error("Missing output routine for Wiki (#{self.inspect})") if o[:log].error?
589
515
  return "#{@content.to_wiki(options)}\n"
590
516
  end
517
+ =begin rdoc
518
+ Return content in creole-Syntax.
519
+ =end
591
520
  def to_creole(options = {})
592
- o = Docgenerator_logger.set_option_defaults(options)
593
- o[:log].error("Missing output routine for creole (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
521
+ o = set_option_defaults(options)
522
+ o[:log].error("Missing output routine for creole (#{self.inspect})") if o[:log].error?
594
523
  return "#{@content.to_creole(options)}\n"
595
524
  end
525
+ =begin rdoc
526
+ Make an Text-Representation of the content.
527
+ =end
596
528
  def to_text(options = {})
597
- o = Docgenerator_logger.set_option_defaults(options)
598
- o[:log].error("Missing output routine for Text (#{self.ids.join(',')}) [#{@called_by}]") if o[:log].error?
529
+ o = set_option_defaults(options)
530
+ o[:log].error("Missing output routine for Text (#{self.inspect})") if o[:log].error?
599
531
  text = String.new()
600
532
  text << "\n" if @crbefore
601
533
  text = "#{@content.to_text(options)}".strip
@@ -605,4 +537,25 @@ code
605
537
  def to_s()
606
538
  return self.inspect
607
539
  end
608
- end #Element
540
+ end #Element
541
+ end #module Docgenerator
542
+
543
+ =begin rdoc
544
+ Returns an element of a type "name".
545
+ Attributes and content are optional parameter.
546
+
547
+ This method is defined global (outside Docgenerator-module)
548
+
549
+ If you call element with an undefined 'name',
550
+ you get an error message and an anonymous dummy class is created.
551
+ =end
552
+ def element( name, attr = {}, content = nil )
553
+ elementclass = Docgenerator::Element.get( name )
554
+ if ! elementclass #Create a dummy element.
555
+ #~ element = Docgenerator::Element.create( name, {}, true ).new(attr, content )
556
+ Docgenerator::DOCGENERATOR_LOGGER.error( "Usage of undefined element #{name}. Create an anonymous class")
557
+ elementclass = Class.new(Docgenerator::Element)
558
+ elementclass.add_id name
559
+ end
560
+ return elementclass.new(attr, content )
561
+ end