博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python脚本可自动替换Scribus中的文本
阅读量:2541 次
发布时间:2019-05-11

本文共 3224 字,大约阅读时间需要 10 分钟。

在 ,我描述了Autoquote,该脚本将打字机(或“直”)引号转换为印刷(或“ curly”)引号,这是由开源桌面出版软件的邮件列表上的一个问题引起的。 大多数出版物都遵循某些样式约定,包括它们使用的引号类型,并且自动纠正与房屋样式的偏差的脚本可以节省大量时间。

脚本的核心是一种用于逐个字符地解析文本框架内容的方法,其工作方式如下:首先,保留各种控制字符,例如用于回车和表示样式的控制字符。 其次,沿着文本进行的渐进式前进将跟踪当前正在分析的字符以及前后的字符,以确定是否应该用左引号或右引号替换打字机的引号。

创建此自动报价脚本后,有人问我是否可以编写一个扰乱文档中文本的脚本。 该人员希望发布Scribus文档以显示布局,但隐藏框架的文本内容。 这个想法不是对文档加密,而只是将文本变成乱码。 在我看来,Autoquote的基本解析部分将很好地实现此目的。

replacetext.py

我将最终结果称为replacetext.py ,最终得到了四个不同的版本,正如您在上看到的那样。 原始版本仅在选定的文本框架上起作用,但是随后出现了一个版本,该版本可转换常规页面上的所有文本框架,另一个版本可转换包括母版页上的所有文本框架,而另一个版本仅可在文档的当前页面上使用。

我选择如下进行加扰:

    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

这是结果的示例。 最上面的段落是原始文本,只是一些来自Scribus的示例英语文本,下面是运行replacetext.py之后的结果。 如您所见,只有字母字符会被转换,并且随机产生的字符与预期相同。 这也说明了替换后的文本倾向于占用更多空间。

zh + emdash.py

许多出版物在其样式指南中都指定使用破折号(-)和em(-)。 它们与连字符(-)不同,但有时用键入的两个或三个连字符表示。 许多Scribus用户在Scribus之外的文本编辑器中编写文本,然后将其导入Scribus文档中的文本框架。 与印刷报价一样,将连字符自动转换为en和破折号的实用程序将很有用。

您可以在其上找到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

在这种情况下,变量mdashndash之前已被分配了适当的Unicode字符。 如果en + emdash.py脚本遇到连字符,它将检查前一个字符是否也是连字符。 如果为真,则检查以下字符,如果这也是连字符(即-),则分配一个破折号,否则,则为一个破折号(即-)。 单个连字符保留为单个连字符。

这不是功能强大或不常用的脚本,但它充当完成一项任务的简单实用程序,就像许多Unix / Linux命令行功能一样。

这也表明,一旦您花了时间完成复杂的基本操作(如文本解析)的逻辑,便可以继续使其适应各种用途。

翻译自:

转载地址:http://pzdzd.baihongyu.com/

你可能感兴趣的文章
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_2_使用Stream流的方式,遍历集合...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_3_流式思想概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中练习-自定义函数模型拼接...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_2_Stream流中的常用方法_forEach...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_1_两种获取Stream流的方式...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_4_Stream流的特点_只能使用一次...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_5_Stream流中的常用方法_map...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_6_Stream流中的常用方法_count...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_7_Stream流中的常用方法_limit...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_8_Stream流中的常用方法_skip...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_3_Stream流中的常用方法_filter...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_10_练习:集合元素处理(传统方式)...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_9_Stream流中的常用方法_concat...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_1_方法引用基本介绍...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_2_方法引用_通过对象名引用成员方法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_5_方法引用_通过this引用本类的成员...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_7方法引用_数组的构造器引用...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_3_方法引用_通过类名引用静态成员...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第1节 基础加强_3_Junit_使用步骤...
查看>>