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,440 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** preprocessing, convert bi-footnotemarker-footnote to inline
8
+ footnotes, invoked using: sisu --to-footnotes filename.sst
9
+
10
+ ** Author: Ralph Amissah
11
+ <ralph@amissah.com>
12
+ <ralph.amissah@gmail.com>
13
+
14
+ ** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
15
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
16
+ All Rights Reserved.
17
+
18
+ ** License: GPL 3 or later:
19
+
20
+ SiSU, a framework for document structuring, publishing and search
21
+
22
+ Copyright (C) Ralph Amissah
23
+
24
+ This program is free software: you can redistribute it and/or modify it
25
+ under the terms of the GNU General Public License as published by the Free
26
+ Software Foundation, either version 3 of the License, or (at your option)
27
+ any later version.
28
+
29
+ This program is distributed in the hope that it will be useful, but WITHOUT
30
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
31
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
32
+ more details.
33
+
34
+ You should have received a copy of the GNU General Public License along with
35
+ this program. If not, see <http://www.gnu.org/licenses/>.
36
+
37
+ If you have Internet connection, the latest version of the GPL should be
38
+ available at these locations:
39
+ <http://www.fsf.org/licensing/licenses/gpl.html>
40
+ <http://www.gnu.org/licenses/gpl.html>
41
+
42
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
43
+
44
+ ** SiSU uses:
45
+ * Standard SiSU markup syntax,
46
+ * Standard SiSU meta-markup syntax, and the
47
+ * Standard SiSU object citation numbering and system
48
+
49
+ ** Hompages:
50
+ <http://www.jus.uio.no/sisu>
51
+ <http://www.sisudoc.org>
52
+
53
+ ** Git
54
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
55
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/set_do_inline_footnotes.rb;hb=HEAD>
56
+
57
+ =end
58
+ module SiSU_ConvertFootnotes
59
+ require_relative 'se' # se.rb
60
+ include SiSU_Env
61
+ require_relative 'dp' # dp.rb
62
+ include SiSU_Param
63
+ require_relative 'ao_syntax' # ao_syntax.rb
64
+ include SiSU_AO_Syntax
65
+ require_relative 'i18n' # i18n.rb
66
+ class Instantiate < SiSU_Param::Parameters::Instructions
67
+ @@flag={} #Beware!!
68
+ def initialize
69
+ @@flag['table_to']=false
70
+ @@counter=@@column=@@columns=@@flag_vocab=0
71
+ @@endnote={}
72
+ @@endnote_array=@@word_mode=[]
73
+ @@endnote_call_counter=1
74
+ @@line_mode=''
75
+ end
76
+ end
77
+ class Source <Instantiate
78
+ @@ao_array=[]
79
+ @@fns=nil
80
+ def initialize(opt)
81
+ @opt=opt
82
+ @@fns||@opt.fns
83
+ @my_make=SiSU_Env::CreateFile.new(@opt.fns)
84
+ @fnm=SiSU_Env::InfoFile.new(@opt.fns).marshal.ao_content
85
+ end
86
+ def read #creates ao
87
+ begin
88
+ @@ao_array=[]
89
+ @@fns=@opt.fns
90
+ create_ao
91
+ rescue
92
+ SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
93
+ __LINE__.to_s + ':' + __FILE__
94
+ end
95
+ ensure
96
+ Instantiate.new
97
+ end
98
+ end
99
+ def get #reads ao, unless does not exist then creates first
100
+ begin
101
+ ao=[]
102
+ unless @@fns==@opt.fns
103
+ @@fns=@opt.fns
104
+ @@ao_array=[]
105
+ end
106
+ ao=(@@ao_array.empty?) \
107
+ ? read_fnm
108
+ : @@ao_array.dup #check
109
+ rescue
110
+ SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
111
+ __LINE__.to_s + ':' + __FILE__
112
+ end
113
+ ensure
114
+ Instantiate.new
115
+ end
116
+ end
117
+ protected
118
+ def create_ao
119
+ ao_array=[]
120
+ SiSU_Screen::Ansi.new(
121
+ @opt.act[:color_state][:set],
122
+ 'convert footnotes'
123
+ ).green_title_hi unless @opt.act[:quiet][:set]==:on
124
+ file_array=IO.readlines(@opt.fns,'')
125
+ file_array.each do |l|
126
+ if l =~/\r\n/ then l.gsub!(/\r\n/,"\n")
127
+ end
128
+ end
129
+ meta=file_array.dup
130
+ meta=meta.join.split("\n\n") #check whether can be eliminated, some of these are large objects to have twice
131
+ @md=SiSU_Param::Parameters::Instructions.new(meta,@opt).extract
132
+ if @md.en[:mismatch]==0 \
133
+ or @md.opt.selections.str =~/=footnotes-force/
134
+ meta=nil
135
+ ao=SiSU_ConvertFootnotes::Make.new(@md,file_array).song
136
+ SiSU_Screen::Ansi.new(
137
+ @opt.act[:color_state][:set],
138
+ @opt.fns,
139
+ "#{@md.fns}.fn"
140
+ ).output if @md.opt.act[:verbose][:set]==:on
141
+ SiSU_Screen::Ansi.new(
142
+ @opt.act[:color_state][:set],
143
+ "#{@md.fns}.fn -> #{@md.fns}.fn"
144
+ ).txt_red unless @md.opt.act[:quiet][:set]==:on
145
+ ao.each {|s| ao_array << "#{s.strip}\n\n" unless s.strip.empty?}
146
+ ao_array
147
+ else
148
+ SiSU_Screen::Ansi.new(
149
+ @md.opt.act[:color_state][:set],
150
+ '*WARN* no footnote conversion done, problem with source file',
151
+ 'to override use --convert=footnote-force (this is not advised)'
152
+ ).warn unless @md.opt.act[:quiet][:set]==:on
153
+ ''
154
+ end
155
+ end
156
+ def read_fnm
157
+ ao=[]
158
+ ao=(FileTest.file?(@fnm)) \
159
+ ? (File.open(@fnm){ |f| ao=Marshal.load(f)})
160
+ : (SiSU_ConvertFootnotes::Source.new(@opt).create_ao) #watch
161
+ end
162
+ end
163
+ class Output
164
+ def initialize(md,data)
165
+ @md,@data=md,data
166
+ @my_make=SiSU_Env::CreateFile.new(@md.fns)
167
+ SiSU_Env::InfoEnv.new(@md.fns)
168
+ @hard="#{Dir.pwd}/#{@md.fns}.fn"
169
+ end
170
+ def hard_output
171
+ filename_note=@my_make.file_note
172
+ @data.each {|s| filename_note.puts s.strip + "\n\n" unless s.strip.empty?}
173
+ end
174
+ end
175
+ class Make
176
+ @@endnote={}
177
+ @@endnote_array=@@word_mode=[]
178
+ @@endnote_call_counter=1
179
+ @@comment='%'
180
+ @@flag={ ['table_to']=>false }
181
+ def initialize(md,data)
182
+ @md,@data=md,data
183
+ @@word_mode=[]
184
+ @env=SiSU_Env::InfoEnv.new(@md.fns)
185
+ l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
186
+ @language=l[:n]
187
+ @translate=SiSU_Translate::Source.new(@md,@language)
188
+ end
189
+ def reset
190
+ @@counter=@@column=@@columns=@@flag_vocab=0
191
+ @@endnote={}
192
+ @@endnote_array=@@word_mode=[]
193
+ @@endnote_call_counter=1
194
+ @@line_mode=''
195
+ end
196
+ def song
197
+ reset
198
+ data=@data
199
+ @metafile="#{@env.processing_path.ao}/#{@md.fns}.meta"
200
+ SiSU_Env::CreateFile.new(@md.fns)
201
+ data=data.join.split("\n\n")
202
+ data_new=[]
203
+ data.each do |x|
204
+ data_new << (x =~ /\n\n/m) \
205
+ ? (x.split(/\n\n+/))
206
+ : x
207
+ end
208
+ data=data_new.flatten
209
+ data=SiSU_ConvertFootnotes::Make.new(@md,data).character_check
210
+ data=SiSU_ConvertFootnotes::Make.new(@md,data).endnotes
211
+ SiSU_ConvertFootnotes::Output.new(@md,data).hard_output
212
+ reset
213
+ data
214
+ end
215
+ protected
216
+ def vocabulary
217
+ data=@data
218
+ tuned_file,vocab_insert=[],[]
219
+ data.each do |para|
220
+ if para =~/^1~/ \
221
+ and @@flag_vocab==0
222
+ vocab_insert << '@vocabulary: lex' << "\n\n" << para
223
+ tuned_file << vocab_insert unless para.nil?
224
+ @@flag_vocab=1
225
+ else tuned_file << para unless para.nil?
226
+ end
227
+ end
228
+ tuned_file
229
+ end
230
+ def character_check
231
+ reset
232
+ data=@data
233
+ @tuned_file=[]
234
+ endnote_no=1
235
+ data.each do |para|
236
+ para.strip!
237
+ para.gsub!(/^[{~}]\s*$/,'')
238
+ para.gsub!(/^#{@@comment}.*/,'') #remove comment and divider #%
239
+ para.gsub!(/<~#>|~#\s*/,'~#')
240
+ para.gsub!(/-#\s*/,'-#')
241
+ para.gsub!(/(~\{ )\s+/,'\1')
242
+ para.gsub!(/ \/\//,'<br />') #added 2004w29
243
+ para.gsub!(/<br>/,'<br />') #needed by xml, xhtml etc.
244
+ para.gsub!(/`/,"'")
245
+ para.gsub!(/\342\200\231/,"'") #if para =~/’/ #Avoid #&lsquo; &rsquo; #&ldquo; &rdquo;
246
+ para.gsub!(/\t/,' ')
247
+ para.gsub!(/�/,' ') #watch, replace with char code
248
+ para.gsub!(/[“”]/,'""')
249
+ para.gsub!(/[­–—]/,'-') #— – chk
250
+ para.gsub!(/·/,'*')
251
+ para.gsub!(/\\copy(?:right)?\b/,'&#169;')
252
+ para.gsub!(/\\trademark\b|\\tm\b/,'&#174;')
253
+ para.gsub!(/\44/,'&#36;') #$ watch
254
+ para=para + "\n"
255
+ case para
256
+ when /\^~/ # endnotes
257
+ #% Note must do this first (earlier loop) and then enter gathered data into ~^\d+
258
+ sub_para=para.dup
259
+ @@endnote_array << sub_para.gsub!(/\n/,'').gsub!(/\^~\s+(.+)\s*/,'~{ \1 }~').strip
260
+ endnote_no+=1
261
+ para=nil if para =~/\^~ .+/ #removes 'binary' endnote now in endnote array for later insertion
262
+ end
263
+ @tuned_file << para unless para.nil?
264
+ end
265
+ @tuned_file
266
+ end
267
+ def name_endnote_seg
268
+ data=@data
269
+ @tuned_file=[]
270
+ data.each do |para|
271
+ para.gsub!(/<:3>\s*<:ee>/,
272
+ "#{@@endnote['special_align']} <p /><br />\r " +
273
+ "#{@@endnote['seg_name_3']} <p /> " +
274
+ "#{@@endnote['special_align_close']}")
275
+ para.gsub!(/<:2>\s*<:ee>/,
276
+ "#{@@endnote['special_align']} <p /><br />\r " +
277
+ "#{@@endnote['seg_name_2']} <p />" +
278
+ "#{@@endnote['special_align_close']}")
279
+ para.gsub!(/<:1>\s*<:ee>/,
280
+ "#{@@endnote['special_align']} <p /><br />\r " +
281
+ "#{@@endnote['seg_name_1']} <p /> " +
282
+ "#{@@endnote['special_align_close']}")
283
+ @tuned_file << para
284
+ end
285
+ if @md.flag_auto_endnotes \
286
+ and @md.flag_separate_endnotes_make
287
+ @tuned_file << "\n1~endnotes Endnotes" #prob numbering, revisit
288
+ end
289
+ @tuned_file << "\n<ENDNOTES>"
290
+ @tuned_file
291
+ end
292
+ def owner_details_seg
293
+ data << '1~owner.details Owner Details'
294
+ end
295
+ def number_sub_heading(para,num,title_no)
296
+ case para
297
+ when /#{num}~- / then para.gsub!(/#{num}~- /,"#{title_no} ")
298
+ when /^#{num}~#\s*/ then para.gsub!(/^#{num}~#\s*/,"#{title_no} ")
299
+ when /^#{num}~[a-z_\.]+ /
300
+ para.gsub!(/^#{num}~([a-z_\.]+)\s+(.+)/i,%{#{num}~\\1 #{title_no} \\2 <:name##{title_no}>})
301
+ else para.gsub!(/^#{num}~ /,"#{num}~#{title_no} #{title_no} ") #main
302
+ end
303
+ if @md.toc_lev_limit \
304
+ and @md.toc_lev_limit < num
305
+ para.gsub!(/^[2-6]~(?:~\S+)?\s*/,'!_ ')
306
+ end
307
+ para
308
+ end
309
+ def set_heading_top #% make sure no false positives
310
+ unless @md.set_heading_top
311
+ if (@md.opt.act[:verbose_plus][:set]==:on \
312
+ || @md.opt.act[:maintenance][:set]==:on)
313
+ puts "\tdocument contains no top level heading, (will have to manufacture one)"
314
+ end
315
+ data=@data
316
+ @tuned_file=[]
317
+ data.each do |para|
318
+ unless @md.set_heading_top
319
+ if para !~/^(?:@\S+:|0~\S+)\s/m \
320
+ and para !~/\A\s*\Z/m
321
+ @md.set_heading_top=true
322
+ head=(@md.title.full) \
323
+ ? (":A~ #{@md.title.full}")
324
+ : (':A~ [no title provided]')
325
+ @tuned_file << head
326
+ end
327
+ end
328
+ @tuned_file << para
329
+ end
330
+ @tuned_file
331
+ end
332
+ end
333
+ def set_heading_seg #% make sure no false positives
334
+ unless @md.set_heading_seg
335
+ if (@md.opt.act[:verbose_plus][:set]==:on \
336
+ || @md.opt.act[:maintenance][:set]==:on)
337
+ puts "\tdocument contains no segment level, (will have to manufacture one)"
338
+ end
339
+ data=@data
340
+ @tuned_file=[]
341
+ data.each do |para|
342
+ unless @md.set_heading_seg
343
+ if para !~/^(?:@\S+:|0~\S+|:[ABC]~)/m \
344
+ and para !~/\A\s*\Z/m \
345
+ and para !~/<:p[bn]>/
346
+ @md.set_heading_seg=true
347
+ head=(@md.title.full) \
348
+ ? ("1~seg [#{@md.title.full}]")
349
+ : ('1~seg [segment]')
350
+ @tuned_file << head
351
+ end
352
+ end
353
+ @tuned_file << para
354
+ end
355
+ @tuned_file
356
+ end
357
+ end
358
+ def set_header_title #% make sure no false positives
359
+ unless @md.set_header_title
360
+ if (@md.opt.act[:verbose_plus][:set]==:on \
361
+ || @md.opt.act[:maintenance][:set]==:on)
362
+ puts "\t no document title provided, (will have to manufacture one)"
363
+ end
364
+ data=@data
365
+ @tuned_file=[]
366
+ data.each do |para|
367
+ unless @md.set_header_title
368
+ if para !~/^%{1,2}\s/m \
369
+ and para !~/\A\s*\Z/m
370
+ @tuned_file << "0~title #{@md.heading_seg_first}"
371
+ @md.title.full=@md.heading_seg_first
372
+ @md.set_header_title=true
373
+ end
374
+ end
375
+ @tuned_file << para
376
+ end
377
+ @tuned_file
378
+ end
379
+ end
380
+ def endnotes #% endnote work zone
381
+ data=@data
382
+ @tuned_file=[]
383
+ endnote_ref=1
384
+ data.each do |para|
385
+ case para # manually numbered endnotes <!e(\d)!> <!e_(\d)!> -->
386
+ when /~\{\s+.+?\}~/ # auto-numbered endnotes <!e!> <!e_!> -->
387
+ para.gsub!(/\s*\}~/,' }~') # required 2003w31
388
+ @word_mode=para.scan(/\S+/)
389
+ word_mode=SiSU_ConvertFootnotes::Make.new(@md,@word_mode).endnote_call_number
390
+ para=word_mode.join(' ')
391
+ endnote_ref+=1
392
+ when /~\^(?:\s|$)|<:e>/ #%Note inserts endnotes previously gathered from /^(<!e[:_]!>|[-~]\{{3})/ (in earlier loop)
393
+ word_mode=para.scan(/\S+/)
394
+ word_mode=SiSU_ConvertFootnotes::Make.new(@md,word_mode).endnote_call_number
395
+ para=word_mode.join(' ')
396
+ endnote_ref+=1
397
+ end
398
+ @tuned_file << para
399
+ end
400
+ @tuned_file
401
+ end
402
+ def endnote_call_number
403
+ data=@data
404
+ data.each do |word|
405
+ case word
406
+ when /~\{/
407
+ unless word =~/~\{\*+/
408
+ @@endnote_call_counter+=1
409
+ end
410
+ when /~\^|<:e>/
411
+ word.gsub!(/~\^|<:e>/,"#{@@endnote_array[@@endnote_call_counter-1]}")
412
+ @@endnote_call_counter+=1
413
+ end
414
+ end
415
+ end
416
+ def strip_clean_extra_spaces(s) # ao output tuned
417
+ s=s.dup
418
+ s=s.gsub(/[ ]+([,.;:?](?:$|\s))/,'\1')
419
+ s=s.gsub(/ [ ]+/,' ')
420
+ s=s.gsub(/^ [ ]+/,'')
421
+ s=s.gsub(/ [ ]+$/,'')
422
+ s=s.gsub(/(<\/[bi]>')[ ]+(s )/,'\1\2')
423
+ end
424
+ def strip_clean_of_markup(s) # used for digest, define rules, make same as in db clean
425
+ s=s.dup
426
+ s=s.gsub(/(?:<\/?[ib]>|^:[A-C]~\S+|^[1-6]~\S+|~\{\d+\s.+?\}~)/,'') # markup and endnotes removed
427
+ #% same as db clean -->
428
+ s=s.gsub(/<del>(.+?)<\/del>/,'DELETED(\1)') # deletions
429
+ s=s.gsub(/<sup>(\d+)<\/sup>/,'[\1]')
430
+ s=s.gsub(/(?:&nbsp\\;|#{Mx[:nbsp]})+/,' ') #checking source Mx not necessary
431
+ s=s.gsub(/\{.+?\.(?:png|jpg|gif).+?\}(?:https?|file|ftp)\\\:\S+ /,' [image] ') # else image names found in search
432
+ s=s.gsub(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [image] ') # else image names found in search, re-check
433
+ s=s.gsub(/\s\s+/,' ')
434
+ s=s.strip
435
+ end
436
+ end
437
+ end
438
+ __END__
439
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
440
+ ao_array=@particulars.ao_array # ao file drawn here
@@ -0,0 +1,178 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** Conversion script from kdissert .kdi to sisu markup .ssm (master document)
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_from_xml.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_sstFromXML
58
+ require_relative 'se' # se.rb
59
+ class Convert
60
+ begin
61
+ require 'rexml/document'
62
+ include REXML
63
+ rescue LoadError
64
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
65
+ error('rexml/document NOT FOUND (LoadError)')
66
+ end
67
+ def initialize(opt)
68
+ @opt=opt
69
+ @sisu,@sisu_base=[],[]
70
+ @ver=SiSU_Env::InfoVersion.instance.get_version
71
+ end
72
+ def tell(filename,type)
73
+ SiSU_Screen::Ansi.new(
74
+ @opt.act[:color_state][:set],
75
+ "XML #{type} to SiSU sst",
76
+ "#{filename} --> #{filename}.sst"
77
+ ).green_hi_blue
78
+ end
79
+ def read
80
+ xml_to_sisu
81
+ end
82
+ def markup_head(text)
83
+ text.strip!
84
+ text.gsub!(/(?:\s*\n|\s\s+)/,' ')
85
+ text.gsub!(/<header class=['"]\S+?['"]>(.+?)<\/header>/,'\1')
86
+ text.gsub!(/<(\w+)>(.+?)<\/\w+>/,'@\1: \2')
87
+ text.gsub!(/<header class=['"]\S+?['"]><(\w+)>(.+?)<\/\w+><\/header>/,'@\1: \2')
88
+ text.gsub!(/\s +/,' ')
89
+ text.strip!
90
+ text + "\n\n"
91
+ end
92
+ def markup(text)
93
+ text.strip!
94
+ text.gsub!(/(?:\s*\n|\s\s+)/,' ')
95
+ text.gsub!(/<text class='h1'>(.+?)<\/text>/,':A~ \1')
96
+ text.gsub!(/<text class='h2'>(.+?)<\/text>/,':B~ \1')
97
+ text.gsub!(/<text class='h3'>(.+?)<\/text>/,':C~ \1')
98
+ text.gsub!(/<text class='h4'>(.+?)<\/text>/,'1~ \1')
99
+ text.gsub!(/<text class='h5'>(.+?)<\/text>/,'2~ \1')
100
+ text.gsub!(/<text class='h6'>(.+?)<\/text>/,'3~ \1')
101
+ text.gsub!(/<text class='norm'>(.+?)<\/text>/,'\1')
102
+ text.gsub!(/<endnote symbol='norm'>(.+?)<\/endnote>/,'~{ \1 }~')
103
+ text.gsub!(/<br ?\/>/,'<br>')
104
+ text.gsub!(/<i>(.+?)<\/i>/,'/{\1}/')
105
+ text.gsub!(/<b>(.+?)<\/b>/,'*{\1}*')
106
+ text.gsub!(/<u>(.+?)<\/u>/,'_{\1}_')
107
+ text.gsub!(/<sem:([a-z_]+)\s+depth=['"]zero['"]>(\s*.+?\s*)<\/sem:\1>/,';{ \2 };\1')
108
+ text.gsub!(/<sem:([a-z_]+)\s+depth=['"]one['"]>(\s*.+?\s*)<\/sem:\1>/,':{ \2 }:\1')
109
+ text.gsub!(/<sem:([a-z_]+)\s+depth=['"]many['"]>(\s*.+?\s*)<\/sem:\1>/,'\1:{ \2 }:\1')
110
+ text.gsub!(/<sem:([a-z_]+)>(\s*.+?\s*)<\/sem:\1>/,'\1:{ \2 }:\1')
111
+ text.gsub!(/\s +/,' ')
112
+ text.strip!
113
+ text + "\n\n"
114
+ end
115
+ def sax
116
+ out_file=File.new(@output_file_name,'w')
117
+ head=@doc.root.get_elements('//head/header')
118
+ body=@doc.root.get_elements('//object/text')
119
+ out_file.puts "% SiSU text #{@ver.version} (generated from a SiSU XML markup representation)\n\n"
120
+ head.each do |x|
121
+ if x.name=='header'
122
+ head=markup_head(x.to_s)
123
+ out_file.puts head
124
+ end
125
+ end
126
+ body.each do |x|
127
+ if x.name=='text'
128
+ body=markup(x.to_s)
129
+ out_file.puts body
130
+ end
131
+ end
132
+ end
133
+ def node
134
+ sax
135
+ end
136
+ def dom
137
+ raise "#{__FILE__}::#{__LINE__} xml dom representation to sst not yet implemented (experimental simple xml representations sax and node to sst are in place)."
138
+ end
139
+ def xml_to_sisu
140
+ unless @opt.files.empty?
141
+ @opt.files.each do |xml|
142
+ @sisu_base=[]
143
+ if xml =~/\.sx[sdn]\.xml$/
144
+ begin
145
+ @doc_str=IO.readlines(xml,'').join("\n")
146
+ @output=File.new("#{xml}.sst",'w')
147
+ @doc=REXML::Document.new(@doc_str)
148
+ @output_file_name="#{Dir.pwd}/#{xml}.sst"
149
+ @el=[]
150
+ rescue REXML::ParseException
151
+ end
152
+ end
153
+ if xml =~/\.sxs\.xml$/
154
+ unless @opt.act[:quiet][:set]==:on
155
+ tell(xml,'sax')
156
+ end
157
+ sax
158
+ elsif xml =~/\.sxd\.xml$/
159
+ unless @opt.act[:quiet][:set]==:on
160
+ tell(xml,'dom')
161
+ end
162
+ dom
163
+ elsif xml =~/\.sxn\.xml$/
164
+ unless @opt.act[:quiet][:set]==:on
165
+ tell(xml,'node')
166
+ end
167
+ node
168
+ else puts "filename not recognised: << #{xml} >>"
169
+ end
170
+ @output << @sisu_base
171
+ end
172
+ else puts '.xml file for conversion to sisu expected'
173
+ end
174
+ puts @opt.files.inspect
175
+ end
176
+ end
177
+ end
178
+ __END__