Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add compatibility with --enable-frozen-string-literal #239

Merged
merged 2 commits into from
Nov 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ jobs:
strategy:
fail-fast: false
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2"]
ruby: ["2.7", "3.0", "3.1", "3.2", "3.3"]
rubyopt: [""]
include:
- ruby: "3.3"
rubyopt: "--enable-frozen-string-literal --debug-frozen-string-literal"

steps:
- name: Checkout code
Expand All @@ -25,4 +29,4 @@ jobs:
run: bundle lock

- name: Run tests
run: bundle exec rake test
run: bundle exec rake test RUBYOPT="${{ matrix.rubyopt }}"
1 change: 1 addition & 0 deletions lib/combine_pdf.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true

require 'zlib'
require 'securerandom'
Expand Down
1 change: 1 addition & 0 deletions lib/combine_pdf/api.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true

module CombinePDF
module_function
Expand Down
1 change: 1 addition & 0 deletions lib/combine_pdf/basic_writer.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down
3 changes: 2 additions & 1 deletion lib/combine_pdf/decrypt.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down Expand Up @@ -137,7 +138,7 @@ def decrypt_AES(encrypted, encrypted_id, encrypted_generation, _encrypted_filter
object_key = @key.dup
object_key << [encrypted_id].pack('i')[0..2]
object_key << [encrypted_generation].pack('i')[0..1]
object_key << 'sAlT'.force_encoding(Encoding::ASCII_8BIT)
object_key << 'sAlT'.b
key_length = object_key.length < 16 ? object_key.length : 16

begin
Expand Down
2 changes: 2 additions & 0 deletions lib/combine_pdf/exceptions.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

module CombinePDF
class EncryptionError < StandardError
end
Expand Down
1 change: 1 addition & 0 deletions lib/combine_pdf/filter.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down
1 change: 1 addition & 0 deletions lib/combine_pdf/fonts.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down
7 changes: 4 additions & 3 deletions lib/combine_pdf/page_methods.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down Expand Up @@ -214,7 +215,7 @@ def textbox(text, properties = {})
options[:text_padding] = 0 if options[:text_padding].to_f >= 1

# create box stream
box_stream = ''
box_stream = +''
# set graphic state for box
if options[:box_color] || (options[:border_width].to_i > 0 && options[:border_color])
# compute x and y position for text
Expand Down Expand Up @@ -290,7 +291,7 @@ def textbox(text, properties = {})
# reset x,y by text alignment - x,y are calculated from the bottom left
# each unit (1) is 1/72 Inch
# create text stream
text_stream = ''
text_stream = +''
if !text.to_s.empty? && options[:font_size] != 0 && (options[:font_color] || options[:stroke_color])
# compute x and y position for text
x = options[:x] + (options[:width] * options[:text_padding])
Expand Down Expand Up @@ -679,7 +680,7 @@ def init_contents
insert_content 'Q'

# Prep content
@contents = ''
@contents = +''
insert_content @contents
@contents
end
Expand Down
8 changes: 4 additions & 4 deletions lib/combine_pdf/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ def _parse_
##########################################
elsif @scanner.scan(/\(/)
# warn "Found a literal string"
str = ''.force_encoding(Encoding::ASCII_8BIT)
str = ''.b
count = 1
while count > 0 && @scanner.rest?
scn = @scanner.scan_until(/[\(\)]/)
Expand Down Expand Up @@ -377,9 +377,9 @@ def _parse_
end
length = @scanner.pos - (old_pos + 9)
length = 0 if(length < 0)
length -= 1 if(@scanner.string[old_pos + length - 1] == "\n")
length -= 1 if(@scanner.string[old_pos + length - 1] == "\r")
str = (length > 0) ? @scanner.string.slice(old_pos, length) : ''
length -= 1 if(@scanner.string[old_pos + length - 1] == "\n")
length -= 1 if(@scanner.string[old_pos + length - 1] == "\r")
str = (length > 0) ? @scanner.string.slice(old_pos, length) : +''

# warn "CombinePDF parser: detected Stream #{str.length} bytes long #{str[0..3]}...#{str[-4..-1]}"

Expand Down
2 changes: 2 additions & 0 deletions lib/combine_pdf/pdf_protected.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- encoding : utf-8 -*-
# frozen_string_literal: true
########################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
Expand Down Expand Up @@ -186,6 +187,7 @@ def remove_old_ids
POSSIBLE_NAME_TREES = [:Dests, :AP, :Pages, :IDS, :Templates, :URLS, :JavaScript, :EmbeddedFiles, :AlternatePresentations, :Renditions].to_set.freeze

def rebuild_names(name_tree = nil, base = 'CombinePDF_0000000')
base = +base
if name_tree
return nil unless name_tree.is_a?(Hash)
name_tree = name_tree[:referenced_object] || name_tree
Expand Down
7 changes: 4 additions & 3 deletions lib/combine_pdf/pdf_public.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- encoding : utf-8 -*-
########################################################
## frozen_string_literal: true
#######################################################
## Thoughts from reading the ISO 32000-1:2008
## this file is part of the CombinePDF library and the code
## is subject to the same license.
Expand Down Expand Up @@ -93,7 +94,7 @@ def initialize(parser = nil)
@version = 0
@viewer_preferences = {}
@info = {}
parser ||= PDFParser.new('')
parser ||= PDFParser.new(+'')
raise TypeError, "initialization error, expecting CombinePDF::PDFParser or nil, but got #{parser.class.name}" unless parser.is_a? PDFParser
@objects = parser.parse

Expand Down Expand Up @@ -216,7 +217,7 @@ def to_pdf(options = {})
# when finished, remove the numbering system and keep only pointers
remove_old_ids
# output the pdf stream
out.join("\n".force_encoding(Encoding::ASCII_8BIT)).force_encoding(Encoding::ASCII_8BIT)
out.join("\n").force_encoding(Encoding::ASCII_8BIT)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing .b (should be "\n".b)?

end

# this method returns all the pages cataloged in the catalog.
Expand Down
5 changes: 3 additions & 2 deletions lib/combine_pdf/renderer.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# frozen_string_literal: true
module CombinePDF
################################################################
## These are common functions, used within the different classes
Expand Down Expand Up @@ -123,12 +124,12 @@ def format_hash_to_pdf(object)
# if the object is not a simple object, it is a dictionary
# A dictionary shall be written as a sequence of key-value pairs enclosed in double angle brackets (<<...>>)
# (using LESS-THAN SIGNs (3Ch) and GREATER-THAN SIGNs (3Eh)).
out << "<<\n".force_encoding(Encoding::ASCII_8BIT)
out << "<<\n".b
object.each do |key, value|
out << "#{object_to_pdf key} #{object_to_pdf value}\n".force_encoding(Encoding::ASCII_8BIT) unless PDF::PRIVATE_HASH_KEYS.include? key
end
object.delete :Length
out << '>>'.force_encoding(Encoding::ASCII_8BIT)
out << '>>'.b
out << "\nstream\n#{object[:raw_stream_content]}\nendstream".force_encoding(Encoding::ASCII_8BIT) if object[:raw_stream_content]
out << "\nendobj\n" if object[:indirect_reference_id]
out.join.force_encoding(Encoding::ASCII_8BIT)
Expand Down
4 changes: 3 additions & 1 deletion lib/combine_pdf/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

module CombinePDF
VERSION = '1.0.26'.freeze
VERSION = '1.0.26'
end
2 changes: 1 addition & 1 deletion test/combine_pdf/renderer_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def test_object(object)

def test_numeric_array_to_pdf
input = [1.234567, 0.000054, 5, -0.000099]
expected = "[1.234567 0.000054 5 -0.000099]".force_encoding('BINARY')
expected = "[1.234567 0.000054 5 -0.000099]".b
actual = TestRenderer.new.test_object(input)

assert_equal(expected, actual)
Expand Down