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,471 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** simple xml representation (sax style)
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/sst_to_s_xml_sax.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_SimpleXML_ModelSax
58
+ require_relative 'se_hub_particulars' # se_hub_particulars.rb
59
+ include SiSU_Particulars
60
+ require_relative 'dp' # dp.rb
61
+ include SiSU_Param
62
+ require_relative 'se' # se.rb
63
+ include SiSU_Env
64
+ require_relative 'ao_doc_str' # ao_doc_str.rb
65
+ require_relative 'xml_shared' # xml_shared.rb
66
+ include SiSU_XML_Munge
67
+ require_relative 'shared_sem' # shared_sem.rb
68
+ require_relative 'xml_format' # xml_format.rb
69
+ include SiSU_XML_Format
70
+ require_relative 'rexml' # rexml.rb
71
+ include SiSU_Rexml
72
+ @@alt_id_count=0
73
+ @@tablefoot=''
74
+ class Convert
75
+ @@fns=nil
76
+ def initialize(opt)
77
+ @opt=opt
78
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_env_md(opt)
79
+ end
80
+ def read
81
+ begin
82
+ @md=@particulars.md #bug, relies on info persistence, assumes -m has previously been run
83
+ @env=@particulars.env
84
+ SiSU_Screen::Ansi.new(
85
+ @opt.act[:color_state][:set],
86
+ 'invert',
87
+ 'XML SAX',
88
+ "#{@md.fns} -> #{@md.fn[:sxs]}"
89
+ ).colorize unless @opt.act[:quiet][:set]==:on
90
+ if (@opt.act[:verbose_plus][:set]==:on \
91
+ || @opt.act[:maintenance][:set]==:on)
92
+ SiSU_Screen::Ansi.new(
93
+ @opt.act[:color_state][:set],
94
+ @opt.fns,
95
+ "#{Dir.pwd}/#{@md.fn[:sxs]}"
96
+ ).flow
97
+ end
98
+ unless @@fns==@opt.fns
99
+ @@fns=@opt.fns
100
+ @@fns_array=[]
101
+ end
102
+ @fns_array=if @@fns_array.empty?; read_fnm
103
+ else @@fns_array.dup #check
104
+ end
105
+ SiSU_SimpleXML_ModelSax::Convert::Songsheet.new(@fns_array,@particulars).songsheet
106
+ rescue
107
+ SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
108
+ __LINE__.to_s + ':' + __FILE__
109
+ end
110
+ ensure #file closed in songsheet
111
+ end
112
+ end
113
+ def read_fnm
114
+ ao=[]
115
+ if FileTest.file?("#{Dir.pwd}/#{@opt.fns}")
116
+ ao=IO.readlines("#{Dir.pwd}/#{@opt.fns}","\n\n")
117
+ else STDERR.puts 'Error'
118
+ end
119
+ end
120
+ private
121
+ class Songsheet
122
+ def initialize(data,particulars)
123
+ @data,@particulars,@env,@md=data,particulars,particulars.env,particulars.md
124
+ end
125
+ def songsheet
126
+ begin
127
+ SiSU_SimpleXML_ModelSax::Convert::Scroll.new(@data,@particulars).songsheet
128
+ if (@md.opt.act[:verbose][:set]==:on \
129
+ || @md.opt.act[:verbose_plus][:set]==:on \
130
+ || @md.opt.act[:maintenance][:set]==:on)
131
+ SiSU_SimpleXML_ModelSax::Convert::Tidy.new(@md,@env).xml # test wellformedness, comment out when not in use
132
+ end
133
+ SiSU_Rexml::Rexml.new(@md,@md.fn[:sxs]).xml if @md.opt.act[:maintenance][:set]==:on # test rexml parsing, comment out when not in use #debug
134
+ rescue
135
+ SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
136
+ __LINE__.to_s + ':' + __FILE__
137
+ end
138
+ ensure
139
+ end
140
+ end
141
+ end
142
+ class Scroll
143
+ require_relative 'txt_shared' # txt_shared.rb
144
+ require_relative 'css' # css.rb
145
+ include SiSU_TextUtils
146
+ @@xml={ body: [], open: [], close: [], head: [] }
147
+ def initialize(data='',particulars='')
148
+ @data,@env,@md=data,particulars.env,particulars.md
149
+ @regx=/^(?:#{Mx[:mk_o]}:p[bn]#{Mx[:mk_c]}\s*)?(?:#{Mx[:lv_o]}[1-9]:(\S*)#{Mx[:lv_c]})?(.+)/
150
+ @tab="\t"
151
+ if @md
152
+ @trans=SiSU_XML_Munge::Trans.new(@md)
153
+ end
154
+ @sys=SiSU_Env::SystemCall.new
155
+ end
156
+ def songsheet
157
+ pre
158
+ markup
159
+ post
160
+ publish
161
+ end
162
+ protected
163
+ def embedded_endnotes(para='')
164
+ para.gsub!(/~\{(.+?)\}~/,'<endnote symbol="norm">\1</endnote> ')
165
+ para.gsub!(/~\[([*+])\s+(.+?)\]~/,'<endnote symbol="\1">\2</endnote> ')
166
+ end
167
+ def xml_head(meta)
168
+ txt=meta.text
169
+ txt.gsub!(/\/{(.+?)}\//,'<i>\1</i>')
170
+ txt.gsub!(/[*!]{(.+?)}[*!]/,'<b>\1</b>')
171
+ txt.gsub!(/_{(.+?)}_/,'<u>\1</u>')
172
+ txt.gsub!(/-{(.+?)}-/,'<del>\1</del>')
173
+ txt.gsub!(/<br(?: \/)?>/,'<br />')
174
+ txt.gsub!(/ & /,' and ')
175
+ @@xml[:head] <<<<WOK
176
+ #{@tab}<header class="#{meta.attrib}">
177
+ #{@tab*2}<#{meta.el}>
178
+ #{@tab*3}#{txt}
179
+ #{@tab*2}</#{meta.el}>
180
+ #{@tab}</header>
181
+ WOK
182
+ end
183
+ def xml_sc(md='')
184
+ sc=if @md.sc_info
185
+ <<WOK
186
+ <source_control>
187
+ <sc class="sourcefile">
188
+ #{@md.sc_filename}
189
+ </sc>
190
+ <sc class="number">
191
+ #{@md.sc_number}
192
+ </sc>
193
+ <sc class="date">
194
+ #{@md.sc_date}
195
+ </sc>
196
+ </source_control>
197
+ WOK
198
+ else ''
199
+ end
200
+ @@xml[:sc]=sc
201
+ end
202
+ def xml_structure(para='',lv='',hname='') #extracted endnotes
203
+ lv=lv.to_i
204
+ lv=nil if lv==0
205
+ embedded_endnotes(para)
206
+ if para[@regx]
207
+ paragraph="#{para[@regx,2]}"
208
+ util=SiSU_TextUtils::Wrap.new(paragraph,70)
209
+ wrapped=util.line_wrap
210
+ end
211
+ @@xml[:body] << "#{@tab*0}<object>" if para[@regx]
212
+ @@xml[:body] << "#{@tab*1}" << "\n" if para[@regx]
213
+ @@xml[:body] << if lv; %{#{@tab*1}<text class="h#{lv}">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n} << "\n"
214
+ elsif wrapped =~/\A%%?\s+/; %{<!--\n#{@tab*1}<text class="comment">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n-->\n} # comments
215
+ else %{#{@tab*1}<text class="norm">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n} # main text, contents, body KEEP
216
+ end
217
+ @@xml[:body] << "#{@endnotes}" if @endnotes # main text, endnotes KEEP
218
+ @@xml[:body] << "#{@tab*0}</object>" << "\n" if para[@regx]
219
+ @endnotes=[]
220
+ end
221
+ def block_structure(para='')
222
+ para.gsub!(/<:block(?:-end)?>/,'')
223
+ para.strip!
224
+ @@xml[:body] << %{#{@tab*0}<object>}
225
+ @@xml[:body] << %{#{@tab*1}<text class="block">#{@tab*1}\n}
226
+ @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
227
+ @@xml[:body] << %{#{@tab*1}</text>\n}
228
+ @@xml[:body] << "#{@tab*0}</object>"
229
+ end
230
+ def group_structure(para='')
231
+ para.gsub!(/<:group(?:-end)?>/,'')
232
+ para.strip!
233
+ @@xml[:body] << %{#{@tab*0}<object>}
234
+ @@xml[:body] << %{#{@tab*1}<text class="group">#{@tab*1}\n}
235
+ @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
236
+ @@xml[:body] << %{#{@tab*1}</text>\n}
237
+ @@xml[:body] << "#{@tab*0}</object>"
238
+ end
239
+ def poem_structure(para='')
240
+ para.gsub!(/<:verse(?:-end)?>/,'')
241
+ para.strip!
242
+ @@xml[:body] << %{#{@tab*0}<object>}
243
+ @@xml[:body] << %{#{@tab*1}<text class="verse">#{@tab*1}\n}
244
+ @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
245
+ @@xml[:body] << %{#{@tab*1}</text>\n}
246
+ @@xml[:body] << "#{@tab*0}</object>" << "\n"
247
+ end
248
+ def code_structure(para='')
249
+ para.gsub!(/<:code(?:-end)?>/,'')
250
+ para.strip!
251
+ @@xml[:body] << %{#{@tab*0}<object>}
252
+ @@xml[:body] << %{#{@tab*1}<text class="code">#{@tab*1}\n}
253
+ @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
254
+ @@xml[:body] << %{#{@tab*1}</text>\n}
255
+ @@xml[:body] << "#{@tab*0}</object>" << "\n"
256
+ end
257
+ def table_structure(table='') #tables
258
+ @@xml[:body] << %{#{@tab*0}<object>}
259
+ @@xml[:body] << %{#{@tab*1}#{table}\n#{@tab*1}\n} # unless lv # main text, contents, body KEEP
260
+ @@xml[:body] << "#{@tab*0}</object>" << "\n" #if para[@regx]
261
+ @endnotes=[]
262
+ end
263
+ def tidywords(wordlist)
264
+ wordlist.each do |x|
265
+ x.gsub!(/&/,'&amp;') unless x =~/&\S+;/
266
+ end
267
+ end
268
+ def xml_clean(para)
269
+ para.gsub!(/#{Mx[:gl_o]}[1-9]:\S*?#{Mx[:gl_c]}/,'') #Danger, watch
270
+ para
271
+ end
272
+ def markup
273
+ data=[]
274
+ xml_sc(@md)
275
+ @endnotes,@level,@cont,@copen,@xml_contents_close=[],[],[],[],[]
276
+ @rcdc=false
277
+ (0..6).each { |x| @cont[x]=@level[x]=false }
278
+ (4..6).each { |x| @xml_contents_close[x]='' }
279
+ @data.each do |para|
280
+ data << SiSU_AO_DocumentStructureExtract::Structure.new(@md,para).structure #takes on Mx marks
281
+ end
282
+ data.each do |para|
283
+ if para !~/^\s*(?:%+ |<:code>)/
284
+ if @md.sem_tag and para =~/[:;]\{|\}[:;]/
285
+ para=@trans.xml_semantic_tags(para)
286
+ end
287
+ if para =~/[:;]\{|\}[:;]/
288
+ para=SiSU_Sem::Tags.new(para,@md).rm.all
289
+ end
290
+ end
291
+ para=@trans.markup_light(para)
292
+ @trans.char_enc.utf8(para) if @sys.locale =~/utf-?8/i #% utf8
293
+ para.gsub!(/^@(\S+?):/,"#{Mx[:lv_o]}@\\1#{Mx[:lv_c]}")
294
+ if para =~/\A#{Mx[:lv_o]}@(\S+?)#{Mx[:lv_c]}\s*(.+?)\Z/m # for headers
295
+ d_meta=SiSU_TextUtils::HeaderScan.new(@md,para).meta
296
+ if d_meta; xml_head(d_meta)
297
+ end
298
+ end
299
+ para='' if para=~/#{Mx[:lv_o]}@\S+?#{Mx[:lv_c]}/
300
+ if @rcdc==false \
301
+ and (para =~/~metadata/ or para =~/^1~meta\s+Document Information/)
302
+ @rcdc=true
303
+ end
304
+ if para !~/(^@\S+?:|^\s*$|<ENDNOTES>|<EOF>)/
305
+ @sto=SiSU_text_parts::SplitTextObject.new(@md,para).lev_segname_para
306
+ unless @rcdc
307
+ SiSU_XML_Format::FormatScroll.new(@md,@sto.text) if @sto.format =~/i[1-9]|ordinary/
308
+ case @sto.format
309
+ when /^(1):(\S*)/
310
+ xml_clean(para)
311
+ xml_structure(para,$1,$2)
312
+ para=@sto.lev_para_ocn.heading_body1
313
+ when /^(2):(\S*)/
314
+ xml_clean(para)
315
+ xml_structure(para,$1,$2)
316
+ para=@sto.lev_para_ocn.heading_body2
317
+ when /^(3):(\S*)/
318
+ xml_clean(para)
319
+ xml_structure(para,$1,$2)
320
+ para=@sto.lev_para_ocn.heading_body3
321
+ when /^(4):(\S*)/ # work on see SplitTextObject
322
+ xml_clean(para)
323
+ xml_structure(para,$1,$2)
324
+ para=@sto.lev_para_ocn.heading_body4
325
+ when /^(5):(\S*)/
326
+ xml_clean(para)
327
+ xml_structure(para,$1,$2)
328
+ para=@sto.lev_para_ocn.heading_body5
329
+ when /^(6):(\S*)/
330
+ xml_clean(para)
331
+ xml_structure(para,$1,$2)
332
+ para=@sto.lev_para_ocn.heading_body6
333
+ else
334
+ if para =~ /<:verse>/
335
+ para=poem_structure(para)
336
+ elsif para =~ /<:group>/
337
+ para=group_structure(para)
338
+ elsif para =~ /<:code>/
339
+ para.gsub!(/</,'&lt;')
340
+ para.gsub!(/>/,'&gt;')
341
+ para=code_structure(para)
342
+ elsif para =~/<!Th?.+/ # tables come as single block #work area 2005w13
343
+ table=SiSU_Tables::TableXML.new(para)
344
+ para=table.table_split
345
+ para=table_structure(para)
346
+ else xml_structure(para,nil,nil)
347
+ end
348
+ end
349
+ if para =~/<a name="n\d+">/ \
350
+ and para =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
351
+ para=''
352
+ end
353
+ if para =~/.*<:#>.*$/
354
+ para=case para
355
+ when /<:i1>/
356
+ format_text=FormatTextObject.new(para,'')
357
+ format_text.scr_inden_ocn_e_no_paranum
358
+ when /<:i2>/
359
+ format_text=FormatTextObject.new(para,'')
360
+ format_text.scr_inden_ocn_e_no_paranum
361
+ end
362
+ end
363
+ if para =~/<:center>/
364
+ one,two=/(.*)<:center>(.*)/.match(para)[1,2]
365
+ format_text=FormatTextObject.new(one,two)
366
+ para=format_text.center
367
+ end
368
+ end
369
+ para.gsub!(/<:\S+?>/,'')
370
+ para.gsub!(/<!.+!>/,'') ## Clean Prepared Text #bugwatch reinstate
371
+ para
372
+ end
373
+ para
374
+ end
375
+ 6.downto(4) do |x|
376
+ y=x - 1; v=x - 3
377
+ @@xml[:body] << "#{@tab*5}</content>\n#{@tab*y}</contents#{v}>\n" if @level[x]==true
378
+ end
379
+ 3.downto(1) do |x|
380
+ y=x - 1
381
+ @@xml[:body] << "#{@tab*y}</heading#{x}>\n" if @level[x]==true
382
+ end
383
+ end
384
+ def pre
385
+ rdf=SiSU_XML_Tags::RDF.new(@md)
386
+ dir=SiSU_Env::InfoEnv.new
387
+ @@xml[:head],@@xml[:body]=[],[]
388
+ css=SiSU_Env::CSS_Select.new(@md).xml_sax
389
+ encoding=if @sys.locale =~/utf-?8/i then '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
390
+ else '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>'
391
+ end
392
+ @@xml[:open] =<<WOK
393
+ #{encoding}
394
+ <?xml-stylesheet type="text/css" href="../#{dir.path.style}/#{css}"?>
395
+ #{rdf.comment_xml_sax}
396
+ <document>
397
+ WOK
398
+ @@xml[:head] << "<head>\n"
399
+ @@xml[:body] << "<body>\n"
400
+ end
401
+ def post
402
+ @@xml[:head] << @@xml[:sc]
403
+ @@xml[:head] << "</head>\n"
404
+ @@xml[:body] << "</body>\n"
405
+ @@xml[:close] = "</document>\n"
406
+ end
407
+ def publish
408
+ content=[]
409
+ content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
410
+ content << @@xml[:owner_details] if @md.stmp =~/\w\w/
411
+ content << @@xml[:tail] << @@xml[:close]
412
+ Output.new(content.join,@md).xml
413
+ @@xml={}
414
+ end
415
+ end
416
+ class Output
417
+ def initialize(data,md)
418
+ @data,@md=data,md
419
+ end
420
+ def xml
421
+ @sisu=[]
422
+ @data.each do |para|
423
+ para.gsub!(/<:\S+?>/,'')
424
+ para.gsub!(/<!.+?!>/,'')
425
+ para="#{para}\n" unless para.empty?
426
+ @sisu << para
427
+ end
428
+ new_file_data=@sisu.join
429
+ @sisu=new_file_data.scan(/.+/)
430
+ SiSU_Env::FileOp.new(@md).mkdir
431
+ filename_sxm=SiSU_Env::FileOp.new(@md,@md.fn[:sxs]).mkfile_pwd
432
+ if filename_sxm.is_a?(File)
433
+ @sisu.each {|para| filename_sxm.puts para}
434
+ filename_sxm.close
435
+ else puts 'file not created, is directory writable?'
436
+ end
437
+ end
438
+ end
439
+ class Tidy
440
+ def initialize(md,dir)
441
+ @md,@env=md,dir
442
+ @prog=SiSU_Env::InfoProgram.new
443
+ end
444
+ def xml
445
+ if @prog.tidy !=false #note values can be other than true
446
+ if (@md.opt.act[:verbose_plus][:set]==:on \
447
+ || @md.opt.act[:maintenance][:set]==:on)
448
+ SiSU_Screen::Ansi.new(
449
+ @md.opt.act[:color_state][:set],
450
+ 'invert',
451
+ 'Using XML Tidy',
452
+ 'check document structure'
453
+ ).colorize unless @md.opt.act[:quiet][:set]==:on
454
+ SiSU_Screen::Ansi.new(
455
+ @md.opt.act[:color_state][:set],
456
+ '',
457
+ '',
458
+ 'check document structure'
459
+ )
460
+ tell.grey_open unless @md.opt.act[:quiet][:set]==:on
461
+ tidyfile='/dev/null' #don't want one or screen output, check for alternative flags
462
+ tidy =SiSU_Env::SystemCall.new("#{Dir.pwd}/#{@md.fn[:sxs]}",tidyfile)
463
+ tidy.well_formed?
464
+ tell.p_off unless @md.opt.act[:quiet][:set]==:on
465
+ end
466
+ end
467
+ end
468
+ end
469
+ end
470
+ end
471
+ __END__