在上一篇文章中 ,我描述了Autoquote,该脚本将打字机(或“直”)引号转换为印刷(或“ curly”)引号,这是由Scribus开源桌面出版软件的邮件列表上的一个问题引起的。 大多数出版物都遵循某些样式约定,包括它们使用的引号类型,并且自动纠正与房屋样式的偏差的脚本可以节省大量时间。
脚本的核心是一种用于逐个字符地解析文本框架内容的方法,其工作方式如下:首先,保留各种控制字符,例如用于回车和表示样式的控制字符。 其次,沿着文本进行的渐进式前进将跟踪当前正在分析的字符以及前后的字符,以确定是否应该用左引号或右引号替换打字机的引号。
创建此自动报价脚本后,有人问我是否可以编写一个扰乱文档中文本的脚本。 该人员希望发布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之间的随机整数。 此随机整数同时创建随机的小写字母和大写字母。 然后,脚本将测试原始文本字符,以确定它是小写还是大写字母,以便可以进行适当的替换(即保留原始字符的大小写)。 仅影响z和AZ字符,不影响数字,不影响ASCII范围之外的字符(尽管扩展此字符并不难)。
由于具有随机化功能,无法逆转该过程,但是我仍然希望保留文本的粗略外观,并保留大写字母和单词间距。 在实际使用中,一个副作用是文本倾向于占用更多的空间,我认为这与英语中较常见的字形的增加有关。 实际上,用户可以在布局外观需要时删除字符。
![乱码示例 Example of scrambled text](https://i-blog.csdnimg.cn/blog_migrate/89dec29278f18fab79dfc2c38a6dc5a9.png)
这是结果的示例。 最上面的段落是原始文本,只是一些来自Scribus的示例英语文本,下面是运行replacetext.py之后的结果。 如您所见,只有字母字符会被转换,并且随机产生的字符与预期相同。 这也说明了替换后的文本倾向于占用更多空间。
zh + emdash.py
许多出版物在其样式指南中都指定使用破折号(-)和em(-)。 它们与连字符(-)不同,但有时用键入的两个或三个连字符表示。 许多Scribus用户在Scribus之外的文本编辑器中编写文本,然后将其导入Scribus文档中的文本框架。 与印刷报价一样,将连字符自动转换为en和破折号的实用程序将很有用。
您可以在其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脚本遇到连字符,它将检查前一个字符是否也是连字符。 如果为真,则检查以下字符,如果这也是连字符(即-),则分配一个破折号,否则,则为一个破折号(即-)。 单个连字符保留为单个连字符。
这不是功能强大或不常用的脚本,但它充当完成一项任务的简单实用程序,就像许多Unix / Linux命令行功能一样。
这也表明,一旦您花了时间完成复杂的基本操作(如文本解析)的逻辑,便可以继续使其适应各种用途。
翻译自: https://opensource.com/article/17/5/python-text-parsing-scribus