rouge 0.0.2 → 0.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.
- data/lib/rouge.rb +7 -2
- data/lib/rouge/formatters/html.rb +4 -3
- data/lib/rouge/lexer.rb +259 -122
- data/lib/rouge/lexers/css.rb +165 -0
- data/lib/rouge/lexers/diff.rb +28 -0
- data/lib/rouge/lexers/html.rb +65 -0
- data/lib/rouge/lexers/javascript.rb +22 -18
- data/lib/rouge/lexers/shell.rb +40 -24
- data/lib/rouge/lexers/text.rb +11 -0
- data/lib/rouge/theme.rb +36 -47
- data/lib/rouge/themes/colorful.rb +63 -0
- data/lib/rouge/themes/thankful_eyes.rb +11 -9
- data/lib/rouge/token.rb +14 -2
- data/lib/rouge/version.rb +1 -1
- metadata +7 -2
    
        data/lib/rouge/theme.rb
    CHANGED
    
    | @@ -1,24 +1,37 @@ | |
| 1 1 | 
             
            module Rouge
         | 
| 2 2 | 
             
              class Theme
         | 
| 3 | 
            +
                class Style < Hash
         | 
| 4 | 
            +
                  def render(selector, &b)
         | 
| 5 | 
            +
                    return enum_for(:render, selector).to_a.join("\n") unless b
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    return if empty?
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    yield "#{selector} {"
         | 
| 10 | 
            +
                    yield "  color: #{self[:fg]};" if self[:fg]
         | 
| 11 | 
            +
                    yield "  background-color: #{self[:bg]};" if self[:bg]
         | 
| 12 | 
            +
                    yield "  font-weight: bold;" if self[:bold]
         | 
| 13 | 
            +
                    yield "  font-style: italic;" if self[:italic]
         | 
| 14 | 
            +
                    yield "  text-decoration: underline;" if self[:underline]
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    (self[:rules] || []).each do |rule|
         | 
| 17 | 
            +
                      yield "  #{rule};"
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    yield "}"
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 3 24 | 
             
                class << self
         | 
| 4 25 | 
             
                  def styles
         | 
| 5 26 | 
             
                    @styles ||= {}
         | 
| 6 27 | 
             
                  end
         | 
| 7 28 |  | 
| 8 | 
            -
                  def main_style
         | 
| 9 | 
            -
                    @main_style ||= {}
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 29 | 
             
                  def style(*tokens)
         | 
| 13 | 
            -
                     | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 16 | 
            -
                    if tokens.empty?
         | 
| 17 | 
            -
                      @main_style = opts
         | 
| 18 | 
            -
                    end
         | 
| 30 | 
            +
                    style = Style.new
         | 
| 31 | 
            +
                    style.merge!(tokens.pop) if tokens.last.is_a? Hash
         | 
| 19 32 |  | 
| 20 33 | 
             
                    tokens.each do |tok|
         | 
| 21 | 
            -
                      styles[tok.to_s] =  | 
| 34 | 
            +
                      styles[tok.to_s] = style
         | 
| 22 35 | 
             
                    end
         | 
| 23 36 | 
             
                  end
         | 
| 24 37 |  | 
| @@ -41,59 +54,35 @@ module Rouge | |
| 41 54 |  | 
| 42 55 | 
             
              class CSSTheme < Theme
         | 
| 43 56 | 
             
                def initialize(opts={})
         | 
| 44 | 
            -
                  @ | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                def render
         | 
| 48 | 
            -
                  out = []
         | 
| 49 | 
            -
                  stream { |line| out << line }
         | 
| 50 | 
            -
                  out.join("\n")
         | 
| 57 | 
            +
                  @scope = opts[:scope] || '.highlight'
         | 
| 51 58 | 
             
                end
         | 
| 52 59 |  | 
| 53 | 
            -
                def  | 
