monocle-print 1.0.5 → 1.1.0
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 +8 -8
- data/lib/monocle-print.rb +1 -1
- data/lib/monocle-print/output-device.rb +29 -3
- data/lib/monocle-print/terminal-escapes.rb +53 -34
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                ODM2ZmVhODYxMDhhYTc1NjdlNWJkNGI1ZDVkYjY4NDI3M2E0ZTRmYg==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                NzJhODM3MTczZmI4NzJkMTQxNmZkNDI3YWE2NjBhNTEzM2U0OTI1MA==
         | 
| 7 7 | 
             
            !binary "U0hBNTEy":
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                MDMxZjA0NjU1ODIzMWViMGU5YTVjZGVkNzczOTU1NGEwNjk4OTg0M2E3YjU1
         | 
| 10 | 
            +
                MWFhMjk1OGQ0MzgyN2JkMTY2ZTRlN2NkODlkZjc1MjdhYmNkOWY2Mzk3NTM1
         | 
| 11 | 
            +
                ODA3NmIzODlhNWJjZmRlZDY5NjgwYjI1NWVjZDUwYjFlMGEyMzA=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                ODczNmI5YmYwNTYwNzdlMGVmNTAzYjkxZDJmMTUwMzE5NjllNzBjM2ZhYWFj
         | 
| 14 | 
            +
                ZDg0MTEwZTM1YWVmM2ZlZDQwMjNhOTYwNmJiNmFlZjllNGQ1MDUxMjU5NDBm
         | 
| 15 | 
            +
                OTcxNTI4MjI3MTUzZTZmNjg5NDcyYjYzMjk1OGYyOTgyMTBlNTE=
         | 
    
        data/lib/monocle-print.rb
    CHANGED
    
    
| @@ -70,7 +70,9 @@ class OutputDevice < DelegateClass( IO ) | |
| 70 70 |  | 
| 71 71 | 
             
                @background_stack = []
         | 
| 72 72 | 
             
                @foreground_stack = []
         | 
| 73 | 
            -
                @ | 
| 73 | 
            +
                @modifier_stack   = []
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                @background       = @foreground = @modifier = nil
         | 
| 74 76 | 
             
                @use_color        = options.fetch( :use_color, tty? )
         | 
| 75 77 |  | 
| 76 78 | 
             
                @cursor           = Pair.new( 0, 0 )
         | 
| @@ -120,7 +122,17 @@ class OutputDevice < DelegateClass( IO ) | |
| 120 122 |  | 
| 121 123 | 
             
              alias on background
         | 
| 122 124 |  | 
| 123 | 
            -
               | 
| 125 | 
            +
              def modifier( name = nil )
         | 
| 126 | 
            +
                name or return( @modifier_stack.last )
         | 
| 127 | 
            +
                begin
         | 
| 128 | 
            +
                  @modifier_stack.push( name )
         | 
| 129 | 
            +
                  yield
         | 
| 130 | 
            +
                ensure
         | 
| 131 | 
            +
                  @modifier_stack.pop
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
              for color in ANSI_COLOR_NAMES
         | 
| 124 136 | 
             
                class_eval( <<-END, __FILE__, __LINE__ )
         | 
| 125 137 | 
             
                  def #{ color }
         | 
