在我的上一篇文章中,我介绍了 Autoquote,这是一个将打字机(或“直”)引号转换为印刷体(或“弯曲”)引号的脚本,这是由 Scribus 开源桌面出版软件的邮件列表中的一个问题引发的。大多数出版物都遵循一定的风格约定,包括它们使用的引号类型,而一个自动纠正与内部风格偏差的脚本是一个巨大的节省时间工具。
该脚本的核心是一种逐字符解析文本框内容的方法,其工作原理如下:首先,各种控制字符,例如,用于回车符和表示样式的字符,都保持不变。其次,沿着文本进行渐进式推进,跟踪当前正在分析的字符以及前一个和后一个字符,以确定是否应将打字机引号替换为左引号或右引号。
在我创建了这个 Autoquote 脚本之后,有人问我是否可以编写一个脚本来扰乱文档中的文本。这个人想发布一个 Scribus 文档来展示布局,但隐藏框架的文本内容。这个想法不是加密文档,而是简单地将文本变成乱码。在我看来,Autoquote 中的基本解析部分可以很好地服务于这个目的。
replacetext.py
我将最终结果称为 replacetext.py,最终得到了四个不同的版本,你可以在 wiki 页面上看到。最初的版本仅对选定的文本框进行操作,但后来出现了一个版本,可以转换常规页面上的所有文本框,另一个版本用于包括主页上的所有文本框,还有一个版本仅适用于文档的当前页面。
我选择按如下方式进行这种扰乱
alpha = random.randint(1,26)
letter = chr(alpha + 96)
LETTER = chr(alpha + 64)
if ((ord(char)>96)and(ord(char)<123)):
scribus.deleteText(textbox)
scribus.insertText(letter, c, textbox)
if ((ord(char)>64)and(ord(char)<91)):
scribus.deleteText(textbox)
scribus.insertText(LETTER, c, textbox)
对于每个新解析的字符,都会生成一个介于 1 到 26 之间的随机整数。这个随机整数同时创建一个随机小写字母和大写字母。然后,脚本测试原始文本字符以确定它是小写字母还是大写字母,以便它可以进行适当的替换(即,保留原始字符的大小写)。只有 a-z 和 A-Z 字符会受到影响,数字和 ASCII 范围之外的字符不会受到影响(尽管扩展这一点并不难)。
由于随机化函数,没有办法逆转这个过程,但我仍然想保留带有大写字母和单词间距的文本的大致外观。在实际使用中,一个副作用是文本往往占用更多空间,我认为这与英语中比平时更宽的字形数量增加有关。在实践中,用户可以在必要时删除字符以获得布局外观。
这是一个结果的示例。顶部段落是原始文本,只是一些来自 Scribus 的示例文本,下面是运行 replacetext.py 后的结果。正如你所看到的,只有字母字符被转换了,偶尔随机化会导致相同的字符,这是预期的。这也显示了替换后的文本倾向于占用更多空间。
en+emdash.py
许多出版物在其风格指南中指定使用 en (–) 和 em (—) 破折号。这些与连字符 (-) 不同,但有时用两个或三个连字符一起键入表示。许多 Scribus 用户在 Scribus 之外的文本编辑器中撰写文本,然后将其导入到 Scribus 文档的文本框中。与印刷体引号一样,自动将连字符转换为 en 和 em 破折号的实用程序将非常有用。
你可以在其 wiki 页面上找到 en+emdash.py 脚本。这是相关的赋值策略
if (char == '-'):
if (prevchar == '-'):
if (nextchar == '-'):
scribus.selectText(c-1, 3, textbox)
scribus.deleteText(textbox)
scribus.insertText(mdash, c-1, textbox)
char = mdash
else:
scribus.selectText(c-1, 2, textbox)
scribus.deleteText(textbox)
scribus.insertText(ndash, c-1, textbox)
char = ndash
在这种情况下,变量 mdash 和 ndash 之前已被分配了适当的 Unicode 字符。如果 en+emdash.py 脚本遇到连字符,它会检查之前的字符是否也是连字符。如果这是真的,那么它会检查后面的字符,如果这也是连字符(即 ---),它会分配一个 em 破折号,但如果不是(即 --),它会分配一个 en 破折号。单个连字符保持为单个连字符。
这不是一个强大或常用的脚本,但它的功能就像一个简单的实用程序,可以完成一项任务,很像许多 Unix/Linux 命令行函数。
这也表明,一旦你花时间完成了像文本解析这样复杂的基本操作的逻辑,你就可以继续将其应用于各种用途。
1 条评论