This file is indexed.

/usr/share/doc/ruby-cairo/examples/text2.rb is in ruby-cairo 1.15.2-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/env ruby

top = File.expand_path(File.join(File.dirname(__FILE__), ".."))
$LOAD_PATH.unshift File.join(top, "ext", "cairo")
$LOAD_PATH.unshift File.join(top, "lib")

require 'optparse'
require 'ostruct'

require 'cairo'
require 'pango'

def parse(args=ARGV)
  options = OpenStruct.new
  options.width = 595.275590551181.round
  options.height = 841.889763779528.round
  options.font_description = "Monospace 12"
  options.fade_out = false

  opts = OptionParser.new do |opts|
    opts.on("--width=WIDTH", Integer, "paper width") do |width|
      options.width = width
    end
    opts.on("--height=HEIGHT", Integer, "paper height") do |height|
      options.height = height
    end
    opts.on("--font-description=DESCRIPTION",
            "font description (e.g. 'Monospace 14')") do |desc|
      options.font_description = desc
    end
    opts.on("--[no-]fade-out",
            "fade-out one-third of page") do |fade_out|
      options.fade_out = fade_out
    end
  end

  opts.parse!(args)

  options
end

def render_background(cr)
  cr.set_source_color(:white)
  cr.paint
end

def make_layout(cr, text, width, font_description)
  layout = cr.create_pango_layout
  layout.text = text
  layout.width = width * Pango::SCALE
  layout.font_description = Pango::FontDescription.new(font_description)
  cr.update_pango_layout(layout)
  layout
end

def setup_fade_out(cr, width)
  fade_out = Cairo::LinearPattern.new(0, 0, width, 0)
  fade_out.add_color_stop(0, "#000f")
  fade_out.add_color_stop(0.66, "#000f")
  fade_out.add_color_stop(1, "#0000")

  cr.set_source(fade_out)
end

def render_layout(cr, layout, margin_left, margin_top, body_height)
  x = margin_left
  y = margin_top
  limit_y = margin_top + body_height

  iter = layout.iter
  prev_baseline = iter.baseline / Pango::SCALE
  begin
    line = iter.line
    ink_rect, logical_rect = iter.line_extents
    y_begin, y_end = iter.line_yrange
    if limit_y < (y + y_end / Pango::SCALE)
      cr.show_page
      y = margin_top - prev_baseline
    end
    baseline = iter.baseline / Pango::SCALE
    cr.move_to(x + logical_rect.x / Pango::SCALE, y + baseline)
    cr.show_pango_layout_line(line)
    prev_baseline = baseline
  end while iter.next_line!
end

def render(options, output, surface_class)
  text = options.text
  width = options.width
  height = options.height
  font_description = options.font_description
  fade_out = options.fade_out

  margin_left = (width * 0.05).ceil
  margin_right = (width * 0.05).ceil
  margin_top = (height * 0.05).ceil
  margin_bottom = (height * 0.05).ceil
  body_width = width - margin_left - margin_right
  body_height = height - margin_top - margin_bottom

  surface_class.new(output, width, height) do |surface|
    cr = Cairo::Context.new(surface)

    render_background(cr)
    layout = make_layout(cr, text, body_width, font_description)
    if fade_out
      setup_fade_out(cr, body_width)
    else
      cr.set_source_color(:black)
    end
    render_layout(cr, layout, margin_left, margin_top, body_height)

    cr.show_page
  end
end

def output(options, surface_class_name, suffix)
  if Cairo.const_defined?(surface_class_name)
    surface_class = Cairo.const_get(surface_class_name)
    render(options, "text2.#{suffix}", surface_class)
  else
    puts("#{surface_class_name} isn't supported.")
  end
end

options = parse
options.text = ARGF.read
output(options, "PSSurface", "ps")
output(options, "PDFSurface", "pdf")
output(options, "SVGSurface", "svg")