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,186 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** plaintext decoration
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/txt_orgmode_decorate.rb;hb=HEAD>
55
+
56
+ =end
57
+
58
+ module SiSU_Decorate_Txt_OrgMode
59
+ def decorate
60
+ def heading
61
+ def inline
62
+ def l0
63
+ '*'
64
+ end
65
+ def l1
66
+ '**'
67
+ end
68
+ def l2
69
+ '***'
70
+ end
71
+ def l3
72
+ '****'
73
+ end
74
+ def l4
75
+ '*****'
76
+ end
77
+ def l5
78
+ '******'
79
+ end
80
+ self
81
+ end
82
+ self
83
+ end
84
+ def bold
85
+ def open
86
+ '*'
87
+ end
88
+ def close
89
+ '*'
90
+ end
91
+ self
92
+ end
93
+ def italics
94
+ def open
95
+ '/'
96
+ end
97
+ def close
98
+ '/'
99
+ end
100
+ self
101
+ end
102
+ def underscore
103
+ def open
104
+ ''
105
+ end
106
+ def close
107
+ ''
108
+ end
109
+ self
110
+ end
111
+ #def emphasis
112
+ # def open
113
+ # ''
114
+ # end
115
+ # def close
116
+ # ''
117
+ # end
118
+ # self
119
+ #end
120
+ def cite
121
+ def open
122
+ '"'
123
+ end
124
+ def close
125
+ '"'
126
+ end
127
+ self
128
+ end
129
+ def insert
130
+ def open
131
+ ''
132
+ end
133
+ def close
134
+ ''
135
+ end
136
+ self
137
+ end
138
+ def strike
139
+ def open
140
+ '+'
141
+ end
142
+ def close
143
+ '+'
144
+ end
145
+ self
146
+ end
147
+ def superscript
148
+ def open
149
+ '^'
150
+ end
151
+ def close
152
+ '^'
153
+ end
154
+ self
155
+ end
156
+ def subscript
157
+ def open
158
+ '~'
159
+ end
160
+ def close
161
+ '~'
162
+ end
163
+ self
164
+ end
165
+ def hilite #bold
166
+ def open
167
+ '*'
168
+ end
169
+ def close
170
+ '*'
171
+ end
172
+ self
173
+ end
174
+ def monospace
175
+ def open
176
+ '~'
177
+ end
178
+ def close
179
+ '~'
180
+ end
181
+ self
182
+ end
183
+ self
184
+ end
185
+ end
186
+ __END__
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** plaintext
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/txt_output.rb;hb=HEAD>
55
+
56
+ =end
57
+ module Txt_Output
58
+ class Output
59
+ include SiSU_Param
60
+ include SiSU_Env
61
+ def document(content,outputfile)
62
+ emptyline=0
63
+ content.each do |para| # this is a hack
64
+ if para.is_a?(Array) \
65
+ and para.length > 0
66
+ para.each do |line|
67
+ if line
68
+ line=line.gsub(/[ \t]+$/m,'').
69
+ gsub(/^\A[ ]*\Z/m,'')
70
+ (line=~/^\A\Z/) \
71
+ ? (emptyline+=1)
72
+ : emptyline=0
73
+ if emptyline < 2 #remove additional empty lines
74
+ outputfile.puts line
75
+ end
76
+ end
77
+ end
78
+ else outputfile.puts para #unix plaintext # /^([*=-]|\.){5}/
79
+ end
80
+ end
81
+ outputfile.close
82
+ end
83
+ end
84
+ end
85
+ __END__
86
+
@@ -0,0 +1,410 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** plaintext text generation, stripped plaintext output (unix, linefeed)
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/txt.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_Txt_Plain
58
+ require_relative 'ao' # ao.rb
59
+ require_relative 'se' # se.rb
60
+ include SiSU_Env
61
+ require_relative 'shared_metadata' # shared_metadata.rb
62
+ require_relative 'generic_parts' # generic_parts.rb
63
+ require_relative 'txt_read' # txt_read.rb
64
+ require_relative 'txt_shared' # txt_shared.rb
65
+ require_relative 'txt_plain_decorate' # txt_plain_decorate.rb
66
+ require_relative 'txt_output' # txt_output.rb
67
+ include SiSU_Param
68
+ @@alt_id_count,@@alt_id_count=0,0
69
+ @@tablefoot=''
70
+ class Source
71
+ include SiSU_Txt_Read
72
+ def initialize(opt)
73
+ @opt=opt
74
+ unless @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/
75
+ puts "#{sf} not a processed file type"
76
+ end
77
+ end
78
+ def read
79
+ begin
80
+ md=SiSU_Param::Parameters.new(@opt).get
81
+ specific={
82
+ description: 'Plaintext (utf-8)',
83
+ output_path: md.file.output_path.txt.dir,
84
+ output_file: md.file.base_filename.txt,
85
+ }
86
+ read_generic(@opt,specific)
87
+ SiSU_Txt_Plain::Source::Scroll.new(md,@ao_array,@wrap_width).songsheet
88
+ rescue
89
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
90
+ __LINE__.to_s + ':' + __FILE__
91
+ end
92
+ ensure
93
+ end
94
+ end
95
+ private
96
+ class Scroll <Source
97
+ include SiSU_Parts_Generic
98
+ include SiSU_TextUtils
99
+ include SiSU_Decorate_Txt_Plain
100
+ @@endnotes={ para: [], end: [] }
101
+ def initialize(md,data,wrap_width)
102
+ @md,@data,@wrap_width=md,data,wrap_width
103
+ @env=SiSU_Env::InfoEnv.new(@md.fns)
104
+ @tab="\t"
105
+ @@endnotes_=case md.opt.selections.str
106
+ when /--footnote/ then false
107
+ when /--endnote/ then true
108
+ else true
109
+ end
110
+ @plaintext={ body: [], open: [], close: [], head: [], metadata: [], tail: [] }
111
+ end
112
+ def songsheet
113
+ plaintext=markup(@data)
114
+ publish(plaintext)
115
+ end
116
+ def break_line
117
+ "\n"
118
+ end
119
+ # Used for extraction of endnotes from paragraphs
120
+ def extract_endnotes(dob='')
121
+ notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
122
+ @n=[]
123
+ notes.flatten.each do |n| #high cost to deal with <br> appropriately within plaintext, consider
124
+ n=n.dup.to_s
125
+ if n =~/#{Mx[:br_line]}|#{Mx[:br_nl]}/
126
+ fix = n.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/) #watch #added
127
+ fix.each do |x|
128
+ unless x.empty?; @n << x
129
+ end
130
+ end
131
+ else @n << n
132
+ end
133
+ end
134
+ notes=@n.flatten
135
+ notes.each do |e|
136
+ util=(e.to_s =~/^\[[\d*+]+\]:/) \
137
+ ? (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,4,1))
138
+ : (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,1,1))
139
+ wrap=util.line_wrap
140
+ wrap=if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m
141
+ wrap.gsub(/^(\s*)([\d*+]+)\s+(.+?)\s*\Z/m, <<-GSUB
142
+ \\1[\\2]: \\3
143
+ GSUB
144
+ )
145
+ else
146
+ wrap.gsub(/^(.+)\Z/m, <<-GSUB
147
+ \\1
148
+ GSUB
149
+ )
150
+ end
151
+ @@endnotes[:para] << "-#{wrap}"
152
+ @@endnotes[:end] << '' << wrap
153
+ end
154
+ @@endnotes
155
+ end
156
+ def plaintext_metadata
157
+ array=SiSU_Metadata::Summary.new(@md).plaintext.metadata
158
+ array.each do |meta|
159
+ tag,inf=meta.scan(/^.+?:\s|.+/)
160
+ if tag and inf
161
+ util=SiSU_TextUtils::Wrap.new(inf,@wrap_width,15,1)
162
+ txt=util.line_wrap
163
+ @plaintext[:metadata] <<<<WOK
164
+
165
+ #{@tab}#{tag}#{txt}
166
+ WOK
167
+ end
168
+ end
169
+ end
170
+ def plaintext_tail
171
+ # env=SiSU_Env::InfoEnv.new(@md.fns)
172
+ generator="Generated by: #{@md.project_details.project} #{@md.project_details.version} of #{@md.project_details.date_stamp} (#{@md.project_details.date})" if @md.project_details.version
173
+ lastdone="Last Generated on: #{Time.now}"
174
+ rubyv="Ruby version: #{@md.ruby_version}"
175
+ sc=if @md.sc_info
176
+ "Source file: #{@md.sc_filename}#{break_line}Version number: #{@md.sc_number}#{break_line}Version date: #{@md.sc_date}#{break_line}"
177
+ else ''
178
+ end
179
+ @plaintext[:tail] <<<<WOK
180
+ #{break_line}
181
+ plaintext (plain text):
182
+ #{@md.file.output_path.txt.url}/#{@md.file.base_filename.txt}#{break_line}
183
+ Other versions of this document: #{break_line}
184
+ manifest:
185
+ #{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}#{break_line}
186
+ at:
187
+ #{@md.file.output_path.base.url}#{break_line}
188
+
189
+ #{sc}
190
+ * #{generator}
191
+ * #{rubyv}
192
+ * #{lastdone}
193
+ * SiSU #{the_url.sisu_txt}
194
+ WOK
195
+ end
196
+ def plaintext_structure(dob='',p_num='') #% Used to extract the structure of a document
197
+ lv=n=n3=nil
198
+ if dob.is==:heading
199
+ lv=dob.ln
200
+ n=lv - 1
201
+ n3=lv + 2
202
+ end
203
+ util=nil
204
+ wrapped=if dob.is==:para \
205
+ || dob.is==:heading
206
+ if dob.is==:para
207
+ if dob.hang \
208
+ and dob.hang =~/[0-9]/ \
209
+ and dob.indent != dob.hang
210
+ util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2,dob.hang.to_i*2)
211
+ #util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.hang.to_i*2,0)
212
+ elsif dob.indent =~/[1-9]/
213
+ util=if dob.bullet_
214
+ SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,dob.indent.to_i*2)
215
+ else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2)
216
+ end
217
+ else
218
+ util=if dob.bullet_
219
+ SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,0)
220
+ else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0)
221
+ end
222
+ end
223
+ else util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0)
224
+ end
225
+ util.line_wrap
226
+ end
227
+ if lv
228
+ times=wrapped.length
229
+ times=@wrap_width if times > @wrap_width
230
+ @plaintext[:body] << case lv
231
+ when 0 then wrapped.upcase << break_line << decorate.heading_underscore.l0*times + p_num << break_line*2
232
+ when 1 then wrapped.upcase << break_line << decorate.heading_underscore.l1*times + p_num << break_line*2
233
+ when 2 then wrapped.upcase << break_line << decorate.heading_underscore.l2*times + p_num << break_line*2
234
+ when 3 then wrapped.upcase << break_line << decorate.heading_underscore.l3*times + p_num << break_line*2
235
+ when 4
236
+ unless dob.use_ == :dummy
237
+ wrapped.upcase << break_line << decorate.heading_underscore.l4*times + p_num << break_line*2
238
+ end
239
+ when 5 then wrapped.upcase << break_line << decorate.heading_underscore.l5*times + p_num << break_line*2
240
+ when 6 then wrapped.upcase << break_line << decorate.heading_underscore.l6*times + p_num << break_line*2
241
+ when 7
242
+ wrapped.upcase << break_line << decorate.heading_underscore.l7*times + p_num << break_line*2
243
+ #when 7 then wrapped.upcase << break_line << decorate.heading_underscore.l7*times + p_num << break_line*2
244
+ end
245
+ else
246
+ @plaintext[:body] << wrapped + p_num << break_line # main text, contents, body KEEP
247
+ end
248
+ if @@endnotes[:para] \
249
+ and not @@endnotes_
250
+ @@endnotes[:para].each {|e| @plaintext[:body] << e << break_line}
251
+ elsif @@endnotes[:para] \
252
+ and @@endnotes_
253
+ end
254
+ @@endnotes[:para]=[]
255
+ end
256
+ def ocn_display(dob)
257
+ make=SiSU_Env::ProcessingSettings.new(@md)
258
+ if make.build.plaintext_ocn?
259
+ if defined? dob.ocn \
260
+ and dob.ocn.is_a?(Fixnum)
261
+ (defined? dob.ocn) \
262
+ ? "\n#{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}" \
263
+ : ''
264
+ else ''
265
+ end
266
+ else ''
267
+ end
268
+ end
269
+ def markup(data) # Used for major markup instructions
270
+ SiSU_Env::InfoEnv.new(@md.fns)
271
+ @data_mod,@endnotes,@level,@cont,@copen,@plaintext_contents_close=Array.new(6){[]}
272
+ (0..7).each { |x| @cont[x]=@level[x]=false }
273
+ (4..7).each { |x| @plaintext_contents_close[x]='' }
274
+ plaintext_tail #($1,$2)
275
+ plaintext_metadata
276
+ table_message='[table omitted, see other document formats]'
277
+ data.each do |dob|
278
+ dob.obj=dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{break_line}#{table_message}"). #fix
279
+ gsub(/.+?#{Mx[:gl_o]}-##{Mx[:gl_c]}/,''). # remove dummy headings (used by html) #check also [~-]#
280
+ gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,
281
+ "#{decorate.bold.open}\\1#{decorate.bold.close}").
282
+ gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,
283
+ "#{decorate.italics.open}\\1#{decorate.italics.close}").
284
+ gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,
285
+ "#{decorate.underscore.open}\\1#{decorate.underscore.close}").
286
+ gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,
287
+ "#{decorate.subscript.open}\\1#{decorate.subscript.close}").
288
+ gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,
289
+ "#{decorate.superscript.open}\\1#{decorate.superscript.close}").
290
+ gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,
291
+ "#{decorate.insert.open}\\1#{decorate.insert.close}").
292
+ gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,
293
+ "#{decorate.cite.open}\\1#{decorate.cite.close}").
294
+ gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,
295
+ "#{decorate.strike.open}\\1#{decorate.strike.close}").
296
+ gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,
297
+ "#{decorate.monospace.open}\\1#{decorate.monospace.close}")
298
+ unless dob.is==:code
299
+ dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,'\1').
300
+ gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1').
301
+ gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1 [link: <\2>]').
302
+ gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/,'\1 [link: local image]').
303
+ gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"#{the_text.url_open}\\1#{the_text.url_close}")
304
+ extract_endnotes(dob)
305
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'[^\1]'). # endnote marker marked up
306
+ gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'[^\1]'). # endnote marker marked up
307
+ gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<').
308
+ gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>').
309
+ gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&').
310
+ gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!').
311
+ gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#').
312
+ gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*').
313
+ gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-').
314
+ gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/').
315
+ gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_').
316
+ gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{').
317
+ gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}').
318
+ gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~').
319
+ gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©').
320
+ gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\')
321
+ end
322
+ dob.obj=if dob.of==:block # watch
323
+ dob.obj.gsub(/#{Mx[:gl_o]}●#{Mx[:gl_c]}/m,"* ").
324
+ gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,break_line)
325
+ else dob.obj.gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,break_line*2)
326
+ end
327
+ if dob.is==:code
328
+ dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _<
329
+ gsub(/(^|[^}])_([<>])/m,'\1\2') # _<_<
330
+ end
331
+ dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1').
332
+ gsub(/<a href=".+?">(.+?)<\/a>/m,'\1').
333
+ gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,''). # remove name links
334
+ gsub(/&nbsp;|#{Mx[:nbsp]}/,' '). # decide on
335
+ gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]")
336
+ gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]').
337
+ gsub(/(?:^|[^_\\])\{\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*\}\S+/,'[image: "\1"]')
338
+ if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
339
+ p_num=ocn_display(dob)
340
+ if dob.is==:heading \
341
+ or dob.is==:para
342
+ plaintext_structure(dob,p_num)
343
+ elsif dob.is==:group \
344
+ or dob.is==:block \
345
+ or dob.is==:verse \
346
+ or dob.is==:code \
347
+ or dob.is==:table
348
+ @plaintext[:body] << dob.obj + p_num << break_line
349
+ elsif dob.is==:break
350
+ sp=' '
351
+ ln='-'
352
+ @plaintext[:body] <<=if dob.obj==Mx[:br_page] \
353
+ or dob.obj==Mx[:br_page_new] \
354
+ or dob.obj==Mx[:br_page_line]
355
+ "#{break_line}#{ln*40}#{break_line*2}"
356
+ elsif dob.obj ==Mx[:br_obj]
357
+ "#{break_line}#{sp*20}* * *#{break_line*2}"
358
+ end # following empty line (break_line) missing, fix
359
+ end
360
+ dob='' if (dob.obj =~/<a name="n\d+">/ \
361
+ and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote
362
+ if dob ## Clean Prepared Text
363
+ dob.obj=dob.obj.gsub(/<!.+!>/,' ').
364
+ gsub(/<:\S+>/,' ')
365
+ end
366
+ end
367
+ end
368
+ @plaintext
369
+ end
370
+ def publish(plaintext)
371
+ divider='='
372
+ content=[]
373
+ content << plaintext[:open]
374
+ content << plaintext[:head]
375
+ content << plaintext[:body]
376
+ content << @@endnotes[:end] if @@endnotes_
377
+ content << "#{break_line}#{divider*@wrap_width}#{break_line}"
378
+ content << plaintext[:metadata]
379
+ content << "#{break_line}#{divider*@wrap_width}#{break_line}" if @md.stmp =~/\w+/ #not used?
380
+ content << plaintext[:tail]
381
+ outputfile=SiSU_Env::FileOp.new(@md).write_file.txt
382
+ Txt_Output::Output.new.document(content,outputfile)
383
+ @@endnotes={ para: [], end: [] }
384
+ end
385
+ end
386
+ end
387
+ end
388
+ __END__
389
+ bold_o: '*', bold_c: '*',
390
+ #bold_o: '!', bold_c: '!',
391
+ #emphasis_o: '*', emphasis_c: '*',
392
+ italics_o: '/', italics_c: '/',
393
+ underscore_o: '_', underscore_c: '_',
394
+ cite_o: '"', cite_c: '"',
395
+ insert_o: '+', insert_c: '+',
396
+ strike_o: '-', strike_c: '-',
397
+ superscript_o: '^', superscript_c: '^',
398
+ subscript_o: '[', subscript_c: ']',
399
+ hilite_o: '*', hilite_c: '*',
400
+ monospace_o: '', monospace_c: '',
401
+ p_bold_o: '!{', p_bold_c: '}!',
402
+ p_italics_o: '/{', p_italics_c: '}/',
403
+ p_underscore_o: '_{', p_underscore_c: '}_',
404
+ p_cite_o: '"{', p_cite_c: '}"',
405
+ p_insert_o: '+{', p_insert_c: '}+',
406
+ p_strike_o: '-{', p_strike_c: '}-',
407
+ p_superscript_o: '^{', p_superscript_c: '}^',
408
+ p_subscript_o: ',{', p_subscript_c: '},',
409
+ p_hilite_o: '*{', p_hilite_c: '}*',
410
+ p_monospace_o: '#{', p_monospace_c: '}#',