mdless 1.0.2 → 1.0.3
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/mdless.rb +2 -0
- data/lib/mdless/converter.rb +47 -167
- data/lib/mdless/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 47c92338d7793e3f3e394164c31eaae071933aaca4b468f09e507835ceb41512
         | 
| 4 | 
            +
              data.tar.gz: fb290c4a11f812e06bfb48699b903c91565c8c57e437a6689430ed98dd7bf6ad
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8d9a492f4f485aa43e19315f5526d3dba15b30b2e81420ff24f8e2dbd3bdb1a8335370c02e6c7d535d0a2b6c0f3904c21ad85fa4f81ca0aab8dc0713ac201863
         | 
| 7 | 
            +
              data.tar.gz: 34c641d25c5b277e1cb9c0109df760cb1f9c179982447feeaafcaac1ada440b4e2cfc742f203176b20c09a1700c4a4c2d351f66b670f48748ae22b2de98d280a
         | 
    
        data/lib/mdless.rb
    CHANGED
    
    
    
        data/lib/mdless/converter.rb
    CHANGED
    
    | @@ -1,16 +1,10 @@ | |
| 1 1 | 
             
            require 'fileutils'
         | 
| 2 2 | 
             
            require 'yaml'
         | 
| 3 3 |  | 
| 4 | 
            -
            class ::Hash
         | 
| 5 | 
            -
                def deep_merge(second)
         | 
| 6 | 
            -
                    merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
         | 
| 7 | 
            -
                    self.merge(second.to_h, &merger)
         | 
| 8 | 
            -
                end
         | 
| 9 | 
            -
            end
         | 
| 10 | 
            -
             | 
| 11 4 | 
             
            module CLIMarkdown
         | 
| 12 5 | 
             
              class Converter
         | 
| 13 6 | 
             
                include Colors
         | 
| 7 | 
            +
                include Theme
         | 
| 14 8 |  | 
| 15 9 | 
             
                attr_reader :helpers, :log
         | 
| 16 10 |  | 
| @@ -22,167 +16,31 @@ module CLIMarkdown | |
| 22 16 | 
             
                  @log = Logger.new(STDERR)
         | 
| 23 17 | 
             
                  @log.level = Logger::ERROR
         | 
| 24 18 |  | 
| 25 | 
            -
                  config_dir = File.expand_path('~/.config/mdless')
         | 
