ulysses 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c7b1d519c285491fa42fda0e4f870252021883b
4
- data.tar.gz: 38235905aa64dc7ead038ec120bbfb0daaf116c3
3
+ metadata.gz: 94a96891b11b517de41e2a090402f02e12404b96
4
+ data.tar.gz: 894df84f95414f2b8e328439e05fc7c57447bd73
5
5
  SHA512:
6
- metadata.gz: 4ea24651011856c59aa05c7a6d6129b2c256c7b60b42d0a117d77273b772f044f85b32d7686549a6436383f57d2540c1061bd3a0f83bf3dda1450643de902e05
7
- data.tar.gz: b64626d3d96e51b58d2e4be8fd58ea6c3ab081fb9f1ad44e9055c69d91a16086cde221d77b86882b7cec816b02dd2b1baa8f40fd2228cce961456a9ec30f9072
6
+ metadata.gz: caa083c9df77861877daeb0b5fa3967de65dc3c2799fe57aaa40a2e1fdd6cfbf7f21fc70d051996536e079bb044fa539e597d15a0bbc661a088efaebccc631f5
7
+ data.tar.gz: ff82e2446f4dbe38300af87dd0a5509e4522c72d2d67899a6d72966576dc8ffc420b6e36ffbc1f82f5cc479fa297d79bffe47946ee5913e4754dd8038bb2ab9a
data/README.md CHANGED
@@ -39,10 +39,10 @@ Get Sheets:
39
39
 
40
40
  group.sheets
41
41
 
42
- Export sheet to HTML:
42
+ Print sheet to HTML:
43
43
 
44
- sheet = group.sheets.first
45
- html = sheet.to_html
44
+ printer = Ulysses::Printer.new(library) # also applies to group or sheet
45
+ html = printer.print
46
46
 
47
47
  ## Development
48
48
 
@@ -5,7 +5,6 @@ require 'ulysses/library'
5
5
  require 'ulysses/group'
6
6
  require 'ulysses/sheet'
7
7
  require 'ulysses/printer'
8
- require 'ulysses/printer/elements'
9
8
  require 'ulysses/version'
10
9
 
11
10
  module Ulysses
@@ -1,6 +1,7 @@
1
1
  module Ulysses
2
2
  class Printer
3
3
 
4
+ INLINE_MARKUPS = %w(strong emph mark delete inlineComment code inlineNative)
4
5
  SHEET_CONTENT_XPATH = '/sheet/string[@xml:space="preserve"]'
5
6
 
6
7
  def initialize(target)
@@ -55,8 +56,12 @@ module Ulysses
55
56
  tags.delete('tab')
56
57
  tags << "tabs_#{tabs}"
57
58
  end
58
- tags = tags.uniq.map{|t| normalize_tag(t)}.join(' ')
59
- "<p class=\"#{tags}\">#{content}</p>"
59
+ if tags.any?
60
+ tags = tags.uniq.map{|t| snake_case(t)}.join(' ')
61
+ "<p class=\"#{tags}\">#{content}</p>"
62
+ else
63
+ "<p>#{content}</p>"
64
+ end
60
65
  end
61
66
 
62
67
  def parse_content(nodes)
@@ -92,10 +97,55 @@ module Ulysses
92
97
  end
93
98
 
94
99
  def parse_element(node)
95
- send "parse_element_#{node.attributes['kind'].value}", node
100
+ kind = node.attributes['kind'].value
101
+ if INLINE_MARKUPS.include?(kind)
102
+ parse_inline_style(kind, node)
103
+ else
104
+ send "parse_element_#{node.attributes['kind'].value}", node
105
+ end
106
+ end
107
+
108
+ def parse_inline_style(markup, node)
109
+ '<span class="' + snake_case(markup) + '">' + parse_content(node.children) + '</span>'
110
+ end
111
+
112
+ def parse_element_link(node)
113
+ attrs = parse_element_attributes(node)
114
+ content = parse_content(node.children.select{ |child| !child.element? || child.name != 'attribute' })
115
+ '<a href="' + attrs.fetch('URL', '') + '" title="' + attrs.fetch('title', '') + '">' + content + '</a>'
116
+ end
117
+
118
+ def parse_element_image(node)
119
+ attrs = parse_element_attributes(node)
120
+ '<img src="' + attrs.fetch('URL', '') + '" alt="' + attrs.fetch('title', '') + '" />'
121
+ end
122
+
123
+ def parse_element_video(node)
124
+ attrs = parse_element_attributes(node)
125
+ '<video><source src="' + attrs['URL'] + '" /></video>'
126
+ end
127
+
128
+ def parse_element_footnote(node)
129
+ attrs = parse_element_attributes(node)
130
+ @footnotes << attrs['text']
131
+ '<sup class="footnote-ref"><a href="#fn' + @footnotes.size.to_s + '">' + @footnotes.size.to_s + '</a></sup>'
132
+ end
133
+
134
+ def parse_element_annotation(node)
135
+ attrs = parse_element_attributes(node)
136
+ @annotations << attrs['text']
137
+ '<span class="annotation" data-id="' + @annotations.size.to_s + '">' + @annotations.size.to_s + '</span>'
138
+ end
139
+
140
+ def parse_element_attributes(element)
141
+ attributes = element.children.select { |child| child.element? && child.name === 'attribute' }
142
+ attributes.map! do |attr|
143
+ [attr.attributes['identifier'].value, parse_content(attr.children)]
144
+ end
145
+ Hash[attributes]
96
146
  end
