notroff 0.3.1 → 0.3.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.
data/bin/notroff CHANGED
@@ -3,7 +3,7 @@ require 'pp'
3
3
  require "notroff"
4
4
 
5
5
  options={}
6
- formatter_class = HtmlFormatter
6
+ formatter_class = OdtFormatter
7
7
 
8
8
  while true
9
9
  if ARGV.first == '-o'
@@ -3,6 +3,7 @@ class NRWriter
3
3
 
4
4
  def initialize
5
5
  @para_style = :body
6
+ @text_style = :normal
6
7
  @single_line = false
7
8
  end
8
9
 
@@ -19,6 +20,24 @@ class NRWriter
19
20
  @single_line = single_line
20
21
  end
21
22
 
23
+ def switch_text_style(new_style)
24
+ debug " <<switching to new style #{new_style}>> "
25
+ return if @text_style == new_style
26
+ if @text_style != :normal
27
+ toggle_text_style(@text_style)
28
+ end
29
+ if new_style != :normal
30
+ toggle_text_style(new_style)
31
+ end
32
+ @text_style = new_style
33
+ end
34
+
35
+ def toggle_text_style(style)
36
+ toggle_bold if style == :bold
37
+ toggle_italic if style == :italic
38
+ toggle_code if style == :code
39
+ end
40
+
22
41
  def end_paragraph
23
42
  puts
24
43
  if @single_line
@@ -2,13 +2,27 @@ require 'rexml/document'
2
2
  require 'pp'
3
3
  require 'zip/zipfilesystem'
4
4
 
5
+ DEBUG=true
6
+
7
+ def log(*args)
8
+ $stderr.puts args.join(' ')
9
+ end
10
+
11
+ def debug(*args)
12
+ #return unless DEBUG
13
+ puts args.join(' ')
14
+ end
15
+
5
16
  class OdtParser
17
+
6
18
  def initialize(odt_path)
19
+ log "Reading #{odt_path}..."
7
20
  Zip::ZipFile.open(odt_path ) do |zipfile|
8
21
  zipfile.file.open("content.xml") do |content|
9
22
  @doc = REXML::Document.new(content.read)
10
23
  end
11
24
  end
25
+ log "Done"
12
26
 
13
27
  @writer = NRWriter.new
14
28
  @paras = []
@@ -39,23 +53,44 @@ class OdtParser
39
53
  ParagraphStyle.new('FT', nil, :body, false),
40
54
  ParagraphStyle.new('IT', nil, :body, false),
41
55
  ParagraphStyle.new('Quotation', nil, :quote, true),
56
+
42
57
  ParagraphStyle.new('CDT1', nil, :code, false),
43
58
  ParagraphStyle.new('CDT', nil, :code, false),
59
+ ParagraphStyle.new('CDTX', nil, :code, false),
60
+ ParagraphStyle.new('C1', nil, :c1, true),
61
+ ParagraphStyle.new('C2', nil, :c1, true),
62
+ ParagraphStyle.new('TB', nil, :c1, true),
63
+ ParagraphStyle.new('Free_20_Form', nil, :c1, true),
64
+
65
+
66
+ ParagraphStyle.new('NLC1', nil, :code, false),
67
+ ParagraphStyle.new('NLC', nil, :code, false),
68
+ ParagraphStyle.new('NLCX', nil, :code, false),
69
+ ParagraphStyle.new('NLPara', nil, :code, false),
70
+
71
+ ParagraphStyle.new('TX', nil, :code, false),
72
+
44
73
  ParagraphStyle.new('HA', nil, :title, true),
45
74
  ParagraphStyle.new('HB', nil, :subtitle, true),
46
75
  ParagraphStyle.new('HC', nil, :sec, true),
76
+ ParagraphStyle.new('HD', nil, :subsec, true),
47
77
  ParagraphStyle.new('TH', nil, :theading, true),
48
78
  ParagraphStyle.new('LH', nil, :ltitle, true),
49
79
  ParagraphStyle.new('LC', nil, :listing, false),
50
80
  ParagraphStyle.new('LC2', nil, :listing, false),
51
81
  ParagraphStyle.new('LX', nil, :listing, false),
52
- ParagraphStyle.new('C1', nil, :c1, true),
82
+
53
83
  ParagraphStyle.new('BL1', nil, :bullet, true),
54
84
  ParagraphStyle.new('BL', nil, :bullet, true),
55
85
  ParagraphStyle.new('BX', nil, :bullet, true),
86
+
87
+ ParagraphStyle.new('NL1', nil, :list, true),
88
+ ParagraphStyle.new('NL', nil, :list, true),
89
+ ParagraphStyle.new('NX', nil, :list, true),
90
+
56
91
  ParagraphStyle.new('BLPara', nil, :bullet, true),
