aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2013-12-03 00:30:50 -0500
committerRalph Amissah <ralph@amissah.com>2013-12-03 00:30:50 -0500
commit9700518408f388c9f070894f7986d94d80e4c070 (patch)
tree50fcd8c17a761ab47001cb6c7be298e1708ad7d7
parentv5: xml, docbook (diff)
v5: xml, fictionbook
-rw-r--r--data/doc/sisu/CHANGELOG_v51
-rw-r--r--lib/sisu/v5/constants.rb1
-rw-r--r--lib/sisu/v5/hub.rb5
-rw-r--r--lib/sisu/v5/manifest.rb7
-rw-r--r--lib/sisu/v5/options.rb6
-rw-r--r--lib/sisu/v5/sysenv.rb99
-rw-r--r--lib/sisu/v5/urls.rb8
-rw-r--r--lib/sisu/v5/xml_fictionbook2.rb366
-rw-r--r--lib/sisu/v5/xml_shared.rb8
9 files changed, 497 insertions, 4 deletions
diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5
index 742a6e70..7a09c091 100644
--- a/data/doc/sisu/CHANGELOG_v5
+++ b/data/doc/sisu/CHANGELOG_v5
@@ -60,6 +60,7 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.1.0.orig.tar.xz
* rst
* xml
* docbook, book
+ * fictionbook
* sisu.gemspec
diff --git a/lib/sisu/v5/constants.rb b/lib/sisu/v5/constants.rb
index 1f96f0aa..da9858f2 100644
--- a/lib/sisu/v5/constants.rb
+++ b/lib/sisu/v5/constants.rb
@@ -79,6 +79,7 @@ Sfx={
xml_docbook: '.docbook.xml',
xml_docbook_article: '.article.docbook.xml',
xml_docbook_book: '.book.docbook.xml',
+ xml_fictionbook: '.fb2',
epub: '.epub',
epub_xhtml: '.xhtml',
odt: '.odt',
diff --git a/lib/sisu/v5/hub.rb b/lib/sisu/v5/hub.rb
index 08147d96..f09bd832 100644
--- a/lib/sisu/v5/hub.rb
+++ b/lib/sisu/v5/hub.rb
@@ -359,6 +359,10 @@ module SiSU
require_relative 'xml_docbook5' # xml_docbook5.rb
SiSU_XML_Docbook_Book::Source.new(@opt).read
end
+ if @opt.act[:xml_fictionbook][:set]==:on #% --xml-fictionbook
+ require_relative 'xml_fictionbook2' # xml_fictionbook2.rb
+ SiSU_XML_Fictionbook::Source.new(@opt).read
+ end
if @opt.act[:xml_sax][:set]==:on #% --xml-sax, -x xml sax type
require_relative 'xml_sax' # xml_sax.rb
SiSU_XML_SAX::Source.new(@opt).read
@@ -673,6 +677,7 @@ module SiSU
|| @opt.act[:xml_scaffold_structure_sisu][:set]==:on \
|| @opt.act[:xml_scaffold_structure_collapse][:set]==:on \
|| @opt.act[:xml_docbook_book][:set]==:on \
+ || @opt.act[:xml_fictionbook][:set]==:on \
|| @opt.act[:pdf][:set]==:on \
|| @opt.act[:pdf_p][:set]==:on \
|| @opt.act[:pdf_l][:set]==:on \
diff --git a/lib/sisu/v5/manifest.rb b/lib/sisu/v5/manifest.rb
index 42755151..fb3064e7 100644
--- a/lib/sisu/v5/manifest.rb
+++ b/lib/sisu/v5/manifest.rb
@@ -410,6 +410,13 @@ module SiSU_Manifest
id,file='XML Docbook Book',@f.base_filename.xml_docbook_book
summarize(id,file,pth,rel,url)
end
+ if FileTest.file?(@f.place_file.xml_fictionbook.dir)==true
+ pth=@f.output_path.xml_fictionbook.dir
+ rel=@f.output_path.xml_fictionbook.rel_sm
+ url=@f.output_path.xml_fictionbook.url
+ id,file='XML Fictionbook',@f.base_filename.xml_fictionbook
+ summarize(id,file,pth,rel,url)
+ end
if FileTest.file?(@f.place_file.xml_scaffold_structure_sisu.dir)==true
pth=@f.output_path.xml_scaffold_structure_sisu.dir
rel=@f.output_path.xml_scaffold_structure_sisu.rel_sm
diff --git a/lib/sisu/v5/options.rb b/lib/sisu/v5/options.rb
index 1e11b711..f410e61f 100644
--- a/lib/sisu/v5/options.rb
+++ b/lib/sisu/v5/options.rb
@@ -864,6 +864,10 @@ module SiSU_Commandline
act[:xml_docbook_book]=mod.inspect =~/"--docbook"|"--docbook-book"|"--xml-docbook"|"--xml-docbook_book"/ \
? { bool: true, set: :on }
: { bool: false, set: :na }
+ act[:xml_fictionbook]=(cmd =~/f/ \
+ || mod.inspect =~/"--fictionbook"|"--xml-fictionbook"/) \
+ ? { bool: true, set: :on }
+ : { bool: false, set: :na }
act[:xml_scaffold_structure_sisu]=mod.inspect =~/"--xml-scaffold"|"--xml-scaffold-sisu"/ \
? { bool: true, set: :on }
: { bool: false, set: :na }
@@ -1002,6 +1006,7 @@ module SiSU_Commandline
|| act[:xml_dom][:set]==:on \
|| act[:xml_sax][:set]==:on \
|| act[:xml_docbook_book][:set]==:on \
+ || act[:xml_fictionbook][:set]==:on \
|| act[:xml_scaffold_structure_sisu][:set]==:on \
|| act[:xml_scaffold_structure_collapse][:set]==:on )
{ bool: true, set: :on }
@@ -1051,6 +1056,7 @@ module SiSU_Commandline
|| act[:xml_dom][:set]==:on \
|| act[:xml_sax][:set]==:on \
|| act[:xml_docbook_book][:set]==:on \
+ || act[:xml_fictionbook][:set]==:on \
|| act[:xml_scaffold_structure_sisu][:set]==:on \
|| act[:xml_scaffold_structure_collapse][:set]==:on )
{ bool: true, set: :on }
diff --git a/lib/sisu/v5/sysenv.rb b/lib/sisu/v5/sysenv.rb
index f25cd027..1f5d7d3a 100644
--- a/lib/sisu/v5/sysenv.rb
+++ b/lib/sisu/v5/sysenv.rb
@@ -1484,6 +1484,12 @@ module SiSU_Env
? @rc['xml_docbook']['ocn']
: true
end
+ def xml_fictionbook_ocn?
+ ((defined? @rc['xml_fictionbook']['ocn']) \
+ && @rc['xml_fictionbook']['ocn']==false) \
+ ? @rc['xml_fictionbook']['ocn']
+ : true
+ end
def xml_scaffold_ocn?
((defined? @rc['xml_scaffold']['ocn']) \
&& @rc['xml_scaffold']['ocn']==false) \
@@ -2772,6 +2778,12 @@ WOK
? @rc['program_select']['xml_viewer']
: text_editor
end
+ def fictionbook_viewer
+ ((defined? @rc['program_select']['xml_viewer']) \
+ && @rc['program_select']['xml_viewer'] =~/\S\S+/) \
+ ? @rc['program_select']['xml_viewer']
+ : text_editor
+ end
def xml_editor
xml_viewer
end
@@ -3076,6 +3088,9 @@ WOK
if @md.opt.act[:xml_docbook_book][:set]==:on #% --xml-docbook-book
ft << @md.fn[:xml_docbook_book]
end
+ if @md.opt.act[:xml_fictionbook][:set]==:on #% --xml-fictionbook
+ ft << @md.fn[:xml_fictionbook]
+ end
if @md.opt.act[:xml_scaffold_structure_sisu][:set]==:on #% --xml-scaffold --xml-scaffold-sisu
ft << @md.fn[:xml_scaffold_structure_sisu]
end
@@ -3141,6 +3156,9 @@ WOK
if @opt.act[:xml_docbook_book][:set]==:on #% --xml-docbook-book
ft << 'docbook.xml' << '??.docbook.xml' << 'docbook.??.xml'
end
+ if @opt.act[:xml_fictionbook][:set]==:on #% --xml-fictionbook
+ ft << 'fictionbook.xml' << '??.fictionbook.xml' << 'fictionbook.??.xml'
+ end
if @opt.act[:xml_scaffold_structure_sisu][:set]==:on #% --xml-scaffold --xml-scaffold-sisu
ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml'
end
@@ -4511,6 +4529,12 @@ WOK
fn=base_filename.xml_docbook_book
make_file(path,fn)
end
+ def xml_fictionbook
+ path=output_path.xml_fictionbook.dir
+ make_path(path)
+ fn=base_filename.xml_fictionbook
+ make_file(path,fn)
+ end
def xml_scaffold_structure_sisu
path=output_path.xml_scaffold_structure_sisu.dir
make_path(path)
@@ -4730,6 +4754,15 @@ WOK
end
self
end
+ def xml_fictionbook
+ def dir
+ output_path.xml_fictionbook.dir + '/' + base_filename.xml_fictionbook
+ end
+ def rel
+ output_path.xml_fictionbook.rel + '/' + base_filename.xml_fictionbook
+ end
+ self
+ end
def xml_scaffold_structure_sisu
def dir
output_path.xml.dir + '/' + base_filename.xml_scaffold_structure_sisu
@@ -5183,6 +5216,24 @@ WOK
end
i18n(fnh)
end
+ def xml_fictionbook(fh=nil)
+ fh=default_hash_build(fh,Sfx[:xml_fictionbook])
+ fh[:lng]=lang_code?(fh[:lng])
+ fnh=if output_dir_structure.by_filename?
+ {
+ fn: 'scroll',
+ ft: fh[:ft],
+ lng: fh[:lng],
+ }
+ else
+ {
+ fn: fh[:fn],
+ ft: fh[:ft],
+ lng: fh[:lng],
+ }
+ end
+ i18n(fnh)
+ end
def xml_scaffold_structure_sisu(fh=nil)
fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_sisu])
fh[:lng]=lang_code?(fh[:lng])
@@ -6098,6 +6149,30 @@ WOK
end
self
end
+ def xml_docbook_article
+ def ft
+ 'docbook'
+ end
+ def dir
+ set_path(ft).dir.abc
+ end
+ def url
+ set_path(ft).url.abc
+ end
+ def rel
+ set_path(ft).rel.abc
+ end
+ def rcp
+ set_path(ft).rcp.abc
+ end
+ def rel_sm
+ set_path(ft).rel_sm.ab
+ end
+ def rel_image
+ '../../_sisu/image'
+ end
+ self
+ end
def xml_docbook_book
def ft
'docbook_CONSTRUCTION_ZONE'
@@ -6122,6 +6197,30 @@ WOK
end
self
end
+ def xml_fictionbook
+ def ft
+ 'fictionbook_CONSTRUCTION_ZONE'
+ end
+ def dir
+ set_path(ft).dir.abc
+ end
+ def url
+ set_path(ft).url.abc
+ end
+ def rel
+ set_path(ft).rel.abc
+ end
+ def rcp
+ set_path(ft).rcp.abc
+ end
+ def rel_sm
+ set_path(ft).rel_sm.ab
+ end
+ def rel_image
+ '../../_sisu/image'
+ end
+ self
+ end
def xml_scaffold_structure_sisu
def ft
'sisu.scaffold.xml'
diff --git a/lib/sisu/v5/urls.rb b/lib/sisu/v5/urls.rb
index bdd66a59..ce3be66b 100644
--- a/lib/sisu/v5/urls.rb
+++ b/lib/sisu/v5/urls.rb
@@ -119,6 +119,7 @@ module SiSU_Urls
' --markdown (markdown txt)'=>@fn[:txt_markdown],
' --rst (rST restructured-text)'=>@fn[:txt_rst],
' --docbook-book (DocBook Book)'=>@fn[:xml_docbook_book],
+ ' --fictionbook (Fictionbook)'=>@fn[:xml_fictionbook],
'x --xml-sax (XML sax type)'=>@fn[:sax],
'X --xml-dom (XML dom type)'=>@fn[:dom],
' --xml-scaffold-sisu (XML scaffold)'=>@fn[:xml_scaffold_structure_sisu],
@@ -231,6 +232,9 @@ module SiSU_Urls
def docbook_book(x)
SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_docbook_book.dir}/#{@md.file.base_filename.xml_docbook_book}").result
end
+ def fictionbook(x)
+ SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}").result
+ end
def scaffold_structure_sisu(x)
SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_scaffold_structure_sisu.dir}/#{@md.file.base_filename.xml_scaffold_structure_sisu}").result
end
@@ -446,6 +450,10 @@ module SiSU_Urls
and @opt.act[:xml_docbook_book][:set]==:on
show.xml.docbook_book(x)
end
+ if x=~/--fictionbook\b/ \
+ and @opt.act[:xml_fictionbook][:set]==:on
+ show.xml.fictionbook(x)
+ end
if x=~/--xml-scaffold-sisu\b/ \
and @opt.act[:xml_scaffold_structure_sisu][:set]==:on
show.xml.scaffold_structure_sisu(x)
diff --git a/lib/sisu/v5/xml_fictionbook2.rb b/lib/sisu/v5/xml_fictionbook2.rb
new file mode 100644
index 00000000..8ee2fb89
--- /dev/null
+++ b/lib/sisu/v5/xml_fictionbook2.rb
@@ -0,0 +1,366 @@
+# encoding: utf-8
+=begin
+
+ * Name: SiSU
+
+ * Description: a framework for document structuring, publishing and search
+
+ * Author: Ralph Amissah
+
+ * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013 Ralph Amissah, All Rights Reserved.
+
+ * License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+ * SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+ * Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+ * Download:
+ <http://www.sisudoc.org/sisu/en/SiSU/download.html>
+
+ * Git
+ <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/xml_fictionbook.rb;hb=HEAD>
+
+ * Ralph Amissah
+ <ralph@amissah.com>
+ <ralph.amissah@gmail.com>
+
+ ** Description: Fictionbook XML rendition
+
+=end
+module SiSU_XML_Fictionbook
+ require_relative 'particulars' # particulars.rb
+ include SiSU_Particulars
+ require_relative 'ao' # ao.rb
+ require_relative 'sysenv' # sysenv.rb
+ include SiSU_Env
+ require_relative 'txt_shared' # txt_shared.rb
+ include SiSU_TextUtils
+ require_relative 'xml_shared' # xml_shared.rb
+ include SiSU_XML_Munge
+ class Source
+ def initialize(opt)
+ @opt=opt
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
+ end
+ def read
+ begin
+ @md,@ao_array=@particulars.md,@particulars.ao_array
+ @env=@particulars.env
+ report
+ SiSU_XML_Fictionbook::Source::Scroll.new(@ao_array,@md).songsheet
+ rescue
+ SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
+ __LINE__.to_s + ':' + __FILE__
+ end
+ ensure
+ end
+ end
+ private
+ def report
+ unless @opt.act[:quiet][:set]==:on
+ tool=(@opt.act[:verbose][:set]==:on \
+ || @opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on) \
+ ? "#{@env.program.fictionbook_viewer} #{@md.file.output_path.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}"
+ : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
+ (@opt.act[:verbose][:set]==:on \
+ || @opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on) \
+ ? SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Fictionbook',tool).green_hi_blue
+ : SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Fictionbook',tool).green_title_hi
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],@opt.fns,"#{@md.file.output_path.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}").flow
+ end
+ end
+ end
+ class Scroll <Source
+ def initialize(data='',md='')
+ @data,@md=data,md
+ @trans=SiSU_XML_Munge::Trans.new(@md)
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(md.opt)
+ @env=@particulars.env
+ end
+ def songsheet
+ @t='sisu'
+ data=@data
+ if @md.opt.act[:verbose_plus][:set]==:on
+ structure_collapsed(data)
+ end
+ head
+ endnotes=extract_endnotes
+ images_base64=extract_images
+ data=markup_text(data)
+ structure_build_collapsed(data,endnotes,images_base64)
+ end
+ def space
+ ' '
+ end
+ def tags
+ # collapsed -->
+ def collapsed
+ %w[ 0 1 2 3 4 5 6 ]
+ end
+ def fictionbook
+ [ 'section',
+ 'section',
+ 'section',
+ 'section',
+ 'section',
+ 'section',
+ 'section'
+ ]
+ end
+ self
+ end
+ def put(line)
+ puts line if @md.opt.act[:verbose_plus][:set]==:on
+ end
+ def head
+ version=SiSU_Env::InfoVersion.instance.get_version
+ rb_ver=SiSU_Env::InfoVersion.instance.rbversion
+ date_available=if defined? @md.date.available; "\n <p>#{@md.date.available} Initial version</p>"
+ else ''
+ end
+ date_modified=if defined? @md.date.modified; "\n <p>#{@md.date.modified} Last Modified</p>"
+ else ''
+ end
+ coverpageimage=if defined? @md.make.cover_image[:cover]
+ %{\n <coverpage><image href="##{@md.make.cover_image[:cover]}" /></coverpage>}
+ else ''
+ end
+ if defined? @md.authors \
+ and @md.authors.length > 0
+ authors=[]
+ @md.authors.each do |author|
+ authors << ' <author>'
+ if not author[:others].empty?
+ authors << %{ <first-name>#{author[:others]}</first-name>}
+ end
+ if not author[:the].empty?
+ authors << %{ <last-name>#{author[:the]}</last-name>}
+ end
+ authors << ' </author>'
+ end
+ authors=authors.join("\n")
+ end
+ <<-WOK
+<?xml version="1.0" encoding="UTF-8"?>
+<FictionBook xmlns:xl="http://www.w3.org/1999/xlink"
+ xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
+<description>
+ <title-info>
+ <genre match="100">***</genre>
+#{authors}
+ <book-title>#{@md.title.full}</book-title>#{coverpageimage}
+ <annotation>
+ </annotation>
+ <date value="#{@md.date.published}">#{@md.date.published}</date>
+ </title-info>
+ <document-info>
+ <author>
+ <first-name/>
+ <last-name/>
+ <nickname/>
+ </author>
+ <program-used>#{version[:project]} #{version[:version]} and #{rb_ver}</program-used>
+ <date value="#{version[:date]}">#{version[:date]}</date>
+ <src-url>#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}</src-url>
+ <id></id>
+ <version>1.0</version>
+ <history>#{date_available}#{date_modified}
+ </history>
+ </document-info>
+</description>
+<body>
+ WOK
+ end
+ def extract_endnotes #work on
+ endnotes,endnotes_raw,endnotes_b=[],[],[]
+ @data.each do |para|
+ endnotes_raw << para.obj.scan(/#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m)
+ endnotes_b << para.obj.scan(/#{Mx[:en_b_o]}(.+?)#{Mx[:en_b_c]}/m)
+ end
+ endnotes_raw.flatten.each do |en|
+ en=@trans.markup_fictionbook(en)
+ endnotes << en.gsub(/([\d+*]+)\s+(.+)/m,
+ %{<section id="footnote\\1">\n
+<title><p>\\1.</p></title>\n
+<p>\\2</p>\n
+</section>})
+ end
+ endnotes_raw=[]
+ endnotes
+ end
+ def extract_images #work on
+ require "base64"
+ images_raw,images_base64_fb2=[],[]
+ images_base64={}
+ if defined? @md.make.cover_image[:cover]
+ images_raw << @md.make.cover_image[:cover]
+ end
+ @data.each do |para|
+ images_raw << para.obj.scan(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m)
+ end
+ images_raw.flatten.sort.each do |img|
+ imgpth=@env.url.images_local + '/' + img
+ open(imgpth)
+ if FileTest.file?(imgpth)
+ images_base64[img]=Base64.encode64(File.read(imgpth))
+ end
+ end
+ images_raw=[]
+ images_base64.each_key do |k|
+ imgtype=case k
+ when /\.jpg/ then 'jpeg'
+ when /\.png/ then 'png'
+ when /\.gif/ then 'gif'
+ else 'jpeg'
+ end
+ images_base64_fb2 << %{<binary content-type="image/#{imgtype}" id="#{k}">#{images_base64[k]}
+</binary>
+}
+ end
+ images_base64_fb2.join("\n")
+ end
+ def markup_text(data)
+ data.each_with_index do |o,i|
+ if o.is ==:heading || o.is ==:para
+ o.obj=@trans.markup_fictionbook(o.obj,o.is) #unless o.obj==nil
+ end
+ end
+ data
+ end
+ def tail(images_base64_fb2)
+ <<-WOK
+</body>
+#{images_base64_fb2}
+</FictionBook>
+ WOK
+ end
+ def output(o,lev=nil,comment='')
+ puts lev == 0..6 \
+ ? "#{space*lev}<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+ : "<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+ end
+ def structure_collapsed(data)
+ puts "\ncollapsed structure, heading outline --->\n\n"
+ data.each_with_index do |o,i|
+ if (o.is ==:heading || o.is ==:heading_insert)
+ output(o,o.lc)
+ end
+ end
+ end
+ def endnotes_build(endnotes,filename_fictionbook)
+ if endnotes.length > 0
+ filename_fictionbook.puts %{</body><body name="notes">}
+ endnotes.each do |en|
+ filename_fictionbook.puts SiSU_TextUtils::Wrap.new(en,80,6).line_wrap
+ end
+ end
+ end
+ def structure_build_collapsed(data,endnotes,images_base64)
+ file=SiSU_Env::FileOp.new(@md)
+ filename_fictionbook=file.write_file.xml_fictionbook
+ h=0
+ doc_position=:head
+ filename_fictionbook.puts head
+ data.each_with_index do |o,i|
+ ocn=(defined? o.ocn and not o.ocn.nil?) ? "\n#{Dx[:ocn_o]}#{o.ocn}#{Dx[:ocn_c]}" : ''
+ if o.is ==:heading
+ lev=o.lc
+ chlv=(o.lv.to_i == 1) \
+ ? @chlv=o.lc.to_i
+ : 0
+ unless doc_position==:head
+ filename_fictionbook.puts structure_build_tag_close(lev,h)
+ end
+ doc_position=:body_and_tail
+ filename_fictionbook.puts %{#{space*lev}<#{tags.fictionbook[lev]}>
+#{space*lev}<title>
+}
+ filename_fictionbook.puts SiSU_TextUtils::Wrap.new("<p>#{o.obj}#{ocn}</p>",80,(lev*2+2)).line_wrap
+ filename_fictionbook.puts %{#{space*lev}</title>}
+ h=lev
+ elsif o.is ==:heading_insert \
+ and o.obj =~/Endnotes/ \
+ and o.ln == 2
+ break
+ elsif (o.of ==:para or o.of ==:block)
+ filename_fictionbook.puts SiSU_TextUtils::Wrap.new("<p>#{o.obj}#{ocn}</p>",80,6).line_wrap
+ end
+ end
+ filename_fictionbook.puts structure_build_tag_close(0,h)
+ endnotes_build(endnotes,filename_fictionbook)
+ filename_fictionbook.puts tail(images_base64)
+ filename_fictionbook.close
+ end
+ def structure_build_tag_close(lev,h)
+ x=[]
+ case h
+ when 1
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ when 2
+ x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2)
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ when 3
+ x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3)
+ x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2)
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ when 4
+ x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4)
+ x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3)
+ x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2)
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ when 5
+ x << "#{space*5}</#{tags.fictionbook[5]}>" if (lev <= 5)
+ x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4)
+ x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3)
+ x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2)
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ when 6
+ x << "#{space*6}</#{tags.fictionbook[6]}>" if (lev <= 6)
+ x << "#{space*5}</#{tags.fictionbook[5]}>" if (lev <= 5)
+ x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4)
+ x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3)
+ x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2)
+ x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1)
+ end
+ x.join("\n")
+ end
+ end
+ end
+end
+__END__
diff --git a/lib/sisu/v5/xml_shared.rb b/lib/sisu/v5/xml_shared.rb
index 688e34c3..a6092559 100644
--- a/lib/sisu/v5/xml_shared.rb
+++ b/lib/sisu/v5/xml_shared.rb
@@ -435,7 +435,7 @@ module SiSU_XML_Munge
gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;')
end
def markup_fictionbook(str='',is='')
- str=str.gsub(/#{Mx[:en_a_o]}([\d+*]+).+?#{Mx[:en_a_c]}/m,'<a xlink:href="#footnote\1" type="note">[\1]</a>').
+ str=str.gsub(/#{Mx[:en_a_o]}([\d+*]+).+?#{Mx[:en_a_c]}/m,'<a xl:href="#footnote\1" type="note">[\1]</a>').
gsub(/&/,'&amp;'). #sort
gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;').
gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1&amp; '). #sort
@@ -450,11 +450,11 @@ module SiSU_XML_Munge
gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>').
gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>').
gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd
- gsub(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m,'<image xlink:href="#\1" />').
+ gsub(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m,'<image xl:href="#\1" />').
gsub(/#{Mx[:url_o]}(.+?)#{Mx[:url_c]}/,"#{Dx[:url_o]}\\1#{Dx[:url_c]}").
gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'<a name="\1"></a>').
- gsub(/#{Mx[:gl_bullet]}/m,'●&nbsp;&nbsp;').
- gsub(/#{Mx[:nbsp]}/,'&nbsp;').
+ gsub(/#{Mx[:gl_bullet]}/m,'● '). #&nbsp; not available
+ gsub(/#{Mx[:nbsp]}/,' '). #&nbsp; not available
gsub(/<(p|br)>/,'<\1 />')
clean(str)
end