Module: Asciidoctor::PDF::Measurements

Included in:
FormattedText::InlineImageArranger, ThemeLoader, Asciidoctor::Prawn::Extensions
Defined in:
lib/asciidoctor/pdf/measurements.rb

Constant Summary collapse

MeasurementValueRx =
/(\d+|\d*\.\d+)(in|mm|cm|p[txc])?$/
InsetMeasurementValueRx =
/(?<=^| |\()(-?\d+(?:\.\d+)?)(in|mm|cm|p[txc])(?=$| |\))/
MeasurementValueHintRx =
/\d(in|mm|cm|p[txc])/

Instance Method Summary collapse

Instance Method Details

#resolve_measurement_values(str) ⇒ Object

Resolve measurement values in the string to PDF points.



53
54
55
56
57
58
59
# File 'lib/asciidoctor/pdf/measurements.rb', line 53

def resolve_measurement_values str
  if MeasurementValueHintRx.match? str
    str.gsub(InsetMeasurementValueRx) { to_pt $1.to_f, $2 }
  else
    str
  end
end

#str_to_pt(val) ⇒ Object

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


20
21
22
# File 'lib/asciidoctor/pdf/measurements.rb', line 20

def str_to_pt val
  MeasurementValueRx =~ val ? (to_pt $1.to_f, $2) : val.to_f
end

#to_pt(num, units) ⇒ Object

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.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/asciidoctor/pdf/measurements.rb', line 27

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