docgenerator-creole 3.0.0
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.
- checksums.yaml +7 -0
- data/examples/creole_example.rb +76 -0
- data/examples/creole_example_footnote.rb +66 -0
- data/examples/creole_example_new_plugin.rb +51 -0
- data/examples/creole_example_placeholder.rb +77 -0
- data/examples/creole_example_rail.rb +155 -0
- data/examples/creole_example_rubycode.rb +144 -0
- data/examples/creole_example_struktex.rb +170 -0
- data/examples/creole_example_tabular.rb +96 -0
- data/examples/creole_example_tikz.rb +47 -0
- data/lib/docgenerator-creole.rb +5 -0
- data/lib/docgenerator/creole.rb +15 -0
- data/lib/docgenerator/creole/base.rb +170 -0
- data/lib/docgenerator/creole/characters.rb +131 -0
- data/lib/docgenerator/creole/creole.rb +708 -0
- data/lib/docgenerator/creole/document.rb +91 -0
- data/lib/docgenerator/creole/inclusion_and_plugins.rb +91 -0
- data/lib/docgenerator/creole/inclusions.rb +148 -0
- data/lib/docgenerator/creole/placeholder.rb +242 -0
- data/lib/docgenerator/creole/plugins.rb +230 -0
- data/lib/docgenerator/creole/plugins/index.rb +61 -0
- data/lib/docgenerator/creole/plugins/rail.rb +179 -0
- data/lib/docgenerator/creole/plugins/rubycode4creole.rb +136 -0
- data/lib/docgenerator/creole/plugins/struktex.rb +60 -0
- data/lib/docgenerator/creole/plugins/tikz.rb +93 -0
- data/lib/docgenerator/creole/plugins/todonotes.rb +77 -0
- data/lib/docgenerator/creole/tabular.rb +405 -0
- data/readme.rdoc +44 -0
- data/unittest/Red_Flower.jpg +0 -0
- data/unittest/expected_creole/test_creole.html +3 -0
- data/unittest/expected_creole/test_creole_characters_all.creole +28 -0
- data/unittest/expected_creole/test_creole_characters_all.html +18 -0
- data/unittest/expected_creole/test_creole_characters_all.latex +36 -0
- data/unittest/expected_creole/test_creole_characters_special.html +10 -0
- data/unittest/expected_creole/test_creole_characters_special.latex +18 -0
- data/unittest/expected_creole/test_creole_comment.context +11 -0
- data/unittest/expected_creole/test_creole_comment.creole +12 -0
- data/unittest/expected_creole/test_creole_comment.html +9 -0
- data/unittest/expected_creole/test_creole_comment.latex +11 -0
- data/unittest/expected_creole/test_creole_countdown.html +3 -0
- data/unittest/expected_creole/test_creole_countdown.latex +4 -0
- data/unittest/expected_creole/test_creole_creole1.0test.html +182 -0
- data/unittest/expected_creole/test_creole_creole1.0test.latex +253 -0
- data/unittest/expected_creole/test_creole_creole1.0test.text +160 -0
- data/unittest/expected_creole/test_creole_footnotes.html +9 -0
- data/unittest/expected_creole/test_creole_footnotes.latex +14 -0
- data/unittest/expected_creole/test_creole_footnotes_groupid.html +15 -0
- data/unittest/expected_creole/test_creole_footnotes_label.html +9 -0
- data/unittest/expected_creole/test_creole_headings.html +17 -0
- data/unittest/expected_creole/test_creole_headings.latex +19 -0
- data/unittest/expected_creole/test_creole_headings.text +48 -0
- data/unittest/expected_creole/test_creole_headings.wiki +37 -0
- data/unittest/expected_creole/test_creole_hr.html +7 -0
- data/unittest/expected_creole/test_creole_hr.latex +9 -0
- data/unittest/expected_creole/test_creole_hr.text +4 -0
- data/unittest/expected_creole/test_creole_ignore.html +3 -0
- data/unittest/expected_creole/test_creole_ignore.latex +4 -0
- data/unittest/expected_creole/test_creole_ignore.text +2 -0
- data/unittest/expected_creole/test_creole_inline.html +3 -0
- data/unittest/expected_creole/test_creole_inline.latex +4 -0
- data/unittest/expected_creole/test_creole_inline.text +2 -0
- data/unittest/expected_creole/test_creole_inline_apostroph.html +7 -0
- data/unittest/expected_creole/test_creole_inline_apostroph.latex +9 -0
- data/unittest/expected_creole/test_creole_inline_apostroph.text +5 -0
- data/unittest/expected_creole/test_creole_inline_ruby.html +12 -0
- data/unittest/expected_creole/test_creole_inline_ruby.latex +20 -0
- data/unittest/expected_creole/test_creole_inline_ruby_raw.html +6 -0
- data/unittest/expected_creole/test_creole_inline_ruby_raw.latex +8 -0
- data/unittest/expected_creole/test_creole_input.normsource +22 -0
- data/unittest/expected_creole/test_creole_input.normsource_1.8 +23 -0
- data/unittest/expected_creole/test_creole_input_file_simple.html +15 -0
- data/unittest/expected_creole/test_creole_input_file_simple_readlines.html +15 -0
- data/unittest/expected_creole/test_creole_label.html +12 -0
- data/unittest/expected_creole/test_creole_label.latex +15 -0
- data/unittest/expected_creole/test_creole_line_break.html +6 -0
- data/unittest/expected_creole/test_creole_line_break.latex +8 -0
- data/unittest/expected_creole/test_creole_links_explicit_internal.html +6 -0
- data/unittest/expected_creole/test_creole_links_explicit_internal.text +4 -0
- data/unittest/expected_creole/test_creole_links_explicit_with_em.html +3 -0
- data/unittest/expected_creole/test_creole_links_explicit_with_em.latex +4 -0
- data/unittest/expected_creole/test_creole_links_explicit_with_em.text +2 -0
- data/unittest/expected_creole/test_creole_links_external.html +6 -0
- data/unittest/expected_creole/test_creole_links_external.latex +8 -0
- data/unittest/expected_creole/test_creole_links_external.text +4 -0
- data/unittest/expected_creole/test_creole_links_external_implicit.html +9 -0
- data/unittest/expected_creole/test_creole_links_external_implicit.latex +12 -0
- data/unittest/expected_creole/test_creole_links_external_implicit.text +6 -0
- data/unittest/expected_creole/test_creole_links_file.html +6 -0
- data/unittest/expected_creole/test_creole_links_file.latex +8 -0
- data/unittest/expected_creole/test_creole_links_file.text +4 -0
- data/unittest/expected_creole/test_creole_links_implicit_end.creole +4 -0
- data/unittest/expected_creole/test_creole_links_implicit_end.html +3 -0
- data/unittest/expected_creole/test_creole_links_implicit_end.latex +4 -0
- data/unittest/expected_creole/test_creole_list_ol.html +12 -0
- data/unittest/expected_creole/test_creole_list_ol.latex +22 -0
- data/unittest/expected_creole/test_creole_list_ol_after_ul.html +12 -0
- data/unittest/expected_creole/test_creole_list_ol_after_ul.latex +20 -0
- data/unittest/expected_creole/test_creole_list_ol_after_ul.text +6 -0
- data/unittest/expected_creole/test_creole_list_ol_ul.html +15 -0
- data/unittest/expected_creole/test_creole_list_ol_ul.latex +26 -0
- data/unittest/expected_creole/test_creole_list_ul.html +22 -0
- data/unittest/expected_creole/test_creole_list_ul.latex +40 -0
- data/unittest/expected_creole/test_creole_list_ul.normsource +85 -0
- data/unittest/expected_creole/test_creole_list_ul.normsource_1.8 +83 -0
- data/unittest/expected_creole/test_creole_list_ul_too_much.html +24 -0
- data/unittest/expected_creole/test_creole_list_ul_too_much.latex +44 -0
- data/unittest/expected_creole/test_creole_list_ulul_without_ul.html +6 -0
- data/unittest/expected_creole/test_creole_list_ulul_without_ul.latex +12 -0
- data/unittest/expected_creole/test_creole_mix_titles_list.html +10 -0
- data/unittest/expected_creole/test_creole_mix_titles_list.latex +18 -0
- data/unittest/expected_creole/test_creole_mix_titles_list.text +12 -0
- data/unittest/expected_creole/test_creole_newline.html +9 -0
- data/unittest/expected_creole/test_creole_newline.latex +11 -0
- data/unittest/expected_creole/test_creole_newline.text +7 -0
- data/unittest/expected_creole/test_creole_paragraphs.html +6 -0
- data/unittest/expected_creole/test_creole_paragraphs.latex +8 -0
- data/unittest/expected_creole/test_creole_paragraphs.normsource +26 -0
- data/unittest/expected_creole/test_creole_paragraphs.normsource_1.8 +27 -0
- data/unittest/expected_creole/test_creole_paragraphs.text +4 -0
- data/unittest/expected_creole/test_creole_paragraphs.wiki +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap.html +5 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap.latex +6 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap.text +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap.wiki +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.html +9 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.latex +11 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.text +7 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap0.wiki +7 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.html +5 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.latex +6 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.text +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap60.wiki +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap_with_linebreaks.html +5 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap_with_linebreaks.latex +6 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap_with_linebreaks.text +4 -0
- data/unittest/expected_creole/test_creole_paragraphs_wrap_with_linebreaks.wiki +4 -0
- data/unittest/expected_creole/test_creole_picture_link.html +6 -0
- data/unittest/expected_creole/test_creole_pictures.html +10 -0
- data/unittest/expected_creole/test_creole_pictures.latex +13 -0
- data/unittest/expected_creole/test_creole_pictures_css.html +6 -0
- data/unittest/expected_creole/test_creole_pictures_css.latex +8 -0
- data/unittest/expected_creole/test_creole_pictures_imgclass.html +6 -0
- data/unittest/expected_creole/test_creole_pictures_imgclass.latex +8 -0
- data/unittest/expected_creole/test_creole_pictures_longdesc.html +3 -0
- data/unittest/expected_creole/test_creole_pictures_width.html +3 -0
- data/unittest/expected_creole/test_creole_pictures_width.latex +4 -0
- data/unittest/expected_creole/test_creole_placeholders_html.html +7 -0
- data/unittest/expected_creole/test_creole_placeholders_html.latex +8 -0
- data/unittest/expected_creole/test_creole_placeholders_html.text +4 -0
- data/unittest/expected_creole/test_creole_placeholders_latex.html +6 -0
- data/unittest/expected_creole/test_creole_placeholders_latex.latex +9 -0
- data/unittest/expected_creole/test_creole_placeholders_latex.text +4 -0
- data/unittest/expected_creole/test_creole_short_html.html +3 -0
- data/unittest/expected_creole/test_creole_short_html.latex +4 -0
- data/unittest/expected_creole/test_creole_short_html.text +2 -0
- data/unittest/expected_creole/test_creole_shy.creole +6 -0
- data/unittest/expected_creole/test_creole_shy.html +6 -0
- data/unittest/expected_creole/test_creole_shy.latex +8 -0
- data/unittest/expected_creole/test_creole_shy.text +4 -0
- data/unittest/expected_creole/test_creole_tabular.creole +22 -0
- data/unittest/expected_creole/test_creole_tabular.html +20 -0
- data/unittest/expected_creole/test_creole_tabular.latex +22 -0
- data/unittest/expected_creole/test_creole_tabular_creole.creole +21 -0
- data/unittest/expected_creole/test_creole_tabular_creole.html +20 -0
- data/unittest/expected_creole/test_creole_tabular_creole.latex +21 -0
- data/unittest/expected_creole/test_creole_tabular_css.creole +24 -0
- data/unittest/expected_creole/test_creole_tabular_css.html +20 -0
- data/unittest/expected_creole/test_creole_tabular_css.latex +22 -0
- data/unittest/expected_creole/test_creole_tabular_multicols.creole +16 -0
- data/unittest/expected_creole/test_creole_tabular_multicols.html +14 -0
- data/unittest/expected_creole/test_creole_tabular_multicols.latex +16 -0
- data/unittest/expected_creole/test_creole_tabular_row_parameters.latex +22 -0
- data/unittest/expected_creole/test_creole_tabular_with_cell_option.creole +21 -0
- data/unittest/expected_creole/test_creole_tabular_with_cell_option.html +20 -0
- data/unittest/expected_creole/test_creole_toc.html +13 -0
- data/unittest/expected_creole/test_creole_toc.latex +22 -0
- data/unittest/expected_creole/test_creole_toc.text +4 -0
- data/unittest/expected_creole/test_creole_toc_level.html +7 -0
- data/unittest/expected_creole/test_creole_toc_level.latex +10 -0
- data/unittest/expected_creole/test_creole_toc_level.text +3 -0
- data/unittest/expected_creole/test_creole_toc_level_text.html +8 -0
- data/unittest/expected_creole/test_creole_toc_level_text.latex +9 -0
- data/unittest/expected_creole/test_creole_toc_text.html +5 -0
- data/unittest/expected_creole/test_creole_toc_text.latex +5 -0
- data/unittest/expected_creole/test_creole_ul_multiple_line.html +7 -0
- data/unittest/expected_creole/test_creole_ul_multiple_line.latex +14 -0
- data/unittest/expected_creole/test_creole_ul_with_blank.html +11 -0
- data/unittest/expected_creole/test_creole_ul_with_blank.latex +20 -0
- data/unittest/expected_creole/test_creole_ul_with_bold.creole +0 -0
- data/unittest/expected_creole/test_creole_ul_with_bold.html +11 -0
- data/unittest/expected_creole/test_creole_ul_with_bold.latex +18 -0
- data/unittest/expected_creole/test_creole_ul_with_bold.text +7 -0
- data/unittest/expected_creole/test_creole_verbatim.html +25 -0
- data/unittest/expected_creole/test_creole_verbatim.latex +33 -0
- data/unittest/expected_creole/test_creole_verbatim.text +17 -0
- data/unittest/expected_creole/test_creole_verbatim_inline.html +6 -0
- data/unittest/expected_creole/test_creole_verbatim_inline.latex +8 -0
- data/unittest/expected_creole/test_creole_verbatim_inline_at_start.html +6 -0
- data/unittest/expected_creole/test_creole_verbatim_inline_at_start.latex +8 -0
- data/unittest/expected_creole_rail/test_rail_creole_object.tex +33 -0
- data/unittest/expected_creole_rail/test_rail_creole_placeholder.tex +40 -0
- data/unittest/expected_rubycode4doc/creole_complete.html +26 -0
- data/unittest/expected_rubycode4doc/creole_complete.tex +40 -0
- data/unittest/expected_rubycode4doc/creole_in_tab.html +4 -0
- data/unittest/expected_rubycode4doc/creole_in_tab.tex +6 -0
- data/unittest/expected_rubycode4doc/creole_inline_ruby.html +7 -0
- data/unittest/expected_rubycode4doc/creole_output.html +2 -0
- data/unittest/expected_rubycode4doc/creole_output.tex +4 -0
- data/unittest/expected_rubycode4doc/creole_rubycode.html +1 -0
- data/unittest/expected_rubycode4doc/creole_rubycode.tex +3 -0
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.html +1 -0
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated.tex +3 -0
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.html +3 -0
- data/unittest/expected_rubycode4doc/creole_rubycode_evaluated_listings.tex +5 -0
- data/unittest/unittest_creole.rb +1379 -0
- data/unittest/unittest_creole_placeholders.rb +161 -0
- data/unittest/unittest_creole_plugin_rail.rb +148 -0
- data/unittest/unittest_creole_plugin_rubycode4doc.rb +123 -0
- data/unittest/unittest_creole_plugin_struktex.rb +26 -0
- data/unittest/unittest_creole_tabular.rb +212 -0
- metadata +529 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
=begin rdoc
|
|
2
|
+
Little helper to make documention on ruby scripts,
|
|
3
|
+
Ruby fragments are defined in the creole-source,
|
|
4
|
+
You can get the code and the results.
|
|
5
|
+
|
|
6
|
+
The source code is enriched with the results and can be shown.
|
|
7
|
+
=end
|
|
8
|
+
|
|
9
|
+
#Only for quick tests
|
|
10
|
+
$:.unshift("../../") if $0 == __FILE__
|
|
11
|
+
|
|
12
|
+
#~ fixme: use listings instead verbatim
|
|
13
|
+
#~ check usage??
|
|
14
|
+
|
|
15
|
+
require 'docgenerator/creole'
|
|
16
|
+
require 'docgenerator/packages/rubycode4doc'
|
|
17
|
+
|
|
18
|
+
module Docgenerator
|
|
19
|
+
module Creole
|
|
20
|
+
|
|
21
|
+
=begin rdoc
|
|
22
|
+
Write rubycode inside creole-text
|
|
23
|
+
=end
|
|
24
|
+
module Rubycode
|
|
25
|
+
|
|
26
|
+
=begin rdoc
|
|
27
|
+
Print ruby source code as is
|
|
28
|
+
=end
|
|
29
|
+
class Code < Placeholder
|
|
30
|
+
set_placeholder_key 'rubycode'
|
|
31
|
+
#Return content in a verbatim environment
|
|
32
|
+
def to_doc( target, options = {})
|
|
33
|
+
codetest = Docgenerator::Rubycode::CodeTest.new(nil, @source.join )
|
|
34
|
+
#~ element(:verbatim,{},@source ).cr.to_doc( target, options )
|
|
35
|
+
element(:verbatim, {
|
|
36
|
+
:style => 'rubycode',
|
|
37
|
+
}, codetest.sourcecode ).cr.to_doc( target, options )
|
|
38
|
+
end
|
|
39
|
+
end #Code
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
#Print ruby source code and put the result of each line as a comment.
|
|
43
|
+
#
|
|
44
|
+
#Example:
|
|
45
|
+
# 1 + 1
|
|
46
|
+
#becomes
|
|
47
|
+
# 1 + 1 #2
|
|
48
|
+
class Code_evaluated < Placeholder
|
|
49
|
+
set_placeholder_key 'rubycode_evaluated'
|
|
50
|
+
#Return content in a verbatim environment
|
|
51
|
+
def to_doc( target, options = {})
|
|
52
|
+
codetest = Docgenerator::Rubycode::CodeTest.new(nil, @source.join )
|
|
53
|
+
#~ element(:verbatim,{},@source ).cr.to_doc( target, options )
|
|
54
|
+
element(:verbatim, {
|
|
55
|
+
:style => 'rubycode_evaluated',
|
|
56
|
+
}, codetest.code_evaluation ).cr.to_doc( target, options )
|
|
57
|
+
end
|
|
58
|
+
end #Code_evaluated
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
#Print ruby source code and put the result of each line as a comment.
|
|
62
|
+
#
|
|
63
|
+
#Same as Code_evaluated, but export is done for in TeX-Package listings.
|
|
64
|
+
class Code_evaluated_listings < Placeholder
|
|
65
|
+
set_placeholder_key 'rubycode_evaluated_listings'
|
|
66
|
+
#Return content in a verbatim environment
|
|
67
|
+
def to_doc( target, options = {})
|
|
68
|
+
codetest = Docgenerator::Rubycode::CodeTest.new(nil, @source.join )
|
|
69
|
+
#~ element(:verbatim, {
|
|
70
|
+
#~ :style => 'rubycode_evaluated',
|
|
71
|
+
#~ }, codetest.code_evaluation ).cr.to_doc( target, options )
|
|
72
|
+
codetest.code_evaluation_lstlisting.to_doc( target, options )
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end #Code_evaluated_listing
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
#Take only the output of the rubycode
|
|
79
|
+
#
|
|
80
|
+
class Code_output < Placeholder
|
|
81
|
+
set_placeholder_key 'rubycode_output'
|
|
82
|
+
#Return content in a verbatim environment
|
|
83
|
+
def to_doc( target, options = {})
|
|
84
|
+
codetest = Docgenerator::Rubycode::CodeTest.new(nil, @source.join )
|
|
85
|
+
#~ element(:verbatim,{},@source ).cr.to_doc( target, options )
|
|
86
|
+
element(:verbatim, {
|
|
87
|
+
:style => 'rubycode_output',
|
|
88
|
+
}, codetest.output ).cr.to_doc( target, options )
|
|
89
|
+
end
|
|
90
|
+
end #Code_output
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
#Build a table.
|
|
94
|
+
#Each row corresponds with a source code line.
|
|
95
|
+
#You get source code, result and output of the code line.
|
|
96
|
+
#
|
|
97
|
+
#
|
|
98
|
+
class Code_in_tab < Placeholder
|
|
99
|
+
set_placeholder_key 'rubycode_in_tab'
|
|
100
|
+
#Return content in a verbatim environment
|
|
101
|
+
def to_doc( target, options = {})
|
|
102
|
+
codetest = Docgenerator::Rubycode::CodeTest.new(nil, @source.join )
|
|
103
|
+
codetest.code_in_tab.to_doc( target, options )
|
|
104
|
+
end
|
|
105
|
+
end #Code_in_tab
|
|
106
|
+
end #module Rubycode
|
|
107
|
+
end #module Creole
|
|
108
|
+
end #module Docgenerator
|
|
109
|
+
|
|
110
|
+
if $0 == __FILE__
|
|
111
|
+
wiki = Docgenerator::Creole::Creole.new()
|
|
112
|
+
wiki << <<wiki
|
|
113
|
+
rubycode
|
|
114
|
+
<<<rubycode
|
|
115
|
+
1 + 1
|
|
116
|
+
>>>
|
|
117
|
+
----
|
|
118
|
+
rubycode_output
|
|
119
|
+
<<<rubycode_output
|
|
120
|
+
puts 1 + 1
|
|
121
|
+
>>>
|
|
122
|
+
----
|
|
123
|
+
rubycode_evaluated
|
|
124
|
+
<<<rubycode_evaluated
|
|
125
|
+
1 + 1
|
|
126
|
+
>>>
|
|
127
|
+
----
|
|
128
|
+
rubycode_in_tab
|
|
129
|
+
<<<rubycode_in_tab
|
|
130
|
+
1 + 1
|
|
131
|
+
>>>
|
|
132
|
+
wiki
|
|
133
|
+
puts wiki.to_html
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
__END__
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
=begin rdoc
|
|
3
|
+
Add support of Struktex::Structogramm for Creole.
|
|
4
|
+
=end
|
|
5
|
+
#~ require 'docgenerator/creole'
|
|
6
|
+
require 'docgenerator/packages/struktex.rb'
|
|
7
|
+
|
|
8
|
+
module Docgenerator
|
|
9
|
+
module Creole
|
|
10
|
+
|
|
11
|
+
=begin rdoc
|
|
12
|
+
Define Creole placeholder.
|
|
13
|
+
|
|
14
|
+
The placeholder insertion must contain three parameters:
|
|
15
|
+
|
|
16
|
+
>>>structogramm{Declarations/Interfaces;120;25}
|
|
17
|
+
Statement
|
|
18
|
+
-> field1 description
|
|
19
|
+
<- field2 description
|
|
20
|
+
<-> field3 description
|
|
21
|
+
<<<
|
|
22
|
+
Details see Docgenerator::Structogramm
|
|
23
|
+
=end
|
|
24
|
+
class Creole_structogramm < Placeholder
|
|
25
|
+
set_placeholder_key('structogramm')
|
|
26
|
+
|
|
27
|
+
#~ fixme
|
|
28
|
+
#~ parameters optional als placeholder,
|
|
29
|
+
#~ hier aber benötigt.
|
|
30
|
+
#~ Defaults??
|
|
31
|
+
|
|
32
|
+
def initialize( wiki, parameters = nil)
|
|
33
|
+
super
|
|
34
|
+
#~ @wiki = wiki
|
|
35
|
+
#~ @log = @wiki.log
|
|
36
|
+
par = parameters ? parameters.split(/;/) : []
|
|
37
|
+
case par.size
|
|
38
|
+
when 0
|
|
39
|
+
raise ParameterError, "Creole_structogramm: Missing parameters"
|
|
40
|
+
when 3
|
|
41
|
+
title = par[0]
|
|
42
|
+
x = par[1]
|
|
43
|
+
y = par[2]
|
|
44
|
+
@source = ''
|
|
45
|
+
@structogramm = Packages::Struktex::Structogramm.new( title, x, y, @source )
|
|
46
|
+
else
|
|
47
|
+
raise ParameterError, "Creole_structogramm: Wrong number of parameters: #{parameters.inspect}"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
#Instance of class Structogramm.
|
|
51
|
+
attr_reader :structogramm
|
|
52
|
+
|
|
53
|
+
#Return content only for latex
|
|
54
|
+
def to_doc( target, options = {})
|
|
55
|
+
target == :latex ? @structogramm.to_doc( target, options ) : ''
|
|
56
|
+
end
|
|
57
|
+
end #Creole_latex
|
|
58
|
+
|
|
59
|
+
end #module Creole
|
|
60
|
+
end #module Docgenerator
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#encoding: utf-8
|
|
2
|
+
=begin rdoc
|
|
3
|
+
Example of usage:
|
|
4
|
+
|
|
5
|
+
<<<tikz_img|template_module.png|remember picture|width=\textwidth
|
|
6
|
+
\node[red,ultra thick,rounded corners,draw] at (.95,.75) (source) {1};
|
|
7
|
+
>>>
|
|
8
|
+
* (1) Datenquelle muss definiert werden<<tikz|\draw[] (0,0) -- (source);>>
|
|
9
|
+
|
|
10
|
+
See also creole_example_tikz.rb
|
|
11
|
+
=end
|
|
12
|
+
#~ require 'docgenerator/packages/todonotes.rb'
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
module Docgenerator
|
|
16
|
+
module Creole
|
|
17
|
+
module Plugins
|
|
18
|
+
=begin rdoc
|
|
19
|
+
Define a TikZ inclusion.
|
|
20
|
+
|
|
21
|
+
Usage:
|
|
22
|
+
|
|
23
|
+
<<tikz|\draw[] (0,0) -- (1,1);>>
|
|
24
|
+
|
|
25
|
+
=end
|
|
26
|
+
class Creole_tikz < Creole_inclusion_and_plugin
|
|
27
|
+
Collection['tikz'] = self
|
|
28
|
+
def to_doc(target, options = {})
|
|
29
|
+
target == :latex ?
|
|
30
|
+
'\tikz[overlay,remember picture]{%s}' % @description
|
|
31
|
+
: ''
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
module Placeholders
|
|
38
|
+
=begin rdoc
|
|
39
|
+
Include a graphic inside a tikz-environment
|
|
40
|
+
|
|
41
|
+
Usage:
|
|
42
|
+
<<<tikz_img|template_module.png|width=\textwidth
|
|
43
|
+
\node[red,ultra thick,rounded corners,draw] at (.95,.75) {1};
|
|
44
|
+
>>>
|
|
45
|
+
|
|
46
|
+
* parameters are
|
|
47
|
+
# the picture name
|
|
48
|
+
# alt=: Define alternative text (only HTML)
|
|
49
|
+
# remember picture: tikzpicture-option. Labels are added 'global'.
|
|
50
|
+
|
|
51
|
+
* The other options are forwarded to Inclusions::Creole_inclusion_img
|
|
52
|
+
* Commands in the code are relative to image,
|
|
53
|
+
(0,0) is at the lower left of the picture and (1,1) is at the upper right.
|
|
54
|
+
=end
|
|
55
|
+
class Tikz_img < Placeholder
|
|
56
|
+
set_placeholder_key 'tikz_img'
|
|
57
|
+
#Return content only for html
|
|
58
|
+
def to_doc( target, options = {})
|
|
59
|
+
parameters = @parameters.split('|')
|
|
60
|
+
picname = parameters.shift
|
|
61
|
+
alttext = nil
|
|
62
|
+
tikz_options = []
|
|
63
|
+
parameters.each{|par|
|
|
64
|
+
case par
|
|
65
|
+
when /alt\s*=\s*(.*)/
|
|
66
|
+
alttext = $1
|
|
67
|
+
parameters.delete(par)
|
|
68
|
+
when 'remember picture', '>=.*'
|
|
69
|
+
tikz_options << par
|
|
70
|
+
parameters.delete(par)
|
|
71
|
+
end
|
|
72
|
+
}
|
|
73
|
+
img = Inclusions::Creole_inclusion_img.new( picname, alttext, parameters, @wiki )
|
|
74
|
+
@source ||=[]
|
|
75
|
+
case target
|
|
76
|
+
when :latex
|
|
77
|
+
<<'tex' % [tikz_options.join(','), img.to_doc( target, options ), @source.join.strip]
|
|
78
|
+
\begin{tikzpicture}[%s]
|
|
79
|
+
\node[anchor=south west,inner sep=0pt] (image) at (0,0)
|
|
80
|
+
{%s};
|
|
81
|
+
\begin{scope}[x={(image.south east)},y={(image.north west)}]
|
|
82
|
+
%s
|
|
83
|
+
\end{scope}
|
|
84
|
+
\end{tikzpicture}
|
|
85
|
+
tex
|
|
86
|
+
else #return only the graphic
|
|
87
|
+
img.to_doc( target, options )
|
|
88
|
+
end
|
|
89
|
+
end #Tikz_img#to_doc
|
|
90
|
+
end #Tikz_img
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'docgenerator/packages/todonotes.rb'
|
|
2
|
+
|
|
3
|
+
module Docgenerator
|
|
4
|
+
module Creole
|
|
5
|
+
|
|
6
|
+
=begin rdoc
|
|
7
|
+
Classes to provide support for the todonotes-package.
|
|
8
|
+
|
|
9
|
+
* http://ctan.org/tex-archive/macros/latex/contrib/todonotes/
|
|
10
|
+
=end
|
|
11
|
+
module Todo
|
|
12
|
+
|
|
13
|
+
class Creole_todolist < Creole_inclusion_and_plugin
|
|
14
|
+
set_plugin_key('listoftodos') #use <<todo|..>>
|
|
15
|
+
def to_doc(target, options = {})
|
|
16
|
+
element(:listoftodos, options).to_doc(target, options)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
=begin rdoc
|
|
20
|
+
Define a plugin for the todonotes-package.
|
|
21
|
+
=end
|
|
22
|
+
class Creole_todo < Creole_inclusion_and_plugin
|
|
23
|
+
|
|
24
|
+
set_plugin_key('todo') #use <<todo|..>>
|
|
25
|
+
|
|
26
|
+
#define default options for todonotes. may be redefined for children of this class.
|
|
27
|
+
def default_options; {}; end
|
|
28
|
+
|
|
29
|
+
=begin rdoc
|
|
30
|
+
Usage:
|
|
31
|
+
<<todo|what to do|color=red>>
|
|
32
|
+
=end
|
|
33
|
+
def initialize( inclusionname, description, options, wiki )
|
|
34
|
+
#~ @inclusionname = inclusionname #fix 'todo'
|
|
35
|
+
@description = description
|
|
36
|
+
@options = default_options.dup
|
|
37
|
+
options.each{|opt|
|
|
38
|
+
case opt
|
|
39
|
+
when /color\s*=\s*/
|
|
40
|
+
@options[:color] = $~.post_match
|
|
41
|
+
when /inline/
|
|
42
|
+
@options[:inline] = true
|
|
43
|
+
else
|
|
44
|
+
wiki.log.warn("Todo #{@description} with undefined option #{opt}")
|
|
45
|
+
end
|
|
46
|
+
}
|
|
47
|
+
@wiki = wiki
|
|
48
|
+
|
|
49
|
+
raise "Inclusion received no wiki but #{wiki.inspect}" unless wiki.is_a?(Creole)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def to_doc(target, options = {})
|
|
53
|
+
element(:todo, @options, @description).to_doc(target, options)
|
|
54
|
+
end
|
|
55
|
+
end #Creole_todo
|
|
56
|
+
|
|
57
|
+
=begin rdoc
|
|
58
|
+
A variant of Creole_todo with green color.
|
|
59
|
+
=end
|
|
60
|
+
class Creole_todo_green < Creole_todo
|
|
61
|
+
set_plugin_key('todo_green') #use <<todo_green|..>>
|
|
62
|
+
#define default options for todonotes. may be redefined for children of this class.
|
|
63
|
+
def default_options; {:color => 'green'}; end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
=begin rdoc
|
|
67
|
+
A variant of Creole_todo with inline-layout.
|
|
68
|
+
=end
|
|
69
|
+
class Creole_todo_inline < Creole_todo
|
|
70
|
+
set_plugin_key('todo_inline') #use <<todo_inline|..>>
|
|
71
|
+
#define default options for todonotes. may be redefined for children of this class.
|
|
72
|
+
def default_options; {:inline => true}; end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end #module Todo
|
|
76
|
+
end #module Creole
|
|
77
|
+
end #module Docgenerator
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
#encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
module Docgenerator
|
|
5
|
+
module Creole
|
|
6
|
+
=begin
|
|
7
|
+
"Original" creole tab.
|
|
8
|
+
|
|
9
|
+
Defined as a collector, so we can collect the content first and
|
|
10
|
+
build the tabular later.
|
|
11
|
+
|
|
12
|
+
Details see http://www.wikicreole.org/wiki/Tables
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
Tables are done like this:
|
|
16
|
+
|=header col1|=header col2|
|
|
17
|
+
|col1|col2|
|
|
18
|
+
|you |can |
|
|
19
|
+
|also |align\\ it. |
|
|
20
|
+
|
|
21
|
+
=end
|
|
22
|
+
class Creole_tab < Placeholder
|
|
23
|
+
set_placeholder_key 'creole_tabular' #original creole-tab definition
|
|
24
|
+
|
|
25
|
+
#Extend the class by a little structure
|
|
26
|
+
Cell = Struct.new('Cell', :content, :type )
|
|
27
|
+
|
|
28
|
+
#Finish the tabular.
|
|
29
|
+
#Each cell is added left justified.
|
|
30
|
+
def close(options)
|
|
31
|
+
#~ @log.error("Standard creole tabulars not supported yet" )
|
|
32
|
+
|
|
33
|
+
step = 0 #start
|
|
34
|
+
head = []
|
|
35
|
+
content = []
|
|
36
|
+
@source.each{|line|
|
|
37
|
+
content << []
|
|
38
|
+
#delete trailing empty cells
|
|
39
|
+
line.chomp.gsub(/\|\s*$/,'').split(/\|/)[1..-1].each{|cell|
|
|
40
|
+
case cell
|
|
41
|
+
when /^=/
|
|
42
|
+
content.last << Cell.new(@wiki.inline($~.post_match.strip, options),:th)
|
|
43
|
+
else
|
|
44
|
+
content.last << Cell.new(@wiki.inline(cell.strip, options), :td)
|
|
45
|
+
end
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
max_size = 0
|
|
50
|
+
content.each{|line|
|
|
51
|
+
max_size = [max_size, line.size].max
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@tab = element(:tabular, {#:style => tab_css,
|
|
55
|
+
:columns => max_size,
|
|
56
|
+
:columndescription => 'l' * max_size,
|
|
57
|
+
}).cR
|
|
58
|
+
content.each{|line|
|
|
59
|
+
@tab << row = element(:row).cr
|
|
60
|
+
line.each{|cell|
|
|
61
|
+
options = {}
|
|
62
|
+
options[:align] = 'right' if cell.content.join('xxx') =~ /\A\s*-?[\d,\.]+\s*\Z/
|
|
63
|
+
row << element(cell.type,options, cell.content).cr
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
def to_doc( target, options = {})
|
|
68
|
+
self.close(options) unless @tab
|
|
69
|
+
@tab.to_doc( target, options )
|
|
70
|
+
end
|
|
71
|
+
end #Creole_tab
|
|
72
|
+
|
|
73
|
+
=begin rdoc
|
|
74
|
+
Create tabulars analog to Wikimedia.
|
|
75
|
+
|
|
76
|
+
Usage:
|
|
77
|
+
before
|
|
78
|
+
<<<tabular
|
|
79
|
+
|!columns=3
|
|
80
|
+
|!columndescription=ccc
|
|
81
|
+
|!border=1px
|
|
82
|
+
|!css= color: red
|
|
83
|
+
|=1
|
|
84
|
+
|=2
|
|
85
|
+
|=3
|
|
86
|
+
|-
|
|
87
|
+
|eins
|
|
88
|
+
|zwei
|
|
89
|
+
|drei
|
|
90
|
+
|-
|
|
91
|
+
|one
|
|
92
|
+
|two
|
|
93
|
+
|three
|
|
94
|
+
>>>
|
|
95
|
+
after
|
|
96
|
+
|
|
97
|
+
You can add additional settings to cells:
|
|
98
|
+
<<<tabular
|
|
99
|
+
|!columns=3
|
|
100
|
+
|eins||css=color: red
|
|
101
|
+
|css = zwei
|
|
102
|
+
|||class=empty
|
|
103
|
+
>>>
|
|
104
|
+
=end
|
|
105
|
+
class Creole_tabular < Placeholder
|
|
106
|
+
set_placeholder_key 'tabular'
|
|
107
|
+
|
|
108
|
+
#Define a container for cells
|
|
109
|
+
class Row
|
|
110
|
+
#Flag for hline
|
|
111
|
+
attr_accessor :hline
|
|
112
|
+
#Flag for toprule
|
|
113
|
+
attr_accessor :toprule
|
|
114
|
+
#Flag for midrule
|
|
115
|
+
attr_accessor :midrule
|
|
116
|
+
#Add a cell to a row
|
|
117
|
+
def << (cell)
|
|
118
|
+
@cells = [] unless @cells
|
|
119
|
+
@cells << cell
|
|
120
|
+
end
|
|
121
|
+
def each
|
|
122
|
+
@cells.each{|cell| yield cell } if @cells
|
|
123
|
+
end
|
|
124
|
+
#Return number of cells
|
|
125
|
+
def size
|
|
126
|
+
if @cells
|
|
127
|
+
@cells.size
|
|
128
|
+
else
|
|
129
|
+
#fixme error?
|
|
130
|
+
0
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
#Extend the class by a little structure
|
|
135
|
+
class Cell
|
|
136
|
+
=begin rdoc
|
|
137
|
+
The content of a cell is separated from settings by two ||
|
|
138
|
+
|
|
139
|
+
If you have an empty cell with additional setting, you must write three |
|
|
140
|
+
|
|
141
|
+
Supported additional settings:
|
|
142
|
+
* css= define css-style options
|
|
143
|
+
* class= define HTML-class
|
|
144
|
+
* title= define a title (results in popup during mouse-over)
|
|
145
|
+
=end
|
|
146
|
+
def initialize( content, type, wiki, local_options )
|
|
147
|
+
@content, options = content.split(/\|\|/,2)
|
|
148
|
+
@content = '' unless @content #just in case of empty content
|
|
149
|
+
@options = {}
|
|
150
|
+
options.split(/\|/).each{|option|
|
|
151
|
+
case option
|
|
152
|
+
when /class\s*=\s*/
|
|
153
|
+
@options[:class] = $~.post_match
|
|
154
|
+
when /css\s*=\s*/
|
|
155
|
+
@options[:style] = $~.post_match
|
|
156
|
+
when /title\s*=\s*/
|
|
157
|
+
@options[:title] = $~.post_match
|
|
158
|
+
when /pos\s*=\s*/ #only for multicol
|
|
159
|
+
@options[:pos] = $~.post_match
|
|
160
|
+
when /columns\s*=\s*/
|
|
161
|
+
wiki.log.debug("Creole_tabular::Cell #{type} converted to multicol")
|
|
162
|
+
type = :multicolumn #loose th/td-information -- fixme
|
|
163
|
+
@options[:colspan] = $~.post_match.to_i
|
|
164
|
+
when '' #ignore them
|
|
165
|
+
else
|
|
166
|
+
wiki.log.warn("Creole_tabular::Cell: Undefined option #{option.inspect}")
|
|
167
|
+
end
|
|
168
|
+
} if options
|
|
169
|
+
@type = type #:td or :th
|
|
170
|
+
@wiki = wiki
|
|
171
|
+
@local_options = local_options
|
|
172
|
+
end
|
|
173
|
+
#Return the content as a element.
|
|
174
|
+
def cell_element()
|
|
175
|
+
element(@type,@options, @wiki.inline(@content, @local_options)).cr
|
|
176
|
+
end
|
|
177
|
+
end #class Cell
|
|
178
|
+
|
|
179
|
+
#Build the tabular.
|
|
180
|
+
def close()
|
|
181
|
+
#~ fixme:
|
|
182
|
+
#~ *CSS-format
|
|
183
|
+
#~ *generelle def
|
|
184
|
+
|
|
185
|
+
step = 0 #start
|
|
186
|
+
head = []
|
|
187
|
+
content = [Row.new]
|
|
188
|
+
|
|
189
|
+
options = { :log => @log }
|
|
190
|
+
local_options = {
|
|
191
|
+
:log => @log,
|
|
192
|
+
:inclusions => @wiki.inclusions,
|
|
193
|
+
:plugins => @wiki.plugins.dup
|
|
194
|
+
}
|
|
195
|
+
#No footnotes inside tabulars
|
|
196
|
+
local_options[:plugins].delete('footnote')
|
|
197
|
+
local_options[:plugins].delete('footnotes')
|
|
198
|
+
|
|
199
|
+
tab_css = CSS.new( :log => @log )
|
|
200
|
+
@source.each{|cell|
|
|
201
|
+
case cell
|
|
202
|
+
when /^\|!/ #generell cell definition
|
|
203
|
+
case $~.post_match().strip
|
|
204
|
+
when /columns\s*=\s*(.*)/
|
|
205
|
+
options[:columns] = $1.to_i
|
|
206
|
+
when /border\s*=\s*(.*)/
|
|
207
|
+
options[:border] = $1
|
|
208
|
+
when /columndescription\s*=\s*(.*)/
|
|
209
|
+
options[:columndescription] = $1
|
|
210
|
+
when /css\s*=\s*(.*)\s*:\s*(.*)/
|
|
211
|
+
tab_css[$1] = $2
|
|
212
|
+
when '' #
|
|
213
|
+
else
|
|
214
|
+
@log.warn("#{self}: Unknown tabular option #{$1}") if @log.warn?
|
|
215
|
+
end
|
|
216
|
+
when /^\|-(.*)/ #new line
|
|
217
|
+
if $1 #there are options for the row
|
|
218
|
+
$1.split(/\|/).each{|option|
|
|
219
|
+
case option
|
|
220
|
+
when /hline/; content.last.hline = true
|
|
221
|
+
when /toprule/; content.last.toprule = true
|
|
222
|
+
when /midrule/; content.last.midrule = true
|
|
223
|
+
when /\A\s*\Z/, nil
|
|
224
|
+
else
|
|
225
|
+
@log.warn("#{self}: Unknown row option #{option.inspect}") if @log.warn?
|
|
226
|
+
end
|
|
227
|
+
}
|
|
228
|
+
end
|
|
229
|
+
content << Row.new #Start new row
|
|
230
|
+
when /^\|=/ #header cell
|
|
231
|
+
#~ content.last << Cell.new(@wiki.inline($~.post_match.strip, local_options), :th)
|
|
232
|
+
content.last << Cell.new($~.post_match.strip, :th, @wiki, local_options)
|
|
233
|
+
when /^\|/ #content of a cell
|
|
234
|
+
#~ content.last << Cell.new(@wiki.inline($~.post_match.strip, local_options), :td)
|
|
235
|
+
content.last << Cell.new($~.post_match.strip, :td, @wiki, local_options)
|
|
236
|
+
else #error!
|
|
237
|
+
raise "cell/log-warning in #{cell.inspect}"
|
|
238
|
+
end
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
max_size = 0
|
|
242
|
+
content.each{|line|
|
|
243
|
+
max_size = [max_size, line.size].max
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if options[:columns] and options[:columns] < max_size
|
|
247
|
+
@log.warn("Creole-tabular: Defined size #{options[:columns]} < no of columns (#{max_size})") if @log.warn?
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
if self.is_a?(Docgenerator::Creole::Creole_longtable)
|
|
251
|
+
@tab = element(:longtable, { :style => tab_css,
|
|
252
|
+
}.merge(options) ).cR
|
|
253
|
+
#~ elsif self.is_a?(Docgenerator::Creole::Creole_supertabular) #Not supported
|
|
254
|
+
#~ @tab = element(:supertabular, { :style => tab_css,
|
|
255
|
+
#~ }.merge(options) ).cR
|
|
256
|
+
elsif self.is_a?(Docgenerator::Creole::Creole_tabular)
|
|
257
|
+
@tab = element(:tabular, { :style => tab_css,
|
|
258
|
+
}.merge(options) ).cR
|
|
259
|
+
else
|
|
260
|
+
raise ArgumentError, "Unsupported tabular-class #{self.class}"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
content.each{|line|
|
|
264
|
+
@tab << row = element(:row).cr
|
|
265
|
+
row.hline if line.hline
|
|
266
|
+
row.toprule if line.toprule
|
|
267
|
+
row.midrule if line.midrule
|
|
268
|
+
line.each{|cell|
|
|
269
|
+
row << cell.cell_element.cr
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
end
|
|
273
|
+
def to_doc( target, options = {})
|
|
274
|
+
@tab.to_doc( target, options )
|
|
275
|
+
end
|
|
276
|
+
end #Creole_tabular
|
|
277
|
+
|
|
278
|
+
class Creole_longtable < Creole_tabular
|
|
279
|
+
set_placeholder_key 'longtable'
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
#~ class Creole_supertabular < Creole_tabular ##Not supported
|
|
283
|
+
#~ set_placeholder_key 'supertabular'
|
|
284
|
+
#~ end
|
|
285
|
+
=begin rdoc
|
|
286
|
+
This class needs the CSV-package (the user is responsible to load it).
|
|
287
|
+
|
|
288
|
+
The LaTeX document needs the booktabs-package
|
|
289
|
+
|
|
290
|
+
Options:
|
|
291
|
+
* headers=false: Firest line contains headers (default: true)
|
|
292
|
+
* format or columndescription: LaTeX header description
|
|
293
|
+
|
|
294
|
+
Fixmes:
|
|
295
|
+
* More parameters:
|
|
296
|
+
** toprule, hline,
|
|
297
|
+
** Other table (supertabular...)
|
|
298
|
+
* Bug: CSV without header returns Array of array
|
|
299
|
+
|
|
300
|
+
=end
|
|
301
|
+
class Creole_tabular_csv < Placeholder
|
|
302
|
+
set_placeholder_key 'tabular_csv'
|
|
303
|
+
def to_doc( target, options = {})
|
|
304
|
+
if ! defined? CSV
|
|
305
|
+
@log.fatal("tabular_csv needs CSV-package")
|
|
306
|
+
raise "tabular_csv needs CSV-package"
|
|
307
|
+
end
|
|
308
|
+
@log.fatal("tabular_csv needs parameters (format, col_sep)") unless @parameters.respond_to? :split
|
|
309
|
+
columndescription = nil
|
|
310
|
+
headers = true #first CSV-line contains
|
|
311
|
+
colsep = ';'
|
|
312
|
+
@parameters.split(/[|;]/).each{|parameter|
|
|
313
|
+
case parameter
|
|
314
|
+
when /headers=false/; headers = false
|
|
315
|
+
when /(format|columndescription)=(.*)/; columndescription = $2
|
|
316
|
+
#Some separator get a name. This is made especially, of the separator is also used as parameter separator.
|
|
317
|
+
when /(col_sep)=(.*)/; colsep = {'semicolon' => ';', 'tab' => "\t", 'bar' => '|'}[$2] || $2
|
|
318
|
+
@log.warn("tabular_csv with undefined separator (use semicolon, tab or bar)" % parameter) unless colsep
|
|
319
|
+
else
|
|
320
|
+
@log.warn("tabular_csv with unknown option %s" % parameter)
|
|
321
|
+
end
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
csv = CSV.parse(@source.join, :col_sep => colsep, :headers => true)
|
|
325
|
+
if ! columndescription
|
|
326
|
+
columndescription = 'c' * csv.headers.size
|
|
327
|
+
@log.warn("tabular_csv without LaTeX columndescription. Use %s" % columndescription)
|
|
328
|
+
end
|
|
329
|
+
tab = element(:tabular, { :columns => csv.headers.size, :columndescription => columndescription }).cR
|
|
330
|
+
tab << row = element(:row).cr.toprule
|
|
331
|
+
csv.headers.each{|title|row << element(:th,{}, title) }
|
|
332
|
+
csv.each{|line|
|
|
333
|
+
tab << row = element(:row).cr
|
|
334
|
+
line.each{|cell|
|
|
335
|
+
row << element(:td,{}, cell.last)
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
tab.to_doc( target, options )
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
end #module Creole
|
|
343
|
+
|
|
344
|
+
end #module Docgenerator
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
if $0 == __FILE__
|
|
348
|
+
creole = Docgenerator::Creole::Creole.new(
|
|
349
|
+
:name => 'tabular_creole',
|
|
350
|
+
:content => <<'creole'
|
|
351
|
+
<<<tabular
|
|
352
|
+
|!columns=3
|
|
353
|
+
|!columndescription=ccc
|
|
354
|
+
|=a
|
|
355
|
+
|=b
|
|
356
|
+
|=c
|
|
357
|
+
|-
|
|
358
|
+
|a
|
|
359
|
+
|b
|
|
360
|
+
|c
|
|
361
|
+
>>>
|
|
362
|
+
creole
|
|
363
|
+
)
|
|
364
|
+
require 'csv'
|
|
365
|
+
creole = Docgenerator::Creole::Creole.new(
|
|
366
|
+
:name => 'tabular_creole',
|
|
367
|
+
:content => <<'creole'
|
|
368
|
+
<<<tabular_csv|columndescription=rrr|col_sep=semicolon
|
|
369
|
+
1;2;3
|
|
370
|
+
yy;yy;yy;
|
|
371
|
+
xx;xx;xx;
|
|
372
|
+
>>>
|
|
373
|
+
creole
|
|
374
|
+
) #if false
|
|
375
|
+
|
|
376
|
+
puts creole.to_html #testcode
|
|
377
|
+
puts creole.to_latex #testcode
|
|
378
|
+
end
|
|
379
|
+
__END__
|
|
380
|
+
|
|
381
|
+
class Creole_tabular_cvs
|
|
382
|
+
include Placeholder
|
|
383
|
+
|
|
384
|
+
<<<tabular_csv|CSV-Options
|
|
385
|
+
yy;yy;yy;
|
|
386
|
+
yy;yy;yy;
|
|
387
|
+
yy;yy;yy;
|
|
388
|
+
<<<
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
Die Syntax:
|
|
392
|
+
*{| beginnt eine Tabelle. Hier können zusätzliche Formatierungseigenschaften kommen.
|
|
393
|
+
**Zumindest columns==__ sollte gesetzt sein
|
|
394
|
+
*! beginnt eine neue Zelle einer Titelzeile
|
|
395
|
+
*| beginnt eine neue Zelle
|
|
396
|
+
*|format| z.B. rowspan...
|
|
397
|
+
*|format|| Zwei || beenden die Parameter der Zelle.
|
|
398
|
+
Dann sinnvoll, wenn im Text selbst ein | vorkommt
|
|
399
|
+
(z.B. ein Macro verwendet wird)
|
|
400
|
+
*|- trennt zwei Zeilen der Tabelle
|
|
401
|
+
**hline: Zusätzlicher Trennstrich über der Zeile
|
|
402
|
+
**toprule, midrule, bottomrule: Zusätzlicher Trennstrich über der Zeile (erfordert booktabs.sty)
|
|
403
|
+
*|} beendet eine Tabelle
|
|
404
|
+
|
|
405
|
+
|