Sha256: 61918e2887a5f60474f1820ef4378fbc794862b43348aebf42e318b9726d25b7

Contents?: true

Size: 1.63 KB

Versions: 7

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true
module Asciidoctor; module PDF
  module Measurements
    MeasurementValueRx = /(\d+|\d*\.\d+)(in|mm|cm|p[txc])?$/
    InsetMeasurementValueRx = /(?<=^| |\()(-?\d+(?:\.\d+)?)(in|mm|cm|p[txc])(?=$| |\))/
    MeasurementValueHintRx = /\d(in|mm|cm|p[txc])/

    # Convert the specified string value to a pt value from the
    # specified unit of measurement (e.g., in, cm, mm, etc).
    # If the unit of measurement is not recognized, assume pt.
    #
    # Examples:
    #
    #  0.5in => 36.0
    #  100px => 75.0
    #  72blah => 72.0
    #
    def str_to_pt val
      MeasurementValueRx =~ val ? (to_pt $1.to_f, $2) : val.to_f
    end

    # Converts the specified float value to a pt value from the
    # specified unit of measurement (e.g., in, cm, mm, etc).
    # Raises an argument error if the unit of measurement is not recognized.
    def to_pt num, units
      units = units.to_s if ::Symbol === units
      if units.nil_or_empty?
        num
      else
        case units
        when 'pt'
          num
        when 'in'
          num * 72
        when 'mm'
          num * (72 / 25.4)
        when 'cm'
          num * (720 / 25.4)
        when 'px'
          # assuming canvas of 96 dpi
          num * 0.75
        when 'pc'
          num * 12
        else
          raise ::ArgumentError, %(unknown unit of measurement: #{units})
        end
      end
    end

    # Resolve measurement values in the string to PDF points.
    def resolve_measurement_values str
      if MeasurementValueHintRx.match? str
        str.gsub(InsetMeasurementValueRx) { to_pt $1.to_f, $2 }
      else
        str
      end
    end
  end
end; end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
asciidoctor-pdf-1.5.0.beta.8 lib/asciidoctor/pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.7 lib/asciidoctor/pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.6 lib/asciidoctor/pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.5 lib/asciidoctor-pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.4 lib/asciidoctor-pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.3 lib/asciidoctor-pdf/measurements.rb
asciidoctor-pdf-1.5.0.beta.2 lib/asciidoctor-pdf/measurements.rb