sisu 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
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__