# coding: utf-8# typed: strict# frozen_string_literal: true################################################################################## Copyright (C) 2006 Peter J Jones (pjones@pmade.com)## Permission is hereby granted, free of charge, to any person obtaining# a copy of this software and associated documentation files (the# "Software"), to deal in the Software without restriction, including# without limitation the rights to use, copy, modify, merge, publish,# distribute, sublicense, and/or sell copies of the Software, and to# permit persons to whom the Software is furnished to do so, subject to# the following conditions:## The above copyright notice and this permission notice shall be# included in all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#classPDF::Reader################################################################################# An internal PDF::Reader class that helps to verify various parts of the PDF file# are validclassError# :nodoc:################################################################################defself.str_assert(lvalue,rvalue,chars=nil)raiseMalformedPDFError,"PDF malformed, expected string but found #{lvalue.class} instead"ifcharsand!lvalue.kind_of?(String)lvalue=lvalue[0,chars]ifcharsraiseMalformedPDFError,"PDF malformed, expected '#{rvalue}' but found '#{lvalue}' instead"iflvalue!=rvalueend################################################################################defself.str_assert_not(lvalue,rvalue,chars=nil)raiseMalformedPDFError,"PDF malformed, expected string but found #{lvalue.class} instead"ifcharsand!lvalue.kind_of?(String)lvalue=lvalue[0,chars]ifcharsraiseMalformedPDFError,"PDF malformed, expected '#{rvalue}' but found '#{lvalue}' instead"iflvalue==rvalueend################################################################################defself.assert_equal(lvalue,rvalue)raiseMalformedPDFError,"PDF malformed, expected '#{rvalue}' but found '#{lvalue}' instead"iflvalue!=rvalueend################################################################################defself.validate_type(object,name,klass)raiseArgumentError,"#{name} (#{object}) must be a #{klass}"unlessobject.is_a?(klass)end################################################################################defself.validate_type_as_malformed(object,name,klass)raiseMalformedPDFError,"#{name} (#{object}) must be a #{klass}"unlessobject.is_a?(klass)end################################################################################defself.validate_not_nil(object,name)raiseArgumentError,"#{object} must not be nil"ifobject.nil?endend################################################################################# an exception that is raised when we believe the current PDF is not following# the PDF spec and cannot be recoveredclassMalformedPDFError<RuntimeError;end################################################################################# an exception that is raised when an invalid page number is usedclassInvalidPageError<ArgumentError;end################################################################################# an exception that is raised when a PDF object appears to be invalidclassInvalidObjectError<MalformedPDFError;end################################################################################# an exception that is raised when a PDF follows the specs but uses a feature# that we don't support just yetclassUnsupportedFeatureError<RuntimeError;end################################################################################# an exception that is raised when a PDF is encrypted and we don't have the# necessary data to decrypt itclassEncryptedPDFError<UnsupportedFeatureError;endend################################################################################