| 26 | 
            -
                  theme_file = File.join(config_dir,'mdless.theme')
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  theme_defaults = {
         | 
| 29 | 
            -
                    'metadata' => {
         | 
| 30 | 
            -
                      'border' => 'd blue on_black',
         | 
| 31 | 
            -
                      'marker' => 'd black on_black',
         | 
| 32 | 
            -
                      'color' => 'd white on_black'
         | 
| 33 | 
            -
                    },
         | 
| 34 | 
            -
                    'emphasis' => {
         | 
| 35 | 
            -
                      'bold' => 'b',
         | 
| 36 | 
            -
                      'italic' => 'u i',
         | 
| 37 | 
            -
                      'bold-italic' => 'b u i'
         | 
| 38 | 
            -
                    },
         | 
| 39 | 
            -
                    'h1' => {
         | 
| 40 | 
            -
                      'color' => 'b intense_black on_white',
         | 
| 41 | 
            -
                      'pad' => 'd black on_white',
         | 
| 42 | 
            -
                      'pad_char' => '='
         | 
| 43 | 
            -
                    },
         | 
| 44 | 
            -
                    'h2' => {
         | 
| 45 | 
            -
                      'color' => 'b white on_intense_black',
         | 
| 46 | 
            -
                      'pad' => 'd white on_intense_black',
         | 
| 47 | 
            -
                      'pad_char' => '-'
         | 
| 48 | 
            -
                    },
         | 
| 49 | 
            -
                    'h3' => {
         | 
| 50 | 
            -
                      'color' => 'u b yellow'
         | 
| 51 | 
            -
                    },
         | 
| 52 | 
            -
                    'h4' => {
         | 
| 53 | 
            -
                      'color' => 'u yellow'
         | 
| 54 | 
            -
                    },
         | 
| 55 | 
            -
                    'h5' => {
         | 
| 56 | 
            -
                      'color' => 'b white'
         | 
| 57 | 
            -
                    },
         | 
| 58 | 
            -
                    'h6' => {
         | 
| 59 | 
            -
                      'color' => 'b white'
         | 
| 60 | 
            -
                    },
         | 
| 61 | 
            -
                    'link' => {
         | 
| 62 | 
            -
                      'brackets' => 'b black',
         | 
| 63 | 
            -
                      'text' => 'u b blue',
         | 
| 64 | 
            -
                      'url' => 'cyan'
         | 
| 65 | 
            -
                    },
         | 
| 66 | 
            -
                    'image' => {
         | 
| 67 | 
            -
                      'bang' => 'red',
         | 
| 68 | 
            -
                      'brackets' => 'b black',
         | 
| 69 | 
            -
                      'title' => 'cyan',
         | 
| 70 | 
            -
                      'url' => 'u yellow'
         | 
| 71 | 
            -
                    },
         | 
| 72 | 
            -
                    'list' => {
         | 
| 73 | 
            -
                      'bullet' => 'b intense_red',
         | 
| 74 | 
            -
                      'number' => 'b intense_blue',
         | 
| 75 | 
            -
                      'color' => 'intense_white'
         | 
| 76 | 
            -
                    },
         | 
| 77 | 
            -
                    'footnote' => {
         | 
| 78 | 
            -
                      'brackets' => 'b black on_black',
         | 
| 79 | 
            -
                      'caret' => 'b yellow on_black',
         | 
| 80 | 
            -
                      'title' => 'x yellow on_black',
         | 
| 81 | 
            -
                      'note' => 'u white on_black'
         | 
| 82 | 
            -
                    },
         | 
| 83 | 
            -
                    'code_span' => {
         | 
| 84 | 
            -
                      'marker' => 'b white',
         | 
| 85 | 
            -
                      'color' => 'b black on_intense_blue'
         | 
| 86 | 
            -
                    },
         | 
| 87 | 
            -
                    'code_block' => {
         | 
| 88 | 
            -
                      'marker' => 'intense_black',
         | 
| 89 | 
            -
                      'bg' => 'on_black',
         | 
| 90 | 
            -
                      'color' => 'white on_black',
         | 
| 91 | 
            -
                      'border' => 'blue',
         | 
| 92 | 
            -
                      'title' => 'magenta',
         | 
| 93 | 
            -
                      'eol' => 'intense_black on_black',
         | 
| 94 | 
            -
                      'pygments_theme' => 'monokai'
         | 
| 95 | 
            -
                    },
         | 
| 96 | 
            -
                    'dd' => {
         | 
| 97 | 
            -
                      'marker' => 'd red',
         | 
| 98 | 
            -
                      'color' => 'b white'
         | 
| 99 | 
            -
                    },
         | 
| 100 | 
            -
                    'hr' => {
         | 
| 101 | 
            -
                      'color' => 'd white'
         | 
| 102 | 
            -
                    },
         | 
| 103 | 
            -
                    'table' => {
         | 
| 104 | 
            -
                      'border' => 'd black',
         | 
| 105 | 
            -
                      'header' => 'yellow',
         | 
| 106 | 
            -
                      'divider' => 'b black',
         | 
| 107 | 
            -
                      'color' => 'white'
         | 
| 108 | 
            -
                    },
         | 
| 109 | 
            -
                    'html' => {
         | 
| 110 | 
            -
                      'brackets' => 'd yellow on_black',
         | 
| 111 | 
            -
                      'color' => 'yellow on_black'
         | 
| 112 | 
            -
                    }
         | 
| 113 | 
            -
                  }
         | 
| 114 | 
            -
             | 
| 115 | 
            -
                  unless File.directory?(config_dir)
         | 
| 116 | 
            -
                    @log.info("Creating config directory at #{config_dir}")
         | 
| 117 | 
            -
                    FileUtils.mkdir_p(config_dir)
         | 
| 118 | 
            -
                  end
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                  unless File.exists?(theme_file)
         | 
| 121 | 
            -
                    @log.info("Writing fresh theme file to #{theme_file}")
         | 
| 122 | 
            -
                    File.open(theme_file,'w') {|f|
         | 
| 123 | 
            -
                      f.puts @theme.to_yaml
         | 
| 124 | 
            -
                    }
         | 
| 125 | 
            -
                    @theme = theme_defaults
         | 
| 126 | 
            -
                  else
         | 
| 127 | 
            -
                    new_theme = YAML.load(IO.read(theme_file))
         | 
| 128 | 
            -
                    begin
         | 
| 129 | 
            -
                      @theme = theme_defaults.deep_merge(new_theme)
         | 
| 130 | 
            -
                      # write merged theme back in case there are new keys since
         | 
| 131 | 
            -
                      # last updated
         | 
