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
data/lib/sisu/xhtml.rb ADDED
@@ -0,0 +1,472 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** Description: xhtml output logic, flow
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/xhtml.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_XHTML
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 'xml_shared' # xml_shared.rb
63
+ include SiSU_XML_Munge
64
+ require_relative 'xml_format' # xml_format.rb
65
+ include SiSU_XML_Format
66
+ require_relative 'xml_persist' # xml_persist.rb
67
+ require_relative 'rexml' # rexml.rb
68
+ include SiSU_Rexml
69
+ require_relative 'shared_metadata' # shared_metadata.rb
70
+ @@alt_id_count=0
71
+ @@tablefoot=''
72
+ class Source
73
+ def initialize(opt)
74
+ @opt=opt
75
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
76
+ end
77
+ def read
78
+ begin
79
+ @env,@md,@ao_array=@particulars.env,@particulars.md,@particulars.ao_array
80
+ unless @opt.act[:quiet][:set]==:on
81
+ tool=if (@opt.act[:verbose_plus][:set]==:on \
82
+ || @opt.act[:maintenance][:set]==:on)
83
+ "#{@env.program.web_browser} file://#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}"
84
+ elsif @opt.act[:verbose][:set]==:on
85
+ "#{@env.program.web_browser} file://#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}"
86
+ else "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
87
+ end
88
+ (@opt.act[:verbose][:set]==:on \
89
+ || @opt.act[:verbose_plus][:set]==:on \
90
+ || @opt.act[:maintenance][:set]==:on) \
91
+ ? SiSU_Screen::Ansi.new(
92
+ @opt.act[:color_state][:set],
93
+ 'XHTML',
94
+ tool
95
+ ).green_hi_blue
96
+ : SiSU_Screen::Ansi.new(
97
+ @opt.act[:color_state][:set],
98
+ 'XHTML',
99
+ tool
100
+ ).green_title_hi
101
+ if (@opt.act[:verbose_plus][:set]==:on \
102
+ || @opt.act[:maintenance][:set]==:on)
103
+ SiSU_Screen::Ansi.new(
104
+ @opt.act[:color_state][:set],
105
+ @opt.fns,
106
+ "/#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}"
107
+ ).flow
108
+ end
109
+ end
110
+ SiSU_XHTML::Source::Songsheet.new(@particulars).song
111
+ rescue
112
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
113
+ __LINE__.to_s + ':' + __FILE__
114
+ end
115
+ ensure
116
+ SiSU_Env::CreateSite.new(@opt).cp_css
117
+ Dir.chdir(@opt.f_pth[:pth])
118
+ end
119
+ end
120
+ private
121
+ class Songsheet
122
+ def initialize(particulars)
123
+ @env,@md,@ao_array,@particulars=particulars.env,particulars.md,particulars.ao_array,particulars
124
+ @file=SiSU_Env::FileOp.new(@md)
125
+ end
126
+ def song
127
+ begin
128
+ SiSU_XHTML::Source::Scroll.new(@particulars).songsheet
129
+ if (@md.opt.act[:verbose][:set]==:on \
130
+ || @md.opt.act[:verbose_plus][:set]==:on \
131
+ || @md.opt.act[:maintenance][:set]==:on)
132
+ SiSU_XHTML::Source::Tidy.new(@md,@file.place_file.xhtml.dir).xml # test wellformedness, comment out when not in use
133
+ end
134
+ SiSU_Rexml::Rexml.new(@md,@file.place_file.xhtml.dir).xml if @md.opt.act[:maintenance][:set]==:on # test rexml parsing, comment out when not in use #debug
135
+ rescue
136
+ SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
137
+ __LINE__.to_s + ':' + __FILE__
138
+ end
139
+ ensure
140
+ end
141
+ end
142
+ end
143
+ class Scroll
144
+ require_relative 'xhtml_shared' # xhtml_shared.rb #check already called
145
+ require_relative 'txt_shared' # txt_shared.rb
146
+ include SiSU_TextUtils
147
+ require_relative 'css' # css.rb
148
+ def initialize(particulars)
149
+ @env,@md,@ao_array=particulars.env,particulars.md,particulars.ao_array
150
+ @tab="\t"
151
+ @trans=SiSU_XML_Munge::Trans.new(@md)
152
+ @sys=SiSU_Env::SystemCall.new
153
+ @per=SiSU_XML_Persist::Persist.new
154
+ end
155
+ def songsheet
156
+ begin
157
+ pre
158
+ @data=markup(@ao_array)
159
+ post
160
+ publish
161
+ ensure
162
+ SiSU_XML_Persist::Persist.new.persist_init
163
+ end
164
+ end
165
+ protected
166
+ def embedded_endnotes(dob='')
167
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,
168
+ '<endnote><number>\1</number><note>\2</note></endnote> ').
169
+ gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/,
170
+ '<endnote><symbol>\1</symbol><note>\2</note></endnote> ').
171
+ gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/,
172
+ '<endnote><symbol>\1</symbol><note>\2</note></endnote> ')
173
+ end
174
+ def extract_endnotes(dob='')
175
+ notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
176
+ notes.flatten.each do |e|
177
+ s=e.to_s
178
+ util=SiSU_TextUtils::Wrap.new(s,70)
179
+ wrap=util.line_wrap
180
+ wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK
181
+ #{Ax[:tab]*1}<endnote notenumber="\\1">
182
+ #{Ax[:tab]*2}\\1. \\2
183
+ #{Ax[:tab]*1}</endnote>
184
+ WOK
185
+ ).
186
+ gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK
187
+ #{Ax[:tab]*1}<endnote symbol="\\1">
188
+ #{Ax[:tab]*2}\\1 \\2
189
+ #{Ax[:tab]*1}</endnote>
190
+ WOK
191
+ ).
192
+ gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK
193
+ #{Ax[:tab]*1}<endnote symbol="\\1.length">
194
+ #{Ax[:tab]*2}\\1 \\2
195
+ #{Ax[:tab]*1}</endnote>
196
+ WOK
197
+ )
198
+ #KEEP alternative presentation of endnotes
199
+ # wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK
200
+ ##{Ax[:tab]*1}<p class="endnote" notenumber="\\1">
201
+ ##{Ax[:tab]*2}\\1. \\2
202
+ ##{Ax[:tab]*1}</p>
203
+ #WOK
204
+ #)
205
+ @endnotes << wrap
206
+ end
207
+ end
208
+ def xml_head
209
+ metadata=SiSU_Metadata::Summary.new(@md).xhtml_scroll.metadata
210
+ @per.head << metadata
211
+ end
212
+ def name_tags(dob)
213
+ tags=''
214
+ if defined? dob.tags \
215
+ and dob.tags.length > 0 # insert tags "hypertargets"
216
+ dob.tags.each do |t|
217
+ tags=tags << %{<named id="#{t}" />}
218
+ end
219
+ end
220
+ tags
221
+ end
222
+ def xml_structure(dob,type='norm')
223
+ if dob.is ==:para \
224
+ || dob.is ==:heading
225
+ named=name_tags(dob)
226
+ if dob.is==:heading
227
+ lv=dob.ln
228
+ dob.ln + 2
229
+ else lv=nil
230
+ end
231
+ extract_endnotes(dob)
232
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
233
+ gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>')
234
+ util=SiSU_TextUtils::Wrap.new(dob.obj,70)
235
+ wrapped=util.line_wrap
236
+ @per.body << if defined? dob.ocn
237
+ %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
238
+ else "#{Ax[:tab]*0}<object>"
239
+ end
240
+ @per.body << %{#{Ax[:tab]*1}<text class="#{type}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} unless lv # main text, contents, body KEEP
241
+ @per.body << %{#{Ax[:tab]*1}<text class="h#{lv}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} if lv # main text, contents, body KEEP
242
+ @per.body << @endnotes.compact.join if @endnotes.length > 0 # main text, endnotes KEEP
243
+ @per.body << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
244
+ @per.body << "#{Ax[:tab]*0}</object>"
245
+ @endnotes=[]
246
+ end
247
+ end
248
+ def block_structure(dob)
249
+ named=name_tags(dob)
250
+ dob=@trans.markup_block(dob)
251
+ dob.obj=dob.obj.strip.
252
+ gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
253
+ gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean
254
+ @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
255
+ @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
256
+ @per.body << %{#{Ax[:tab]*1}<text class="block">#{named}#{Ax[:tab]*1}}
257
+ @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
258
+ @per.body << %{#{Ax[:tab]*1}</text>}
259
+ @per.body << "#{Ax[:tab]*0}</object>"
260
+ end
261
+ def group_structure(dob)
262
+ named=name_tags(dob)
263
+ dob=@trans.markup_group(dob)
264
+ dob.obj=dob.obj.strip.
265
+ gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
266
+ gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean
267
+ @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
268
+ @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
269
+ @per.body << %{#{Ax[:tab]*1}<text class="group">#{named}#{Ax[:tab]*1}}
270
+ @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
271
+ @per.body << %{#{Ax[:tab]*1}</text>}
272
+ @per.body << "#{Ax[:tab]*0}</object>"
273
+ end
274
+ def poem_structure(dob)
275
+ named=name_tags(dob)
276
+ dob=@trans.markup_group(dob)
277
+ dob.obj=dob.obj.strip
278
+ @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
279
+ @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
280
+ @per.body << %{#{Ax[:tab]*1}<text class="verse">#{named}#{Ax[:tab]*1}}
281
+ @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
282
+ @per.body << %{#{Ax[:tab]*1}</text>}
283
+ @per.body << "#{Ax[:tab]*0}</object>"
284
+ end
285
+ def code_structure(dob)
286
+ named=name_tags(dob)
287
+ dob=@trans.markup_group(dob)
288
+ dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
289
+ @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
290
+ @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
291
+ @per.body << %{#{Ax[:tab]*1}<text class="code">#{named}#{Ax[:tab]*1}}
292
+ @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
293
+ @per.body << %{#{Ax[:tab]*1}</text>}
294
+ @per.body << "#{Ax[:tab]*0}</object>"
295
+ end
296
+ def table_structure(dob)
297
+ named=name_tags(dob)
298
+ table=SiSU_XHTML_Shared::TableXHTML.new(dob)
299
+ @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
300
+ @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
301
+ @per.body << %{#{Ax[:tab]*2}#{named}#{table.table.obj}}
302
+ @per.body << "#{Ax[:tab]*0}</object>"
303
+ end
304
+ def markup(data)
305
+ @endnotes=[]
306
+ @rcdc=false
307
+ @level,@cont,@copen,@xml_contents_close=[],[],[],[]
308
+ xml_head
309
+ (0..7).each { |x| @cont[x]=@level[x]=false }
310
+ (4..7).each { |x| @xml_contents_close[x]='' }
311
+ data.each do |dob|
312
+ dob=@trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8
313
+ dob=@trans.markup(dob)
314
+ if @rcdc==false \
315
+ and (dob.obj =~/~meta/ \
316
+ and dob.obj =~/Document Information/)
317
+ @rcdc=true
318
+ end
319
+ if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
320
+ if defined? dob.ocn #look to move to format section
321
+ ocn=(dob.ocn.to_s =~/\d+/) ? dob.ocn : nil
322
+ @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,ocn)
323
+ end
324
+ if not @rcdc
325
+ x=SiSU_XML_Format::FormatSeg.new(@md,dob)
326
+ if dob.is==:heading
327
+ xml_structure(dob)
328
+ dob.obj=case dob.ln
329
+ when 0 then x.heading_body0
330
+ when 1 then x.heading_body1
331
+ when 2 then x.heading_body2
332
+ when 3 then x.heading_body3
333
+ when 4 then x.heading_body4
334
+ when 5 then x.heading_body5
335
+ when 6 then x.heading_body6
336
+ when 7 then x.heading_body7
337
+ end
338
+ else
339
+ if dob.is ==:verse
340
+ poem_structure(dob)
341
+ elsif dob.is ==:group
342
+ group_structure(dob)
343
+ elsif dob.is ==:block
344
+ block_structure(dob)
345
+ elsif dob.is ==:code
346
+ code_structure(dob)
347
+ elsif dob.is ==:table
348
+ table_structure(dob)
349
+ elsif dob.is ==:para \
350
+ and dob.indent.to_s =~/[1-9]/ \
351
+ and dob.bullet_==true
352
+ xml_structure(dob,"indent_bullet#{dob.indent}")
353
+ elsif dob.is ==:para \
354
+ and dob.indent.to_s =~/[1-9]/ \
355
+ and dob.indent == dob.hang
356
+ xml_structure(dob,"indent#{dob.indent}")
357
+ elsif dob.is==:para \
358
+ and dob.hang.to_s =~/[0-9]/ \
359
+ and dob.indent != dob.hang
360
+ xml_structure(dob,"hang#{dob.hang.to_s}_indent#{dob.indent.to_s}")
361
+ else xml_structure(dob)
362
+ end
363
+ end
364
+ if dob.obj =~/.*<:#>.*$/ #investigate removal
365
+ dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/
366
+ txt_obj={ txt: dob }
367
+ format_text=FormatTextObject.new(@md,txt_obj)
368
+ format_text.scr_inden_ocn_e_no_paranum
369
+ end
370
+ end
371
+ else #
372
+ end
373
+ dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
374
+ end
375
+ end
376
+ 6.downto(4) do |x|
377
+ y=x - 1; v=x - 3
378
+ @per.body << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" if @level[x]==true
379
+ end
380
+ 3.downto(1) do |x|
381
+ y=x - 1
382
+ @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
383
+ end
384
+ end
385
+ def pre
386
+ rdf=SiSU_XML_Tags::RDF.new(@md)
387
+ @per.head,@per.body=[],[]
388
+ stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xhtml').stylesheet
389
+ encoding=(@sys.locale =~/utf-?8/i) \
390
+ ? '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
391
+ : '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>'
392
+ @per.open =<<WOK
393
+ #{encoding}
394
+ #{stylesheet.css_head_xml}
395
+ #{rdf.comment_xml}
396
+ <document>
397
+ WOK
398
+ @per.head << %{<head>\n\t<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />}
399
+ @per.body << '<body>'
400
+ end
401
+ def post
402
+ @per.head << '</head>'
403
+ @per.body << '</body>'
404
+ @per.close = '</document>'
405
+ end
406
+ def publish
407
+ content=[]
408
+ content << @per.open << @per.head << @per.body << @per.metadata
409
+ content << @per.tail << @per.close
410
+ content=content.flatten.compact
411
+ Output.new(content,@md).xhtml
412
+ @@xml={}
413
+ end
414
+ end
415
+ class Output
416
+ def initialize(data,md)
417
+ @data,@md=data,md
418
+ @file=SiSU_Env::FileOp.new(@md)
419
+ end
420
+ def xhtml
421
+ SiSU_Env::FileOp.new(@md).mkdir
422
+ filename_xml=@file.write_file.xhtml
423
+ @data.each do |str|
424
+ str=str.gsub(/\A\s+\Z/m,'') #str.gsub(/^\s+$/,'')
425
+ filename_xml.puts str unless str.empty?
426
+ end
427
+ filename_xml.close
428
+ end
429
+ end
430
+ class Tidy
431
+ def initialize(md,file)
432
+ @md,@file=md,file
433
+ @prog=SiSU_Env::InfoProgram.new
434
+ end
435
+ def xml
436
+ if @prog.tidy !=false
437
+ if (@md.opt.act[:verbose_plus][:set]==:on \
438
+ || @md.opt.act[:maintenance][:set]==:on)
439
+ unless @md.opt.act[:quiet][:set]==:on
440
+ SiSU_Screen::Ansi.new(
441
+ @md.opt.act[:color_state][:set],
442
+ 'invert',
443
+ 'Using XML Tidy',
444
+ 'check document structure'
445
+ ).colorize
446
+ tell=SiSU_Screen::Ansi.new(
447
+ @md.opt.act[:color_state][:set],
448
+ 'invert',
449
+ '',
450
+ ''
451
+ )
452
+ tell.grey_open
453
+ end
454
+ tidyfile='/dev/null' #don't want one or screen output, check for alternative flags
455
+ tidy=SiSU_Env::SystemCall.new(@file,tidyfile)
456
+ tidy.well_formed?
457
+ tell.p_off unless @md.opt.act[:quiet][:set]==:on
458
+ end
459
+ end
460
+ end
461
+ end
462
+ end
463
+ end
464
+ __END__
465
+ ** Notes:
466
+ tidy -xml scroll.xhtml >> index.tidy
467
+ <?xml version="1.0"?>
468
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
469
+ <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
470
+ <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
471
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
472
+ <?xml version="1.0" encoding="UTF-16" standalone="no"?>