docgenerator 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/creole_example_tabular.rb +95 -0
- data/examples/docgenerator_example.rb +5 -5
- data/lib/creole/creole2doc.rb +28 -18
- data/lib/creole/creole_inclusions.rb +4 -4
- data/lib/creole/creole_placeholder.rb +4 -1
- data/lib/creole/creole_tabular.rb +173 -155
- data/lib/creole/plugins/rail.rb +118 -119
- data/lib/creole/plugins/struktex.rb +35 -35
- data/lib/creole/plugins/todonotes.rb +8 -1
- data/lib/docgenerator/attribute.rb +160 -160
- data/lib/docgenerator/characters.rb +343 -311
- data/lib/docgenerator/css.rb +167 -167
- data/lib/docgenerator/document.rb +525 -511
- data/lib/docgenerator/element.rb +316 -316
- data/lib/docgenerator/element_meta.rb +114 -114
- data/lib/docgenerator/elements.rb +19 -9
- data/lib/docgenerator/environments.rb +3 -1
- data/lib/docgenerator/lists.rb +177 -174
- data/lib/docgenerator/packages/hyperref.rb +74 -70
- data/lib/docgenerator/packages/multicol.rb +33 -0
- data/lib/docgenerator/packages/scrlettr2.rb +152 -151
- data/lib/docgenerator/packages/todonotes.rb +1 -1
- data/lib/docgenerator/tabular.rb +463 -400
- data/lib/docgenerator/templates/docgenerator_template.rb +94 -84
- data/lib/docgenerator/templates/docgenerator_template.yaml +75 -15
- data/lib/docgenerator.rb +1 -1
- data/lib/wiki2doc/wiki2docgenerator.rb +1 -1
- data/meta_test_and_doc/build__meta.rb +125 -0
- data/meta_test_and_doc/build_doc.rb +333 -0
- data/meta_test_and_doc/build_test.rb +251 -0
- data/meta_test_and_doc/manpages/attachfile.rb +389 -0
- data/meta_test_and_doc/manpages/caption.rb +133 -0
- data/meta_test_and_doc/manpages/characters.rb +3738 -0
- data/meta_test_and_doc/manpages/elements.rb +6851 -0
- data/meta_test_and_doc/manpages/environments.rb +985 -0
- data/meta_test_and_doc/manpages/footnote.rb +439 -0
- data/meta_test_and_doc/manpages/hyperref.rb +605 -0
- data/meta_test_and_doc/manpages/listings.rb +988 -0
- data/meta_test_and_doc/manpages/lists.rb +1463 -0
- data/meta_test_and_doc/manpages/others.rb +129 -0
- data/meta_test_and_doc/manpages/packages.rb +13 -0
- data/meta_test_and_doc/manpages/pdfpages.rb +108 -0
- data/meta_test_and_doc/manpages/readme.rdoc +9 -0
- data/meta_test_and_doc/manpages/scrlettr2.rb +362 -0
- data/meta_test_and_doc/manpages/scrpage2.rb +2028 -0
- data/meta_test_and_doc/manpages/sectioning.rb +2467 -0
- data/meta_test_and_doc/manpages/tables.rb +2088 -0
- data/meta_test_and_doc/manpages/todonotes.rb +235 -0
- data/meta_test_and_doc/manpages/wiki2docgenerator.rb +64 -0
- data/{readme.rd → readme.rdoc} +18 -1
- data/unittest/expected/test_tabular.creole +33 -0
- data/unittest/expected_creole/test_creole_creole1.0test.html +3 -3
- data/unittest/expected_creole/test_creole_creole1.0test.latex +3 -3
- data/unittest/expected_creole/test_creole_creole1.0test.text +3 -3
- data/unittest/expected_creole/test_creole_inline_apostroph.html +6 -0
- data/unittest/expected_creole/test_creole_inline_apostroph.latex +8 -0
- data/unittest/expected_creole/test_creole_inline_apostroph.text +4 -0
- data/unittest/expected_creole/test_creole_input.normsource +12 -12
- data/unittest/expected_creole/test_creole_input.normsource_1.8 +23 -0
- data/unittest/expected_creole/test_creole_links_external_implicit.html +2 -2
- data/unittest/expected_creole/test_creole_links_external_implicit.latex +2 -2
- data/unittest/expected_creole/test_creole_links_external_implicit.text +2 -2
- data/unittest/expected_creole/test_creole_links_implicit_end.html +1 -1
- data/unittest/expected_creole/test_creole_links_implicit_end.latex +1 -1
- data/unittest/expected_creole/test_creole_list_ul.normsource +42 -42
- data/unittest/expected_creole/test_creole_list_ul.normsource_1.8 +83 -0
- data/unittest/expected_creole/test_creole_paragraphs.normsource +15 -15
- data/unittest/expected_creole/test_creole_paragraphs.normsource_1.8 +27 -0
- data/unittest/expected_creole/test_creole_tabular.creole +22 -0
- data/unittest/expected_creole/test_creole_tabular_creole.creole +19 -0
- data/unittest/expected_creole/test_creole_tabular_css.creole +24 -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_with_cell_option.creole +21 -0
- data/unittest/expected_creole/test_creole_toc_level_text.html +2 -2
- data/unittest/expected_creole/test_creole_toc_level_text.latex +2 -2
- data/unittest/expected_packages/test_multicol_3.tex +2 -0
- data/unittest/expected_packages/test_multicol_3_titleline.tex +2 -0
- data/unittest/expected_templates/test_article.tex +23 -0
- data/unittest/expected_templates/test_article_utf8.tex +34 -0
- data/unittest/expected_templates/test_context.miv +18 -0
- data/unittest/expected_templates/test_creole.creole +8 -0
- data/unittest/expected_templates/test_html.html +12 -0
- data/unittest/expected_templates/test_html401_strict.html +14 -0
- data/unittest/expected_templates/test_html401_trans.html +14 -0
- data/unittest/expected_templates/test_html_utf8.html +14 -0
- data/unittest/expected_templates/test_include.tex +17 -0
- data/unittest/expected_templates/test_include_utf8.tex +17 -0
- data/unittest/expected_templates/test_text.txt +6 -0
- data/unittest/expected_templates/test_wiki.wiki +6 -0
- data/unittest/expected_templates/test_xhtml_strict.html +14 -0
- data/unittest/expected_templates/test_xhtml_trans.html +14 -0
- data/unittest/unittest_creole.rb +27 -6
- data/unittest/unittest_creole_placeholders.rb +1 -123
- data/unittest/unittest_creole_tabular.rb +174 -0
- data/unittest/unittest_docgenerator.rb +4 -3
- data/unittest/unittest_docgenerator_characters.rb +4769 -615
- data/unittest/unittest_packages_multicol.rb +84 -0
- data/unittest/unittest_rubycode4doc.rb +0 -1
- data/unittest/unittest_templates.rb +64 -0
- metadata +163 -77
- data/build_test_and_doc.rb +0 -505
- data/manpage_elements.rb +0 -10411
@@ -0,0 +1,95 @@
|
|
1
|
+
#encoding: cp1252
|
2
|
+
=begin rdoc
|
3
|
+
Example for creole/creole2doc
|
4
|
+
=end
|
5
|
+
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
$:.unshift("../lib") #for local tests with uninstalled gem
|
9
|
+
#~ require 'docgenerator'
|
10
|
+
require 'creole/creole2doc'
|
11
|
+
include Docgenerator
|
12
|
+
|
13
|
+
begin
|
14
|
+
require 'rake4latex_pdflatex'
|
15
|
+
rescue LoadError
|
16
|
+
puts "rake4latex not installed -> no translation of LaTeX-file"
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Move all results to anothe folder
|
21
|
+
#
|
22
|
+
Dir.chdir('results')
|
23
|
+
|
24
|
+
|
25
|
+
=begin
|
26
|
+
Create document
|
27
|
+
=end
|
28
|
+
doc = Document.new(
|
29
|
+
:title => 'creole2doc_example_tabular.rb: Test for tabulars with creole'
|
30
|
+
)
|
31
|
+
|
32
|
+
=begin
|
33
|
+
Add creole-content.
|
34
|
+
=end
|
35
|
+
doc.body << Creole::Creole.new(:content => DATA)
|
36
|
+
|
37
|
+
# ###############################
|
38
|
+
# Save the files
|
39
|
+
# ###############
|
40
|
+
doc.save( __FILE__.sub(/\.rb/, ".html"))
|
41
|
+
doc.save( __FILE__.sub(/\.rb/, ".tex"),
|
42
|
+
:runtex => [:statistic, :clean]
|
43
|
+
)
|
44
|
+
|
45
|
+
|
46
|
+
__END__
|
47
|
+
=Normal tabular
|
48
|
+
|
49
|
+
|one | two
|
50
|
+
|1 | 2
|
51
|
+
|1.0 | 2.0
|
52
|
+
|
53
|
+
==tabular with heading
|
54
|
+
|=header col1|=header col2|
|
55
|
+
|col1|col2|
|
56
|
+
|you |can |
|
57
|
+
|also |align\\ it. |
|
58
|
+
|
59
|
+
|
60
|
+
=tabular as placeholder
|
61
|
+
<<<tabular
|
62
|
+
|!columns=3
|
63
|
+
|!columndescription=ccc
|
64
|
+
|=1
|
65
|
+
|=2
|
66
|
+
|=3
|
67
|
+
|-
|
68
|
+
|eins
|
69
|
+
|zwei
|
70
|
+
|drei
|
71
|
+
|-
|
72
|
+
|one
|
73
|
+
|two
|
74
|
+
|three
|
75
|
+
>>>
|
76
|
+
|
77
|
+
=tabular with cell option
|
78
|
+
|
79
|
+
After || you may define special data
|
80
|
+
|
81
|
+
<<<tabular
|
82
|
+
|!columns=3
|
83
|
+
|!columndescription=ccc
|
84
|
+
|eins||css=color: red
|
85
|
+
|css = zwei
|
86
|
+
|||class=empty
|
87
|
+
|-
|
88
|
+
|normal
|
89
|
+
|//italic//
|
90
|
+
|//italic//||class=it
|
91
|
+
|-
|
92
|
+
|text with | nice! ||class = it
|
93
|
+
|||css =
|
94
|
+
|
|
95
|
+
>>>
|
@@ -17,7 +17,7 @@ rescue LoadError
|
|
17
17
|
end
|
18
18
|
|
19
19
|
#
|
20
|
-
# Move all results to
|
20
|
+
# Move all results to another folder
|
21
21
|
#
|
22
22
|
Dir.chdir('results')
|
23
23
|
|
@@ -34,18 +34,18 @@ doc = Docgenerator::Document.new(
|
|
34
34
|
)
|
35
35
|
|
36
36
|
#
|
37
|
-
# Alternative
|
37
|
+
# Alternative possibility to define settings:
|
38
38
|
#~ doc.title ='Titel'
|
39
39
|
#~ doc.author = 'Authorname'
|
40
40
|
#~ doc.date = 'Datum'
|
41
41
|
#~ doc.keywords = 'Test, DocGenerator.rb'
|
42
42
|
#~ doc.description = 'Testdokument for DocGenerator.rb'
|
43
43
|
|
44
|
-
doc.add_option('
|
44
|
+
doc.add_option('english')
|
45
45
|
|
46
46
|
#
|
47
47
|
doc.body << element(:maketitle) #Only LaTeX
|
48
|
-
doc.body[:lang] << '
|
48
|
+
doc.body[:lang] << 'en' #language flag for HTML
|
49
49
|
|
50
50
|
# ###############################
|
51
51
|
doc.body << element(:h1, {}, 'Sections and paragraphs').cr
|
@@ -104,7 +104,7 @@ doc.body.insertbefore( par, 'This is inserted before the paragraph.' )
|
|
104
104
|
doc.body.insertafter( par, 'This is inserted after the paragraph.' )
|
105
105
|
|
106
106
|
#
|
107
|
-
# This would give
|
107
|
+
# This would give you an error
|
108
108
|
#
|
109
109
|
#~ puts "!And now an error: insertbefore with a non-existing target"
|
110
110
|
#~ doc.body.insertbefore( 'a', 'Before List' )
|
data/lib/creole/creole2doc.rb
CHANGED
@@ -175,13 +175,16 @@ Define a creole document. The settings are forwarded to Document#new()
|
|
175
175
|
Some settings are used only directly in Creole_document.
|
176
176
|
- :with_toc: Add a table of contents at the beginning of the document.
|
177
177
|
- :content: Wiki-text. Same as Creole_document#<<
|
178
|
+
- :logname: Name for Creole#log
|
178
179
|
=end
|
179
180
|
def initialize( settings = {} )
|
180
181
|
@with_toc = settings[:with_toc ]
|
181
182
|
settings.delete(:with_toc) #Avoid error message in Document.new
|
182
|
-
|
183
|
+
settings[:logname] ||= 'CreoleDoc' #Just a name for easier debugging/logging
|
184
|
+
|
183
185
|
@creole = Creole.new(
|
184
186
|
#Get content if available and delete setting to avoid error message in Document.new
|
187
|
+
:logname => settings.delete(:logname), #for logger
|
185
188
|
:content => settings.delete(:content),
|
186
189
|
:ignore => settings.delete(:ignore),
|
187
190
|
:targetdir => settings.delete(:targetdir)
|
@@ -277,7 +280,7 @@ Options:
|
|
277
280
|
=end
|
278
281
|
def initialize( options = {} )
|
279
282
|
@options = {
|
280
|
-
:
|
283
|
+
:logname => 'Creole', #Just a name for easier debugging/logging
|
281
284
|
:targetdir => '.',
|
282
285
|
:wrap_at => 75, #Default line wrapping
|
283
286
|
#~ :parsetest => false #Make an immediate test for parsing #fixme
|
@@ -309,7 +312,7 @@ Options:
|
|
309
312
|
@targetdir = @options[:targetdir] if @options[:targetdir]
|
310
313
|
|
311
314
|
@log = @options[:log]
|
312
|
-
@log = Log4r::Logger.new(@options[:
|
315
|
+
@log = Log4r::Logger.new(@options[:logname], Log4r::INFO) unless @log
|
313
316
|
@log.outputters = Log4r::StdoutOutputter.new('log_stdout') if @log.outputters.empty?
|
314
317
|
|
315
318
|
@creation_caller = caller.first
|
@@ -374,8 +377,12 @@ multiple paragraphs, lists...
|
|
374
377
|
else
|
375
378
|
raise InputError, "Don't know, how to handle #{input.class} in Creole#<<"
|
376
379
|
end
|
377
|
-
|
378
|
-
|
380
|
+
begin
|
381
|
+
source_enc = source.encode(@options[:encoding])
|
382
|
+
rescue Encoding::UndefinedConversionError => err
|
383
|
+
@log.warn("Encoding conversion error <#{err}>") if @log.warn?
|
384
|
+
source_enc = source.encode(@options[:encoding], :undef => :replace)
|
385
|
+
end
|
379
386
|
@source << source_enc
|
380
387
|
#Parse the given source.
|
381
388
|
#This is done immediate, so you have a chance to localize the line, where an error occurs.
|
@@ -549,12 +556,8 @@ Return a table of contents as a list.
|
|
549
556
|
|
550
557
|
@toc.each{|tocentry|
|
551
558
|
level = tocentry.add_info[:level]
|
552
|
-
|
553
|
-
|
554
|
-
#fixme:
|
555
|
-
#Ebenenfehler (fehlende ebene resultiert in:
|
556
|
-
# ERROR Creole: List ** with missing sublist
|
557
|
-
# --> bessere meldung
|
559
|
+
#Skip deeper levels then wanted.
|
560
|
+
next if level > options[:level]
|
558
561
|
|
559
562
|
#Build the label
|
560
563
|
if level > toclabel.size
|
@@ -562,9 +565,12 @@ Return a table of contents as a list.
|
|
562
565
|
elsif level < toclabel.size
|
563
566
|
toclabel.pop
|
564
567
|
end
|
568
|
+
#Happens if there is a jump gap on section levels (subsubsection inside section without subsection)
|
565
569
|
if ! toclabel[level-1]
|
566
|
-
@log.
|
567
|
-
|
570
|
+
@log.warn("Missing toclevel for <#{tocentry.content}> #{tocentry.add_info.inspect}")
|
571
|
+
#add dummy level
|
572
|
+
toclabel << 0
|
573
|
+
toclist << "#{listtype * ( level - 1)} ---"
|
568
574
|
end
|
569
575
|
toclabel[level-1] = toclabel[level-1] + 1
|
570
576
|
|
@@ -575,8 +581,6 @@ Return a table of contents as a list.
|
|
575
581
|
else
|
576
582
|
label = tocentry.add_info[:label] = toclabel.join('-')
|
577
583
|
end
|
578
|
-
#Skip deeper levels then wanted.
|
579
|
-
next if level > options[:level]
|
580
584
|
|
581
585
|
#Feature to create the toc if higher levels are missing /start at h3...)
|
582
586
|
#~ if level < options[:startlevel]
|
@@ -602,6 +606,9 @@ toc
|
|
602
606
|
Wrapping mechanism for texts.
|
603
607
|
|
604
608
|
Don't do anything, if line_width is 0.
|
609
|
+
|
610
|
+
See also http://stackoverflow.com/questions/7548968/format-output-to-40-characters-long-per-line/7549032#7549032
|
611
|
+
and http://forum.ruby-portal.de/viewtopic.php?t=3844&p=24578
|
605
612
|
=end
|
606
613
|
def word_wrap(text, line_width = @options[:wrap_at] )
|
607
614
|
return text if line_width <= 0
|
@@ -783,9 +790,10 @@ Options is a Hash and may contain:
|
|
783
790
|
options[:log].error("Lost link <#{el}>") if options[:log].error?
|
784
791
|
#fixme: there are obsolete 2 additional spaces in the result.
|
785
792
|
when /^http/ #implicit link
|
786
|
-
href = element(:a, {:href=>el.strip}, el.strip )
|
793
|
+
#~ href = element(:a, {:href=>el.strip}, el.strip ) #This makes problems with TeX (unmasked _,%...)
|
794
|
+
href = element(:url, {}, el.strip )
|
787
795
|
el =~ /(\s|\Z)$/ #get the end-space/newline if available
|
788
|
-
endspace = (
|
796
|
+
endspace = ( $1.empty? ? nil : $1 )
|
789
797
|
if stack.last
|
790
798
|
stack.last << href
|
791
799
|
#~ stack.last << last_char #add again the
|
@@ -878,10 +886,12 @@ Check for links and pictures if the target exist.
|
|
878
886
|
|
879
887
|
Absolute DOS-Pathes are detected (C:\...).
|
880
888
|
Relative pathes are searched from @options[:targetdir] (default '.').
|
889
|
+
|
890
|
+
Different locations are not supported (e.g. to implement LaTeXs \graphicspath)
|
881
891
|
=end
|
882
892
|
def check_link_existence( filename, log )
|
883
893
|
case filename
|
884
|
-
when /^.:/#absolute DOS-path
|
894
|
+
when /^.:/#absolute DOS-path (e.g. c:\...)
|
885
895
|
path = filename.dup
|
886
896
|
else #relative path
|
887
897
|
path = "#{@options[:targetdir]}/#{filename}".sub(/^\//, '')
|
@@ -50,7 +50,7 @@ Define an image.
|
|
50
50
|
The existence of the picture is checked.
|
51
51
|
|
52
52
|
Supported options:
|
53
|
-
* alt
|
53
|
+
* alt (2nd parameter of {{picsrc|...}}
|
54
54
|
* css or imgcss
|
55
55
|
* class or imgclass
|
56
56
|
* longdesc (can take a url, at leas opera offers to call the description)
|
@@ -73,9 +73,9 @@ Supported options:
|
|
73
73
|
#* align
|
74
74
|
#* border
|
75
75
|
#* height
|
76
|
-
#* hspace
|
77
|
-
#* name
|
78
|
-
#* vspace
|
76
|
+
#* hspace
|
77
|
+
#* name
|
78
|
+
#* vspace
|
79
79
|
options.each{|option|
|
80
80
|
case option
|
81
81
|
when /^(img)?css\s*=\s*(.*)/
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
#encoding: UTF-8
|
2
|
+
|
2
3
|
|
3
4
|
<<fixme
|
4
5
|
taboptions:
|
@@ -17,8 +18,7 @@ fixme
|
|
17
18
|
|
18
19
|
|
19
20
|
module Docgenerator
|
20
|
-
module Creole
|
21
|
-
|
21
|
+
module Creole
|
22
22
|
=begin
|
23
23
|
"Original" creole tab.
|
24
24
|
|
@@ -35,55 +35,55 @@ Usage:
|
|
35
35
|
|also |align\\ it. |
|
36
36
|
|
37
37
|
=end
|
38
|
-
class Creole_tab < Placeholder
|
39
|
-
|
38
|
+
class Creole_tab < Placeholder
|
39
|
+
set_placeholder_key 'creole_tabular' #original creole-tab definition
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
#Extend the class by a little structure
|
42
|
+
Cell = Struct.new('Cell', :content, :type )
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end #Creole_tab
|
44
|
+
#Finish the tabular.
|
45
|
+
#Each cell is added left justified.
|
46
|
+
def close(options)
|
47
|
+
#~ @log.error("Standard creole tabulars not supported yet" )
|
48
|
+
|
49
|
+
step = 0 #start
|
50
|
+
head = []
|
51
|
+
content = []
|
52
|
+
@source.each{|line|
|
53
|
+
content << []
|
54
|
+
#delete trailing empty cells
|
55
|
+
line.chomp.gsub(/\|\s*$/,'').split(/\|/)[1..-1].each{|cell|
|
56
|
+
case cell
|
57
|
+
when /^=/
|
58
|
+
content.last << Cell.new(@wiki.inline($~.post_match.strip, options),:th)
|
59
|
+
else
|
60
|
+
content.last << Cell.new(@wiki.inline(cell.strip, options), :td)
|
61
|
+
end
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
max_size = 0
|
66
|
+
content.each{|line|
|
67
|
+
max_size = [max_size, line.size].max
|
68
|
+
}
|
69
|
+
|
70
|
+
@tab = element(:tabular, {#:style => tab_css,
|
71
|
+
:columns => max_size,
|
72
|
+
:columndescription => 'l' * max_size,
|
73
|
+
}).cR
|
74
|
+
content.each{|line|
|
75
|
+
@tab << row = element(:row).cr
|
76
|
+
line.each{|cell|
|
77
|
+
#fixme cell to wiki/creole
|
78
|
+
row << element(cell.type,{}, cell.content).cr
|
79
|
+
}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
def to_doc( target, options = {})
|
83
|
+
self.close(options) unless @tab
|
84
|
+
@tab.to_doc( target, options )
|
85
|
+
end
|
86
|
+
end #Creole_tab
|
87
87
|
|
88
88
|
=begin rdoc
|
89
89
|
Create tabulars analog to Wikimedia.
|
@@ -117,11 +117,11 @@ You can add additional settings to cells:
|
|
117
117
|
|||class=empty
|
118
118
|
>>>
|
119
119
|
=end
|
120
|
-
class Creole_tabular < Placeholder
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
120
|
+
class Creole_tabular < Placeholder
|
121
|
+
set_placeholder_key 'tabular'
|
122
|
+
|
123
|
+
#Extend the class by a little structure
|
124
|
+
class Cell
|
125
125
|
=begin rdoc
|
126
126
|
The content of a cell is separated from settings by two ||
|
127
127
|
|
@@ -132,107 +132,125 @@ Supported additional settings:
|
|
132
132
|
* class= define HTML-class
|
133
133
|
* title= define a title (results in popup during mouse-over)
|
134
134
|
=end
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
@local_options = local_options
|
155
|
-
end
|
156
|
-
#Return the content as a element.
|
157
|
-
def cell_element()
|
158
|
-
element(@type,@options, @wiki.inline(@content, @local_options)).cr
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
#Build the tabular.
|
163
|
-
def close()
|
164
|
-
#~ fixme:
|
165
|
-
#~ *CSS-format
|
166
|
-
#~ *generelle def
|
167
|
-
|
168
|
-
step = 0 #start
|
169
|
-
head = []
|
170
|
-
content = [[]]
|
171
|
-
|
172
|
-
options = { :log => @log }
|
173
|
-
local_options = {
|
174
|
-
:log => @log,
|
175
|
-
:inclusions => @wiki.inclusions,
|
176
|
-
:plugins => @wiki.plugins.dup
|
177
|
-
}
|
178
|
-
#No footnotes inside tabulars
|
179
|
-
local_options[:plugins].delete('footnote')
|
180
|
-
local_options[:plugins].delete('footnotes')
|
181
|
-
|
182
|
-
tab_css = CSS.new( :log => @log )
|
183
|
-
@source.each{|cell|
|
184
|
-
case cell
|
185
|
-
when /^\|!/ #generell cell definition
|
186
|
-
case $~.post_match().strip
|
187
|
-
when /columns\s*=\s*(.*)/
|
188
|
-
options[:columns] = $1.to_i
|
189
|
-
when /border\s*=\s*(.*)/
|
190
|
-
options[:border] = $1
|
191
|
-
when /columndescription\s*=\s*(.*)/
|
192
|
-
options[:columndescription] = $1
|
193
|
-
when /css\s*=\s*(.*)\s*:\s*(.*)/
|
194
|
-
tab_css[$1] = $2
|
195
|
-
when '' #
|
135
|
+
def initialize( content, type, wiki, local_options )
|
136
|
+
@content, options = content.split(/\|\|/,2)
|
137
|
+
@content = '' unless @content #just in case of empty content
|
138
|
+
@options = {}
|
139
|
+
options.split(/\|/).each{|option|
|
140
|
+
case option
|
141
|
+
when /class\s*=\s*/
|
142
|
+
@options[:class] = $~.post_match
|
143
|
+
when /css\s*=\s*/
|
144
|
+
@options[:style] = $~.post_match
|
145
|
+
when /title\s*=\s*/
|
146
|
+
@options[:title] = $~.post_match
|
147
|
+
when /pos\s*=\s*/ #only for multicol
|
148
|
+
@options[:pos] = $~.post_match
|
149
|
+
when /columns\s*=\s*/
|
150
|
+
wiki.log.debug("Creole_tabular::Cell #{type} converted to multicol")
|
151
|
+
type = :multicolumn #loose th/td-information -- fixme
|
152
|
+
@options[:colspan] = $~.post_match.to_i
|
153
|
+
when '' #ignore them
|
196
154
|
else
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
end
|
210
|
-
}
|
211
|
-
|
212
|
-
max_size = 0
|
213
|
-
content.each{|line|
|
214
|
-
max_size = [max_size, line.size].max
|
215
|
-
}
|
216
|
-
|
217
|
-
if options[:columns] and options[:columns] < max_size
|
218
|
-
@log.warn("Creole-tabular: Defined size #{options[:columns]} < no of columns (#{max_size})") if @log.warn?
|
219
|
-
end
|
155
|
+
wiki.log.warn("Creole_tabular::Cell: Undefined option #{option.inspect}")
|
156
|
+
end
|
157
|
+
} if options
|
158
|
+
@type = type #:td or :th
|
159
|
+
@wiki = wiki
|
160
|
+
@local_options = local_options
|
161
|
+
end
|
162
|
+
#Return the content as a element.
|
163
|
+
def cell_element()
|
164
|
+
element(@type,@options, @wiki.inline(@content, @local_options)).cr
|
165
|
+
end
|
166
|
+
end #class Cell
|
220
167
|
|
221
|
-
|
222
|
-
|
168
|
+
#Build the tabular.
|
169
|
+
def close()
|
170
|
+
#~ fixme:
|
171
|
+
#~ *CSS-format
|
172
|
+
#~ *generelle def
|
173
|
+
|
174
|
+
step = 0 #start
|
175
|
+
head = []
|
176
|
+
content = [[]]
|
177
|
+
|
178
|
+
options = { :log => @log }
|
179
|
+
local_options = {
|
180
|
+
:log => @log,
|
181
|
+
:inclusions => @wiki.inclusions,
|
182
|
+
:plugins => @wiki.plugins.dup
|
183
|
+
}
|
184
|
+
#No footnotes inside tabulars
|
185
|
+
local_options[:plugins].delete('footnote')
|
186
|
+
local_options[:plugins].delete('footnotes')
|
187
|
+
|
188
|
+
tab_css = CSS.new( :log => @log )
|
189
|
+
@source.each{|cell|
|
190
|
+
case cell
|
191
|
+
when /^\|!/ #generell cell definition
|
192
|
+
case $~.post_match().strip
|
193
|
+
when /columns\s*=\s*(.*)/
|
194
|
+
options[:columns] = $1.to_i
|
195
|
+
when /border\s*=\s*(.*)/
|
196
|
+
options[:border] = $1
|
197
|
+
when /columndescription\s*=\s*(.*)/
|
198
|
+
options[:columndescription] = $1
|
199
|
+
when /css\s*=\s*(.*)\s*:\s*(.*)/
|
200
|
+
tab_css[$1] = $2
|
201
|
+
when '' #
|
202
|
+
else
|
203
|
+
@log.warn("#{self}: Unknown tabular option #{$1}") if @log.warn?
|
204
|
+
end
|
205
|
+
when /^\|-(.*)/ #new line
|
206
|
+
content << []
|
207
|
+
when /^\|=/ #header cell
|
208
|
+
#~ content.last << Cell.new(@wiki.inline($~.post_match.strip, local_options), :th)
|
209
|
+
content.last << Cell.new($~.post_match.strip, :th, @wiki, local_options)
|
210
|
+
when /^\|/ #content of a cell
|
211
|
+
#~ content.last << Cell.new(@wiki.inline($~.post_match.strip, local_options), :td)
|
212
|
+
content.last << Cell.new($~.post_match.strip, :td, @wiki, local_options)
|
213
|
+
else #error!
|
214
|
+
raise "cell/log-warning in #{cell.inspect}"
|
215
|
+
end
|
216
|
+
}
|
217
|
+
|
218
|
+
max_size = 0
|
219
|
+
content.each{|line|
|
220
|
+
max_size = [max_size, line.size].max
|
221
|
+
}
|
222
|
+
|
223
|
+
if options[:columns] and options[:columns] < max_size
|
224
|
+
@log.warn("Creole-tabular: Defined size #{options[:columns]} < no of columns (#{max_size})") if @log.warn?
|
225
|
+
end
|
226
|
+
|
227
|
+
if self.is_a?(Docgenerator::Creole::Creole_longtable)
|
228
|
+
@tab = element(:longtable, { :style => tab_css,
|
223
229
|
}.merge(options) ).cR
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
230
|
+
elsif self.is_a?(Docgenerator::Creole::Creole_tabular)
|
231
|
+
@tab = element(:tabular, { :style => tab_css,
|
232
|
+
}.merge(options) ).cR
|
233
|
+
else
|
234
|
+
raise ArgumentError, "Unsupported tabular-class #{self.class}"
|
235
|
+
end
|
236
|
+
|
237
|
+
content.each{|line|
|
238
|
+
@tab << row = element(:row).cr
|
239
|
+
line.each{|cell|
|
240
|
+
row << cell.cell_element.cr
|
241
|
+
}
|
228
242
|
}
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
243
|
+
end
|
244
|
+
def to_doc( target, options = {})
|
245
|
+
@tab.to_doc( target, options )
|
246
|
+
end
|
247
|
+
end #Creole_tabular
|
248
|
+
|
249
|
+
class Creole_longtable < Creole_tabular
|
250
|
+
set_placeholder_key 'longtable'
|
233
251
|
end
|
234
|
-
|
235
|
-
end #module Creole
|
252
|
+
|
253
|
+
end #module Creole
|
236
254
|
end #module Docgenerator
|
237
255
|
|
238
256
|
|
@@ -262,8 +280,8 @@ yy;yy;yy;
|
|
262
280
|
<<<
|
263
281
|
|
264
282
|
|
265
|
-
|
266
|
-
*{| beginnt eine Tabelle. Hier
|
283
|
+
Die Syntax:
|
284
|
+
*{| beginnt eine Tabelle. Hier können zusätzliche Formatierungseigenschaften kommen.
|
267
285
|
**Zumindest columns==__ sollte gesetzt sein
|
268
286
|
*! beginnt eine neue Zelle einer Titelzeile
|
269
287
|
*| beginnt eine neue Zelle
|
@@ -272,6 +290,6 @@ yy;yy;yy;
|
|
272
290
|
Dann sinnvoll, wenn im Text selbst ein | vorkommt
|
273
291
|
(z.B. ein Macro verwendet wird)
|
274
292
|
*|- trennt zwei Zeilen der Tabelle
|
275
|
-
**hline:
|
276
|
-
**toprule, midrule, bottomrule:
|
293
|
+
**hline: Zusätzlicher Trennstrich über der Zeile
|
294
|
+
**toprule, midrule, bottomrule: Zusätzlicher Trennstrich über der Zeile (erfordert booktabs.sty)
|
277
295
|
*|} beendet eine Tabelle
|