sisu 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. checksums.yaml +7 -0
  2. data/bin/sisu +367 -0
  3. data/bin/sisugem +367 -0
  4. data/data/sisu/image/arrow_next_red.png +0 -0
  5. data/data/sisu/image/arrow_prev_red.png +0 -0
  6. data/data/sisu/image/arrow_up_red.png +0 -0
  7. data/data/sisu/image/b_bluebell.png +0 -0
  8. data/data/sisu/image/b_doc.png +0 -0
  9. data/data/sisu/image/b_epub.png +0 -0
  10. data/data/sisu/image/b_home.png +0 -0
  11. data/data/sisu/image/b_info.png +0 -0
  12. data/data/sisu/image/b_odf.png +0 -0
  13. data/data/sisu/image/b_pdf.png +0 -0
  14. data/data/sisu/image/b_search.png +0 -0
  15. data/data/sisu/image/b_toc.png +0 -0
  16. data/data/sisu/image/bullet_08.png +0 -0
  17. data/data/sisu/image/bullet_09.png +0 -0
  18. data/data/sisu/image/bullet_10.png +0 -0
  19. data/data/sisu/image/bullet_11.png +0 -0
  20. data/data/sisu/image/bullet_12.png +0 -0
  21. data/data/sisu/image/bullet_doc.png +0 -0
  22. data/data/sisu/image/bullet_red.png +0 -0
  23. data/data/sisu/image/dot_clear.png +0 -0
  24. data/data/sisu/image/dot_white.png +0 -0
  25. data/data/sisu/image/gplv3.png +0 -0
  26. data/data/sisu/image/gplv3_free_software.png +0 -0
  27. data/data/sisu/image/next.png +0 -0
  28. data/data/sisu/image/previous.png +0 -0
  29. data/data/sisu/image/rb7.ico +0 -0
  30. data/data/sisu/image/sisu.png +0 -0
  31. data/data/sisu/image/toctoc.png +0 -0
  32. data/data/sisu/version.yml +5 -0
  33. data/lib/sisu.rb +94 -0
  34. data/lib/sisu/air.rb +80 -0
  35. data/lib/sisu/ao.rb +590 -0
  36. data/lib/sisu/ao_character_check.rb +102 -0
  37. data/lib/sisu/ao_composite.rb +286 -0
  38. data/lib/sisu/ao_doc_objects.rb +565 -0
  39. data/lib/sisu/ao_doc_str.rb +2269 -0
  40. data/lib/sisu/ao_endnotes.rb +136 -0
  41. data/lib/sisu/ao_expand_insertions.rb +514 -0
  42. data/lib/sisu/ao_hash_digest.rb +174 -0
  43. data/lib/sisu/ao_idx.rb +422 -0
  44. data/lib/sisu/ao_images.rb +187 -0
  45. data/lib/sisu/ao_metadata.rb +86 -0
  46. data/lib/sisu/ao_misc_arrange.rb +207 -0
  47. data/lib/sisu/ao_numbering.rb +720 -0
  48. data/lib/sisu/ao_persist.rb +194 -0
  49. data/lib/sisu/ao_references.rb +502 -0
  50. data/lib/sisu/ao_syntax.rb +640 -0
  51. data/lib/sisu/cgi.rb +84 -0
  52. data/lib/sisu/cgi_pgsql.rb +270 -0
  53. data/lib/sisu/cgi_sql_common.rb +986 -0
  54. data/lib/sisu/cgi_sqlite.rb +244 -0
  55. data/lib/sisu/conf.rb +287 -0
  56. data/lib/sisu/constants.rb +388 -0
  57. data/lib/sisu/css.rb +3484 -0
  58. data/lib/sisu/db_columns.rb +1997 -0
  59. data/lib/sisu/db_create.rb +689 -0
  60. data/lib/sisu/db_dbi.rb +90 -0
  61. data/lib/sisu/db_drop.rb +207 -0
  62. data/lib/sisu/db_import.rb +877 -0
  63. data/lib/sisu/db_indexes.rb +146 -0
  64. data/lib/sisu/db_load_tuple.rb +323 -0
  65. data/lib/sisu/db_remove.rb +182 -0
  66. data/lib/sisu/db_select.rb +230 -0
  67. data/lib/sisu/db_sqltxt.rb +173 -0
  68. data/lib/sisu/db_tests.rb +114 -0
  69. data/lib/sisu/dbi.rb +166 -0
  70. data/lib/sisu/dbi_discrete.rb +206 -0
  71. data/lib/sisu/digests.rb +306 -0
  72. data/lib/sisu/dp.rb +1606 -0
  73. data/lib/sisu/dp_identify_markup.rb +161 -0
  74. data/lib/sisu/dp_make.rb +668 -0
  75. data/lib/sisu/embedded.rb +149 -0
  76. data/lib/sisu/errors.rb +84 -0
  77. data/lib/sisu/generic_parts.rb +131 -0
  78. data/lib/sisu/git.rb +277 -0
  79. data/lib/sisu/html.rb +775 -0
  80. data/lib/sisu/html_concordance.rb +391 -0
  81. data/lib/sisu/html_format.rb +1348 -0
  82. data/lib/sisu/html_harvest.rb +109 -0
  83. data/lib/sisu/html_harvest_author_format.rb +111 -0
  84. data/lib/sisu/html_harvest_authors.rb +466 -0
  85. data/lib/sisu/html_harvest_topics.rb +893 -0
  86. data/lib/sisu/html_lite_shared.rb +324 -0
  87. data/lib/sisu/html_manifest.rb +1032 -0
  88. data/lib/sisu/html_minitoc.rb +230 -0
  89. data/lib/sisu/html_parts.rb +437 -0
  90. data/lib/sisu/html_persist.rb +237 -0
  91. data/lib/sisu/html_promo.rb +440 -0
  92. data/lib/sisu/html_scroll.rb +235 -0
  93. data/lib/sisu/html_segments.rb +716 -0
  94. data/lib/sisu/html_shared.rb +62 -0
  95. data/lib/sisu/html_table.rb +64 -0
  96. data/lib/sisu/html_tune.rb +301 -0
  97. data/lib/sisu/hub.rb +277 -0
  98. data/lib/sisu/hub_actions.rb +1122 -0
  99. data/lib/sisu/hub_loop_markup_files.rb +170 -0
  100. data/lib/sisu/hub_options.rb +1695 -0
  101. data/lib/sisu/i18n.rb +702 -0
  102. data/lib/sisu/manpage.rb +377 -0
  103. data/lib/sisu/manpage_format.rb +85 -0
  104. data/lib/sisu/object_munge.rb +307 -0
  105. data/lib/sisu/prog_text_translation.rb +1702 -0
  106. data/lib/sisu/qrcode.rb +754 -0
  107. data/lib/sisu/relaxng.rb +1153 -0
  108. data/lib/sisu/remote.rb +246 -0
  109. data/lib/sisu/rexml.rb +148 -0
  110. data/lib/sisu/se.rb +158 -0
  111. data/lib/sisu/se_cleanoutput.rb +145 -0
  112. data/lib/sisu/se_clear.rb +105 -0
  113. data/lib/sisu/se_createsite.rb +273 -0
  114. data/lib/sisu/se_css.rb +221 -0
  115. data/lib/sisu/se_date.rb +92 -0
  116. data/lib/sisu/se_db.rb +214 -0
  117. data/lib/sisu/se_envcall.rb +326 -0
  118. data/lib/sisu/se_file_op.rb +2758 -0
  119. data/lib/sisu/se_filemap.rb +247 -0
  120. data/lib/sisu/se_get_init.rb +238 -0
  121. data/lib/sisu/se_hub_particulars.rb +234 -0
  122. data/lib/sisu/se_info_env.rb +2179 -0
  123. data/lib/sisu/se_info_port.rb +70 -0
  124. data/lib/sisu/se_info_system.rb +202 -0
  125. data/lib/sisu/se_load.rb +108 -0
  126. data/lib/sisu/se_processing.rb +659 -0
  127. data/lib/sisu/se_programs.rb +394 -0
  128. data/lib/sisu/se_remotes.rb +553 -0
  129. data/lib/sisu/se_standardise_lang.rb +176 -0
  130. data/lib/sisu/se_version.rb +174 -0
  131. data/lib/sisu/shared_images.rb +137 -0
  132. data/lib/sisu/shared_markup_alt.rb +336 -0
  133. data/lib/sisu/shared_metadata.rb +1361 -0
  134. data/lib/sisu/shared_sem.rb +156 -0
  135. data/lib/sisu/sisu_thor_lib.rb +407 -0
  136. data/lib/sisu/sitemaps.rb +224 -0
  137. data/lib/sisu/src_kdissert_share.rb +102 -0
  138. data/lib/sisu/src_po4a_share.rb +309 -0
  139. data/lib/sisu/src_po4a_shelf.rb +1217 -0
  140. data/lib/sisu/src_po4a_shelf_set.rb +297 -0
  141. data/lib/sisu/src_po4a_sst_ao_sst.rb +893 -0
  142. data/lib/sisu/src_po4a_sst_ao_sst_set.rb +284 -0
  143. data/lib/sisu/src_po4a_sstm.rb +135 -0
  144. data/lib/sisu/src_shared.rb +347 -0
  145. data/lib/sisu/src_sisupod_make.rb +171 -0
  146. data/lib/sisu/src_sisupod_sstm.rb +109 -0
  147. data/lib/sisu/sst_convert_markup.rb +323 -0
  148. data/lib/sisu/sst_do_inline_footnotes.rb +440 -0
  149. data/lib/sisu/sst_from_xml.rb +178 -0
  150. data/lib/sisu/sst_identify_markup.rb +482 -0
  151. data/lib/sisu/sst_to_s_xml_sax.rb +471 -0
  152. data/lib/sisu/termsheet.rb +163 -0
  153. data/lib/sisu/texinfo.rb +430 -0
  154. data/lib/sisu/texinfo_format.rb +541 -0
  155. data/lib/sisu/texpdf.rb +1162 -0
  156. data/lib/sisu/texpdf_format.rb +1689 -0
  157. data/lib/sisu/texpdf_parts.rb +235 -0
  158. data/lib/sisu/txt_asciidoc.rb +354 -0
  159. data/lib/sisu/txt_asciidoc_decorate.rb +207 -0
  160. data/lib/sisu/txt_markdown.rb +389 -0
  161. data/lib/sisu/txt_markdown_decorate.rb +207 -0
  162. data/lib/sisu/txt_orgmode.rb +376 -0
  163. data/lib/sisu/txt_orgmode_decorate.rb +186 -0
  164. data/lib/sisu/txt_output.rb +86 -0
  165. data/lib/sisu/txt_plain.rb +410 -0
  166. data/lib/sisu/txt_plain_decorate.rb +189 -0
  167. data/lib/sisu/txt_read.rb +109 -0
  168. data/lib/sisu/txt_rst.rb +371 -0
  169. data/lib/sisu/txt_rst_decorate.rb +186 -0
  170. data/lib/sisu/txt_shared.rb +241 -0
  171. data/lib/sisu/txt_textile.rb +367 -0
  172. data/lib/sisu/txt_textile_decorate.rb +186 -0
  173. data/lib/sisu/update.rb +141 -0
  174. data/lib/sisu/urls.rb +696 -0
  175. data/lib/sisu/utils.rb +232 -0
  176. data/lib/sisu/utils_composite.rb +115 -0
  177. data/lib/sisu/utils_response.rb +114 -0
  178. data/lib/sisu/utils_screen_text_color.rb +472 -0
  179. data/lib/sisu/utils_spell.rb +99 -0
  180. data/lib/sisu/webrick.rb +191 -0
  181. data/lib/sisu/wikispeak.rb +375 -0
  182. data/lib/sisu/xhtml.rb +472 -0
  183. data/lib/sisu/xhtml_epub2.rb +890 -0
  184. data/lib/sisu/xhtml_epub2_concordance.rb +322 -0
  185. data/lib/sisu/xhtml_epub2_format.rb +2272 -0
  186. data/lib/sisu/xhtml_epub2_persist.rb +278 -0
  187. data/lib/sisu/xhtml_epub2_segments.rb +599 -0
  188. data/lib/sisu/xhtml_epub2_tune.rb +330 -0
  189. data/lib/sisu/xhtml_parts.rb +183 -0
  190. data/lib/sisu/xhtml_shared.rb +62 -0
  191. data/lib/sisu/xhtml_table.rb +97 -0
  192. data/lib/sisu/xml_docbook5.rb +376 -0
  193. data/lib/sisu/xml_dom.rb +624 -0
  194. data/lib/sisu/xml_fictionbook2.rb +389 -0
  195. data/lib/sisu/xml_format.rb +865 -0
  196. data/lib/sisu/xml_md_oai_pmh_dc.rb +229 -0
  197. data/lib/sisu/xml_odf_odt.rb +887 -0
  198. data/lib/sisu/xml_odf_odt_format.rb +674 -0
  199. data/lib/sisu/xml_parts.rb +191 -0
  200. data/lib/sisu/xml_persist.rb +126 -0
  201. data/lib/sisu/xml_sax.rb +521 -0
  202. data/lib/sisu/xml_scaffold_structure_collapsed.rb +198 -0
  203. data/lib/sisu/xml_scaffold_structure_sisu.rb +201 -0
  204. data/lib/sisu/xml_shared.rb +665 -0
  205. data/lib/sisu/xml_tables.rb +261 -0
  206. data/lib/sisu/zap.rb +90 -0
  207. metadata +251 -0
