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 +1 -1
- data/lib/yesroff/nr_writer.rb +19 -0
- data/lib/yesroff/odt_parser.rb +44 -5
- data/lib/yesroff/text.rb +27 -4
- metadata +13 -3
- data/lib/notroff/#filter.rb# +0 -27
    
        data/bin/notroff
    CHANGED
    
    
    
        data/lib/yesroff/nr_writer.rb
    CHANGED
    
    | @@ -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
         | 
    
        data/lib/yesroff/odt_parser.rb
    CHANGED
    
    | @@ -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 | 
            -
             | 
| 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 | 
            -
             | 
| 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 | 
            -
                 | 
| 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 | 
            -
             | 
| 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 | 
            -
                 | 
| 36 | 
            -
             | 
| 37 | 
            -
                 | 
| 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 | 
            -
                 | 
| 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. | 
| 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
         | 
    
        data/lib/notroff/#filter.rb#
    DELETED
    
    | @@ -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
         |