| 132 | 
            -
                      File.open(theme_file,'w') {|f|
         | 
| 133 | 
            -
                        f.puts @theme.to_yaml
         | 
| 134 | 
            -
                      }
         | 
| 135 | 
            -
                    rescue
         | 
| 136 | 
            -
                      @log.warn('Error merging user theme')
         | 
| 137 | 
            -
                      @theme = theme_defaults
         | 
| 138 | 
            -
                    end
         | 
| 139 | 
            -
                  end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 19 | 
             
                  @options = {}
         | 
| 143 20 | 
             
                  optparse = OptionParser.new do |opts|
         | 
| 144 21 | 
             
                    opts.banner = "#{version} by Brett Terpstra\n\n> Usage: #{CLIMarkdown::EXECUTABLE_NAME} [options] [path]\n\n"
         | 
| 145 22 |  | 
| 146 | 
            -
                    @options[:section] = nil
         | 
| 147 | 
            -
                    opts.on( '-s', '--section=NUMBER', 'Output only a headline-based section of the input (numeric from --list)' ) do |section|
         | 
| 148 | 
            -
                      @options[:section] = section.to_i
         | 
| 149 | 
            -
                    end
         | 
| 150 | 
            -
             | 
| 151 | 
            -
                    @options[:width] = %x{tput cols}.strip.to_i
         | 
| 152 | 
            -
                    opts.on( '-w', '--width=COLUMNS', 'Column width to format for (default terminal width)' ) do |columns|
         | 
| 153 | 
            -
                      @options[:width] = columns.to_i
         | 
| 154 | 
            -
                    end
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                    @options[:pager] = true
         | 
| 157 | 
            -
                    opts.on( '-p', '--[no-]pager', 'Formatted output to pager (default on)' ) do |p|
         | 
| 158 | 
            -
                      @options[:pager] = p
         | 
| 159 | 
            -
                    end
         | 
| 160 | 
            -
             | 
| 161 | 
            -
                    opts.on( '-P', 'Disable pager (same as --no-pager)' ) do
         | 
| 162 | 
            -
                      @options[:pager] = false
         | 
| 163 | 
            -
                    end
         | 
| 164 | 
            -
             | 
| 165 23 | 
             
                    @options[:color] = true
         | 
| 166 24 | 
             
                    opts.on( '-c', '--[no-]color', 'Colorize output (default on)' ) do |c|
         | 
| 167 25 | 
             
                      @options[:color] = c
         | 
| 168 26 | 
             
                    end
         | 
| 169 27 |  | 
| 170 | 
            -
                     | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 28 | 
            +
                    opts.on( '-d', '--debug LEVEL', 'Level of debug messages to output' ) do |level|
         | 
| 29 | 
            +
                      if level.to_i > 0 && level.to_i < 5
         | 
| 30 | 
            +
                        @log.level = 5 - level.to_i
         | 
| 31 | 
            +
                      else
         | 
| 32 | 
            +
                        $stderr.puts "Error: Log level out of range (1-4)"
         | 
| 33 | 
            +
                        Process.exit 1
         | 
| 174 34 | 
             
                      end
         | 
| 175 35 | 
             
                    end
         | 
| 176 36 |  | 
| 177 | 
            -
                     | 
| 178 | 
            -
             | 
| 179 | 
            -
                       | 
| 37 | 
            +
                    opts.on( '-h', '--help', 'Display this screen' ) do
         | 
| 38 | 
            +
                      puts opts
         | 
| 39 | 
            +
                      exit
         | 
| 180 40 | 
             
                    end
         | 
| 181 41 |  | 
| 182 42 | 
             
                    @options[:local_images] = false
         | 
| 183 43 | 
             
                    @options[:remote_images] = false
         | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 44 | 
             
                    opts.on('-i', '--images=TYPE', 'Include [local|remote (both)] images in output (requires imgcat and iTerm2, default NONE)' ) do |type|
         | 
| 187 45 | 
             
                      unless exec_available('imgcat')# && ENV['TERM_PROGRAM'] == 'iTerm.app'
         | 
| 188 46 | 
             
                        @log.warn('images turned on but imgcat not found')
         | 
| @@ -204,29 +62,51 @@ module CLIMarkdown | |
| 204 62 | 
             
                      end
         | 
| 205 63 | 
             
                    end
         | 
| 206 64 |  | 
| 207 | 
            -
             | 
