Sha256: 41d89b9d3aa69418c365ae86457147bb6902c45605844c04a4643e176659144b

Contents?: true

Size: 1.93 KB

Versions: 36

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true

module Asciidoctor
  module PDF
    module FormattedText
      module SourceWrap
        NoBreakSpace = ?\u00a0

        # Override Prawn::Text::Formatted::Box#wrap method to add line numbers in source blocks.
        # Note that this implementation assumes that the :single_line option is falsy.
        def wrap array
          return super unless array[0][:linenum] # sanity check
          initialize_wrap array
          @line_wrap.extend SourceLineWrap
          highlight_line = stop = nil
          unconsumed = @arranger.unconsumed
          until stop
            if (first_fragment = unconsumed[0])[:linenum]
              linenum_text = first_fragment[:text]
              linenum_spacer ||= { text: (NoBreakSpace.encode linenum_text.encoding) + (' ' * (linenum_text.length - 1)), linenum: :spacer }
              highlight_line = (second_fragment = unconsumed[1])[:highlight] ? second_fragment.dup : nil
            else # wrapped line
              first_fragment[:text] = first_fragment[:text].lstrip
              @arranger.unconsumed.unshift highlight_line if highlight_line
              @arranger.unconsumed.unshift linenum_spacer.dup
            end
            @line_wrap.wrap_line \
              document: @document,
              kerning: @kerning,
              width: @width,
              arranger: @arranger,
              disable_wrap_by_char: @disable_wrap_by_char
            if enough_height_for_this_line?
              move_baseline_down
              print_line
              stop = @arranger.finished?
            else
              stop = true
            end
          end
          @text = @printed_lines.join ?\n
          @everything_printed = @arranger.finished?
          @arranger.unconsumed
        end
      end

      module SourceLineWrap
        def update_line_status_based_on_last_output
          @arranger.current_format_state[:linenum] ? nil : super
        end
      end
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
asciidoctor-pdf-2.3.19 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.18 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.17 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.16 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.15 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.14 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.13 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.12 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.11 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.10 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.9 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.8 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.7 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.6 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.5 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.4 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.3 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.2 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.1 lib/asciidoctor/pdf/formatted_text/source_wrap.rb
asciidoctor-pdf-2.3.0 lib/asciidoctor/pdf/formatted_text/source_wrap.rb