aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v5/xml_docbook5.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v5/xml_docbook5.rb')
-rw-r--r--lib/sisu/v5/xml_docbook5.rb128
1 files changed, 93 insertions, 35 deletions
diff --git a/lib/sisu/v5/xml_docbook5.rb b/lib/sisu/v5/xml_docbook5.rb
index 98450520..3a59f839 100644
--- a/lib/sisu/v5/xml_docbook5.rb
+++ b/lib/sisu/v5/xml_docbook5.rb
@@ -70,6 +70,7 @@ module SiSU_XML_Docbook_Book
include SiSU_TextUtils
require_relative 'xml_shared' # xml_shared.rb
include SiSU_XML_Munge
+ require_relative 'shared_metadata' # shared_metadata.rb
class Source
def initialize(opt)
@opt=opt
@@ -135,7 +136,7 @@ module SiSU_XML_Docbook_Book
def collapsed
%w[ 0 1 2 3 4 5 ]
end
- def docbook(lc,chlv='')
+ def docbook_tag(lc,chlv='')
case lc
when 0 then 'book'
when 1 then lc==chlv ? 'chapter' : 'section'
@@ -162,7 +163,7 @@ module SiSU_XML_Docbook_Book
end
def markup_text(data)
data.each_with_index do |o,i|
- if o.is ==:heading || o.is ==:para
+ if o.is ==:heading || o.is ==:para || o.is ==:open_close_tags
o=@trans.markup_docbook(o) #unless o.obj==nil
end
end
@@ -189,6 +190,38 @@ module SiSU_XML_Docbook_Book
end
#def chapterlevel
#end
+ def xml_head
+ [
+ '<docinfo>',
+ SiSU_Metadata::Summary.new(@md).xml_docbook.metadata,
+ '</docinfo>'
+ ].flatten
+ end
+ def code_output(o,ocn,filename_docbook)
+ filename_docbook.puts o.obj.gsub(/\n?(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\n?/m,"\n")
+ end
+ def adjust_output(o,ocn,filename_docbook,splv)
+ if o.obj =~/#{Xx[:split]}/
+ outs=o.obj.split(/#{Xx[:split]}/)
+ outs.each do |out|
+ if out =~/<figure id=/m
+ out=out.gsub(/:spaces0:/m,
+ %{#{spaces*(splv)}#{spaces}}).
+ gsub(/:spaces1:/m,
+ %{#{spaces*(splv)}#{spaces*2}})
+ filename_docbook.puts out
+ filename_docbook.puts "#{spaces*3}#{ocn}"
+ else
+ unless out.empty?
+ filename_docbook.puts SiSU_TextUtils::Wrap.new(out,80,(splv*2+2),nil).line_wrap
+ filename_docbook.puts "#{spaces*3}#{ocn}"
+ end
+ end
+ end
+ else
+ filename_docbook.puts SiSU_TextUtils::Wrap.new(o.obj,80,(splv*2+2),nil,ocn).line_wrap
+ end
+ end
def structure_build_collapsed(data)
#output_file=@md.file.output_path.xml_docbook_book.dir + '/' + @md.file.base_filename.xml_docbook_book
file=SiSU_Env::FileOp.new(@md)
@@ -197,10 +230,11 @@ module SiSU_XML_Docbook_Book
@chlv=chlv=0
doc_position=:head
filename_docbook.puts head
+ filename_docbook.puts xml_head
data.each_with_index do |o,i|
if (defined? o.ocn and not o.ocn.nil?)
ocn=(@make.build.ocn?) \
- ? "\n#{Dx[:ocn_o]}#{o.ocn}#{Dx[:ocn_c]}"
+ ? "<!-- o#{o.ocn} -->"
: ''
id=%{ id="o#{o.ocn}" }
else
@@ -217,16 +251,40 @@ module SiSU_XML_Docbook_Book
doc_position=:body_and_tail
else
filename_docbook.puts structure_build_tag_close(o.lc,h)
- filename_docbook.puts %{#{spaces*(o.lc)}<#{tags.docbook(o.lc,chlv)}#{tag_id}>
+ filename_docbook.puts %{#{spaces*(o.lc)}<#{tags.docbook_tag(o.lc,chlv)}#{tag_id}>
#{spaces*o.lc}<title#{id}>
}
end
- filename_docbook.puts SiSU_TextUtils::Wrap.new(o.obj + ocn,80,(@splv*2+2)).line_wrap
+ adjust_output(o,ocn,filename_docbook,@splv)
filename_docbook.puts %{#{spaces*o.lc}</title>}
h=o.lc
- elsif (o.of ==:para or o.of ==:block)
+ elsif o.of ==:layout \
+ and o.is ==:open_close_tags
+ xml_tag=case o.sym
+ when :quote_open then '<blockquote>'
+ when :quote_close then '</blockquote>'
+ else ''
+ end
+ unless xml_tag.empty?
+ filename_docbook.puts "#{spaces*(@splv)}#{xml_tag}"
+ end
+ elsif o.of ==:block
+ if o.is ==:table
+ filename_docbook.puts SiSU_Tables::TableXMLdocbook.new(o,id).table.obj
+ elsif o.is ==:code
+ filename_docbook.puts "#{spaces*(@splv)}<para#{id}>"
+ filename_docbook.puts "#{spaces*(@splv+1)}<programlisting>"
+ code_output(o,ocn,filename_docbook)
+ filename_docbook.puts "#{spaces*(@splv+1)}</programlisting>"
+ filename_docbook.puts "#{spaces*(@splv)}</para>"
+ else
+ filename_docbook.puts "#{spaces*(@splv)}<para#{id}>"
+ adjust_output(o,ocn,filename_docbook,@splv)
+ filename_docbook.puts "#{spaces*(@splv)}</para>"
+ end
+ elsif o.of ==:para
filename_docbook.puts "#{spaces*(@splv)}<para#{id}>"
- filename_docbook.puts SiSU_TextUtils::Wrap.new(o.obj + ocn,80,(@splv*2+2)).line_wrap
+ adjust_output(o,ocn,filename_docbook,@splv)
filename_docbook.puts "#{spaces*(@splv)}</para>"
end
end
@@ -237,40 +295,40 @@ module SiSU_XML_Docbook_Book
x=[]
case h
when 0
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 1
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 2
- x << "#{spaces*2}</#{tags.docbook(2,@chlv)}>" if (lc <= 2)
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*2}</#{tags.docbook_tag(2,@chlv)}>" if (lc <= 2)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 3
- x << "#{spaces*3}</#{tags.docbook(3,@chlv)}>" if (lc <= 3)
- x << "#{spaces*2}</#{tags.docbook(2,@chlv)}>" if (lc <= 2)
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*3}</#{tags.docbook_tag(3,@chlv)}>" if (lc <= 3)
+ x << "#{spaces*2}</#{tags.docbook_tag(2,@chlv)}>" if (lc <= 2)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 4
- x << "#{spaces*4}</#{tags.docbook(4,@chlv)}>" if (lc <= 4)
- x << "#{spaces*3}</#{tags.docbook(3,@chlv)}>" if (lc <= 3)
- x << "#{spaces*2}</#{tags.docbook(2,@chlv)}>" if (lc <= 2)
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*4}</#{tags.docbook_tag(4,@chlv)}>" if (lc <= 4)
+ x << "#{spaces*3}</#{tags.docbook_tag(3,@chlv)}>" if (lc <= 3)
+ x << "#{spaces*2}</#{tags.docbook_tag(2,@chlv)}>" if (lc <= 2)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 5
- x << "#{spaces*5}</#{tags.docbook(5)}>" if (lc <= 5)
- x << "#{spaces*4}</#{tags.docbook(4,@chlv)}>" if (lc <= 4)
- x << "#{spaces*5}</#{tags.docbook(3,@chlv)}>" if (lc <= 3)
- x << "#{spaces*2}</#{tags.docbook(2,@chlv)}>" if (lc <= 2)
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*5}</#{tags.docbook_tag(5)}>" if (lc <= 5)
+ x << "#{spaces*4}</#{tags.docbook_tag(4,@chlv)}>" if (lc <= 4)
+ x << "#{spaces*5}</#{tags.docbook_tag(3,@chlv)}>" if (lc <= 3)
+ x << "#{spaces*2}</#{tags.docbook_tag(2,@chlv)}>" if (lc <= 2)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
when 6
- x << "#{spaces*6}</#{tags.docbook(6)}>" if (lc <= 6)
- x << "#{spaces*5}</#{tags.docbook(5)}>" if (lc <= 5)
- x << "#{spaces*4}</#{tags.docbook(4,@chlv)}>" if (lc <= 4)
- x << "#{spaces*3}</#{tags.docbook(3,@chlv)}>" if (lc <= 3)
- x << "#{spaces*2}</#{tags.docbook(2,@chlv)}>" if (lc <= 2)
- x << "#{spaces*1}</#{tags.docbook(1,@chlv)}>" if (lc <= 1)
- x << "#{spaces*0}</#{tags.docbook(0)}>" if (lc <= 0)
+ x << "#{spaces*6}</#{tags.docbook_tag(6)}>" if (lc <= 6)
+ x << "#{spaces*5}</#{tags.docbook_tag(5)}>" if (lc <= 5)
+ x << "#{spaces*4}</#{tags.docbook_tag(4,@chlv)}>" if (lc <= 4)
+ x << "#{spaces*3}</#{tags.docbook_tag(3,@chlv)}>" if (lc <= 3)
+ x << "#{spaces*2}</#{tags.docbook_tag(2,@chlv)}>" if (lc <= 2)
+ x << "#{spaces*1}</#{tags.docbook_tag(1,@chlv)}>" if (lc <= 1)
+ x << "#{spaces*0}</#{tags.docbook_tag(0)}>" if (lc <= 0)
end
x.join("\n")
end