| 126 138 | 
             
                    foreground( :#{ color } ) { yield }
         | 
| @@ -132,6 +144,14 @@ class OutputDevice < DelegateClass( IO ) | |
| 132 144 | 
             
                END
         | 
| 133 145 | 
             
              end
         | 
| 134 146 |  | 
| 147 | 
            +
              for modifier in ANSI_MODIFIER_NAMES
         | 
| 148 | 
            +
                class_eval( <<-END, __FILE__, __LINE__ )
         | 
| 149 | 
            +
                  def #{ modifier }
         | 
| 150 | 
            +
                    modifier( :#{ modifier } ) { yield }
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
                END
         | 
| 153 | 
            +
              end
         | 
| 154 | 
            +
             | 
| 135 155 | 
             
              def use_color?
         | 
| 136 156 | 
             
                @use_color
         | 
| 137 157 | 
             
              end
         | 
| @@ -374,7 +394,6 @@ class OutputDevice < DelegateClass( IO ) | |
| 374 394 | 
             
                return!
         | 
| 375 395 | 
             
              end
         | 
| 376 396 |  | 
| 377 | 
            -
             | 
| 378 397 | 
             
              for m in %w( horizontal_line box_top box_bottom )
         | 
| 379 398 | 
             
                class_eval( <<-END, __FILE__, __LINE__ + 1 )
         | 
| 380 399 | 
             
                  def #{ m }
         | 
| @@ -387,14 +406,21 @@ class OutputDevice < DelegateClass( IO ) | |
| 387 406 | 
             
              def color_code
         | 
| 388 407 | 
             
                @use_color or return ''
         | 
| 389 408 | 
             
                code = ''
         | 
| 409 | 
            +
             | 
| 390 410 | 
             
                case fg = @foreground_stack.last
         | 
| 391 411 | 
             
                when Fixnum then code << xterm_color( ?f, fg )
         | 
| 392 412 | 
             
                when String, Symbol then code << ansi_color( ?f, fg )
         | 
| 393 413 | 
             
                end
         | 
| 414 | 
            +
             | 
| 394 415 | 
             
                case bg = @background_stack.last
         | 
| 395 416 | 
             
                when Fixnum then code << xterm_color( ?b, bg )
         | 
| 396 417 | 
             
                when String, Symbol then code << ansi_color( ?b, bg )
         | 
| 397 418 | 
             
                end
         | 
| 419 | 
            +
             | 
| 420 | 
            +
                case mod = @modifier_stack.last
         | 
| 421 | 
            +
                when String, Symbol then code << ansi_modifier( mod )
         | 
| 422 | 
            +
                end
         | 
| 423 | 
            +
             | 
| 398 424 | 
             
                code
         | 
| 399 425 | 
             
              end
         | 
| 400 426 |  | 
| @@ -11,13 +11,24 @@ module TerminalEscapes | |
| 11 11 | 
             
                :yellow => 3, :green => 2,  :black => 0,
         | 
| 12 12 | 
             
                :red => 1,    :cyan => 6
         | 
| 13 13 | 
             
              }
         | 
| 14 | 
            -
              
         | 
| 14 | 
            +
              ANSI_COLOR_NAMES = ANSI_COLORS.keys.freeze
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              ANSI_MODIFIERS =
         | 
| 17 | 
            +
                {
         | 
| 18 | 
            +
                  :bold      => 1,
         | 
| 19 | 
            +
                  :underline => 4,
         | 
| 20 | 
            +
                  :blink     => 5,
         | 
| 21 | 
            +
                  :reverse   => 7,
         | 
| 22 | 
            +
                  :conceal   => 8
         | 
| 23 | 
            +
                }
         | 
| 24 | 
            +
              ANSI_MODIFIER_NAMES = ANSI_MODIFIERS.keys.freeze
         | 
| 25 | 
            +
             | 
| 15 26 | 
             
              module_function
         | 
| 16 | 
            -
             | 
| 27 | 
            +
             | 
| 17 28 | 
             
              #def term_info
         | 
| 18 29 | 
             
              #  @term_info ||= TermInfo.new
         | 
| 19 30 | 
             
              #end
         | 
| 20 | 
            -
             | 
| 31 | 
            +
             | 
| 21 32 | 
             
              def ansi_color( type, color, bold = nil )
         | 
| 22 33 | 
             
                offset =
         | 
| 23 34 | 
             
                  case type
         | 
| @@ -29,7 +40,7 @@ module TerminalEscapes | |
| 29 40 | 
             
                end
         | 
| 30 41 | 
             
                "\e[#{ '1;' if bold }#{ code }m"
         | 
| 31 42 | 
             
              end
         | 
| 32 | 
            -
             | 
| 43 | 
            +
             | 
| 33 44 | 
             
              def xterm_color( type, color_index, bold = nil )
         | 
| 34 45 | 
             
                prefix =
         | 
| 35 46 | 
             
                  case type
         | 
| @@ -38,7 +49,7 @@ module TerminalEscapes | |
| 38 49 | 
             
                  end
         | 
| 39 50 | 
             
                "\e[#{ prefix };5;#{ color_index }m"
         | 
| 40 51 | 
             
              end
         | 
| 41 | 
            -
             | 
| 52 | 
            +
             | 
| 42 53 | 
             
              def konsole_color( type, r, g, b, bold = nil)
         | 
| 43 54 | 
             
                prefix =
         | 
| 44 55 | 
             
                  case type
         | 
| @@ -47,115 +58,123 @@ module TerminalEscapes | |
| 47 58 | 
             
                  end
         | 
| 48 59 | 
             
                "\e[#{ prefix };2;#{ r };#{ g };#{ b }m"
         | 
| 49 60 | 
             
              end
         | 
| 50 | 
            -
             | 
| 61 | 
            +
             | 
| 62 | 
            +
              def ansi_modifier( name )
         | 
| 63 | 
            +
                code =
         | 
| 64 | 
            +
                  ANSI_MODIFIERS.fetch( name.to_sym ) do
         | 
| 65 | 
            +
                    fail ArgumentError, "unknown modifier name `%s'" % name
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                "\e[#{ code }m"
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 51 70 | 
             
              def clear_attr
         | 
| 52 71 | 
             
                "\e[0m"
         | 
| 53 72 | 
             
              end
         | 
| 54 | 
            -
             | 
| 73 | 
            +
             | 
| 55 74 | 
             
              def bold
         | 
| 56 75 | 
             
                "\e[1m"
         | 
| 57 76 | 
             
              end
         | 
| 58 | 
            -
             | 
| 77 | 
            +
             | 
| 59 78 | 
             
              def underline
         | 
| 60 79 | 
             
                "\e[4m"
         | 
| 61 80 | 
             
              end
         | 
| 62 | 
            -
             | 
| 81 | 
            +
             | 
| 63 82 | 
             
              def blink
         | 
| 64 83 | 
             
                "\e[5m"
         | 
| 65 84 | 
             
              end
         | 
| 66 | 
            -
             | 
| 85 | 
            +
             | 
| 67 86 | 
             
              def reverse
         | 
| 68 87 | 
             
                "\e[7m"
         | 
| 69 88 | 
             
              end
         | 
| 70 | 
            -
             | 
| 89 | 
            +
             | 
| 71 90 | 
             
              def conceal
         | 
| 72 91 | 
             
                "\e[8m"
         | 
| 73 92 | 
             
              end
         | 
| 74 | 
            -
             | 
| 93 | 
            +
             | 
| 75 94 | 
             
              def set_cursor( line = 0, column = 0 )
         | 
| 76 95 | 
             
                "\e[%i;%iH" % [ line, column ]
         | 
| 77 96 | 
             
              end
         | 
| 78 | 
            -
             | 
| 97 | 
            +
             | 
| 79 98 | 
             
              def cursor_up( lines = 1 )
         | 
| 80 99 | 
             
                "\e[%iA" % lines
         | 
| 81 100 | 
             
              end
         | 
| 82 | 
            -
             | 
| 101 | 
            +
             | 
| 83 102 | 
             
              def cursor_down( lines = 1 )
         | 
| 84 103 | 
             
                "\e[%iB" % lines
         | 
| 85 104 | 
             
              end
         | 
| 86 | 
            -
             | 
| 105 | 
            +
             | 
| 87 106 | 
             
              def cursor_forward( columns = 1 )
         | 
| 88 107 | 
             
                "\e[%iC" % columns
         | 
| 89 108 | 
             
              end
         | 
| 90 | 
            -
             | 
| 109 | 
            +
             | 
| 91 110 | 
             
              def cursor_backward( columns = 1 )
         | 
| 92 111 | 
             
                "\e[%iD" % columns
         | 
| 93 112 | 
             
              end
         | 
| 94 | 
            -
             | 
| 113 | 
            +
             | 
| 95 114 | 
             
              def save_cursor
         | 
| 96 115 | 
             
                "\e[s"
         | 
| 97 116 | 
             
              end
         | 
| 98 | 
            -
             | 
| 117 | 
            +
             | 
| 99 118 | 
             
              def restore_cursor
         | 
| 100 119 | 
             
                "\e[u"
         | 
| 101 120 | 
             
              end
         | 
| 102 | 
            -
             | 
| 121 | 
            +
             | 
| 103 122 | 
             
              #def clear_line
         | 
| 104 123 | 
             
              #  "\e[K"
         | 
| 105 124 | 
             
              #end
         | 
| 106 | 
            -
             | 
| 125 | 
            +
             | 
| 107 126 | 
             
              # VT100 escapes
         | 
| 108 127 | 
             
              def double_height_top
         | 
| 109 128 | 
             
                "\e#3"
         | 
| 110 129 | 
             
              end
         | 
| 111 | 
            -
             | 
| 130 | 
            +
             | 
| 112 131 | 
             
              def dobule_height_bottom
         | 
| 113 132 | 
             
                "\e#4"
         | 
| 114 133 | 
             
              end
         | 
| 115 | 
            -
             | 
| 134 | 
            +
             | 
| 116 135 | 
             
              def single_width
         | 
| 117 136 | 
             
                "\e#5"
         | 
| 118 137 | 
             
              end
         | 
| 119 | 
            -
             | 
| 138 | 
            +
             | 
| 120 139 | 
             
              def double_width
         | 
| 121 140 | 
             
                "\e#6"
         | 
| 122 141 | 
             
              end
         | 
| 123 | 
            -
             | 
| 142 | 
            +
             | 
| 124 143 | 
             
              def clear_right
         | 
| 125 144 | 
             
                "\e[0K"
         | 
| 126 145 | 
             
              end
         | 
| 127 | 
            -
             | 
| 146 | 
            +
             | 
| 128 147 | 
             
              def clear_left
         | 
| 129 148 | 
             
                "\e[1K"
         | 
| 130 149 | 
             
              end
         | 
| 131 | 
            -
             | 
| 150 | 
            +
             | 
| 132 151 | 
             
              def clear_line
         | 
| 133 152 | 
             
                "\e[2K"
         | 
| 134 153 | 
             
              end
         | 
| 135 | 
            -
             | 
| 154 | 
            +
             | 
| 136 155 | 
             
              def clear_down
         | 
| 137 156 | 
             
                "\e[0J"
         | 
| 138 157 | 
             
              end
         | 
| 139 | 
            -
             | 
| 158 | 
            +
             | 
| 140 159 | 
             
              def clear_up
         | 
| 141 160 | 
             
                "\e[1J"
         | 
| 142 161 | 
             
              end
         | 
| 143 | 
            -
             | 
| 162 | 
            +
             | 
| 144 163 | 
             
              def clear_screen
         | 
| 145 164 | 
             
                "\e[2J"
         | 
| 146 165 | 
             
              end
         | 
| 147 | 
            -
             | 
| 166 | 
            +
             | 
| 148 167 | 
             
            end
         | 
| 149 168 | 
             
            end
         | 
| 150 169 |  | 
| 151 170 | 
             
            if __FILE__ == $0
         | 
| 152 | 
            -
             | 
| 171 | 
            +
             | 
| 153 172 | 
             
              TE = MonoclePrint::TerminalEscapes
         | 
| 154 173 | 
             
              for attr in %w[ bold underline blink reverse conceal ]
         | 
| 155 174 | 
             
                print( "This should be #{ attr }:".ljust( 30 ) )
         | 
| 156 175 | 
             
                printf( "%swhateva\e[0m\n", TE.send( attr ) )
         | 
| 157 176 | 
             
              end
         | 
| 158 | 
            -
             | 
| 177 | 
            +
             | 
| 159 178 | 
             
              colors = TE::ANSI_COLORS.keys.map(&:to_s).sort!
         | 
| 160 179 | 
             
              for color in colors
         | 
| 161 180 | 
             
                print( "This should be #{ color }:".ljust( 30 ) )
         | 
| @@ -163,7 +182,7 @@ if __FILE__ == $0 | |
| 163 182 | 
             
                printf( "%swhateva\e[0m\t", TE.ansi_color( ?b, color ) )
         | 
| 164 183 | 
             
                printf( "%sbright_whateva\e[0m\n", TE.ansi_color( ?f, color, true ) )
         | 
| 165 184 | 
             
              end
         | 
| 166 | 
            -
             | 
| 185 | 
            +
             | 
| 167 186 | 
             
              for dir in %w( left right line )
         | 
| 168 187 | 
             
                name = "clear_#{ dir }"
         | 
| 169 188 | 
             
                code = TE.send( name )
         | 
| @@ -177,7 +196,7 @@ if __FILE__ == $0 | |
| 177 196 | 
             
                puts("at end")
         | 
| 178 197 | 
             
                printf("%-14s =>%s\n", name, code, name)
         | 
| 179 198 | 
             
              end
         | 
| 180 | 
            -
             | 
| 199 | 
            +
             | 
| 181 200 | 
             
              puts( "[ Tabs ]" )
         | 
| 182 201 | 
             
              puts( "     \eHx              \eHx      \eHx ")
         | 
| 183 202 | 
             
              puts( "one\ttwo\tthree\tfour" )
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: monocle-print
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - monocle-print
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2013-10- | 
| 11 | 
            +
            date: 2013-10-31 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rdoc
         |