# frozen_string_literal: true module MuPDF # A wrapper for a PDF page within a PDF document. class Page REGEX = %r{(?.*?)}m MEDIA_BOX_REGEX = %r{.*?) />} CROP_BOX_REGEX = %r{.*?) />} ART_BOX_REGEX = %r{.*?) />} BLEED_BOX_REGEX = %r{.*?) />} TRIM_BOX_REGEX = %r{.*?) />} # @param text [String] # # @return [Array] def self.parse(text) text.scan(REGEX).map do |number, content| new( media_box: parse_media_box(content), crop_box: parse_crop_box(content), art_box: parse_art_box(content), bleed_box: parse_bleed_box(content), trim_box: parse_trim_box(content), number: Integer(number) ) end end # @param text [String] # # @return [MuPDF::Box] def self.parse_media_box(text) match = MEDIA_BOX_REGEX.match(text) MuPDF::Box.parse(match[:content], kind: :media) end # @param text [String] # # @return [MuPDF::Box] def self.parse_crop_box(text) match = CROP_BOX_REGEX.match(text) MuPDF::Box.parse(match[:content], kind: :crop) end # @param text [String] # # @return [MuPDF::Box] def self.parse_art_box(text) match = ART_BOX_REGEX.match(text) MuPDF::Box.parse(match[:content], kind: :art) end # @param text [String] # # @return [MuPDF::Box] def self.parse_bleed_box(text) match = BLEED_BOX_REGEX.match(text) MuPDF::Box.parse(match[:content], kind: :bleed) end # @param text [String] # # @return [MuPDF::Box] def self.parse_trim_box(text) match = TRIM_BOX_REGEX.match(text) MuPDF::Box.parse(match[:content], kind: :trim) end # @!attribute media_box # @return [MuPDFBox] attr_accessor :media_box # @!attribute crop_box # @return [MuPDFBox] attr_accessor :crop_box # @!attribute art_box # @return [MuPDFBox] attr_accessor :art_box # @!attribute bleed_box # @return [MuPDFBox] attr_accessor :bleed_box # @!attribute trim_box # @return [MuPDFBox] attr_accessor :trim_box # @!attribute pagenum # @return [Integer] attr_accessor :pagenum # @param media_box [MuPDF::Box] # @param crop_box [MuPDF::Box] # @param art_box [MuPDF::Box] # @param bleed_box [MuPDF::Box] # @param trim_box [MuPDF::Box] # @param number [Integer] def initialize(media_box:, crop_box:, art_box:, bleed_box:, trim_box:, number:) @media_box = media_box @crop_box = crop_box @art_box = art_box @bleed_box = bleed_box @trim_box = trim_box @number = number end # @return [String] def inspect "#<#{self.class.name} number=#{@number}>" end # @return [Integer] def width @media_box.width end # @return [Integer] def height @media_box.height end end end