我正在将 PDFMiner(一个用 Python 编写的开源 PDF 到文本程序)翻译成 Objective-c。某些字体中有一个附言文件,其中包含字符名称及其编码值。例如:
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 65 /A put
dup 67 /C put
dup 70 /F put
dup 45 /hyphen put
Run Code Online (Sandbox Code Playgroud)
我实际上不知道上面的代码做了什么。我猜它会将这些对放入字典中。我完全不知道 dup 做了什么。上面的代码对我来说意味着,如果我在 PDF 中看到 45,那么我会查找它并将其转换为连字符,或者如果我看到 70,则将其转换为 F 等。
我正在复制的代码使用完整的 Postscript 标记器来解析 postscript 文件中的所有放置命令。对于每个 put 命令,它创建一个字典,其中包含与 put 操作数对应的键值对。
我的问题是,我真的需要构建一个完整的 Postscript 标记器来解析这些东西吗?
一个更简单的替代方法是扫描字符串“put”的每个出现,然后查看前面的两个单词。如果前面的两个单词是一个数字后跟一个 /x ,那么我认为这是我想要的,否则忽略它。
我根本不知道附言,但我想任何知道的人都可以告诉我我的更简单的替代方案是否有任何会搞砸的极端情况。
谢谢!
我读到 python 中的赋值不会像在 c 中那样复制它,它会为对象分配一个指针。
但是当我调试这个函数时:
def popall(self):
objs = self.curstack
self.curstack = []
return objs
Run Code Online (Sandbox Code Playgroud)
看起来正在进行某种复制。这个函数运行后obis满是东西,self.curstack是空的……
所以一些副本正在进行中。它是深的还是浅的?