@@ -0,0 +1,624 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** xml (dom style) output processing
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_dom.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_XML_DOM
58
+ require_relative 'se_hub_particulars' # se_hub_particulars.rb
59
+ include SiSU_Particulars
60
+ require_relative 'se' # se.rb
61
+ include SiSU_Env
62
+ require_relative 'ao' # ao.rb
63
+ require_relative 'xml_shared' # xml_shared.rb
64
+ include SiSU_XML_Munge
65
+ require_relative 'xml_format' # xml_format.rb
66
+ include SiSU_XML_Format
67
+ require_relative 'xml_persist' # xml_persist.rb
68
+ require_relative 'rexml' # rexml.rb
69
+ include SiSU_Rexml
70
+ require_relative 'shared_metadata' # shared_metadata.rb
71
+ @@alt_id_count=0
72
+ @@tablefoot=''
73
+ class Source
74
+ def initialize(opt)
75
+ @opt=opt
76
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
77
+ end
78
+ def read
79
+ begin
80
+ @env, @md, @ao_arr=
81
+ @particulars.env,@particulars.md,@particulars.ao_array
82
+ unless @opt.act[:quiet][:set]==:on
83
+ tool=if (@opt.act[:verbose_plus][:set]==:on \
84
+ || @opt.act[:maintenance][:set]==:on)
85
+ @env.program.web_browser \
86
+ + ' file://' \
87
+ + @md.file.output_path.xml_dom.dir + '/' \
88
+ + @md.file.base_filename.xml_dom + "\n\t" \
89
+ + @env.program.xml_viewer \
90
+ + ' file://' \
91
+ + @md.file.output_path.xml_dom.dir + '/' \
92
+ + @md.file.base_filename.xml_dom
93
+ elsif @opt.act[:verbose][:set]==:on
94
+ @env.program.web_browser \
95
+ + ' file://' \
96
+ + @md.file.output_path.xml_dom.dir + '/' \
97
+ + @md.file.base_filename.xml_dom
98
+ else "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
99
+ end
100
+ (@opt.act[:verbose][:set]==:on \
101
+ || @opt.act[:verbose_plus][:set]==:on \
102
+ || @opt.act[:maintenance][:set]==:on) \
103
+ ? SiSU_Screen::Ansi.new(
104
+ @opt.act[:color_state][:set],
105
+ 'XML DOM',
106
+ tool
107
+ ).green_hi_blue
108
+ : SiSU_Screen::Ansi.new(
109
+ @opt.act[:color_state][:set],
110
+ 'XML DOM',
111
+ tool
112
+ ).green_title_hi
113
+ if (@opt.act[:verbose_plus][:set]==:on \
114
+ || @opt.act[:maintenance][:set]==:on)
115
+ SiSU_Screen::Ansi.new(
116
+ @opt.act[:color_state][:set],
117
+ @opt.fns,
118
+ 'file://' \
119
+ + @md.file.output_path.xml_dom.dir + '/' \
120
+ + @md.file.base_filename.xml_dom
121
+ ).flow
122
+ end
123
+ end
124
+ SiSU_XML_DOM::Source::Songsheet.new(@particulars).songsheet
125
+ rescue
126
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
127
+ __LINE__.to_s + ':' + __FILE__
128
+ end
129
+ ensure
130
+ SiSU_Env::CreateSite.new(@opt).cp_css
131
+ Dir.chdir(@opt.f_pth[:pth])
132
+ end
133
+ end
134
+ private
135
+ class Songsheet
136
+ def initialize(particulars)
137
+ @env, @md, @ao_arr, @particulars=
138
+ particulars.env,particulars.md,particulars.ao_array,particulars
139
+ @file=SiSU_Env::FileOp.new(@md)
140
+ end
141
+ def songsheet
142
+ begin
143
+ SiSU_XML_DOM::Source::Scroll.new(@particulars).songsheet
144
+ if (@md.opt.act[:verbose][:set]==:on \
145
+ || @md.opt.act[:verbose_plus][:set]==:on \
146
+ || @md.opt.act[:maintenance][:set]==:on)
147
+ SiSU_XML_DOM::Source::Tidy.new(@md,@file.place_file.xml_dom.dir).xml # test wellformedness, comment out when not in use
148
+ end
149
+ SiSU_Rexml::Rexml.new(@md,@file.place_file.xml_dom.dir).xml if @md.opt.act[:maintenance][:set]==:on # test rexml parsing, comment out when not in use #debug
150
+ rescue
151
+ SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
152
+ __LINE__.to_s + ':' + __FILE__
153
+ end
154
+ ensure
155
+ end
156
+ end
157
+ end
158
+ class Scroll
159
+ require_relative 'txt_shared' # txt_shared.rb
160
+ include SiSU_TextUtils
161
+ require_relative 'xhtml_shared' # decide use, whether xml rather than xhtml
162
+ def initialize(particulars)
163
+ @env, @md, @ao_arr=
164
+ particulars.env,particulars.md,particulars.ao_array
165
+ @trans=SiSU_XML_Munge::Trans.new(@md)
166
+ @sys=SiSU_Env::SystemCall.new
167
+ @per=SiSU_XML_Persist::Persist.new
168
+ end
169
+ def songsheet
170
+ begin
171
+ pre
172
+ @data=markup(@ao_arr)
173
+ post
174
+ publish
175
+ ensure
176
+ SiSU_XML_Persist::Persist.new.persist_init
177
+ end
178
+ end
179
+ protected
180
+ def xml_markup(dob='')
181
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,
182
+ '<endnote><number>\1</number><note>\2</note></endnote> ').
183
+ gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/,
184
+ '<endnote><symbol>\1</symbol><note>\2</note></endnote> ').
185
+ gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/,
186
+ '<endnote><symbol>\1</symbol><note>\2</note></endnote> ')
187
+ end
188
+ def xml_head
189
+ metadata=SiSU_Metadata::Summary.new(@md).xml_dom.metadata
190
+ @per.head << metadata
191
+ end
192
+ def xml_sc(md='')
193
+ sc=if @md.sc_info
194
+ <<WOK
195
+ <source_control>
196
+ <meta>filename:</meta>
197
+ <sc class="sourcefile">
198
+ #{@md.sc_filename}
199
+ </sc><br />
200
+ <meta>version number:</meta>
201
+ <sc class="number">
202
+ #{@md.sc_number}
203
+ </sc><br />
204
+ <meta>version date:</meta>
205
+ <sc class="date">
206
+ #{@md.sc_date}
207
+ </sc><br />
208
+ </source_control>
209
+ WOK
210
+ else ''
211
+ end
212
+ @per.sc=sc
213
+ end
214
+ def xml_element(dob,xml_el='',xml_content='',type='norm')
215
+ n=n1=n2=n3=0
216
+ if dob.is==:heading
217
+ lv=dob.ln
218
+ n=dob.ln
219
+ n1=dob.ln
220
+ n2=dob.ln + 2
221
+ n3=dob.ln + 3
222
+ else lv=nil
223
+ end
224
+ tag=if defined? dob.name and dob.name=~/\S+/
225
+ "\n#{Ax[:tab]*n3}<nametag>#{dob.name}</nametag>"
226
+ else ''
227
+ end
228
+ xml_el ||=''
229
+ @per.body <<<<WOK
230
+ #{Ax[:tab]*n}#{xml_el}
231
+ #{Ax[:tab]*n1}<heading>
232
+ #{Ax[:tab]*n2}<object id="#{dob.ocn}">
233
+ #{Ax[:tab]*n3}<ocn>#{dob.ocn}</ocn>#{tag}
234
+ #{Ax[:tab]*n3}<text class="#{type}">#{dob.obj}</text>
235
+ #{Ax[:tab]*n2}</object>
236
+ #{Ax[:tab]*n1}</heading>#{xml_content}
237
+ WOK
238
+ if lv==4
239
+ @copen[1]=true
240
+ @copen[2]=@copen[3]=@copen[4]=false
241
+ elsif lv==5
242
+ @copen[2]=true
243
+ @copen[3]=@copen[4]=false
244
+ elsif lv==6
245
+ @copen[3]=true
246
+ @copen[4]=false
247
+ elsif lv==7
248
+ @copen[4]=true
249
+ end
250
+ end
251
+ def xml_structure(dob,type='norm')
252
+ n=n1=n2=n3=0
253
+ if dob.is==:heading
254
+ lv=dob.ln
255
+ n=dob.ln - 1
256
+ n1=dob.ln
257
+ n2=dob.ln + 1
258
+ n3=dob.ln + 2
259
+ dob.ln - 3
260
+ else lv=nil
261
+ end
262
+ case lv
263
+ when 1..3
264
+ xml_el="<heading#{lv}>"
265
+ 3.downto(lv) do |x|
266
+ y=x - 1
267
+ if @cont[1] \
268
+ or @cont[2] \
269
+ or @cont[3]
270
+ @per.body << "#{Ax[:tab]*5}</content>"
271
+ end
272
+ @cont[1]=false if @cont[1]
273
+ @cont[2]=false if @cont[2]
274
+ @cont[3]=false if @cont[3]
275
+ ####### attempt to close contents
276
+ if @copen[4] # 4~
277
+ [4,3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
278
+ @copen[1]=@copen[2]=@copen[3]=@copen[4]=false
279
+ elsif @copen[3] # 3~
280
+ [3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
281
+ @copen[1]=@copen[2]=@copen[3]=false
282
+ elsif @copen[2] # 2~
283
+ [2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
284
+ @copen[1]=@copen[2]=@copen[3]=false
285
+ elsif @copen[1] # 1~
286
+ [1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
287
+ @copen[1]=@copen[2]=@copen[3]=false
288
+ end
289
+ @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]
290
+ @level[x]=false
291
+ end
292
+ when 4..7
293
+ 7.downto(lv) do |x|
294
+ if @level[x]==true
295
+ @xml_contents_close[x]=''
296
+ end
297
+ end
298
+ cv=lv - 3
299
+ xml_el="<contents#{cv}>"
300
+ xml_content="\n#{Ax[:tab]*5}<content>"
301
+ case lv
302
+ when 4
303
+ @per.body << "#{Ax[:tab]*5}</content>" if @cont[1]
304
+ if @copen[4]==true # 4~
305
+ [4,3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
306
+ elsif @copen[3]==true # 3~
307
+ [3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
308
+ elsif @copen[2]==true # 2~
309
+ [2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
310
+ elsif @copen[1]==true # 1~
311
+ [1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
312
+ end
313
+ @cont[1]=true
314
+ when 5
315
+ if @cont[3] \
316
+ or @cont[2] \
317
+ or @cont[1]
318
+ @per.body << "#{Ax[:tab]*5}</content>"
319
+ end
320
+ if @copen[4]==true #4~
321
+ [4,3,2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
322
+ elsif @copen[3]==true #3~
323
+ [3,2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
324
+ elsif @copen[2]==true #2~
325
+ [2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
326
+ end
327
+ @cont[2]=true
328
+ when 6
329
+ if @cont[4] \
330
+ or @cont[3] \
331
+ or @cont[2] \
332
+ or @cont[1]
333
+ @per.body << "#{Ax[:tab]*5}</content>"
334
+ end
335
+ if @copen[4] #4~
336
+ [4,3].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
337
+ elsif @copen[3] #3~
338
+ [3].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
339
+ end
340
+ @cont[3]=true
341
+ when 7
342
+ if @cont[4] \
343
+ or @cont[3] \
344
+ or @cont[2] \
345
+ or @cont[1]
346
+ @per.body << "#{Ax[:tab]*5}</content>"
347
+ end
348
+ if @copen[4] #4~
349
+ [4].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }
350
+ end
351
+ @cont[4]=true
352
+ end
353
+ end
354
+ xml_el ||=''
355
+ xml_element(dob,xml_el,xml_content,type)
356
+ if lv
357
+ @level[lv]=true
358
+ ((lv+1)..7).each { |x| @level[x]=false }
359
+ end
360
+ end
361
+ def add_to_body(dob,type='norm')
362
+ if defined? dob.obj # main text, contents, body KEEP
363
+ if defined? dob.ocn \
364
+ and dob.ocn
365
+ @per.body << %{#{Ax[:tab]*6}<object id="#{dob.ocn}">}
366
+ @per.body << %{#{Ax[:tab]*7}<ocn>#{dob.ocn}</ocn>} if defined? dob.ocn
367
+ end
368
+ #@per.body << %{#{Ax[:tab]*7}<text class="#{type}">#{dob.obj}</text>}
369
+ #@per.body << %{#{Ax[:tab]*7}<text class="#{dob.is}">#{Ax[:tab]*1}}
370
+ @per.body << %{#{Ax[:tab]*7}<text class="#{type}">#{Ax[:tab]*1}}
371
+ @per.body << %{#{Ax[:tab]*8}#{dob.obj}#{Ax[:tab]*1}}
372
+ @per.body << %{#{Ax[:tab]*7}</text>}
373
+ @per.body << %{#{Ax[:tab]*6}</object>}
374
+ end
375
+ end
376
+ def block_structure(dob)
377
+ dob=@trans.markup_block(dob) #decide check & FIX
378
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m,
379
+ '<endnote><number>\1</number><note>\2</note></endnote> ').strip
380
+ dob
381
+ end
382
+ def group_structure(dob)
383
+ dob=@trans.markup_group(dob) #decide check & FIX
384
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m,
385
+ '<endnote><number>\1</number><note>\2</note></endnote> ').strip
386
+ dob
387
+ end
388
+ def poem_structure(dob)
389
+ dob=@trans.markup_group(dob) #decide check & FIX
390
+ dob.obj=dob.obj.strip
391
+ dob
392
+ end
393
+ def code_structure(dob)
394
+ dob=@trans.markup_group(dob) #decide check & FIX
395
+ dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
396
+ dob
397
+ end
398
+ def table_structure(dob) #tables
399
+ SiSU_XHTML_Shared::TableXHTML.new(dob)
400
+ end
401
+ def markup(data)
402
+ xml_sc(@md)
403
+ @level,@cont,@copen,@xml_contents_close=[],[],[],[]
404
+ @rcdc=false
405
+ type='norm'
406
+ (0..7).each { |x| @cont[x]=@level[x]=false }
407
+ (4..7).each { |x| @xml_contents_close[x]='' }
408
+ xml_head
409
+ data.each do |dob|
410
+ @trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8
411
+ dob=@trans.markup(dob)
412
+ if @rcdc==false \
413
+ and (dob.is ==:meta \
414
+ and dob.obj =~/Document Information/)
415
+ @rcdc=true
416
+ end
417
+ if dob !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
418
+ @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,dob.ocn) if defined? dob.ocn
419
+ if not @rcdc
420
+ if defined? dob.ocn \
421
+ and dob.ocn.to_s =~/\d+/
422
+ format_scroll=SiSU_XML_Format::FormatScroll.new(@md,dob) if dob.is==:para and dob.indent ##FIX
423
+ x=SiSU_XML_Format::FormatSeg.new(@md,dob)
424
+ if dob.is==:heading
425
+ if dob.ln==0
426
+ type="heading_section_#{dob.ln.to_s}"
427
+ xml_markup(dob)
428
+ xml_structure(dob,type)
429
+ dob.obj=x.heading_body0
430
+ elsif dob.ln==1
431
+ type="heading_section_#{dob.ln.to_s}"
432
+ xml_markup(dob)
433
+ xml_structure(dob,type)
434
+ dob.obj=x.heading_body1
435
+ elsif dob.ln==2
436
+ type="heading_section_#{dob.ln.to_s}"
437
+ xml_markup(dob)
438
+ xml_structure(dob,type)
439
+ dob.obj=x.heading_body2
440
+ elsif dob.ln==3
441
+ type="heading_section_#{dob.ln.to_s}"
442
+ xml_markup(dob)
443
+ xml_structure(dob,type)
444
+ dob.obj=x.heading_body3
445
+ elsif dob.ln==4
446
+ type="heading_content_#{dob.lv}"
447
+ xml_markup(dob)
448
+ xml_structure(dob,type)
449
+ dob.obj=x.heading_body4
450
+ elsif dob.ln==5
451
+ type="heading_content_#{dob.lv}"
452
+ xml_markup(dob)
453
+ xml_structure(dob,type)
454
+ dob.obj=x.heading_body5
455
+ elsif dob.ln==6
456
+ type="heading_content_#{dob.lv}"
457
+ xml_structure(dob,type)
458
+ dob.obj=x.heading_body6
459
+ elsif dob.ln==7
460
+ type="heading_content_#{dob.lv}"
461
+ xml_structure(dob,type)
462
+ dob.obj=x.heading_body7
463
+ end
464
+ else
465
+ dob.ocn
466
+ if dob.is==:verse
467
+ type='verse'
468
+ poem_structure(dob) #redo
469
+ elsif dob.is==:group
470
+ type='group'
471
+ group_structure(dob) #redo
472
+ elsif dob.is==:block
473
+ type='block'
474
+ block_structure(dob) #redo
475
+ elsif dob.is==:code
476
+ type='code'
477
+ code_structure(dob) #redo
478
+ elsif dob.is==:table # tables come as single block #work area 2005w13
479
+ type='table'
480
+ table_structure(dob)
481
+ elsif dob.is==:para \
482
+ and dob.indent.to_s =~/[1-9]/ \
483
+ and dob.bullet_
484
+ type="indent_bullet#{dob.indent.to_s}"
485
+ xml_markup(dob)
486
+ elsif dob.is==:para \
487
+ and dob.indent.to_s =~/[1-9]/ \
488
+ and dob.indent == dob.hang
489
+ type="indent#{dob.indent.to_s}"
490
+ xml_markup(dob)
491
+ elsif dob.is==:para \
492
+ and dob.hang.to_s =~/[0-9]/ \
493
+ and dob.indent != dob.hang
494
+ type="hang#{dob.hang.to_s}_indent#{dob.indent.to_s}"
495
+ xml_markup(dob)
496
+ else
497
+ type='norm'
498
+ xml_markup(dob)
499
+ end
500
+ add_to_body(dob,type)
501
+ end
502
+ elsif dob.obj =~/(#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
503
+ elsif dob.obj =~/(MetaData)/
504
+ txt_obj={ txt: '<br /><a name="metadata">MetaData</a>' }
505
+ format_scroll=FormatScroll.new(@md,txt_obj)
506
+ dob.obj=format_scroll.bold_para
507
+ elsif dob.obj =~/(Owner Details)/
508
+ dob.obj=''
509
+ end
510
+ if dob.obj =~/<a name="n\d+">/ \
511
+ and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
512
+ dob.obj=''
513
+ end
514
+ if dob.obj =~/.*<:#>.*$/
515
+ dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/
516
+ txt_obj={ txt: dob.obj }
517
+ format_text=FormatTextObject.new(@md,txt_obj)
518
+ format_text.scr_inden_ocn_e_no_paranum
519
+ end
520
+ end
521
+ else #
522
+ end
523
+ dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
524
+ end
525
+ end
526
+ @content_flag=true
527
+ 7.downto(4) do |x|
528
+ y=x - 1; v=x - 3
529
+ if @level[x]==true #2004w36 bug fix? watch/test previous logic broke on free.for.all @coontent_flag introduced
530
+ if @content_flag==true
531
+ @per.body << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>"
532
+ @content_flag=false
533
+ else
534
+ @per.body << "\n#{Ax[:tab]*y}</contents#{v}>"
535
+ end
536
+ end
537
+ end
538
+ 3.downto(1) do |x|
539
+ y=x - 1
540
+ @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
541
+ end
542
+ end
543
+ def pre
544
+ rdf=SiSU_XML_Tags::RDF.new(@md)
545
+ stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xml_dom').stylesheet
546
+ encoding=if @sys.locale =~/utf-?8/i then '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
547
+ else '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>'
548
+ end
549
+ @per.open =<<WOK
550
+ #{encoding}
551
+ #{stylesheet.css_head_xml}
552
+ #{rdf.comment_xml}
553
+ <document>
554
+ WOK
555
+ @per.head << '<head>'
556
+ @per.body << '<body>'
557
+ end
558
+ def post
559
+ @per.head << @per.sc
560
+ @per.head << '</head>'
561
+ @per.body << '</body>'
562
+ @per.close << '</document>'
563
+ end
564
+ def publish
565
+ content=[]
566
+ content << @per.open << @per.head << @per.body # << @per.metadata
567
+ content << @per.tail << @per.close
568
+ content=content.flatten.compact
569
+ Output.new(content,@md).xml
570
+ @per.head,@per.body,@per.tail=[],[],[] # check whether should be nil
571
+ end
572
+ end
573
+ class Output
574
+ include SiSU_Param
575
+ def initialize(data,md)
576
+ @data,@md=data,md
577
+ @file=SiSU_Env::FileOp.new(@md)
578
+ end
579
+ def xml
580
+ SiSU_Env::FileOp.new(@md).mkdir
581
+ filename_xml=@file.write_file.xml_dom
582
+ @data.each do |str|
583
+ str=str.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'')
584
+ filename_xml.puts str unless str.empty?
585
+ end
586
+ filename_xml.close
587
+ end
588
+ end
589
+ class Tidy
590
+ def initialize(md,file)
591
+ @md,@file=md,file
592
+ @prog=SiSU_Env::InfoProgram.new
593
+ end
594
+ def xml
595
+ if @prog.tidy !=false
596
+ if (@md.opt.act[:verbose_plus][:set]==:on \
597
+ || @md.opt.act[:maintenance][:set]==:on)
598
+ unless @md.opt.act[:quiet][:set]==:on
599
+ SiSU_Screen::Ansi.new(
600
+ @md.opt.act[:color_state][:set],
601
+ 'invert',
602
+ 'Using XML Tidy',
603
+ 'check document structure'
604
+ ).colorize
605
+ tell=SiSU_Screen::Ansi.new(
606
+ @md.opt.act[:color_state][:set],
607
+ 'invert',
608
+ '',
609
+ ''
610
+ )
611
+ tell.grey_open
612
+ end
613
+ tidyfile='/dev/null' #don't want one or screen output, check for alternative flags
614
+ tidy=SiSU_Env::SystemCall.new(@file,tidyfile)
615
+ tidy.well_formed?
616
+ tell.p_off unless @md.opt.act[:quiet][:set]==:on
617
+ end
618
+ end
619
+ end
620
+ end
621
+ end
622
+ end
623
+ __END__
624
+ ** Notes: tidy -xml dom.xml >> index.tidy