97
147
 
98
- def normalize_tag(tag)
148
+ def snake_case(tag)
99
149
  tag.gsub(/::/, '/')
100
150
  .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
101
151
  .gsub(/([a-z\d])([A-Z])/,'\1_\2')
@@ -1,3 +1,3 @@
1
1
  module Ulysses
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ulysses
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaodong Zhao
@@ -115,7 +115,6 @@ files:
115
115
  - lib/ulysses/group.rb
116
116
  - lib/ulysses/library.rb
117
117
  - lib/ulysses/printer.rb
118
- - lib/ulysses/printer/elements.rb
119
118
  - lib/ulysses/sheet.rb
120
119
  - lib/ulysses/version.rb
121
120
  - ulysses.gemspec
@@ -1,69 +0,0 @@
1
- module Ulysses
2
- class Printer
3
-
4
- def parse_element_strong(node)
5
- '<strong>' + node.content + '</strong>'
6
- end
7
-
8
- def parse_element_emph(node)
9
- '<em>' + node.content + '</em>'
10
- end
11
-
12
- def parse_element_mark(node)
13
- '<span class="marked">' + node.content + '</span>'
14
- end
15
-
16
- def parse_element_delete(node)
17
- '<del>' + node.content + '</del>'
18
- end
19
-
20
- def parse_element_inlineComment(node)
21
- '<span class="inline-comment">' + node.content + '</span>'
22
- end
23
-
24
- def parse_element_code(node)
25
- '<code>' + node.content + '</code>'
26
- end
27
-
28
- def parse_element_inlineNative(node)
29
- '<span class="inline-native">' + node.content + '</span>'
30
- end
31
-
32
- def parse_element_link(node)
33
- attrs = parse_element_attributes(node)
34
- content = parse_content(node.children.select{ |child| !child.element? || child.name != 'attribute' })
35
- '<a href="' + attrs.fetch('URL', '') + '" title="' + attrs.fetch('title', '') + '">' + content + '</a>'
36
- end
37
-
38
- def parse_element_image(node)
39
- attrs = parse_element_attributes(node)
40
- '<img src="' + attrs.fetch('URL', '') + '" alt="' + attrs.fetch('title', '') + '" />'
41
- end
42
-
43
- def parse_element_video(node)
44
- attrs = parse_element_attributes(node)
45
- '<video><source src="' + attrs['URL'] + '" /></video>'
46
- end
47
-
48
- def parse_element_footnote(node)
49
- attrs = parse_element_attributes(node)
50
- @footnotes << attrs['text']
51
- '<sup class="footnote-ref"><a href="#fn' + @footnotes.size.to_s + '">' + @footnotes.size.to_s + '</a></sup>'
52
- end
53
-
54
- def parse_element_annotation(node)
55
- attrs = parse_element_attributes(node)
56
- @annotations << attrs['text']
57
- '<span class="annotation" data-id="' + @annotations.size.to_s + '">' + @annotations.size.to_s + '</span>'
58
- end
59
-
60
- def parse_element_attributes(element)
61
- attributes = element.children.select { |child| child.element? && child.name === 'attribute' }
62
- attributes.map! do |attr|
63
- [attr.attributes['identifier'].value, parse_content(attr.children)]
64
- end
65
- Hash[attributes]
66
- end
67
-
68
- end
69
- end