ulysses 0.4.1 → 0.4.2
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/lib/ulysses/printer.rb +64 -35
- data/lib/ulysses/version.rb +1 -1
- data/ulysses.gemspec +0 -1
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b1b20c6d6d61c8638523318dc7da82510af3750
|
4
|
+
data.tar.gz: 22b91e891cb856c8951bfa1f9b4ec6083186a4e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca03cee526afcf4da3524e79b82864fdf1f32642a46ddd7c2a7a5dd9064887b86c4019db1d3726402d1e4ed75e27360c8f4387a8b0831b4e0cf60bc1f74f76bd
|
7
|
+
data.tar.gz: 6428353c07a468d956121901d20e6f4f9aed5e2a13550f83fef024e75818d925b34634a2b056808f327c6680c1b2fa8932965cd54778ea538061484f7f7cb90e
|
data/lib/ulysses/printer.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
module Ulysses
|
2
2
|
class Printer
|
3
3
|
|
4
|
-
INLINE_MARKUPS = %w(strong emph mark delete inlineComment code inlineNative)
|
5
4
|
SHEET_CONTENT_XPATH = '/sheet/string[@xml:space="preserve"]'
|
5
|
+
SIMPLE_ELEMENTS = {strong: 'strong', emph: 'em', mark: 'mark',
|
6
|
+
delete: 'del', code: 'code', inlineNative: 'span' }
|
7
|
+
HIDDEN_ELEMENTS = [:inlineComment]
|
8
|
+
HIDDEN_TAGS = [:comment]
|
6
9
|
|
7
10
|
def initialize(target)
|
8
11
|
@target = target
|
@@ -12,6 +15,12 @@ module Ulysses
|
|
12
15
|
end
|
13
16
|
|
14
17
|
def print
|
18
|
+
[print_body, print_footnotes].compact.join("\n")
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def print_body
|
15
24
|
if @target.is_a? Library
|
16
25
|
print_library(@target)
|
17
26
|
elsif @target.is_a? Group
|
@@ -23,16 +32,6 @@ module Ulysses
|
|
23
32
|
end
|
24
33
|
end
|
25
34
|
|
26
|
-
def footnotes
|
27
|
-
@footnotes
|
28
|
-
end
|
29
|
-
|
30
|
-
def annotations
|
31
|
-
@annotations
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
35
|
def print_library(library)
|
37
36
|
library.groups.map { |g| print_group(g) }.join("\n")
|
38
37
|
end
|
@@ -43,31 +42,47 @@ module Ulysses
|
|
43
42
|
|
44
43
|
def print_sheet(sheet)
|
45
44
|
paragraphs = sheet.xml.xpath(SHEET_CONTENT_XPATH).children.select { |n| n.element? }
|
46
|
-
paragraphs.map{ |p| print_paragraph(p) }.join("\n")
|
45
|
+
paragraphs.map{ |p| print_paragraph(p) }.compact.join("\n")
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_footnotes
|
49
|
+
return nil if @footnotes.empty?
|
50
|
+
html = '<ol class="footnotes">'
|
51
|
+
@footnotes.each_with_index do |fn, index|
|
52
|
+
html += "<li><a href=\"#fn-#{index+1}\">^</a> #{fn}</li>"
|
53
|
+
end
|
54
|
+
html + '</ol>'
|
55
|
+
end
|
56
|
+
|
57
|
+
def print_annotations
|
58
|
+
return nil if @annotations.empty?
|
59
|
+
html = '<ol class="annotations">'
|
60
|
+
@annotations.each_with_index do |an, index|
|
61
|
+
html += "<li id=\"annotation-#{index + 1}\">#{an}</li>"
|
62
|
+
end
|
63
|
+
html + '</ol>'
|
47
64
|
end
|
48
65
|
|
49
66
|
def print_paragraph(p)
|
50
67
|
children = p.children
|
51
68
|
tags = (children.any? && children.first.name === 'tags') ? parse_tags(children.shift) : []
|
52
|
-
|
69
|
+
return nil if (tags & HIDDEN_TAGS).any?
|
53
70
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
tags = tags.uniq.map{|t| snake_case(t)}.join(' ')
|
61
|
-
"<p class=\"#{tags}\">#{content}</p>"
|
71
|
+
content = parse_content(children)
|
72
|
+
|
73
|
+
heading_tag = tags.find {|t| t.to_s.start_with? 'heading' }
|
74
|
+
if heading_tag
|
75
|
+
heading_level = /heading(\d)/.match(heading_tag)[1]
|
76
|
+
"<h#{heading_level}>#{content}</h#{heading_level}>"
|
62
77
|
else
|
63
|
-
"<p>#{content}</p>"
|
78
|
+
"<p class=\"#{parse_line_class(tags)}\">#{content}</p>"
|
64
79
|
end
|
65
80
|
end
|
66
81
|
|
67
82
|
def parse_content(nodes)
|
68
83
|
nodes.map do |node|
|
69
84
|
if node.text?
|
70
|
-
node.content
|
85
|
+
@html_entities.encode node.content
|
71
86
|
else
|
72
87
|
send("parse_#{node.name}", node)
|
73
88
|
end
|
@@ -77,9 +92,9 @@ module Ulysses
|
|
77
92
|
def parse_tags(tags)
|
78
93
|
tags.children.map do |tag|
|
79
94
|
if tag.attributes.has_key? 'kind'
|
80
|
-
tag.attributes['kind'].value
|
95
|
+
tag.attributes['kind'].value.to_sym
|
81
96
|
elsif tag.content === "\t"
|
82
|
-
|
97
|
+
:tab
|
83
98
|
end
|
84
99
|
end
|
85
100
|
end
|
@@ -97,16 +112,20 @@ module Ulysses
|
|
97
112
|
end
|
98
113
|
|
99
114
|
def parse_element(node)
|
100
|
-
kind = node.attributes['kind'].value
|
101
|
-
if
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
end
|
115
|
+
kind = node.attributes['kind'].value.to_sym
|
116
|
+
return '' if HIDDEN_ELEMENTS.include? kind
|
117
|
+
return parse_simple_element(kind, node) if SIMPLE_ELEMENTS.has_key?(kind)
|
118
|
+
|
119
|
+
send("parse_element_#{kind}", node)
|
106
120
|
end
|
107
121
|
|
108
|
-
def
|
109
|
-
|
122
|
+
def parse_simple_element(kind, node)
|
123
|
+
content = parse_content(node.children)
|
124
|
+
if (html_tag = SIMPLE_ELEMENTS[kind]) === 'span'
|
125
|
+
'<span class="' + snake_case(kind) + '">' + content + '</span>'
|
126
|
+
else
|
127
|
+
"<#{html_tag}>#{content}</#{html_tag}>"
|
128
|
+
end
|
110
129
|
end
|
111
130
|
|
112
131
|
def parse_element_link(node)
|
@@ -128,7 +147,7 @@ module Ulysses
|
|
128
147
|
def parse_element_footnote(node)
|
129
148
|
attrs = parse_element_attributes(node)
|
130
149
|
@footnotes << attrs['text']
|
131
|
-
'<sup class="footnote-ref"><a href="#fn' + @footnotes.size.to_s + '">' + @footnotes.size.to_s + '</a></sup>'
|
150
|
+
'<sup class="footnote-ref"><a href="#fn-' + @footnotes.size.to_s + '">' + @footnotes.size.to_s + '</a></sup>'
|
132
151
|
end
|
133
152
|
|
134
153
|
def parse_element_annotation(node)
|
@@ -146,7 +165,7 @@ module Ulysses
|
|
146
165
|
end
|
147
166
|
|
148
167
|
def snake_case(tag)
|
149
|
-
tag.gsub(/::/, '/')
|
168
|
+
tag.to_s.gsub(/::/, '/')
|
150
169
|
.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
151
170
|
.gsub(/([a-z\d])([A-Z])/,'\1_\2')
|
152
171
|
.gsub(/([a-z])(\d)/i, '\1_\2')
|
@@ -154,5 +173,15 @@ module Ulysses
|
|
154
173
|
.downcase
|
155
174
|
end
|
156
175
|
|
176
|
+
def parse_line_class(tags)
|
177
|
+
tabs = tags.count(:tab)
|
178
|
+
if tabs > 1
|
179
|
+
tags.delete(:tab)
|
180
|
+
tags << :"tabs_#{tabs}"
|
181
|
+
end
|
182
|
+
tags.unshift :line
|
183
|
+
tags.uniq.map{ |t| snake_case(t) }.join(' ')
|
184
|
+
end
|
185
|
+
|
157
186
|
end
|
158
187
|
end
|
data/lib/ulysses/version.rb
CHANGED
data/ulysses.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ulysses
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yaodong Zhao
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: kramdown
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: htmlentities
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|