* In cases were multiple receivers are needed, this saves a *huge* amount of time * before this, the source file was completely parsed and extracted N times for N receivers * now it's parsed and extracted 1 time for N receivers
* like the implementation of Reference#==, this helps to ensure that 2 unique Reference objects that point to the same PDF object are equivalent * specifically, implementing Reference#hash method ensures two Reference objects are treated identically when used as Hash keys * internally, PDF::Reader sometimes uses plain Hash objects to cache regularly accessed data. This commit means that idiom will no longer cause massive memory leaks.
* pop the XObject resources onto our resources stack * ensures any resources on the XObject are a) available when parsing the xobject content stream b) override any resources with the same label we would otherwise inherit from the parent Page or Pages objects * I suspect this may have been reported by several people, most recently Samuel Williams. It was a tricky one to track down
* if a font is in a standard encoding (like WinAnsi) and also has a ToUnicode CMap, try to convert each character to utf8 using the CMap but fallback to using the standard encoding map * Previously if a Font had a ToUnicode CMap we wouldn't fall back to the the standard map. * I'm not sure which behaviour is correct by the spec, but it seems other libraries (like poppler) use the fallback so I'll go with the crowd * Thanks to Evan Arnold for reporting the issue
* certain rare sequences of \ and ) were not working correctly * thanks to David Westerink for pointing this out
* thanks to Solomon White for reporting the issue
* thanks to Andrea Barisani for reporting the issue * the literal string parser implmented a few months ago was pretty braindead. You can't use gsub to replace escapped chars, you *MUST* move along the string char by char to ensure you process escaping in the correct order * in the case reported by Andrea, a literal string that had the following 3 bytes: \\f was being interpreted as 0x5C and 0x0C instead of 0x5C and 0x66 * The new Parser#string method is gross looking and needs to be cleaned up, but at least it's passing all specs
…tent streams * thanks to Jack Rusher for reporting