57
- ParagraphStyle.new('Quotation_20_Attribution', nil, :attribution, true),
58
- ParagraphStyle.new('CDTX', nil, :code, false)
92
+ ParagraphStyle.new('Quotation_20_Attribution', nil, :attribution, true)
93
+
59
94
  ]
60
95
 
61
96
  hash = {}
@@ -74,6 +109,7 @@ class OdtParser
74
109
  end
75
110
 
76
111
  def parse_text_styles
112
+ log "Parsing text styles"
77
113
  styles = REXML::XPath.match(@doc, "//style:style[@style:family='text']")
78
114
  styles.each do |s|
79
115
  attrs = s.attributes
@@ -89,6 +125,7 @@ class OdtParser
89
125
  end
90
126
 
91
127
  def parse_paragraph_styles
128
+ log "Parsing paragraph styles"
92
129
  styles = REXML::XPath.match(@doc, "//style:style[@style:family='paragraph']")
93
130
  styles.each do |s|
94
131
  attrs = s.attributes
@@ -99,6 +136,7 @@ class OdtParser
99
136
  end
100
137
 
101
138
  def parse_paragraphs
139
+ log "Parsing paragraphs"
102
140
  results = []
103
141
  paras = REXML::XPath.match(@doc, '//text:p')
104
142
  paras.each do |p|
@@ -109,12 +147,13 @@ class OdtParser
109
147
 
110
148
  def lookup_para_style(name)
111
149
  s = @para_styles[name]
112
- raise "No such para style #{name}" unless s
150
+ log "No such para style #{name}" unless s
151
+ #raise "No such para style #{name}" unless s
113
152
  s
114
153
  end
115
154
 
116
155
  def find_or_create_para_style(name)
117
- # return lookup_para_style(name)
156
+ return lookup_para_style(name)
118
157
  s = @para_styles[name]
119
158
  unless s
120
159
  STDERR.puts "Warning: no paragraph style named #{name}"
data/lib/yesroff/text.rb CHANGED
@@ -32,9 +32,17 @@ class TextStyle < Style
32
32
  end
33
33
 
34
34
  def render(w)
35
- w.toggle_bold if @bold
36
- w.toggle_code if @code
37
- w.toggle_italic if @italic
35
+ puts "Rendering style #{self}"
36
+
37
+ if @bold
38
+ w.switch_text_style(:bold)
39
+ elsif @italic
40
+ w.switch_text_style(:italic)
41
+ elsif @code
42
+ w.switch_text_style(:code)
43
+ else
44
+ w.switch_text_style(:normal)
45
+ end
38
46
  end
39
47
  end
40
48
 
@@ -66,6 +74,12 @@ class Container
66
74
  @contents << content
67
75
  end
68
76
 
77
+ def length
78
+ l = 0
79
+ @contents.each {|kid| l += kid.length}
80
+ l
81
+ end
82
+
69
83
  def render(w)
70
84
  #puts "========= rendering #{self.class} size: #{contents.size}"
71
85
  #pp contents
@@ -78,6 +92,8 @@ class Span < Container
78
92
  attr_accessor :indent
79
93
 
80
94
  def render(w)
95
+ debug "\nrendering span #{self} length #{self.length}"
96
+ return if self.length == 0
81
97
  style.render(w)
82
98
  w.indent(@indent) if @indent
83
99
  super(w)
@@ -101,7 +117,14 @@ class Text
101
117
  end
102
118
 
103
119
  def render(w)
104
- w.text(@text)
120
+ text = @text.gsub(/@@/, '\@\@')
121
+ text = text.gsub(/~~/, '\~\~')
122
+ text = text.gsub(/!!/, '\!\!')
123
+ w.text(text)
124
+ end
125
+
126
+ def length
127
+ @text.length
105
128
  end
106
129
 
107
130
  def to_s
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.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,18 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-09-03 00:00:00.000000000Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rubyzip
16
+ requirement: &70333341691900 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70333341691900
14
25
  description: NotRoff A simple text to openoffice filter
15
26
  email: russ@russolsen.com
16
27
  executables:
@@ -33,7 +44,6 @@ files:
33
44
  - spec/text_spec.rb
34
45
  - spec/type_assigner_spec.rb
35
46
  - spec/with_commands.nr
36
- - lib/notroff/#filter.rb#
37
47
  - lib/notroff/#io.rb#
38
48
  - lib/notroff/code_scrubber.rb
39
49
  - lib/notroff/command_processor.rb
@@ -1,27 +0,0 @@
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