| 208 | 
            -
                    opts.on( ' | 
| 209 | 
            -
                      if  | 
| 210 | 
            -
                        @ | 
| 211 | 
            -
                      else
         | 
| 212 | 
            -
                        $stderr.puts "Error: Log level out of range (1-4)"
         | 
| 213 | 
            -
                        Process.exit 1
         | 
| 65 | 
            +
                    @options[:links] = :inline
         | 
| 66 | 
            +
                    opts.on( '--links=FORMAT', 'Link style ([inline, reference], default inline) [NOT CURRENTLY IMPLEMENTED]' ) do |format|
         | 
| 67 | 
            +
                      if format =~ /^r/i
         | 
| 68 | 
            +
                        @options[:links] = :reference
         | 
| 214 69 | 
             
                      end
         | 
| 215 70 | 
             
                    end
         | 
| 216 71 |  | 
| 217 | 
            -
                     | 
| 218 | 
            -
             | 
| 219 | 
            -
                       | 
| 72 | 
            +
                    @options[:list] = false
         | 
| 73 | 
            +
                    opts.on( '-l', '--list', 'List headers in document and exit' ) do
         | 
| 74 | 
            +
                      @options[:list] = true
         | 
| 75 | 
            +
                    end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                    @options[:pager] = true
         | 
| 78 | 
            +
                    opts.on( '-p', '--[no-]pager', 'Formatted output to pager (default on)' ) do |p|
         | 
| 79 | 
            +
                      @options[:pager] = p
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    opts.on( '-P', 'Disable pager (same as --no-pager)' ) do
         | 
| 83 | 
            +
                      @options[:pager] = false
         | 
| 84 | 
            +
                    end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    @options[:section] = nil
         | 
| 87 | 
            +
                    opts.on( '-s', '--section=NUMBER', 'Output only a headline-based section of the input (numeric from --list)' ) do |section|
         | 
| 88 | 
            +
                      @options[:section] = section.to_i
         | 
| 89 | 
            +
                    end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                    @options[:theme] = 'default'
         | 
| 92 | 
            +
                    opts.on( '-t', '--theme=THEME_NAME', 'Specify an alternate color theme to load' ) do |theme|
         | 
| 93 | 
            +
                      @options[:theme] = theme
         | 
| 220 94 | 
             
                    end
         | 
| 221 95 |  | 
| 222 96 | 
             
                    opts.on( '-v', '--version', 'Display version number' ) do
         | 
| 223 97 | 
             
                      puts version
         | 
| 224 98 | 
             
                      exit
         | 
| 225 99 | 
             
                    end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    @options[:width] = %x{tput cols}.strip.to_i
         | 
| 102 | 
            +
                    opts.on( '-w', '--width=COLUMNS', 'Column width to format for (default terminal width)' ) do |columns|
         | 
| 103 | 
            +
                      @options[:width] = columns.to_i
         | 
| 104 | 
            +
                    end
         | 
| 226 105 | 
             
                  end
         | 
| 227 106 |  | 
| 228 107 | 
             
                  optparse.parse!
         | 
| 229 108 |  | 
| 109 | 
            +
                  @theme = load_theme(@options[:theme])
         | 
| 230 110 | 
             
                  @cols = @options[:width]
         | 
| 231 111 | 
             
                  @output = ''
         | 
| 232 112 | 
             
                  @headers = []
         | 
| @@ -678,11 +558,11 @@ module CLIMarkdown | |
| 678 558 | 
             
                    input = new_content.join("\n")
         | 
| 679 559 | 
             
                  end
         | 
| 680 560 |  | 
| 681 | 
            -
                  h_adjust = highest_header(input) - 1
         | 
| 682 | 
            -
                  input.gsub!(/^(#+)/) do |m|
         | 
| 683 | 
            -
             | 
| 684 | 
            -
             | 
| 685 | 
            -
                  end
         | 
| 561 | 
            +
                  # h_adjust = highest_header(input) - 1
         | 
| 562 | 
            +
                  # input.gsub!(/^(#+)/) do |m|
         | 
| 563 | 
            +
                  #   match = Regexp.last_match
         | 
| 564 | 
            +
                  #   "#" * (match[1].length - h_adjust)
         | 
| 565 | 
            +
                  # end
         | 
| 686 566 |  | 
| 687 567 | 
             
                  # code block parsing
         | 
| 688 568 | 
             
                  input.gsub!(/(?i-m)(^[ \t]*[`~]{3,})([\s\S]*?)\n([\s\S]*?)\1/m) do
         | 
    
        data/lib/mdless/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mdless
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Brett Terpstra
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-09- | 
| 11 | 
            +
            date: 2019-09-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         |