notroff 0.3.0 → 0.3.1
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.
- data/lib/notroff/#filter.rb# +27 -0
- data/lib/notroff/filter.rb +11 -0
- data/lib/notroff/formatter.rb +2 -0
- data/lib/notroff/odt_renderer.rb +1 -1
- data/lib/notroff/template_expander.rb +13 -7
- data/lib/yesroff/odt_parser.rb +26 -4
- data/lib/yesroff/text.rb +1 -1
- metadata +2 -1
@@ -0,0 +1,27 @@
|
|
1
|
+
class Filter
|
2
|
+
def process(paragraphs)
|
3
|
+
paragraphs.find_all {|p| included?(p)}
|
4
|
+
end
|
5
|
+
|
6
|
+
def included?(paragraph)
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class IncludedFilter < Filter
|
12
|
+
def included?(paragraph)
|
13
|
+
paragraph[:included]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class RegularExpressionExcludeFilter
|
18
|
+
< Filter
|
19
|
+
def initialize(exclude_re)
|
20
|
+
@exclude_re = exclude_re
|
21
|
+
end
|
22
|
+
|
23
|
+
def included?(paragraph)
|
24
|
+
@exclude_re !~ paragraph
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/notroff/filter.rb
CHANGED
@@ -13,3 +13,14 @@ class IncludedFilter < Filter
|
|
13
13
|
paragraph[:included]
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
class RegularExpressionExcludeFilter < Filter
|
18
|
+
def initialize(exclude_re)
|
19
|
+
@exclude_re = exclude_re
|
20
|
+
end
|
21
|
+
|
22
|
+
def included?(paragraph)
|
23
|
+
@exclude_re !~ paragraph
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/lib/notroff/formatter.rb
CHANGED
@@ -36,7 +36,9 @@ end
|
|
36
36
|
class OdtFormatter < Formatter
|
37
37
|
def initialize(input, output)
|
38
38
|
super()
|
39
|
+
prepend_processor RegularExpressionExcludeFilter.new(/^--.*$/)
|
39
40
|
prepend_processor FileReader.new(input)
|
41
|
+
|
40
42
|
add_processor BodyTypeRefiner.new
|
41
43
|
add_processor CodeTypeRefiner.new
|
42
44
|
add_processor CodeTypeRefiner.new(:listing, :first_listing, :middle_listing, :end_listing)
|
data/lib/notroff/odt_renderer.rb
CHANGED
@@ -9,17 +9,23 @@ class TemplateExpander < Processor
|
|
9
9
|
def initialize
|
10
10
|
end
|
11
11
|
|
12
|
-
def process(
|
13
|
-
puts "reading file: #{TEMPLATE}"
|
12
|
+
def process( content_map )
|
14
13
|
doc = REXML::Document.new(File.new(TEMPLATE))
|
14
|
+
insert_body(doc, content_map[:body])
|
15
|
+
doc.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def insert_body(doc, body_elements)
|
19
|
+
puts "reading file: #{TEMPLATE}"
|
20
|
+
|
15
21
|
text_element = REXML::XPath.first(doc, PATH)
|
16
22
|
n = text_element.elements.size
|
17
23
|
puts "deleting #{n} elements"
|
18
24
|
n.times {|i| text_element.delete_element(1)}
|
19
|
-
puts "ELs: #{
|
20
|
-
puts "ELs: #{
|
21
|
-
|
22
|
-
|
23
|
-
doc
|
25
|
+
puts "ELs: #{body_elements.size}"
|
26
|
+
puts "ELs: #{body_elements}"
|
27
|
+
body_elements.each {|el| text_element.add_element(el)}
|
28
|
+
|
29
|
+
doc
|
24
30
|
end
|
25
31
|
end
|
data/lib/yesroff/odt_parser.rb
CHANGED
@@ -44,7 +44,7 @@ class OdtParser
|
|
44
44
|
ParagraphStyle.new('HA', nil, :title, true),
|
45
45
|
ParagraphStyle.new('HB', nil, :subtitle, true),
|
46
46
|
ParagraphStyle.new('HC', nil, :sec, true),
|
47
|
-
ParagraphStyle.new('
|
47
|
+
ParagraphStyle.new('TH', nil, :theading, true),
|
48
48
|
ParagraphStyle.new('LH', nil, :ltitle, true),
|
49
49
|
ParagraphStyle.new('LC', nil, :listing, false),
|
50
50
|
ParagraphStyle.new('LC2', nil, :listing, false),
|
@@ -53,6 +53,7 @@ class OdtParser
|
|
53
53
|
ParagraphStyle.new('BL1', nil, :bullet, true),
|
54
54
|
ParagraphStyle.new('BL', nil, :bullet, true),
|
55
55
|
ParagraphStyle.new('BX', nil, :bullet, true),
|
56
|
+
ParagraphStyle.new('BLPara', nil, :bullet, true),
|
56
57
|
ParagraphStyle.new('Quotation_20_Attribution', nil, :attribution, true),
|
57
58
|
ParagraphStyle.new('CDTX', nil, :code, false)
|
58
59
|
]
|
@@ -92,7 +93,7 @@ class OdtParser
|
|
92
93
|
styles.each do |s|
|
93
94
|
attrs = s.attributes
|
94
95
|
style = ParagraphStyle.new(attrs['style:name'])
|
95
|
-
style.parent =
|
96
|
+
style.parent = find_or_create_para_style(attrs['parent-style-name'])
|
96
97
|
@para_styles[style.name] = style
|
97
98
|
end
|
98
99
|
end
|
@@ -112,6 +113,17 @@ class OdtParser
|
|
112
113
|
s
|
113
114
|
end
|
114
115
|
|
116
|
+
def find_or_create_para_style(name)
|
117
|
+
# return lookup_para_style(name)
|
118
|
+
s = @para_styles[name]
|
119
|
+
unless s
|
120
|
+
STDERR.puts "Warning: no paragraph style named #{name}"
|
121
|
+
s = ParagraphStyle.new(name, nil, :body, false)
|
122
|
+
@para_styles[s.name] = s
|
123
|
+
s
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
115
127
|
def lookup_text_style(name)
|
116
128
|
name = "Default" if name.nil? or name.empty?
|
117
129
|
s = @text_styles[name]
|
@@ -119,11 +131,21 @@ class OdtParser
|
|
119
131
|
s
|
120
132
|
end
|
121
133
|
|
134
|
+
def find_or_create_text_style(name)
|
135
|
+
s = @text_styles[name]
|
136
|
+
unless s
|
137
|
+
STDERR.puts "Warning: no character style named #{name}"
|
138
|
+
s = TextStyle.new(name)
|
139
|
+
@text_styles[s.name] = s
|
140
|
+
end
|
141
|
+
s
|
142
|
+
end
|
143
|
+
|
122
144
|
def parse_paragraph(p)
|
123
145
|
attrs = p.attributes
|
124
146
|
# puts "Parsing paragraph, attrs #{attrs}"
|
125
147
|
# puts "==> style-name: [[#{attrs['text:style-name']}]]"
|
126
|
-
style =
|
148
|
+
style = find_or_create_para_style(attrs['text:style-name'])
|
127
149
|
|
128
150
|
para = Paragraph.new(style)
|
129
151
|
para.contents = parse_contents(para, p)
|
@@ -132,7 +154,7 @@ class OdtParser
|
|
132
154
|
|
133
155
|
def parse_span(el)
|
134
156
|
attrs = el.attributes
|
135
|
-
style =
|
157
|
+
style = find_or_create_text_style(attrs['text:style-name'])
|
136
158
|
indent = attrs['text:c'] ? attrs['text:c'].to_i : 0
|
137
159
|
span = Span.new(style)
|
138
160
|
span.indent = indent
|
data/lib/yesroff/text.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notroff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- spec/text_spec.rb
|
34
34
|
- spec/type_assigner_spec.rb
|
35
35
|
- spec/with_commands.nr
|
36
|
+
- lib/notroff/#filter.rb#
|
36
37
|
- lib/notroff/#io.rb#
|
37
38
|
- lib/notroff/code_scrubber.rb
|
38
39
|
- lib/notroff/command_processor.rb
|