| 54 | 
            -
                  return enum_for(: | 
| 60 | 
            +
                def render(&b)
         | 
| 61 | 
            +
                  return enum_for(:render).to_a.join("\n") unless b
         | 
| 55 62 |  | 
| 56 63 | 
             
                  self.class.styles.each do |tokname, style|
         | 
| 57 | 
            -
                     | 
| 64 | 
            +
                    style.render(css_selector(Token[tokname]), &b)
         | 
| 58 65 | 
             
                  end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  render_stanza('.highlight', self.class.main_style, &b)
         | 
| 61 66 | 
             
                end
         | 
| 62 67 |  | 
| 63 68 | 
             
              private
         | 
| 64 | 
            -
                def stream_single(tok, style, &b)
         | 
| 65 | 
            -
                  render_stanza(css_selector(tok), style, &b)
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                def render_stanza(selector, style, &b)
         | 
| 69 | 
            -
                  return if style.empty?
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                  yield "#{selector} {"
         | 
| 72 | 
            -
                  yield "  color: #{style[:fg]};" if style[:fg]
         | 
| 73 | 
            -
                  yield "  background-color: #{style[:bg]};" if style[:bg]
         | 
| 74 | 
            -
                  yield "  font-weight: bold;" if style[:bold]
         | 
| 75 | 
            -
                  yield "  font-style: italic;" if style[:italic]
         | 
| 76 | 
            -
                  yield "  text-decoration: underline;" if style[:underline]
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                  (style[:rules] || []).each do |rule|
         | 
| 79 | 
            -
                    yield "  #{rule};"
         | 
| 80 | 
            -
                  end
         | 
| 81 | 
            -
             | 
| 82 | 
            -
                  yield "}"
         | 
| 83 | 
            -
                end
         | 
| 84 | 
            -
             | 
| 85 69 | 
             
                def css_selector(token)
         | 
| 86 70 | 
             
                  tokens = [token]
         | 
| 87 71 | 
             
                  parent = token.parent
         | 
| 88 72 |  | 
| 89 73 | 
             
                  inflate_token(token).map do |tok|
         | 
| 90 | 
            -
                     | 
| 91 | 
            -
                    base << " .#{tok.shortname}" unless tok.shortname.empty?
         | 
| 74 | 
            +
                    raise "unknown token: #{tok.inspect}" if tok.shortname.nil?
         | 
| 92 75 |  | 
| 93 | 
            -
                     | 
| 76 | 
            +
                    single_css_selector(tok)
         | 
| 94 77 | 
             
                  end.join(', ')
         | 
| 95 78 | 
             
                end
         | 
| 96 79 |  | 
| 80 | 
            +
                def single_css_selector(token)
         | 
| 81 | 
            +
                  return @scope if token == Token['Text']
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  "#{@scope} .#{token.shortname}"
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 97 86 | 
             
                # yield all of the tokens that should be styled the same
         | 
| 98 87 | 
             
                # as the given token.  Essentially this recursively all of
         | 
| 99 88 | 
             
                # the subtokens, except those which are more specifically
         | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
            module Rouge
         | 
| 2 | 
            +
              module Themes
         | 
| 3 | 
            +
                # stolen from pygments
         | 
| 4 | 
            +
                class Colorful < CSSTheme
         | 
| 5 | 
            +
                    style 'Text',                      :fg => "#bbbbbb", :bg => 'black'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    style 'Comment',                   :fg => "#888"
         | 
| 8 | 
            +
                    style 'Comment.Preproc',           :fg => "#579"
         | 
| 9 | 
            +
                    style 'Comment.Special',           :fg => "#cc0000", :bold => true
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    style 'Keyword',                   :fg => "#080", :bold => true
         | 
| 12 | 
            +
                    style 'Keyword.Pseudo',            :fg => "#038"
         | 
| 13 | 
            +
                    style 'Keyword.Type',              :fg => "#339"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    style 'Operator',                  :fg => "#333"
         | 
| 16 | 
            +
                    style 'Operator.Word',             :fg => "#000", :bold => true
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    style 'Name.Builtin',              :fg => "#007020"
         | 
| 19 | 
            +
                    style 'Name.Function',             :fg => "#06B", :bold => true
         | 
| 20 | 
            +
                    style 'Name.Class',                :fg => "#B06", :bold => true
         | 
| 21 | 
            +
                    style 'Name.Namespace',            :fg => "#0e84b5", :bold => true
         | 
| 22 | 
            +
                    style 'Name.Exception',            :fg => "#F00", :bold => true
         | 
| 23 | 
            +
                    style 'Name.Variable',             :fg => "#963"
         | 
| 24 | 
            +
                    style 'Name.Variable.Instance',    :fg => "#33B"
         | 
| 25 | 
            +
                    style 'Name.Variable.Class',       :fg => "#369"
         | 
| 26 | 
            +
                    style 'Name.Variable.Global',      :fg => "#d70", :bold => true
         | 
| 27 | 
            +
                    style 'Name.Constant',             :fg => "#036", :bold => true
         | 
| 28 | 
            +
                    style 'Name.Label',                :fg => "#970", :bold => true
         | 
| 29 | 
            +
                    style 'Name.Entity',               :fg => "#800", :bold => true
         | 
| 30 | 
            +
                    style 'Name.Attribute',            :fg => "#00C"
         | 
| 31 | 
            +
                    style 'Name.Tag',                  :fg => "#070"
         | 
| 32 | 
            +
                    style 'Name.Decorator',            :fg => "#555", :bold => true
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    style 'Literal.String',            :bg => "#fff0f0"
         | 
| 35 | 
            +
                    style 'Literal.String.Char',       :fg => "#04D"
         | 
| 36 | 
            +
                    style 'Literal.String.Doc',        :fg => "#D42"
         | 
| 37 | 
            +
                    style 'Literal.String.Interpol',   :bg => "#eee"
         | 
| 38 | 
            +
                    style 'Literal.String.Escape',     :fg => "#666", :bold => true
         | 
| 39 | 
            +
                    style 'Literal.String.Regex',      :fg => "#000", :bg => "#fff0ff"
         | 
| 40 | 
            +
                    style 'Literal.String.Symbol',     :fg => "#A60"
         | 
| 41 | 
            +
                    style 'Literal.String.Other',      :fg => "#D20"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    style 'Literal.Number',            :fg => "#60E", :bold => true
         | 
| 44 | 
            +
                    style 'Literal.Number.Integer',    :fg => "#00D", :bold => true
         | 
| 45 | 
            +
                    style 'Literal.Number.Float',      :fg => "#60E", :bold => true
         | 
| 46 | 
            +
                    style 'Literal.Number.Hex',        :fg => "#058", :bold => true
         | 
| 47 | 
            +
                    style 'Literal.Number.Oct',        :fg => "#40E", :bold => true
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    style 'Generic.Heading',           :fg => "#000080", :bold => true
         | 
| 50 | 
            +
                    style 'Generic.Subheading',        :fg => "#800080", :bold => true
         | 
| 51 | 
            +
                    style 'Generic.Deleted',           :fg => "#A00000"
         | 
| 52 | 
            +
                    style 'Generic.Inserted',          :fg => "#00A000"
         | 
| 53 | 
            +
                    style 'Generic.Error',             :fg => "#FF0000"
         | 
| 54 | 
            +
                    style 'Generic.Emph',              :italic => true
         | 
| 55 | 
            +
                    style 'Generic.Strong',            :bold => true
         | 
| 56 | 
            +
                    style 'Generic.Prompt',            :fg => "#c65d09", :bold => true
         | 
| 57 | 
            +
                    style 'Generic.Output',            :fg => "#888"
         | 
| 58 | 
            +
                    style 'Generic.Traceback',         :fg => "#04D"
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    style 'Error',                     :fg => "#F00", :bg => "#FAA"
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
            end
         | 
| @@ -18,32 +18,36 @@ module Rouge | |
| 18 18 | 
             
                  backlit =        '#4df4ff'
         | 
| 19 19 | 
             
                  schrill =        '#ffb000'
         | 
| 20 20 |  | 
| 21 | 
            -
                  style :fg => unicorn, :bg => krasna
         | 
| 21 | 
            +
                  style 'Text', :fg => unicorn, :bg => krasna
         | 
| 22 22 |  | 
| 23 23 | 
             
                  style 'Comment', :fg => cool_as_ice
         | 
| 24 24 | 
             
                  style 'Error',
         | 
| 25 25 | 
             
                        'Generic.Error', :fg => aluminum1, :bg => scarletred2
         | 
| 26 26 | 
             
                  style 'Keyword', :fg => sandy, :bold => true
         | 
| 27 | 
            -
                  style 'Operator', | 
| 27 | 
            +
                  style 'Operator',
         | 
| 28 | 
            +
                        'Punctuation', :fg => backlit, :bold => true
         | 
| 28 29 | 
             
                  style 'Comment.Preproc',
         | 
| 29 30 | 
             
                        'Comment.Multiline',
         | 
| 30 31 | 
             
                        'Comment.Single',
         | 
| 31 32 | 
             
                        'Comment.Special', :fg => cool_as_ice, :italic => true
         | 
| 32 33 | 
             
                  style 'Generic.Deleted', :fg => scarletred2
         | 
| 34 | 
            +
                  style 'Generic.Inserted', :fg => go_get_it
         | 
| 33 35 | 
             
                  style 'Generic.Emph', :italic => true
         | 
| 34 36 | 
             
                  style 'Generic.Subheading', :fg => '#800080', :bold => true
         | 
| 35 37 | 
             
                  style 'Generic.Traceback', :fg => '#0040D0'
         | 
| 36 38 | 
             
                  style 'Keyword.Constant', :fg => pink_merengue, :bold => true
         | 
| 37 39 | 
             
                  style 'Keyword.Namespace',
         | 
| 38 40 | 
             
                        'Keyword.Pseudo',
         | 
| 39 | 
            -
                        'Keyword.Reserved', | 
| 41 | 
            +
                        'Keyword.Reserved',
         | 
| 42 | 
            +
                        'Generic.Heading', :fg => schrill, :bold => true
         | 
| 40 43 | 
             
                  style 'Keyword.Type',
         | 
| 41 44 | 
             
                        'Name.Constant',
         | 
| 42 45 | 
             
                        'Name.Class',
         | 
| 43 46 | 
             
                        'Name.Decorator',
         | 
| 44 47 | 
             
                        'Name.Namespace',
         | 
| 45 48 | 
             
                        'Name.Builtin.Pseudo',
         | 
| 46 | 
            -
                        'Name.Exception', | 
| 49 | 
            +
                        'Name.Exception',
         | 
| 50 | 
            +
                        'Name.Tag', :fg => go_get_it, :bold => true
         | 
| 47 51 | 
             
                  style 'Literal.Number', :fg => pink_merengue, :bold => true
         | 
| 48 52 | 
             
                  style 'Literal.String', :fg => dune, :bold => true
         | 
| 49 53 | 
             
                  style 'Literal.String.Escape',
         | 
| @@ -51,15 +55,13 @@ module Rouge | |
| 51 55 | 
             
                        'Literal.String.Interpol',
         | 
| 52 56 | 
             
                        'Literal.String.Other',
         | 
| 53 57 | 
             
                        'Literal.String.Symbol', :fg => backlit, :bold => true
         | 
| 54 | 
            -
                  style 'Name.Attribute', :fg => '#7D9029'
         | 
| 55 58 | 
             
                  style 'Name.Builtin', :fg => sandy
         | 
| 56 59 | 
             
                  style 'Name.Entity', :fg => '#999999', :bold => true
         | 
| 57 | 
            -
                  style 'Name.Label', :fg => '#A0A000'
         | 
| 58 | 
            -
                  style 'Name.Tag', :fg => '#008000', :bold => true
         | 
| 59 60 | 
             
                  style 'Text.Whitespace', :fg => '#BBBBBB'
         | 
| 60 61 | 
             
                  style 'Name.Variable',
         | 
| 61 | 
            -
                        'Name.Function', | 
| 62 | 
            -
             | 
| 62 | 
            +
                        'Name.Function',
         | 
| 63 | 
            +
                        'Name.Label',
         | 
| 64 | 
            +
                        'Name.Attribute', :fg => chilly
         | 
| 63 65 | 
             
                end
         | 
| 64 66 | 
             
              end
         | 
| 65 67 | 
             
            end
         | 
    
        data/lib/rouge/token.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ module Rouge | |
| 3 3 | 
             
                attr_reader :name
         | 
| 4 4 | 
             
                attr_reader :parent
         | 
| 5 5 | 
             
                attr_accessor :shortname
         | 
| 6 | 
            +
                alias to_s name
         | 
| 6 7 |  | 
| 7 8 | 
             
                def make_single(name)
         | 
| 8 9 | 
             
                  name = name.to_s
         | 
| @@ -40,6 +41,15 @@ module Rouge | |
| 40 41 | 
             
                  @sub_tokens ||= {}
         | 
| 41 42 | 
             
                end
         | 
| 42 43 |  | 
| 44 | 
            +
                def ancestors(&b)
         | 
| 45 | 
            +
                  return enum_for(:ancestors) unless block_given?
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  if parent
         | 
| 48 | 
            +
                    yield self
         | 
| 49 | 
            +
                    parent.ancestors(&b)
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 43 53 | 
             
                def ===(other)
         | 
| 44 54 | 
             
                  immediate = if self.class == other.class
         | 
| 45 55 | 
             
                    self == other
         | 
| @@ -62,17 +72,19 @@ module Rouge | |
| 62 72 | 
             
                  end
         | 
| 63 73 |  | 
| 64 74 | 
             
                  def get(name)
         | 
| 75 | 
            +
                    return name if name.is_a? Token
         | 
| 76 | 
            +
             | 
| 65 77 | 
             
                    base[name]
         | 
| 66 78 | 
             
                  end
         | 
| 67 79 |  | 
| 80 | 
            +
                  alias [] get
         | 
| 81 | 
            +
             | 
| 68 82 | 
             
                  def token(name, shortname)
         | 
| 69 83 | 
             
                    tok = get(name)
         | 
| 70 84 | 
             
                    tok.shortname = shortname
         | 
| 71 85 | 
             
                    tok
         | 
| 72 86 | 
             
                  end
         | 
| 73 87 |  | 
| 74 | 
            -
                  alias [] get
         | 
| 75 | 
            -
             | 
| 76 88 | 
             
                  def each_token(&b)
         | 
| 77 89 | 
             
                    recurse = proc do |token|
         | 
| 78 90 | 
             
                      b.call(token)
         | 
    
        data/lib/rouge/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rouge
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-09- | 
| 12 | 
            +
            date: 2012-09-04 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: see the description for now
         | 
| 15 15 | 
             
            email:
         | 
| @@ -21,7 +21,12 @@ files: | |
| 21 21 | 
             
            - Gemfile
         | 
| 22 22 | 
             
            - lib/rouge/lexers/shell.rb
         | 
| 23 23 | 
             
            - lib/rouge/lexers/javascript.rb
         | 
| 24 | 
            +
            - lib/rouge/lexers/diff.rb
         | 
| 25 | 
            +
            - lib/rouge/lexers/text.rb
         | 
| 26 | 
            +
            - lib/rouge/lexers/html.rb
         | 
| 27 | 
            +
            - lib/rouge/lexers/css.rb
         | 
| 24 28 | 
             
            - lib/rouge/themes/thankful_eyes.rb
         | 
| 29 | 
            +
            - lib/rouge/themes/colorful.rb
         | 
| 25 30 | 
             
            - lib/rouge/token.rb
         | 
| 26 31 | 
             
            - lib/rouge/formatters/html.rb
         | 
| 27 32 | 
             
            - lib/rouge/version.rb
         |