oo2md2tex 0.0.12 → 0.0.13
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.
- checksums.yaml +4 -4
- data/bin/oo2text +175 -49
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b35b640e4ece758b57a9700756bdc8f4e85001d
|
4
|
+
data.tar.gz: 026fd526b950c8841b30d6d54145ee502b9dac49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3046a0547a17116aecfdd6848d2b5df853ed2bc846d228c681833087a5b783285a36995879576583124df4361503dab61e0c2f55999661e1e389baf391092148
|
7
|
+
data.tar.gz: 5c589e0621cebf58e474769e49e156c5da49a27a396c5bec5bc748eb5276cda99d3c67d2fca6d458043103463b951513c77e0f33273a8ef63f7e5d7d163b9e0e
|
data/bin/oo2text
CHANGED
@@ -19,73 +19,192 @@
|
|
19
19
|
require 'optparse'
|
20
20
|
require 'nokogiri'
|
21
21
|
require 'zlib'
|
22
|
+
require 'zip'
|
23
|
+
require 'stringio'
|
24
|
+
require 'awesome_print'
|
25
|
+
require 'pry-byebug'
|
22
26
|
|
23
27
|
module OmniOutliner
|
24
28
|
|
25
|
-
class
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
class V3
|
30
|
+
class Document < Nokogiri::XML::SAX::Document
|
31
|
+
def initialize
|
32
|
+
@in_column = false
|
33
|
+
@in_lit = false
|
34
|
+
@in_item = false
|
35
|
+
@in_style = false
|
36
|
+
@str = ""
|
37
|
+
super
|
38
|
+
end
|
39
|
+
|
40
|
+
def characters(s)
|
41
|
+
@str += s if @in_lit && (!@in_style && !@in_column)
|
42
|
+
end
|
34
43
|
|
35
|
-
|
36
|
-
|
44
|
+
def start_element(name, attrs)
|
45
|
+
@in_column = true if name == "column"
|
46
|
+
@in_item = true if name == "item"
|
47
|
+
@in_style = true if name == "style"
|
48
|
+
@in_lit = true if name == "lit"
|
49
|
+
if name == "cell"
|
50
|
+
# if it is a hyperlink, use name part as part of output
|
51
|
+
if n = attrs.find{|a| a[0] == "name"}
|
52
|
+
@str += n[1]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def end_element(name)
|
58
|
+
@in_column = false if name == "column"
|
59
|
+
@in_item = false if name == "item"
|
60
|
+
@in_style = false if name == "style"
|
61
|
+
if name == "lit"
|
62
|
+
@str += "\n"
|
63
|
+
@in_lit = false
|
64
|
+
end
|
65
|
+
if name == "values"
|
66
|
+
@str.gsub(/\n/, '')
|
67
|
+
puts @str
|
68
|
+
@str = ""
|
69
|
+
end
|
70
|
+
end
|
37
71
|
end
|
38
72
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
73
|
+
class Parser < Nokogiri::XML::SAX::Parser
|
74
|
+
def initialize(fn)
|
75
|
+
@file = nil
|
76
|
+
if fn =~ /\.oo3$/
|
77
|
+
fn = "#{fn}/contents.xml"
|
78
|
+
begin
|
79
|
+
@file = Zlib::GzipReader.new(File.open(fn))
|
80
|
+
rescue Zlib::GzipFile::Error
|
81
|
+
@file = File.open(fn)
|
82
|
+
end
|
83
|
+
else
|
84
|
+
@file = File.open(fn)
|
48
85
|
end
|
86
|
+
super(Document.new)
|
87
|
+
end
|
88
|
+
|
89
|
+
def parse
|
90
|
+
super(@file)
|
49
91
|
end
|
50
92
|
end
|
93
|
+
end # v3
|
51
94
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
@
|
58
|
-
@
|
95
|
+
class V5
|
96
|
+
class Item
|
97
|
+
attr_reader :attrs
|
98
|
+
|
99
|
+
def initialize(attrs, text)
|
100
|
+
@attrs = attrs
|
101
|
+
@text = text
|
102
|
+
@children = {}
|
59
103
|
end
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@
|
104
|
+
|
105
|
+
def add(rank, item)
|
106
|
+
rank = "0" if rank == ""
|
107
|
+
@children[rank.to_i] = item
|
108
|
+
end
|
109
|
+
|
110
|
+
def print_all
|
111
|
+
# puts "[#{attrs['id']}]"
|
112
|
+
ap self
|
113
|
+
puts "<#{@text}>"
|
114
|
+
@children.keys.sort.each {|k| @children[k].print_all}
|
64
115
|
end
|
65
116
|
end
|
66
|
-
end
|
67
117
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
118
|
+
class Document < Nokogiri::XML::SAX::Document
|
119
|
+
def initialize
|
120
|
+
@in_column = false
|
121
|
+
@in_lit = false
|
122
|
+
@in_item = false
|
123
|
+
@in_style = false
|
124
|
+
@str = ""
|
125
|
+
@items = {}
|
126
|
+
@id_stack = []
|
127
|
+
super
|
128
|
+
end
|
129
|
+
|
130
|
+
def characters(s)
|
131
|
+
@str += s if @in_lit && (!@in_style && !@in_column)
|
132
|
+
end
|
133
|
+
|
134
|
+
def start_element(name, attrs_a)
|
135
|
+
if attrs_a.size != 0
|
136
|
+
@attrs = {}
|
137
|
+
attrs_a.each {|k,v| @attrs[k] = v}
|
138
|
+
@id = @attrs["id"] if @attrs.has_key?("id")
|
139
|
+
@is_root = @attrs["is-root"] if @attrs.has_key?("is-root")
|
140
|
+
end
|
141
|
+
@in_column = true if name == "column"
|
142
|
+
@in_style = true if name == "style"
|
143
|
+
@in_lit = true if name == "lit"
|
144
|
+
@in_item = true if name == "item"
|
145
|
+
if name == "cell"
|
146
|
+
# if it is a hyperlink, use name part as part of output
|
147
|
+
if @attrs.has_key?("name")
|
148
|
+
@str += @attrs["name"]
|
149
|
+
end
|
77
150
|
end
|
78
|
-
|
79
|
-
@file = File.open(fn)
|
151
|
+
@id_stack.push(@id)
|
80
152
|
end
|
81
|
-
super(Document.new)
|
82
|
-
end
|
83
153
|
|
84
|
-
|
85
|
-
|
154
|
+
def end_element(name)
|
155
|
+
@id = @id_stack.pop
|
156
|
+
@in_column = false if name == "column"
|
157
|
+
@in_style = false if name == "style"
|
158
|
+
if name == "item"
|
159
|
+
@in_item = false
|
160
|
+
@str.gsub(/\n/, '')
|
161
|
+
@items[@id] = Item.new(@attrs, @str)
|
162
|
+
@str = ""
|
163
|
+
end
|
164
|
+
if name == "lit"
|
165
|
+
@str += "\n"
|
166
|
+
@in_lit = false
|
167
|
+
end
|
168
|
+
if name == "outline" # final output
|
169
|
+
@root = nil
|
170
|
+
@items.each do |id, item|
|
171
|
+
if item.attrs["is-root"] == "yes"
|
172
|
+
@root = item
|
173
|
+
elsif pid = item.attrs["parent-id"]
|
174
|
+
@items[pid].add(item.attrs["rank"], item)
|
175
|
+
else
|
176
|
+
@root.add(item.attrs["rank"], item)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
@root.print_all #unless @root.nil?
|
180
|
+
end
|
181
|
+
end
|
86
182
|
end
|
87
|
-
end
|
88
183
|
|
184
|
+
class Parser < Nokogiri::XML::SAX::Parser
|
185
|
+
def initialize(fn)
|
186
|
+
@file = nil
|
187
|
+
if fn =~ /\.ooutline$/
|
188
|
+
begin
|
189
|
+
@contents = nil
|
190
|
+
@editors = nil
|
191
|
+
Zip::File.open(fn) do |file|
|
192
|
+
@contents = file.read("contents.xml")
|
193
|
+
@editors = file.read("editors.xml")
|
194
|
+
end
|
195
|
+
@file = StringIO.new(@contents) if @contents
|
196
|
+
rescue Zlib::GzipFile::Error
|
197
|
+
@file = ""
|
198
|
+
end
|
199
|
+
end
|
200
|
+
super(Document.new)
|
201
|
+
end
|
202
|
+
|
203
|
+
def parse
|
204
|
+
super(@file) if @file
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end # v3
|
89
208
|
end
|
90
209
|
|
91
210
|
ARGV.options do |o|
|
@@ -95,6 +214,13 @@ ARGV.options do |o|
|
|
95
214
|
end
|
96
215
|
|
97
216
|
ARGV.each do |file|
|
98
|
-
|
217
|
+
if file =~ /\.oo3/
|
218
|
+
parser = OmniOutliner::V3::Parser.new(file)
|
219
|
+
elsif file =~ /\.ooutline/
|
220
|
+
parser = OmniOutliner::V5::Parser.new(file)
|
221
|
+
else
|
222
|
+
STDERR.puts "Can't open #{file}"
|
223
|
+
exit 1
|
224
|
+
end
|
99
225
|
parser.parse
|
100
226
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oo2md2tex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shigeya Suzuki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redcarpet
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubyzip
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
41
55
|
description: A barebone Markdown to TeX/LaTeX converter kit via OmniOutliner
|
42
56
|
email: shigeya@wide.ad.jp
|
43
57
|
executables:
|
@@ -78,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
92
|
version: '0'
|
79
93
|
requirements: []
|
80
94
|
rubyforge_project:
|
81
|
-
rubygems_version: 2.6.
|
95
|
+
rubygems_version: 2.6.11
|
82
96
|
signing_key:
|
83
97
|
specification_version: 4
|
84
98
|
summary: oo2text and md2tex
|