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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/oo2text +175 -49
  3. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4cf01afb7fca356c587c4ceb56d6bbc943fd8cfd
4
- data.tar.gz: 27a18bb3111dae09778f455656bb8f039bd933d8
3
+ metadata.gz: 5b35b640e4ece758b57a9700756bdc8f4e85001d
4
+ data.tar.gz: 026fd526b950c8841b30d6d54145ee502b9dac49
5
5
  SHA512:
6
- metadata.gz: 3e16aa532c7242fb4c3b6a3b1facf36f405a58836926878e7f8f9f4d1aa0810cd174f5fe8e1280667ed4d55b5d1686fe3d3fdd630d0c732f6d8111234864632c
7
- data.tar.gz: 2e402116a399a820347053a192323232c695fb12eae275987b08427bfa55d6640d518e0606ae9f3cc28221e714f06c99c5e276aceb6169d946c680a067f8511c
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 Document < Nokogiri::XML::SAX::Document
26
- def initialize
27
- @in_column = false
28
- @in_lit = false
29
- @in_item = false
30
- @in_style = false
31
- @str = ""
32
- super
33
- end
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
- def characters(s)
36
- @str += s if @in_lit && (!@in_style && !@in_column)
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
- def start_element(name, attrs)
40
- @in_column = true if name == "column"
41
- @in_item = true if name == "item"
42
- @in_style = true if name == "style"
43
- @in_lit = true if name == "lit"
44
- if name == "cell"
45
- # if it is a hyperlink, use name part as part of output
46
- if n = attrs.find{|a| a[0] == "name"}
47
- @str += n[1]
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
- def end_element(name)
53
- @in_column = false if name == "column"
54
- @in_item = false if name == "item"
55
- @in_style = false if name == "style"
56
- if name == "lit"
57
- @str += "\n"
58
- @in_lit = false
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
- if name == "values"
61
- @str.gsub(/\n/, '')
62
- puts @str
63
- @str = ""
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
- class Parser < Nokogiri::XML::SAX::Parser
69
- def initialize(fn)
70
- @file = nil
71
- if fn =~ /\.oo3$/
72
- fn = "#{fn}/contents.xml"
73
- begin
74
- @file = Zlib::GzipReader.new(File.open(fn))
75
- rescue Zlib::GzipFile::Error
76
- @file = File.open(fn)
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
- else
79
- @file = File.open(fn)
151
+ @id_stack.push(@id)
80
152
  end
81
- super(Document.new)
82
- end
83
153
 
84
- def parse
85
- super(@file)
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
- parser = OmniOutliner::Parser.new(file)
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.12
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-02-10 00:00:00.000000000 Z
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.8
95
+ rubygems_version: 2.6.11
82
96
  signing_key:
83
97
  specification_version: 4
84
98
  summary: oo2text and md2tex