sisu 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/sisu +367 -0
- data/bin/sisugem +367 -0
- data/data/sisu/image/arrow_next_red.png +0 -0
- data/data/sisu/image/arrow_prev_red.png +0 -0
- data/data/sisu/image/arrow_up_red.png +0 -0
- data/data/sisu/image/b_bluebell.png +0 -0
- data/data/sisu/image/b_doc.png +0 -0
- data/data/sisu/image/b_epub.png +0 -0
- data/data/sisu/image/b_home.png +0 -0
- data/data/sisu/image/b_info.png +0 -0
- data/data/sisu/image/b_odf.png +0 -0
- data/data/sisu/image/b_pdf.png +0 -0
- data/data/sisu/image/b_search.png +0 -0
- data/data/sisu/image/b_toc.png +0 -0
- data/data/sisu/image/bullet_08.png +0 -0
- data/data/sisu/image/bullet_09.png +0 -0
- data/data/sisu/image/bullet_10.png +0 -0
- data/data/sisu/image/bullet_11.png +0 -0
- data/data/sisu/image/bullet_12.png +0 -0
- data/data/sisu/image/bullet_doc.png +0 -0
- data/data/sisu/image/bullet_red.png +0 -0
- data/data/sisu/image/dot_clear.png +0 -0
- data/data/sisu/image/dot_white.png +0 -0
- data/data/sisu/image/gplv3.png +0 -0
- data/data/sisu/image/gplv3_free_software.png +0 -0
- data/data/sisu/image/next.png +0 -0
- data/data/sisu/image/previous.png +0 -0
- data/data/sisu/image/rb7.ico +0 -0
- data/data/sisu/image/sisu.png +0 -0
- data/data/sisu/image/toctoc.png +0 -0
- data/data/sisu/version.yml +5 -0
- data/lib/sisu.rb +94 -0
- data/lib/sisu/air.rb +80 -0
- data/lib/sisu/ao.rb +590 -0
- data/lib/sisu/ao_character_check.rb +102 -0
- data/lib/sisu/ao_composite.rb +286 -0
- data/lib/sisu/ao_doc_objects.rb +565 -0
- data/lib/sisu/ao_doc_str.rb +2269 -0
- data/lib/sisu/ao_endnotes.rb +136 -0
- data/lib/sisu/ao_expand_insertions.rb +514 -0
- data/lib/sisu/ao_hash_digest.rb +174 -0
- data/lib/sisu/ao_idx.rb +422 -0
- data/lib/sisu/ao_images.rb +187 -0
- data/lib/sisu/ao_metadata.rb +86 -0
- data/lib/sisu/ao_misc_arrange.rb +207 -0
- data/lib/sisu/ao_numbering.rb +720 -0
- data/lib/sisu/ao_persist.rb +194 -0
- data/lib/sisu/ao_references.rb +502 -0
- data/lib/sisu/ao_syntax.rb +640 -0
- data/lib/sisu/cgi.rb +84 -0
- data/lib/sisu/cgi_pgsql.rb +270 -0
- data/lib/sisu/cgi_sql_common.rb +986 -0
- data/lib/sisu/cgi_sqlite.rb +244 -0
- data/lib/sisu/conf.rb +287 -0
- data/lib/sisu/constants.rb +388 -0
- data/lib/sisu/css.rb +3484 -0
- data/lib/sisu/db_columns.rb +1997 -0
- data/lib/sisu/db_create.rb +689 -0
- data/lib/sisu/db_dbi.rb +90 -0
- data/lib/sisu/db_drop.rb +207 -0
- data/lib/sisu/db_import.rb +877 -0
- data/lib/sisu/db_indexes.rb +146 -0
- data/lib/sisu/db_load_tuple.rb +323 -0
- data/lib/sisu/db_remove.rb +182 -0
- data/lib/sisu/db_select.rb +230 -0
- data/lib/sisu/db_sqltxt.rb +173 -0
- data/lib/sisu/db_tests.rb +114 -0
- data/lib/sisu/dbi.rb +166 -0
- data/lib/sisu/dbi_discrete.rb +206 -0
- data/lib/sisu/digests.rb +306 -0
- data/lib/sisu/dp.rb +1606 -0
- data/lib/sisu/dp_identify_markup.rb +161 -0
- data/lib/sisu/dp_make.rb +668 -0
- data/lib/sisu/embedded.rb +149 -0
- data/lib/sisu/errors.rb +84 -0
- data/lib/sisu/generic_parts.rb +131 -0
- data/lib/sisu/git.rb +277 -0
- data/lib/sisu/html.rb +775 -0
- data/lib/sisu/html_concordance.rb +391 -0
- data/lib/sisu/html_format.rb +1348 -0
- data/lib/sisu/html_harvest.rb +109 -0
- data/lib/sisu/html_harvest_author_format.rb +111 -0
- data/lib/sisu/html_harvest_authors.rb +466 -0
- data/lib/sisu/html_harvest_topics.rb +893 -0
- data/lib/sisu/html_lite_shared.rb +324 -0
- data/lib/sisu/html_manifest.rb +1032 -0
- data/lib/sisu/html_minitoc.rb +230 -0
- data/lib/sisu/html_parts.rb +437 -0
- data/lib/sisu/html_persist.rb +237 -0
- data/lib/sisu/html_promo.rb +440 -0
- data/lib/sisu/html_scroll.rb +235 -0
- data/lib/sisu/html_segments.rb +716 -0
- data/lib/sisu/html_shared.rb +62 -0
- data/lib/sisu/html_table.rb +64 -0
- data/lib/sisu/html_tune.rb +301 -0
- data/lib/sisu/hub.rb +277 -0
- data/lib/sisu/hub_actions.rb +1122 -0
- data/lib/sisu/hub_loop_markup_files.rb +170 -0
- data/lib/sisu/hub_options.rb +1695 -0
- data/lib/sisu/i18n.rb +702 -0
- data/lib/sisu/manpage.rb +377 -0
- data/lib/sisu/manpage_format.rb +85 -0
- data/lib/sisu/object_munge.rb +307 -0
- data/lib/sisu/prog_text_translation.rb +1702 -0
- data/lib/sisu/qrcode.rb +754 -0
- data/lib/sisu/relaxng.rb +1153 -0
- data/lib/sisu/remote.rb +246 -0
- data/lib/sisu/rexml.rb +148 -0
- data/lib/sisu/se.rb +158 -0
- data/lib/sisu/se_cleanoutput.rb +145 -0
- data/lib/sisu/se_clear.rb +105 -0
- data/lib/sisu/se_createsite.rb +273 -0
- data/lib/sisu/se_css.rb +221 -0
- data/lib/sisu/se_date.rb +92 -0
- data/lib/sisu/se_db.rb +214 -0
- data/lib/sisu/se_envcall.rb +326 -0
- data/lib/sisu/se_file_op.rb +2758 -0
- data/lib/sisu/se_filemap.rb +247 -0
- data/lib/sisu/se_get_init.rb +238 -0
- data/lib/sisu/se_hub_particulars.rb +234 -0
- data/lib/sisu/se_info_env.rb +2179 -0
- data/lib/sisu/se_info_port.rb +70 -0
- data/lib/sisu/se_info_system.rb +202 -0
- data/lib/sisu/se_load.rb +108 -0
- data/lib/sisu/se_processing.rb +659 -0
- data/lib/sisu/se_programs.rb +394 -0
- data/lib/sisu/se_remotes.rb +553 -0
- data/lib/sisu/se_standardise_lang.rb +176 -0
- data/lib/sisu/se_version.rb +174 -0
- data/lib/sisu/shared_images.rb +137 -0
- data/lib/sisu/shared_markup_alt.rb +336 -0
- data/lib/sisu/shared_metadata.rb +1361 -0
- data/lib/sisu/shared_sem.rb +156 -0
- data/lib/sisu/sisu_thor_lib.rb +407 -0
- data/lib/sisu/sitemaps.rb +224 -0
- data/lib/sisu/src_kdissert_share.rb +102 -0
- data/lib/sisu/src_po4a_share.rb +309 -0
- data/lib/sisu/src_po4a_shelf.rb +1217 -0
- data/lib/sisu/src_po4a_shelf_set.rb +297 -0
- data/lib/sisu/src_po4a_sst_ao_sst.rb +893 -0
- data/lib/sisu/src_po4a_sst_ao_sst_set.rb +284 -0
- data/lib/sisu/src_po4a_sstm.rb +135 -0
- data/lib/sisu/src_shared.rb +347 -0
- data/lib/sisu/src_sisupod_make.rb +171 -0
- data/lib/sisu/src_sisupod_sstm.rb +109 -0
- data/lib/sisu/sst_convert_markup.rb +323 -0
- data/lib/sisu/sst_do_inline_footnotes.rb +440 -0
- data/lib/sisu/sst_from_xml.rb +178 -0
- data/lib/sisu/sst_identify_markup.rb +482 -0
- data/lib/sisu/sst_to_s_xml_sax.rb +471 -0
- data/lib/sisu/termsheet.rb +163 -0
- data/lib/sisu/texinfo.rb +430 -0
- data/lib/sisu/texinfo_format.rb +541 -0
- data/lib/sisu/texpdf.rb +1162 -0
- data/lib/sisu/texpdf_format.rb +1689 -0
- data/lib/sisu/texpdf_parts.rb +235 -0
- data/lib/sisu/txt_asciidoc.rb +354 -0
- data/lib/sisu/txt_asciidoc_decorate.rb +207 -0
- data/lib/sisu/txt_markdown.rb +389 -0
- data/lib/sisu/txt_markdown_decorate.rb +207 -0
- data/lib/sisu/txt_orgmode.rb +376 -0
- data/lib/sisu/txt_orgmode_decorate.rb +186 -0
- data/lib/sisu/txt_output.rb +86 -0
- data/lib/sisu/txt_plain.rb +410 -0
- data/lib/sisu/txt_plain_decorate.rb +189 -0
- data/lib/sisu/txt_read.rb +109 -0
- data/lib/sisu/txt_rst.rb +371 -0
- data/lib/sisu/txt_rst_decorate.rb +186 -0
- data/lib/sisu/txt_shared.rb +241 -0
- data/lib/sisu/txt_textile.rb +367 -0
- data/lib/sisu/txt_textile_decorate.rb +186 -0
- data/lib/sisu/update.rb +141 -0
- data/lib/sisu/urls.rb +696 -0
- data/lib/sisu/utils.rb +232 -0
- data/lib/sisu/utils_composite.rb +115 -0
- data/lib/sisu/utils_response.rb +114 -0
- data/lib/sisu/utils_screen_text_color.rb +472 -0
- data/lib/sisu/utils_spell.rb +99 -0
- data/lib/sisu/webrick.rb +191 -0
- data/lib/sisu/wikispeak.rb +375 -0
- data/lib/sisu/xhtml.rb +472 -0
- data/lib/sisu/xhtml_epub2.rb +890 -0
- data/lib/sisu/xhtml_epub2_concordance.rb +322 -0
- data/lib/sisu/xhtml_epub2_format.rb +2272 -0
- data/lib/sisu/xhtml_epub2_persist.rb +278 -0
- data/lib/sisu/xhtml_epub2_segments.rb +599 -0
- data/lib/sisu/xhtml_epub2_tune.rb +330 -0
- data/lib/sisu/xhtml_parts.rb +183 -0
- data/lib/sisu/xhtml_shared.rb +62 -0
- data/lib/sisu/xhtml_table.rb +97 -0
- data/lib/sisu/xml_docbook5.rb +376 -0
- data/lib/sisu/xml_dom.rb +624 -0
- data/lib/sisu/xml_fictionbook2.rb +389 -0
- data/lib/sisu/xml_format.rb +865 -0
- data/lib/sisu/xml_md_oai_pmh_dc.rb +229 -0
- data/lib/sisu/xml_odf_odt.rb +887 -0
- data/lib/sisu/xml_odf_odt_format.rb +674 -0
- data/lib/sisu/xml_parts.rb +191 -0
- data/lib/sisu/xml_persist.rb +126 -0
- data/lib/sisu/xml_sax.rb +521 -0
- data/lib/sisu/xml_scaffold_structure_collapsed.rb +198 -0
- data/lib/sisu/xml_scaffold_structure_sisu.rb +201 -0
- data/lib/sisu/xml_shared.rb +665 -0
- data/lib/sisu/xml_tables.rb +261 -0
- data/lib/sisu/zap.rb +90 -0
- metadata +251 -0
@@ -0,0 +1,229 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
=begin
|
3
|
+
|
4
|
+
* Name: SiSU
|
5
|
+
|
6
|
+
** Description: documents, structuring, processing, publishing, search
|
7
|
+
*** summary of generated outputs and metadata
|
8
|
+
|
9
|
+
** Author: Ralph Amissah
|
10
|
+
<ralph@amissah.com>
|
11
|
+
<ralph.amissah@gmail.com>
|
12
|
+
|
13
|
+
** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
14
|
+
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
|
15
|
+
All Rights Reserved.
|
16
|
+
|
17
|
+
** License: GPL 3 or later:
|
18
|
+
|
19
|
+
SiSU, a framework for document structuring, publishing and search
|
20
|
+
|
21
|
+
Copyright (C) Ralph Amissah
|
22
|
+
|
23
|
+
This program is free software: you can redistribute it and/or modify it
|
24
|
+
under the terms of the GNU General Public License as published by the Free
|
25
|
+
Software Foundation, either version 3 of the License, or (at your option)
|
26
|
+
any later version.
|
27
|
+
|
28
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
29
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
30
|
+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
31
|
+
more details.
|
32
|
+
|
33
|
+
You should have received a copy of the GNU General Public License along with
|
34
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
35
|
+
|
36
|
+
If you have Internet connection, the latest version of the GPL should be
|
37
|
+
available at these locations:
|
38
|
+
<http://www.fsf.org/licensing/licenses/gpl.html>
|
39
|
+
<http://www.gnu.org/licenses/gpl.html>
|
40
|
+
|
41
|
+
<http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
|
42
|
+
|
43
|
+
** SiSU uses:
|
44
|
+
* Standard SiSU markup syntax,
|
45
|
+
* Standard SiSU meta-markup syntax, and the
|
46
|
+
* Standard SiSU object citation numbering and system
|
47
|
+
|
48
|
+
** Hompages:
|
49
|
+
<http://www.jus.uio.no/sisu>
|
50
|
+
<http://www.sisudoc.org>
|
51
|
+
|
52
|
+
** Git
|
53
|
+
<http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
|
54
|
+
<http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/xml_md_oai_pmh_dc.rb;hb=HEAD>
|
55
|
+
|
56
|
+
=end
|
57
|
+
module SiSU_XML_Metadata
|
58
|
+
require_relative 'se' # se.rb
|
59
|
+
include SiSU_Env
|
60
|
+
require_relative 'dp' # dp.rb
|
61
|
+
include SiSU_Param
|
62
|
+
class OAI_PMH
|
63
|
+
def initialize(opt)
|
64
|
+
@md=SiSU_Param::Parameters.new(opt).get
|
65
|
+
@oai_pmh=[]
|
66
|
+
end
|
67
|
+
def read
|
68
|
+
output
|
69
|
+
end
|
70
|
+
def pre
|
71
|
+
<<WOK
|
72
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
73
|
+
<oai_dc:dc
|
74
|
+
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
|
75
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
76
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
77
|
+
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
|
78
|
+
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
|
79
|
+
WOK
|
80
|
+
end
|
81
|
+
def body
|
82
|
+
if defined? @md.title.full \
|
83
|
+
and @md.title.full=~/\S+/ # DublinCore 1 - title
|
84
|
+
@oai_pmh << %{ <dc:title xml:lang="en">#{@md.title.full}</dc:title>\n}
|
85
|
+
end
|
86
|
+
if defined? @md.creator.author \
|
87
|
+
and @md.creator.author=~/\S+/ # DublinCore 2 - creator/author (author)
|
88
|
+
txt=meta_content_clean(@md.creator.author)
|
89
|
+
@oai_pmh << %{ <dc:author>#{txt}</dc:author>\n}
|
90
|
+
end
|
91
|
+
if defined? @md.classify.subject \
|
92
|
+
and @md.classify.subject=~/\S+/ # DublinCore 3 - subject (us library of congress, eric or udc, or schema???)
|
93
|
+
txt=meta_content_clean(@md.classify.subject)
|
94
|
+
@oai_pmh << %{ <dc:subject>#{txt}</dc:subject>\n}
|
95
|
+
end
|
96
|
+
if defined? @md.classify.keywords \
|
97
|
+
and @md.classify.keywords=~/\S+/
|
98
|
+
txt=meta_content_clean(@md.classify.keywords)
|
99
|
+
@oai_pmh << %{ <dc:keywords>#{txt}</dc:keywords>\n}
|
100
|
+
end
|
101
|
+
if @md.publisher # DublinCore 5 - publisher (current copy published by)
|
102
|
+
txt=meta_content_clean(@md.publisher)
|
103
|
+
@oai_pmh << %{ <dc:publisher>#{txt}</dc:publisher>\n}
|
104
|
+
end
|
105
|
+
if defined? @md.creator.contributor \
|
106
|
+
and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor
|
107
|
+
txt=meta_content_clean(@md.creator.contributor)
|
108
|
+
@oai_pmh << %{ <dc:contributor>#{txt}</dc:contributor>\n}
|
109
|
+
end
|
110
|
+
if defined? @md.date.published \
|
111
|
+
and @md.date.published=~/\S+/ # DublinCore 7 - date year-mm-dd
|
112
|
+
@oai_pmh << %{ <dc:date>#{@md.date.published}</dc:date>\n}
|
113
|
+
end
|
114
|
+
if defined? @md.date.created \
|
115
|
+
and @md.date.created=~/\S+/ # DublinCore 7 - date.created
|
116
|
+
@oai_pmh << %{ <dc:date_created>#{@md.date.created}</dc:date_created>\n}
|
117
|
+
end
|
118
|
+
if defined? @md.date.issued \
|
119
|
+
and @md.date.issued=~/\S+/ # DublinCore 7 - date.issued
|
120
|
+
@oai_pmh << %{ <dc:date_issued>#{@md.date.issued}</dc:date_issued>\n}
|
121
|
+
end
|
122
|
+
if defined? @md.date.available \
|
123
|
+
and @md.date.available=~/\S+/ # DublinCore 7 - date.available
|
124
|
+
@oai_pmh << %{ <dc:date_available>#{@md.date.available}</dc:date_available>\n}
|
125
|
+
end
|
126
|
+
if defined? @md.date.valid \
|
127
|
+
and @md.date.valid=~/\S+/ # DublinCore 7 - date.valid
|
128
|
+
@oai_pmh << %{ <dc:date_valid>#{@md.date.valid}</dc:date_valid>\n}
|
129
|
+
end
|
130
|
+
if defined? @md.date.modified \
|
131
|
+
and @md.date.modified=~/\S+/ # DublinCore 7 - date.modified
|
132
|
+
@oai_pmh << %{ <dc:date_modified>#{@md.date.modified}</dc:date_modified>\n}
|
133
|
+
end
|
134
|
+
if defined? @md.notes.description \
|
135
|
+
and @md.notes.description=~/\S+/ # DublinCore 4 - description
|
136
|
+
txt=meta_content_clean(@md.notes.description)
|
137
|
+
@oai_pmh << %{ <dc:description>#{txt}</dc:description>\n}
|
138
|
+
end
|
139
|
+
if defined? @md.notes.coverage \
|
140
|
+
and @md.notes.coverage=~/\S+/ # DublinCore 14 - coverage
|
141
|
+
txt=meta_content_clean(@md.notes.coverage)
|
142
|
+
@oai_pmh << %{ <dc:coverage>#{txt}</dc:coverage>\n}
|
143
|
+
end
|
144
|
+
if defined? @md.notes.relation \
|
145
|
+
and @md.notes.relation=~/\S+/ # DublinCore 13 - relation
|
146
|
+
txt=meta_content_clean(@md.notes.relation)
|
147
|
+
@oai_pmh << %{ <dc:relation>#{txt}</dc:relation>\n}
|
148
|
+
end
|
149
|
+
if defined? @md.notes.type \
|
150
|
+
and @md.notes.type=~/\S+/ # DublinCore 8 - type
|
151
|
+
txt=meta_content_clean(@md.notes.type)
|
152
|
+
@oai_pmh << %{ <dc:type>#{txt}</dc:type>\n}
|
153
|
+
end
|
154
|
+
if defined? @md.notes.format \
|
155
|
+
and @md.notes.format=~/\S+/ # DublinCore 9 - format
|
156
|
+
txt=meta_content_clean(@md.notes.format)
|
157
|
+
@oai_pmh << %{ <dc:format>#{txt}</dc:format>\n}
|
158
|
+
end
|
159
|
+
#if defined? @md.identifier.sisupod \
|
160
|
+
#and @md.identifier.sisupod=~/\S+/ # DublinCore 10 - identifier
|
161
|
+
# txt=meta_content_clean(@md.identifier.sisupod)
|
162
|
+
# @oai_pmh << %{ <dc:identifier>#{txt}</dc:identifier>\n}
|
163
|
+
#end
|
164
|
+
if defined? @md.original.source \
|
165
|
+
and @md.original.source=~/\S+/ # DublinCore 11 - source
|
166
|
+
txt=meta_content_clean(@md.original.source)
|
167
|
+
@oai_pmh << %{ <dc:source>#{txt}</dc:source>\n}
|
168
|
+
end
|
169
|
+
if defined? @md.title.language \
|
170
|
+
and @md.title.language=~/\S+/ # DublinCore 12 - language (English)
|
171
|
+
@oai_pmh << %{ <dc:language>#{@md.title.language}</dc:language>\n}
|
172
|
+
end
|
173
|
+
if defined? @md.original.language \
|
174
|
+
and @md.original.language=~/\S+/
|
175
|
+
@oai_pmh << %{ <dc:language>#{@md.original.language}</dc:language>\n}
|
176
|
+
end
|
177
|
+
if defined? @md.rights.all \
|
178
|
+
and @md.rights.all=~/\S+/ # DublinCore 15 - rights
|
179
|
+
txt=meta_content_clean(@md.rights.all)
|
180
|
+
@oai_pmh << %{ <dc:rights>#{txt}</dc:rights>\n}
|
181
|
+
end
|
182
|
+
@oai_pmh
|
183
|
+
end
|
184
|
+
def meta_content_clean(content='')
|
185
|
+
unless content.nil?
|
186
|
+
content=content.tr('"',"'")
|
187
|
+
end
|
188
|
+
content
|
189
|
+
end
|
190
|
+
def post
|
191
|
+
'</oai_dc:dc>'
|
192
|
+
end
|
193
|
+
def output
|
194
|
+
SiSU_Env::FileOp.new(@md).mkdir
|
195
|
+
oai_pmh=SiSU_Env::FileOp.new(@md,@md.fn[:oai_pmh]).mkfile #implement in param
|
196
|
+
oai_pmh << pre
|
197
|
+
body.each do |x|
|
198
|
+
oai_pmh << x
|
199
|
+
end
|
200
|
+
oai_pmh << post
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
__END__
|
205
|
+
http://www.openarchives.org/pmh/
|
206
|
+
http://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm#dublincore
|
207
|
+
http://es.dublincore.org/documents/usageguide/elements.shtml
|
208
|
+
http://dublincore.org/documents/dces/
|
209
|
+
see also http://dublincore.org/documents/dcmes-xml/
|
210
|
+
#http://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm#dublincore
|
211
|
+
#sample implementation, e.g. 2
|
212
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
213
|
+
<oai_dc:dc
|
214
|
+
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
|
215
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
216
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
217
|
+
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
|
218
|
+
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
|
219
|
+
<dc:title xml:lang="en">Grassmann's space analysis</dc:title>
|
220
|
+
<dc:author>Hyde, E. W. (Edward Wyllys)</dc:author>
|
221
|
+
<dc:subject>LCSH:Ausdehnungslehre; LCCN QA205.H99</dc:subject>
|
222
|
+
<dc:publisher>J. Wiley & Sons</dc:publisher>
|
223
|
+
<dc:date>Created: 1906; Available: 1991</dc:date>
|
224
|
+
<dc:type>text</dc:type>
|
225
|
+
<dc:identifier>http://resolver.library.cornell.edu/math/1796949
|
226
|
+
</dc:identifier>
|
227
|
+
<dc:language>english</dc:language>
|
228
|
+
<dc:rights xml:lang="en">Public Domain</dc:rights>
|
229
|
+
</oai_dc:dc>
|
@@ -0,0 +1,887 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
=begin
|
3
|
+
|
4
|
+
* Name: SiSU
|
5
|
+
|
6
|
+
** Description: documents, structuring, processing, publishing, search
|
7
|
+
*** opendocument text generation
|
8
|
+
|
9
|
+
** Author: Ralph Amissah
|
10
|
+
<ralph@amissah.com>
|
11
|
+
<ralph.amissah@gmail.com>
|
12
|
+
|
13
|
+
** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
14
|
+
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
|
15
|
+
All Rights Reserved.
|
16
|
+
|
17
|
+
** License: GPL 3 or later:
|
18
|
+
|
19
|
+
SiSU, a framework for document structuring, publishing and search
|
20
|
+
|
21
|
+
Copyright (C) Ralph Amissah
|
22
|
+
|
23
|
+
This program is free software: you can redistribute it and/or modify it
|
24
|
+
under the terms of the GNU General Public License as published by the Free
|
25
|
+
Software Foundation, either version 3 of the License, or (at your option)
|
26
|
+
any later version.
|
27
|
+
|
28
|
+
This program is distributed in the hope that it will be useful, but WITHOUT
|
29
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
30
|
+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
31
|
+
more details.
|
32
|
+
|
33
|
+
You should have received a copy of the GNU General Public License along with
|
34
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
35
|
+
|
36
|
+
If you have Internet connection, the latest version of the GPL should be
|
37
|
+
available at these locations:
|
38
|
+
<http://www.fsf.org/licensing/licenses/gpl.html>
|
39
|
+
<http://www.gnu.org/licenses/gpl.html>
|
40
|
+
|
41
|
+
<http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
|
42
|
+
|
43
|
+
** SiSU uses:
|
44
|
+
* Standard SiSU markup syntax,
|
45
|
+
* Standard SiSU meta-markup syntax, and the
|
46
|
+
* Standard SiSU object citation numbering and system
|
47
|
+
|
48
|
+
** Hompages:
|
49
|
+
<http://www.jus.uio.no/sisu>
|
50
|
+
<http://www.sisudoc.org>
|
51
|
+
|
52
|
+
** Git
|
53
|
+
<http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
|
54
|
+
<http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/odf.rb;hb=HEAD>
|
55
|
+
|
56
|
+
=end
|
57
|
+
module SiSU_XML_ODF_ODT
|
58
|
+
require_relative 'se_hub_particulars' # se_hub_particulars.rb
|
59
|
+
include SiSU_Particulars
|
60
|
+
require_relative 'ao' # ao.rb
|
61
|
+
require_relative 'se' # se.rb
|
62
|
+
include SiSU_Env
|
63
|
+
require_relative 'xml_parts' # xml_parts.rb
|
64
|
+
require_relative 'xml_odf_odt_format' # xml_odf_odt_format.rb
|
65
|
+
include SiSU_XML_ODF_ODT_Format
|
66
|
+
require_relative 'shared_metadata' # shared_metadata.rb
|
67
|
+
require_relative 'txt_shared' # txt_shared.rb
|
68
|
+
require_relative 'xml_shared' # xml_shared.rb
|
69
|
+
include SiSU_XML_Munge
|
70
|
+
require_relative 'xml_persist' # xml_persist.rb
|
71
|
+
@@alt_id_count,@@alt_id_count=0,0
|
72
|
+
class Source
|
73
|
+
begin
|
74
|
+
require 'zlib'
|
75
|
+
require 'find'
|
76
|
+
rescue LoadError
|
77
|
+
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
|
78
|
+
error('zlib or find NOT FOUND (LoadError)')
|
79
|
+
end
|
80
|
+
def initialize(opt)
|
81
|
+
@opt=opt
|
82
|
+
@particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
|
83
|
+
@@endnotes_para=[]
|
84
|
+
end
|
85
|
+
def read
|
86
|
+
begin
|
87
|
+
@md,@env,@ao_array=@particulars.md,@particulars.env,@particulars.ao_array
|
88
|
+
unless @opt.act[:quiet][:set]==:on
|
89
|
+
tool=(@opt.act[:verbose][:set]==:on \
|
90
|
+
|| @opt.act[:verbose_plus][:set]==:on \
|
91
|
+
|| @opt.act[:maintenance][:set]==:on) \
|
92
|
+
? "#{@env.program.odf_viewer} file://#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}"
|
93
|
+
: "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
|
94
|
+
(@opt.act[:verbose][:set]==:on \
|
95
|
+
|| @opt.act[:verbose_plus][:set]==:on \
|
96
|
+
|| @opt.act[:maintenance][:set]==:on) \
|
97
|
+
? SiSU_Screen::Ansi.new(
|
98
|
+
@opt.act[:color_state][:set],
|
99
|
+
'Opendocument (ODF:ODT)',
|
100
|
+
tool
|
101
|
+
).green_hi_blue
|
102
|
+
: SiSU_Screen::Ansi.new(
|
103
|
+
@opt.act[:color_state][:set],
|
104
|
+
'Opendocument (ODF:ODT)',
|
105
|
+
tool
|
106
|
+
).green_title_hi
|
107
|
+
if (@opt.act[:verbose_plus][:set]==:on \
|
108
|
+
|| @opt.act[:maintenance][:set]==:on)
|
109
|
+
SiSU_Screen::Ansi.new(
|
110
|
+
@opt.act[:color_state][:set],
|
111
|
+
@opt.fns,
|
112
|
+
'file://' \
|
113
|
+
+ @md.file.output_path.odt.dir + '/' \
|
114
|
+
+ @md.file.base_filename.odt
|
115
|
+
).flow
|
116
|
+
end
|
117
|
+
end
|
118
|
+
SiSU_XML_ODF_ODT::Source::Scroll.new(@particulars).songsheet
|
119
|
+
rescue
|
120
|
+
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
|
121
|
+
__LINE__.to_s + ':' + __FILE__
|
122
|
+
end
|
123
|
+
ensure
|
124
|
+
Dir.chdir(@opt.f_pth[:pth])
|
125
|
+
end
|
126
|
+
end
|
127
|
+
private
|
128
|
+
class Scroll <Source
|
129
|
+
require_relative 'txt_shared' # txt_shared.rb
|
130
|
+
include SiSU_Parts_XML
|
131
|
+
@@img_count=0
|
132
|
+
@@docstart=true
|
133
|
+
@@fns=nil
|
134
|
+
def initialize(particulars)
|
135
|
+
@md,@env,@ao_array=particulars.md,particulars.env,particulars.ao_array
|
136
|
+
@make=SiSU_Env::ProcessingSettings.new(@md)
|
137
|
+
@tab="\t"
|
138
|
+
@br=(@md.opt.act[:maintenance][:set]==:on) \
|
139
|
+
? '' : ''
|
140
|
+
end
|
141
|
+
def songsheet
|
142
|
+
begin
|
143
|
+
@per=SiSU_XML_Persist::Persist.new
|
144
|
+
pre
|
145
|
+
@data=markup(@ao_array)
|
146
|
+
publish
|
147
|
+
ensure
|
148
|
+
SiSU_XML_Persist::Persist.new.persist_init
|
149
|
+
unless (@md.opt.act[:verbose_plus][:set]==:on \
|
150
|
+
|| @md.opt.act[:maintenance][:set]==:on)
|
151
|
+
if @env.processing_path.odt =~/od[ft]/
|
152
|
+
#p "rm -r #{@env.processing_path.odt}" if @md.opt.selections.str =~/v/
|
153
|
+
FileUtils::rm_r(@env.processing_path.odf_pth)
|
154
|
+
#system("rm -r #{@env.processing_path.odt}")
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
def break_line
|
160
|
+
(@md.opt.act[:maintenance][:set]==:on) \
|
161
|
+
? "\n" : ''
|
162
|
+
end
|
163
|
+
# Used for extraction of endnotes from paragraphs
|
164
|
+
def extract_endnotes(dob='')
|
165
|
+
notes=dob.obj.scan(/#{Mx[:en_a_o]}(\d+\s+.+?)#{Mx[:en_a_c]}/)[1] #FIX
|
166
|
+
@n=[]
|
167
|
+
notes.each do |n| #high cost to deal with <br> appropriately within odf, consider
|
168
|
+
n=n.dup.to_s
|
169
|
+
if n =~/#{Mx[:br_line]}/
|
170
|
+
fix=n.split(/#{Mx[:br_line]}/) #watch #added
|
171
|
+
fix.each do |x|
|
172
|
+
if x =~/\S+/ then @n << x
|
173
|
+
end
|
174
|
+
end
|
175
|
+
else @n << n
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
def odf_book_idx
|
180
|
+
if @md.book_idx
|
181
|
+
idx_arr=[]
|
182
|
+
idx_raw=SiSU_Particulars::CombinedSingleton.
|
183
|
+
instance.get_idx_raw(@md.opt).raw_idx
|
184
|
+
idx_raw.each do |x|
|
185
|
+
x=if x.is_a?(String)
|
186
|
+
SiSU_XML_ODF_ODT_Format::FormatBookIndex.new(x).
|
187
|
+
book_idx_bookmark
|
188
|
+
else nil
|
189
|
+
end
|
190
|
+
idx_arr << x.strip if x.is_a?(String)
|
191
|
+
end
|
192
|
+
@per.book_idx=idx_arr.join
|
193
|
+
end
|
194
|
+
end
|
195
|
+
def odf_metadata
|
196
|
+
@per.metadata=SiSU_Metadata::Summary.new(@md).
|
197
|
+
odf.metadata
|
198
|
+
end
|
199
|
+
def odf_tail
|
200
|
+
manifest="#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}"
|
201
|
+
@per.tail << %{<text:p text:style-name="P_normal">Available document outputs: <br /> <<text:a xl:type="simple" xl:href="#{manifest}">#{manifest}</text:a>></text:p>}
|
202
|
+
@per.tail << %{\n<text:p text:style-name="P_normal">SiSU: <<text:a xl:type="simple" xl:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>}
|
203
|
+
@per.tail << "\n</office:text></office:body></office:document-content>"
|
204
|
+
end
|
205
|
+
def set_bookmark_tag(dob)
|
206
|
+
SiSU_XML_ODF_ODT_Format::Tags.new.set_bookmark_tag(dob)
|
207
|
+
end
|
208
|
+
def heading(dob,p_num)
|
209
|
+
dob=footnote(dob)
|
210
|
+
m=/#{$1}/
|
211
|
+
breakpage=''
|
212
|
+
if @md.fns \
|
213
|
+
and @md.fns != '' \
|
214
|
+
and @md.fns !=@@fns
|
215
|
+
@@docstart=true
|
216
|
+
@@fns=@md.fns
|
217
|
+
end
|
218
|
+
unless @@docstart
|
219
|
+
breakpage=if (@md.pagenew || @md.pagebreak) \
|
220
|
+
and (@md.pagenew =~m or @md.pagebreak =~m)
|
221
|
+
'<text:p text:style-name="P_normal_page_new"> </text:p>'
|
222
|
+
elsif @md.pageline \
|
223
|
+
and @md.pageline =~m #fix
|
224
|
+
else ''
|
225
|
+
end
|
226
|
+
end
|
227
|
+
@@docstart=false
|
228
|
+
if dob.use_ != :dummy
|
229
|
+
dob.tmp=dob.obj
|
230
|
+
dob.obj=%{#{breakpage}<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">} \
|
231
|
+
+ %{#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:h>}
|
232
|
+
else dob.tmp,dob.obj='',''
|
233
|
+
end
|
234
|
+
dob
|
235
|
+
end
|
236
|
+
def toc(dob,p_num)
|
237
|
+
hardspace=(dob.lv =~/[A-D]/i) \
|
238
|
+
? '<text:p text:style-name="Standard"/>'
|
239
|
+
: ''
|
240
|
+
toc_heading=dob.ocn \
|
241
|
+
? (%{<text:bookmark-ref text:reference-format="text" text:ref-name="#{dob.ocn}">} \
|
242
|
+
+ %{#{dob.tmp}</text:bookmark-ref>})
|
243
|
+
: dob.tmp
|
244
|
+
dob.obj=%{<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">} \
|
245
|
+
+ %{#{toc_heading}</text:h>#{hardspace}}
|
246
|
+
dob
|
247
|
+
end
|
248
|
+
def image_src(i)
|
249
|
+
if @md.fns =~/\.ss[tm]$/ \
|
250
|
+
and FileTest.file?("#{@env.path.image_source_include(@md)}/#{i}") #review
|
251
|
+
@env.path.image_source_include(@md)
|
252
|
+
elsif @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/
|
253
|
+
pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1]
|
254
|
+
img_src=pt + '/image'
|
255
|
+
if FileTest.file?("#{img_src}/#{i}")
|
256
|
+
img_src
|
257
|
+
else
|
258
|
+
SiSU_Screen::Ansi.new(
|
259
|
+
@md.opt.act[:color_state][:set],
|
260
|
+
"ERROR - image:",
|
261
|
+
%{"#{i}" missing},
|
262
|
+
"search locations: #{@env.path.image_source_include_local}," \
|
263
|
+
+ "#{@env.path.image_source_include_remote} and" \
|
264
|
+
+ "#{@env.path.image_source_include}"
|
265
|
+
).error2 unless @md.opt.act[:quiet][:set]==:on
|
266
|
+
nil
|
267
|
+
end
|
268
|
+
elsif @md.fns =~/\.ss[tm]$/ \
|
269
|
+
and FileTest.file?("#{@env.path.image_source_include_local}/#{i}") #review
|
270
|
+
@env.path.image_source_include_local
|
271
|
+
elsif @md.fns =~/\.ss[tm]$/ \
|
272
|
+
and FileTest.file?("#{@env.path.image_source_sisu_includes(@md)}/#{i}")
|
273
|
+
@env.path.image_source_sisu_includes(@md)
|
274
|
+
elsif @md.fns =~/\.-ss[tm]$/ \
|
275
|
+
and FileTest.file?("#{@env.path.image_source_include_remote}/#{i}")
|
276
|
+
@env.path.image_source_include_remote
|
277
|
+
else
|
278
|
+
SiSU_Screen::Ansi.new(
|
279
|
+
@md.opt.act[:color_state][:set],
|
280
|
+
"ERROR - image:",
|
281
|
+
%{"#{i}" missing},
|
282
|
+
"search locations: " \
|
283
|
+
+ @env.path.image_source_include_local + ',' \
|
284
|
+
+ @env.path.image_source_include_remote + 'and' \
|
285
|
+
+ @env.path.image_source_include \
|
286
|
+
+ @md.opt.sisu_data_dir?
|
287
|
+
).error2 unless @md.opt.act[:quiet][:set]==:on
|
288
|
+
nil
|
289
|
+
end
|
290
|
+
end
|
291
|
+
def image_odf(img)
|
292
|
+
# copy image to od image directory (unless exists)
|
293
|
+
# divide pixel dimension by 37.79485 and retain 3 decimal places
|
294
|
+
m=img[1]
|
295
|
+
i=/^(\S+?\.(?:png|jpg|gif))/.match(m).captures.join \
|
296
|
+
if m =~/^(\S+?\.(?:png|jpg|gif))/
|
297
|
+
c=/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/.match(m).captures.join \
|
298
|
+
if m =~/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/
|
299
|
+
w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/
|
300
|
+
w=(w.to_i/37.79485).to_s
|
301
|
+
h=(h.to_i/37.79485).to_s
|
302
|
+
h=/([0-9]+\.\d{0,3})/.match(h).captures.join
|
303
|
+
w=/([0-9]+\.\d{0,3})/.match(w).captures.join
|
304
|
+
image_source=image_src(i)
|
305
|
+
if image_source
|
306
|
+
if FileTest.file?("#{image_source}/#{i}")
|
307
|
+
FileUtils::cp(
|
308
|
+
"#{image_source}/#{i}",
|
309
|
+
"#{@env.processing_path.odt}/Pictures/#{i}"
|
310
|
+
)
|
311
|
+
else STDERR.puts %{\t*WARN* did not find image - "#{image_source}/#{i}" [#{__FILE__}:#{__LINE__}]}
|
312
|
+
end
|
313
|
+
end
|
314
|
+
img=if i.to_s =~/jpg|png|gif/ \
|
315
|
+
and h.to_s =~/\d/ \
|
316
|
+
and w.to_s =~/\d/
|
317
|
+
@@img_count +=1
|
318
|
+
%{<draw:frame draw:style-name="fr1" draw:name="graphics#{@@img_count}" text:anchor-type="as-char" svg:width="#{w}cm" svg:height="#{h}cm" draw:z-index="2"><draw:image xl:href="Pictures/#{i}" xl:type="simple" xl:show="embed" xl:actuate="onLoad"/></draw:frame>#{c}} #anchor-type: as-char or paragraph or char or ...
|
319
|
+
else %{<text:p text:style-name="P_normal">[image omitted]</text:p>}
|
320
|
+
end
|
321
|
+
end
|
322
|
+
def image(dob)
|
323
|
+
m=if dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/
|
324
|
+
dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/)
|
325
|
+
elsif dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}image/
|
326
|
+
dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}(image))/)
|
327
|
+
else nil
|
328
|
+
end
|
329
|
+
if m then m.each do |i|
|
330
|
+
cont,url=i[1],i[2]
|
331
|
+
cont=cont.gsub(/([)(\]\[])/,"\\\\\\1").
|
332
|
+
gsub(/([+?])/,"\\\\\\1") # incorrect handling of +
|
333
|
+
url=url.gsub(/([+?])/,"\\\\\\1")
|
334
|
+
dob.obj=dob.obj.sub(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}image/m,image_odf(i)).
|
335
|
+
sub(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,image_odf(i)).
|
336
|
+
sub(/\\([)(\]\[?])/,'\1') #clumsy fix
|
337
|
+
end
|
338
|
+
m=nil
|
339
|
+
end
|
340
|
+
dob
|
341
|
+
end
|
342
|
+
def text_link_odf(txt,url,trail)
|
343
|
+
txt=txt.gsub(/(\\\+)/,'+') #this is convoluted, and risky :-(
|
344
|
+
url=url.gsub(/(\\\+)/,'+') #this is convoluted, and risky :-(
|
345
|
+
map_nametags=SiSU_Particulars::CombinedSingleton.
|
346
|
+
instance.get_map_nametags(@md).nametags_map
|
347
|
+
t=case url
|
348
|
+
when /^https?:/
|
349
|
+
%{<text:a xl:type="simple" xl:href="#{url}">#{txt.strip}</text:a>#{trail}}
|
350
|
+
when /^:/ # site same document collection html link
|
351
|
+
url=url.gsub(/^:/,"#{@env.url.root}/")
|
352
|
+
%{<text:a xl:type="simple" xl:href="#{url}">#{txt.strip}</text:a>#{trail}}
|
353
|
+
when /^\.\.\// # site same document collection html link
|
354
|
+
url=url.gsub(/^\.\.\//,"#{@env.url.root}/")
|
355
|
+
%{<text:a xl:type="simple" xl:href="#{url}">#{txt.strip}</text:a>#{trail}}
|
356
|
+
else # document internal link
|
357
|
+
if map_nametags[url] \
|
358
|
+
and map_nametags[url][:segname]
|
359
|
+
else p "NOT FOUND name_tags: #{url}"
|
360
|
+
end
|
361
|
+
t=map_nametags[url] \
|
362
|
+
&& map_nametags[url][:segname] \
|
363
|
+
? (%{<text:a xl:type="simple" xl:href="#{@env.url.root}/#{@md.fnb}/#{map_nametags[url][:segname]}#{Sfx[:html]}##{url}">} \
|
364
|
+
+ %{#{txt.strip}</text:a>#{trail}})
|
365
|
+
: %{#{txt.strip}#{trail}}
|
366
|
+
end
|
367
|
+
t
|
368
|
+
end
|
369
|
+
def text_link_odf_bookmark(txt,url,trail)
|
370
|
+
SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map
|
371
|
+
%{<text:bookmark-ref text:reference-format="text" text:ref-name="#{url}">#{txt.strip}</text:bookmark-ref>#{trail}}
|
372
|
+
end
|
373
|
+
def text_link(dob)
|
374
|
+
m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/) #sort
|
375
|
+
if m
|
376
|
+
m.each do |i|
|
377
|
+
txt,url,trail=i[1],i[2]
|
378
|
+
txt=txt.gsub(/([)(\]\[])/,"\\\\\\1").
|
379
|
+
gsub(/([+?*])/,"\\\\\\1") # problems with +
|
380
|
+
url=url.gsub(/([+?])/,"\\\\\\1") # problems with +
|
381
|
+
dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,
|
382
|
+
text_link_odf(txt,url,trail)). #make sure trailing ']' are not caught in url
|
383
|
+
gsub(/\\([)(\]\[?])/,'\1') #clumsy fix
|
384
|
+
end
|
385
|
+
m=nil
|
386
|
+
end
|
387
|
+
dob
|
388
|
+
end
|
389
|
+
def text_link_relative(dob)
|
390
|
+
m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]})/) #sort
|
391
|
+
if m
|
392
|
+
m.each do |i|
|
393
|
+
txt,url,trail=i[1],i[2]
|
394
|
+
txt=txt.gsub(/([)(\]\[])/,"\\\\\\1").
|
395
|
+
gsub(/([+?*])/,"\\\\\\1") # problems with +
|
396
|
+
url=url.gsub(/([+?])/,"\\\\\\1") # problems with +
|
397
|
+
dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{url}#{Mx[:rel_c]}/m,
|
398
|
+
text_link_odf_bookmark(txt,url,trail)). #make sure trailing ']' are not caught in url
|
399
|
+
gsub(/\\([)(\]\[?])/,'\1') #clumsy fix
|
400
|
+
end
|
401
|
+
m=nil
|
402
|
+
end
|
403
|
+
dob
|
404
|
+
end
|
405
|
+
def text_link_relative_(dob)
|
406
|
+
m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]})/) #sort
|
407
|
+
if m
|
408
|
+
m.each do |i|
|
409
|
+
txt,url,trail=i[1],i[2]
|
410
|
+
txt=txt.gsub(/([)(\]\[])/,"\\\\\\1")
|
411
|
+
dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{url}#{Mx[:rel_c]}/m,
|
412
|
+
text_link_odf(txt,url,trail)). #make sure trailing ']' are not caught in url
|
413
|
+
gsub(/\\([)(\]\[?])/,'\1') #clumsy fix
|
414
|
+
end
|
415
|
+
m=nil
|
416
|
+
end
|
417
|
+
dob
|
418
|
+
end
|
419
|
+
def normal(dob,p_num) #P1 - P3
|
420
|
+
dob=footnote(dob)
|
421
|
+
dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,
|
422
|
+
'<text:a xl:type="simple" xl:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration
|
423
|
+
gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,
|
424
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="mailto:\\1">\\1</text:a>#{the_url_decoration.xml_close}}).
|
425
|
+
gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,
|
426
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="\\1">\\1</text:a>#{the_url_decoration.xml_close}}) #http ftp matches with decoration
|
427
|
+
dob.obj= if dob.is==:para \
|
428
|
+
and dob.indent.to_s =~/[0-9]/ \
|
429
|
+
and dob.indent == dob.hang
|
430
|
+
%{<text:p text:style-name="P_indent_#{dob.indent}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>}
|
431
|
+
elsif dob.is==:para \
|
432
|
+
and dob.hang.to_s =~/[0-9]/ \
|
433
|
+
and dob.indent != dob.hang
|
434
|
+
%{<text:p text:style-name="P_h#{dob.hang}_i#{dob.indent}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>}
|
435
|
+
else %{<text:p text:style-name="P_normal">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>}
|
436
|
+
end
|
437
|
+
dob
|
438
|
+
end
|
439
|
+
def fontface(dob)
|
440
|
+
end
|
441
|
+
def footnote_urls(str)
|
442
|
+
str=str.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,
|
443
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="\\1">\\1</text:a>#{the_url_decoration.xml_close}})
|
444
|
+
str=text_link(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/
|
445
|
+
str=text_link_relative(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/
|
446
|
+
str
|
447
|
+
end
|
448
|
+
def footnote(t_o)
|
449
|
+
str=if defined? t_o.obj then t_o.obj
|
450
|
+
elsif t_o.is_a?(String) then t_o
|
451
|
+
end
|
452
|
+
if str
|
453
|
+
@astx||=10000
|
454
|
+
@astxs||=20000
|
455
|
+
if str =~/#{Mx[:en_a_o]}\d+\s+/
|
456
|
+
str=str.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,
|
457
|
+
'<text:note text:id="ftn\1" text:note-class="footnote"><text:note-citation>\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>')
|
458
|
+
end
|
459
|
+
if str =~/#{Mx[:en_a_o]}([*]+)\s+/
|
460
|
+
a=$1.gsub(/([*])/,"\\\\\\1")
|
461
|
+
str=str.gsub(/#{Mx[:en_a_o]}([*]+)\s+(.+?)#{Mx[:en_a_c]}/,
|
462
|
+
%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>})
|
463
|
+
@astxs+=1
|
464
|
+
end
|
465
|
+
if str=~/#{Mx[:en_a_o]}[*+]+\s/
|
466
|
+
asterisk=str.scan(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/)
|
467
|
+
asterisk.each do |x|
|
468
|
+
a=x[0].gsub(/([*+])/,"\\\\\\1")
|
469
|
+
str=group_clean(str)
|
470
|
+
str=footnote_urls(str)
|
471
|
+
str=str.gsub(/#{Mx[:en_a_o]}(#{a})\s+(.+?)#{Mx[:en_a_c]}/,
|
472
|
+
%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>})
|
473
|
+
@astx+=1
|
474
|
+
end
|
475
|
+
end
|
476
|
+
if str=~/#{Mx[:en_b_o]}[*+]\d+\s/
|
477
|
+
asterisk=str.scan(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/)
|
478
|
+
asterisk.each do |x|
|
479
|
+
a=x[0].gsub(/([*+])/,"\\\\\\1")
|
480
|
+
str=group_clean(str)
|
481
|
+
str=footnote_urls(str)
|
482
|
+
str=str.gsub(/#{Mx[:en_b_o]}(#{a})\s+(.+?)#{Mx[:en_b_c]}/,
|
483
|
+
%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>})
|
484
|
+
@astx+=1
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
if defined? t_o.obj then t_o.obj=str
|
489
|
+
elsif t_o.is_a?(String) then t_o=str
|
490
|
+
end
|
491
|
+
t_o
|
492
|
+
end
|
493
|
+
def group_clean(str)
|
494
|
+
str=str.gsub(/&nbsp;| |#{Mx[:nbsp]}/,' ').
|
495
|
+
gsub(/</,'<').gsub(/>/,'>').
|
496
|
+
gsub(/<(text:span text:style-name="Span_\S+?"|\/text:span)>/,'<\1>'). #works, not ideal
|
497
|
+
gsub(/#{Mx[:br_line]}/,'<br />').
|
498
|
+
gsub(/<br(?:\s+\/)?>/,'<br />')
|
499
|
+
end
|
500
|
+
def poem(dob,p_num) #P4 #same as group
|
501
|
+
parray=[]
|
502
|
+
dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i|
|
503
|
+
set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : ''
|
504
|
+
parablock=group_clean(parablock)
|
505
|
+
parablock=footnote(parablock)
|
506
|
+
parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/
|
507
|
+
end
|
508
|
+
dob.obj=parray.join \
|
509
|
+
+ %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \
|
510
|
+
+ '<text:p text:style-name="Standard"/>'
|
511
|
+
dob
|
512
|
+
end
|
513
|
+
def group(dob,p_num) #P4 #same as verse
|
514
|
+
parray=[]
|
515
|
+
dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,
|
516
|
+
'<text:a xl:type="simple" xl:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration
|
517
|
+
gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,
|
518
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="mailto:\\1">\\1</text:a>#{the_url_decoration.xml_close}}).
|
519
|
+
gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,
|
520
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="\\1">\\1</text:a>#{the_url_decoration.xml_close}}) #http ftp matches with decoration
|
521
|
+
dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i|
|
522
|
+
set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : ''
|
523
|
+
parablock=group_clean(parablock)
|
524
|
+
parablock=parablock.gsub(/<text:a xl:type="simple" xl:href="(.+?)">/m,
|
525
|
+
'<text:a xl:type="simple" xl:href="\1">').
|
526
|
+
gsub(/<(\/text:a)>/,'<\1>').
|
527
|
+
gsub(/<(text:note text:id=.+?)>/,'<\1>').
|
528
|
+
gsub(/<(text:p text:style-name="Footnote")>/,'<\1>').
|
529
|
+
gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>')
|
530
|
+
parablock=footnote(parablock)
|
531
|
+
parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/
|
532
|
+
end
|
533
|
+
dob.obj=parray.join \
|
534
|
+
+ %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \
|
535
|
+
+ '<text:p text:style-name="Standard"/>'
|
536
|
+
dob
|
537
|
+
end
|
538
|
+
def block(dob,p_num) #P4 #same as verse
|
539
|
+
parray=[]
|
540
|
+
dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,
|
541
|
+
'<text:a xl:type="simple" xl:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration
|
542
|
+
gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,
|
543
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="mailto:\\1">\\1</text:a>#{the_url_decoration.xml_close}}).
|
544
|
+
gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,
|
545
|
+
%{#{the_url_decoration.xml_open}<text:a xl:type="simple" xl:href="\\1">\\1</text:a>#{the_url_decoration.xml_close}}) #http ftp matches with decoration
|
546
|
+
dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i|
|
547
|
+
set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : ''
|
548
|
+
parablock=group_clean(parablock)
|
549
|
+
parablock=parablock.gsub(/<text:a xl:type="simple" xl:href="(.+?)">/m,
|
550
|
+
'<text:a xl:type="simple" xl:href="\1">').
|
551
|
+
gsub(/<(\/text:a)>/,'<\1>').
|
552
|
+
gsub(/<(text:note text:id=.+?)>/,'<\1>').
|
553
|
+
gsub(/<(text:p text:style-name="Footnote")>/,'<\1>').
|
554
|
+
gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>')
|
555
|
+
parablock=footnote(parablock)
|
556
|
+
parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} \
|
557
|
+
if parablock =~/\S+/
|
558
|
+
end
|
559
|
+
dob.obj=parray.join \
|
560
|
+
+ %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \
|
561
|
+
+ '<text:p text:style-name="Standard"/>'
|
562
|
+
dob
|
563
|
+
end
|
564
|
+
def code(dob,p_num) #P5
|
565
|
+
if dob.is==:code
|
566
|
+
dob.obj=dob.obj.gsub(/\s\s/,'  ')
|
567
|
+
parray=[]
|
568
|
+
dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i|
|
569
|
+
set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : ''
|
570
|
+
parablock=group_clean(parablock)
|
571
|
+
parablock=parablock.gsub(/^\s*$/,'<br />').
|
572
|
+
gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,
|
573
|
+
'<text:a xl:type="simple" xl:href="\1">\1</text:a>') #http ftp matches escaped, no decoration
|
574
|
+
parray << %{<text:p text:style-name="P_code">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/
|
575
|
+
end
|
576
|
+
dob.obj=parray.join \
|
577
|
+
+ %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \
|
578
|
+
+ '<text:p text:style-name="Standard"/>'
|
579
|
+
end
|
580
|
+
dob
|
581
|
+
end
|
582
|
+
def table(dob,p_num) #
|
583
|
+
if dob.is ==:table
|
584
|
+
dob=footnote(dob) #check
|
585
|
+
table=SiSU_XML_ODF_ODT_Format::Table.new(@md,dob,p_num)
|
586
|
+
dob=table.table
|
587
|
+
end
|
588
|
+
dob
|
589
|
+
end
|
590
|
+
def obj_break(dob)
|
591
|
+
if dob.is ==:break
|
592
|
+
br=SiSU_XML_ODF_ODT_Format::FormatObjBreak.new(@md,dob)
|
593
|
+
if dob.obj==Mx[:br_page] \
|
594
|
+
or dob.obj==Mx[:br_page_new]
|
595
|
+
dob=br.br_page
|
596
|
+
elsif dob.obj==Mx[:br_page_line]
|
597
|
+
dob=br.br_page_line
|
598
|
+
elsif dob.obj==Mx[:br_obj]
|
599
|
+
dob=br.obj_sep
|
600
|
+
end
|
601
|
+
end
|
602
|
+
dob
|
603
|
+
end
|
604
|
+
def odf_structure(md,dob)
|
605
|
+
@md,@dob=md,dob
|
606
|
+
dob=if dob.is !=:code
|
607
|
+
dob=image(dob) if dob.obj =~/#{Mx[:lnk_o]}[ ]*\S+?\.(?:png|jpg|gif)\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/
|
608
|
+
dob=text_link(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/
|
609
|
+
dob=text_link_relative(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/
|
610
|
+
dob
|
611
|
+
else dob
|
612
|
+
end
|
613
|
+
p_num={ display: '', set_ref: '' }
|
614
|
+
if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
|
615
|
+
if @make.build.odt_ocn?
|
616
|
+
if defined? dob.ocn \
|
617
|
+
and dob.ocn.is_a?(Fixnum)
|
618
|
+
p_num=SiSU_XML_ODF_ODT_Format::ParagraphNumber.new(@make,dob.ocn).set_bookmark_and_display
|
619
|
+
end
|
620
|
+
end
|
621
|
+
end
|
622
|
+
if dob.is==:heading
|
623
|
+
@per.body << heading(dob,p_num).obj << break_line*2
|
624
|
+
if SiSU_Env::ProcessingSettings.new(md).build.toc?
|
625
|
+
if dob.lv =~/[A-D1]/i
|
626
|
+
@per.toc << toc(dob,p_num).obj
|
627
|
+
end
|
628
|
+
end
|
629
|
+
elsif dob.is ==:verse
|
630
|
+
@per.body << poem(dob,p_num).obj << break_line*2
|
631
|
+
elsif dob.is==:group
|
632
|
+
@per.body << group(dob,p_num).obj << break_line*2
|
633
|
+
elsif dob.is==:block
|
634
|
+
@per.body << block(dob,p_num).obj << break_line*2
|
635
|
+
elsif dob.is==:code
|
636
|
+
@per.body << code(dob,p_num).obj << break_line*2
|
637
|
+
elsif dob.is==:table #elsif dob.obj =~ /<!Th?¡/u
|
638
|
+
@per.body << table(dob,p_num).obj << break_line*2
|
639
|
+
elsif dob.is==:break
|
640
|
+
@per.body << obj_break(dob).obj << break_line*2
|
641
|
+
else
|
642
|
+
@per.body << normal(dob,p_num).obj << break_line*2 # main text, contents, body KEEP
|
643
|
+
end
|
644
|
+
@@endnotes_para=[]
|
645
|
+
end
|
646
|
+
def tidywords(wordlist)
|
647
|
+
wordlist
|
648
|
+
end
|
649
|
+
def markup(data) # Used for major markup instructions
|
650
|
+
#safe_characters=/[^a-zA-Z0-9}{\/?,."';:)(><\-_&!@%~#\]\[*=$| \n+`#{Mx[:tc_p]}]/u
|
651
|
+
dir=SiSU_Env::InfoEnv.new(@md.fns)
|
652
|
+
dir.path.odt_bld
|
653
|
+
@data_mod,@endnotes,@level,@cont,@copen,@odf_contents_close=Array.new(6){[]}
|
654
|
+
@rcdc=false
|
655
|
+
(0..7).each { |x| @cont[x]=@level[x]=false }
|
656
|
+
(4..7).each { |x| @odf_contents_close[x]='' }
|
657
|
+
odf_tail #($1,$2)
|
658
|
+
bullet=image_src('bullet_09.png')
|
659
|
+
if bullet
|
660
|
+
if FileTest.file?("#{bullet}/bullet_09.png")
|
661
|
+
FileUtils::cp("#{bullet}/bullet_09.png","#{@env.processing_path.odt}/Pictures/.")
|
662
|
+
else STDERR.puts %{\t*WARN* did not find image - "#{bullet}/bullet_09.png" [#{__FILE__}:#{__LINE__}]}
|
663
|
+
end
|
664
|
+
end
|
665
|
+
odf_book_idx
|
666
|
+
odf_metadata
|
667
|
+
data.each do |dob|
|
668
|
+
#p dob.obj if dob.obj =~safe_characters and @md.opt.selections.str =~/V/ #KEEP
|
669
|
+
dob.obj='' if dob.obj =~/#{Mx[:lv_o]}\d+:.*?#{Mx[:lv_c]}.+?#{Mx[:pa_non_object_dummy_heading]}/ #fix Mx[:lv_o]
|
670
|
+
para_array=[]
|
671
|
+
dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>')
|
672
|
+
word=dob.obj.scan(/\S+|\n/)
|
673
|
+
if word
|
674
|
+
word.each do |w| # _ - / # | : ! ^ ~
|
675
|
+
unless dob =~/^(?:#{Rx[:meta]}|%+ )/m
|
676
|
+
w=w.gsub(/&#(?:126|152);/,'~'). #126 usual
|
677
|
+
gsub(/ /,' ')
|
678
|
+
if w !~/(?:&\S{2,7}?;)+/
|
679
|
+
w=w.gsub(/&/,'&')
|
680
|
+
end
|
681
|
+
if w !~/&\S{1,7}?;(?:&\S{1,7}?;)+/ #imperfect
|
682
|
+
w=w.gsub(/(&\S{1,7};)+&/,'\1&')
|
683
|
+
end
|
684
|
+
end
|
685
|
+
para_array << w
|
686
|
+
end
|
687
|
+
dob.obj=para_array.join(' ')
|
688
|
+
dob.obj=dob.obj.strip
|
689
|
+
end
|
690
|
+
if dob.is==:code #{Mx[:gr_o]}code#{Mx[:gr_c]}/ #fix #code-block: angle brackets special characters #fix
|
691
|
+
dob.obj=dob.obj.gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>').
|
692
|
+
gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>')
|
693
|
+
end
|
694
|
+
if dob.of==:block
|
695
|
+
dob.obj=dob.obj.gsub(/#{Mx[:gl_bullet]}/,'● ')
|
696
|
+
end
|
697
|
+
dob.obj=dob.obj.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>').
|
698
|
+
gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>').
|
699
|
+
gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>').
|
700
|
+
gsub(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,
|
701
|
+
'<text:bookmark-start text:name="\1"/><text:bookmark-end text:name="\1"/>'). #check
|
702
|
+
gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;').
|
703
|
+
gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;').
|
704
|
+
gsub(/#{Mx[:mk_o]}[~-]##{Mx[:mk_c]}/,'')
|
705
|
+
if dob.is==:para \
|
706
|
+
and dob.bullet_
|
707
|
+
dob.obj='<draw:frame draw:style-name="gr1" text:anchor-type="as-char" svg:width="0.22cm" svg:height="0.22cm" draw:z-index="2"><draw:image xl:href="Pictures/bullet_09.png" xl:type="simple" xl:show="embed" xl:actuate="onLoad"/></draw:frame> ' +
|
708
|
+
dob.obj
|
709
|
+
end
|
710
|
+
dob.obj=dob.obj.gsub(/#{Mx[:br_line]}/,'<br />').
|
711
|
+
gsub(/©/,'©'). #too arbitrary
|
712
|
+
gsub(/.+?<-#>/,''). # remove dummy headings (used by html) #check
|
713
|
+
gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,
|
714
|
+
'<text:span text:style-name="Span_bold">\1</text:span>').
|
715
|
+
gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,
|
716
|
+
'<text:span text:style-name="Span_italic">\1</text:span>').
|
717
|
+
gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,
|
718
|
+
'<text:span text:style-name="Span_underscore">\1</text:span>').
|
719
|
+
gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,
|
720
|
+
'<text:span text:style-name="Span_superscript">\1</text:span>').
|
721
|
+
gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,
|
722
|
+
'<text:span text:style-name="Span_subscript">\1</text:span>').
|
723
|
+
gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,
|
724
|
+
'<text:span text:style-name="Span_monospace">\1</text:span>').
|
725
|
+
gsub(//u,'-').
|
726
|
+
gsub(/ /u, ' '). # space identify
|
727
|
+
gsub(/ /u, ' '). # space identify
|
728
|
+
gsub(/·/u,'*').
|
729
|
+
gsub(/[–—]/u,'-'). #— – chk
|
730
|
+
gsub(/ < /i,'<').
|
731
|
+
gsub(/\\copy(?:right)?\b/,'©').
|
732
|
+
gsub(/\\trademark\b|\\tm\b/,'®').
|
733
|
+
gsub(/\44/,'$'). #$ watch
|
734
|
+
gsub(/<a href=".+?">(.+?)<\/a>/,'\1').
|
735
|
+
gsub(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links
|
736
|
+
wordlist=dob.obj.scan(/\S+/)
|
737
|
+
dob.obj=tidywords(wordlist).join(' ').strip
|
738
|
+
@rcdc=true if @rcdc==false \
|
739
|
+
and (dob.obj =~/~metadata/ \
|
740
|
+
or dob =~/#{Mx[:lv_o]}1:meta#{Mx[:lv_x]}\s*Document Information/) #fix Mx[:lv_o]
|
741
|
+
if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ #check
|
742
|
+
if defined? dob.ocn and dob.ocn =~/\d+/
|
743
|
+
@p_num=SiSU_XML_ODF_ODT_Format::ParagraphNumber.new(@make,dob.ocn)
|
744
|
+
end
|
745
|
+
if dob.is ==:heading \
|
746
|
+
|| dob.is ==:para \
|
747
|
+
|| dob.is ==:group \
|
748
|
+
|| dob.is ==:verse \
|
749
|
+
|| dob.is ==:code \
|
750
|
+
|| dob.is ==:table \
|
751
|
+
|| dob.is ==:break
|
752
|
+
odf_structure(@md,dob)
|
753
|
+
end
|
754
|
+
if dob.obj ## Clean Prepared Text
|
755
|
+
dob.obj=dob.obj.gsub(/<!.+!>/,' ').
|
756
|
+
gsub(/#{Mx[:tc_o]}.+?#{Mx[:tc_c]}/,' ').
|
757
|
+
gsub(/<:\S+>/,' ')
|
758
|
+
end
|
759
|
+
end
|
760
|
+
end
|
761
|
+
end
|
762
|
+
def pre
|
763
|
+
table=if @md.flag_tables
|
764
|
+
x=<<WOK
|
765
|
+
<style:style style:name="Table1" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style>
|
766
|
+
<style:style style:name="Table1.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style>
|
767
|
+
<style:style style:name="Table1.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style>
|
768
|
+
<style:style style:name="Table1.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style>
|
769
|
+
<style:style style:name="Table1.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style>
|
770
|
+
<style:style style:name="Table1.E" style:family="table-column"><style:table-column-properties style:column-width="3.399cm" style:rel-column-width="13107*"/></style:style>
|
771
|
+
<style:style style:name="Table1.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style>
|
772
|
+
<style:style style:name="Table1.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style>
|
773
|
+
<style:style style:name="Table1.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style>
|
774
|
+
<style:style style:name="Table2" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style>
|
775
|
+
<style:style style:name="Table2.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style>
|
776
|
+
<style:style style:name="Table2.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style>
|
777
|
+
<style:style style:name="Table2.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style>
|
778
|
+
<style:style style:name="Table2.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style>
|
779
|
+
<style:style style:name="Table2.E" style:family="table-column"><style:table-column-properties style:column-width="3.999cm" style:rel-column-width="13107*"/></style:style>
|
780
|
+
<style:style style:name="Table2.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style>
|
781
|
+
<style:style style:name="Table2.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style>
|
782
|
+
<style:style style:name="Table2.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style>
|
783
|
+
<style:style style:name="Table2.I" style:family="table-column"><style:table-column-properties style:column-width="1.8887cm" style:rel-column-width="7281*"/></style:style>
|
784
|
+
<style:style style:name="Table2.J" style:family="table-column"><style:table-column-properties style:column-width="1.6999cm" style:rel-column-width="6553*"/></style:style>
|
785
|
+
<style:style style:name="Table2.K" style:family="table-column"><style:table-column-properties style:column-width="1.5453cm" style:rel-column-width="5957*"/></style:style>
|
786
|
+
<style:style style:name="Table2.L" style:family="table-column"><style:table-column-properties style:column-width="1.416cm" style:rel-column-width="5461*"/></style:style>
|
787
|
+
<style:style style:name="Table2.M" style:family="table-column"><style:table-column-properties style:column-width="1.307" style:rel-column-width="5041*"/></style:style>
|
788
|
+
<style:style style:name="Table2.N" style:family="table-column"><style:table-column-properties style:column-width="1.214cm" style:rel-column-width="4681*"/></style:style>
|
789
|
+
WOK
|
790
|
+
x=x.strip
|
791
|
+
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
|
792
|
+
x
|
793
|
+
else ''
|
794
|
+
end
|
795
|
+
x=<<WOK
|
796
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
797
|
+
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"><office:scripts/>
|
798
|
+
<office:font-face-decls><style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-adornments="Book" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="Inconsolata" svg:font-family="Inconsolata" style:font-adornments="Regular" style:font-pitch="fixed"/><style:font-face style:name="Liberation Mono" svg:font-family="'Liberation Mono'" style:font-adornments="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-adornments="ExtraLight" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/><style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/></office:font-face-decls>
|
799
|
+
<office:automatic-styles>
|
800
|
+
#{table}
|
801
|
+
<style:style style:name="P_table_cell" style:family="paragraph" style:parent-style-name="Table_Contents"><style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/></style:style>
|
802
|
+
</office:automatic-styles>
|
803
|
+
<office:body>
|
804
|
+
<office:text text:use-soft-page-breaks="true">
|
805
|
+
<office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
|
806
|
+
<text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls>
|
807
|
+
WOK
|
808
|
+
x=x.strip
|
809
|
+
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
|
810
|
+
@per.head << x
|
811
|
+
end
|
812
|
+
def publish
|
813
|
+
content=[]
|
814
|
+
br_pg='<text:p text:style-name="P_normal_page_new"> </text:p>'
|
815
|
+
content <<
|
816
|
+
@per.head <<
|
817
|
+
@per.toc <<
|
818
|
+
br_pg <<
|
819
|
+
@per.body <<
|
820
|
+
@per.book_idx <<
|
821
|
+
br_pg <<
|
822
|
+
@per.metadata <<
|
823
|
+
@per.tail
|
824
|
+
SiSU_XML_ODF_ODT::Source::Output.new(content,@md,@env).odf
|
825
|
+
@@odf={ head: [], toc: [], body: [], tail: [], book_idx: [], metadata: [] }
|
826
|
+
end
|
827
|
+
end
|
828
|
+
class Output <Source
|
829
|
+
def initialize(content,md,env)
|
830
|
+
@content,@md,@env=content,md,env
|
831
|
+
end
|
832
|
+
def odf #%odf output
|
833
|
+
env=SiSU_Env::FileOp.new(@md)
|
834
|
+
env.mkdir
|
835
|
+
header=SiSU_XML_ODF_ODT_Format::ODT_Head_1_2.new(@md)
|
836
|
+
filename="#{@env.processing_path.odt}/manifest.rdf"
|
837
|
+
od=File.new(filename,'w+')
|
838
|
+
od << header.manifest_rdf
|
839
|
+
od.close
|
840
|
+
filename="#{@env.processing_path.odt}/META-INF/manifest.xml"
|
841
|
+
od=File.new(filename,'w+')
|
842
|
+
od << header.meta_inf_manifest_xml(@md)
|
843
|
+
od.close
|
844
|
+
filename="#{@env.processing_path.odt}/meta.xml"
|
845
|
+
od=File.new(filename,'w+')
|
846
|
+
od << header.meta_xml
|
847
|
+
od.close
|
848
|
+
filename="#{@env.processing_path.odt}/settings.xml"
|
849
|
+
od=File.new(filename,'w+')
|
850
|
+
od << header.settings_xml
|
851
|
+
od.close
|
852
|
+
filename="#{@env.processing_path.odt}/styles.xml"
|
853
|
+
od=File.new(filename,'w+')
|
854
|
+
od << header.styles_xml
|
855
|
+
od.close
|
856
|
+
filename="#{@env.processing_path.odt}/mimetype"
|
857
|
+
od=File.new(filename,'w+')
|
858
|
+
od << header.mimetype
|
859
|
+
od.close
|
860
|
+
env.make_path(@env.processing_path.odt)
|
861
|
+
env.make_path(@md.file.output_path.odt.dir)
|
862
|
+
filename="#{@env.processing_path.odt}/content.xml"
|
863
|
+
od=File.new(filename,'w+')
|
864
|
+
@content.compact.each do |para| # this is a hack
|
865
|
+
od.puts para unless para =~/\A\s*\Z/
|
866
|
+
end
|
867
|
+
od.close
|
868
|
+
opendoc=@md.file.base_filename.odt #watch where output by language
|
869
|
+
FileUtils::mkdir_p(@md.file.output_path.odt.dir) \
|
870
|
+
unless FileTest.directory?(@md.file.output_path.odt.dir)
|
871
|
+
if FileTest.directory?(@env.processing_path.odt) \
|
872
|
+
and SiSU_Env::SystemCall.new.zip
|
873
|
+
pwd=Dir.pwd
|
874
|
+
Dir.chdir(@env.processing_path.odt)
|
875
|
+
system("
|
876
|
+
zip -qr #{opendoc} *
|
877
|
+
")
|
878
|
+
FileUtils::mv(opendoc, @md.file.place_file.odt.dir)
|
879
|
+
Dir.chdir(pwd)
|
880
|
+
else
|
881
|
+
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark('*EXITED odf* zip program not found') unless SiSU_Env::SystemCall.new.zip
|
882
|
+
end
|
883
|
+
end
|
884
|
+
end
|
885
|
+
end
|
886
|
+
end
|
887
|
+
__END__
|