跳转到主要内容

Python-Markdown 扩展,使用smartypants来输出更美观的(“花括号”)引号、正确的(“em”和“en”)破折号等。

项目描述

Markdown很好,但如果您想要漂亮的“花括号”引号、真实的em-和en-破折号,以及我们现代Unicode和网络意识世界所能提供的其他排版美化,它需要与smartypants(或等效模块)结合,将丑陋的、程序员风格的标点符号转换为漂亮的排版标点符号。本模块就是这样做的。

使用方法

import markdown

text = """
Markdown makes HTML from simple text files. But--it lacks typographic
"prettification." That... That'd be sweet. Definitely 7---8 on a '10-point
scale'. Now it has it.

Huzzah!
"""

print markdown.markdown(text, extensions=['smartypants(entities=named)'])

这会产生漂亮的HTML输出,包括排版上“漂亮”的引号和其他标点符号。它还(可选地)以名称而不是数字形式渲染HTML实体,这对眼睛更容易,也更易于理解。

<p>Markdown makes HTML from simple text files. But&mdash;it lacks
typographic &ldquo;prettification.&rdquo; That&hellip; That&rsquo;d be
sweet. Definitely 7&ndash;8 on a &lsquo;10-point scale&rsquo;. Now it has
it.</p>
<p>Huzzah!</p>

请注意,您实际上并不需要执行 import mdx_smartypants。如果您愿意,当然可以这样做,这样做可能有助于宣传代码依赖于 mdx_smartypants 可用。但是,通过 extensions=['smartypants'] 声明,markdown 会简单地寻找 mdx_smartypants

mdx_smartypants 不会对代码块(无论是缩进还是用围栏的)或 <pre> 部分中包含的 HTML 进行调整,因此您的程序片段是安全的。

右对齐语言和替代引号

右对齐语言,如阿拉伯语、希伯来语、波斯语和乌尔都语,与英语和其他从左到右的语言的惯例相反。这里的“左引号”实际上是“开始引号”——它应该出现在“右引号”的右边。同样,“右引号”实际上是“结束引号”,出现在“右引号”的左边。鉴于“左”和“右”被嵌入到官方符号名称中——这是一个误称,它被传递到 HTML 实体中——这显然不是国际 Unicode 社区关注的焦点。

类似的,历史版本的 smartypants 模块也以 LTR 术语思考。它甚至硬编码了用于引号的 HTML 实体。为了解决这个问题,此模块捆绑的 spants 衍生版使用了可变引号,并提供了中间件类 Quotes,允许定义用于开始单引号、结束单引号、开始双引号和结束双引号的 HTML 实体,分别。它还提供了一个定义文本方向性的机制。在为 RTL 语言生成时,正常的左右惯例被颠倒。

Quotes.set(ssquo, esquo, sdquo, edquo, dir) 允许您设置这些值之一或多个。如果您正在改变引号的走向,使其脱离 LTR,最好重新定义所有引号,以确保一切都定义和排序一致。

Quotes.reset() 将一切恢复到出厂默认值。最有用的可能是,Quotes.configure_for_text(text) 估计语言渲染的方向,并相应地设置引号。为了提供一种“开火并忘记”的体验,除非用户明确设置语言方向,否则这种启发式方法将作为 mdx_smartypants 操作的正常部分执行。此外请注意:如果直接调用,此 API 必须提供纯文本——不是 HTML 或其他标记包裹的文本(这将误导语言猜测器错误地猜测英语)。如果用户已明确设置语言方向,则不会进行猜测——但可以提供一个可选的 force 布尔参数,指定应忽略先前的显式方向设置,并开始猜测。

此 API 和功能是全新的;已为它添加了测试,并且成功通过了测试,但目前应将其视为某种实验性。

进一步挖掘,不同语言中使用了大量和多样化的不同引号风格。虽然没有对与英语不同的风格提供自动支持,但可以调用 Quotes.set 并使用任何 HTML 实体,从而支持几乎任何惯例。例如

Quotes.set(r'&lasquo;', r'&rasquo;', r'&laquo;', r'&raquo;')  # Swiss French
Quotes.set(r'&sbquo;',  r'&lsquo;',  r'&bdquo;', r'&ldquo;')  # German or Czech

对于「瑞士」和「法语」(第一个)以及「德语」和「捷克语」(第二个)。

注意 我没有使用右对齐、自上而下语言(如传统中文和日文脚本)的经验。如果需要进一步更改以正确支持该方向性,我很乐意听取意见。

实体

最初,mdx_smartypants 输出的是HTML实体。现在这种行为是可以配置的。默认情况下,Unicode字符和实体不会从 markdown 输出的内容中进行改变。但是,您可以选择将非ASCII字符映射到 命名 实体、数字 实体、unicode 实体(实际上是Unicode字符,而非实体)或 None(不进行映射)。

注意事项

  • 从版本1.5开始,命名实体不再是默认选项。您仍然可以像上面示例中那样请求命名实体。

  • 从版本1.4开始,mdx_smartypants 尝试自动猜测底层语言使用的文本流方向(例如LTR或RTL)并相应地排列引号。感谢 Ahmad Khayyat 提出的问题报告和讨论,这导致了这次升级。这次发布还转向了基于包的发行方式,因为需要额外的模块。

  • 从版本1.2开始,mdx_smartypants 不再使用PyPI上的库存 smartypants 模块。它包含了一个名为 spants 的模块副本,以便调整代码以兼容Python 3,修复在样式块中不正确的标点符号混合,以及进行其他改进。这是向 smartypants 本身重写以支持Python 3和更符合现代Python习惯的部分步骤。

  • 现在已成功打包并针对Python 2.6、2.7、3.3以及PyPy 1.9(基于2.7.2)进行了测试。从版本1.4开始,官方不再支持Python 2.5和3.2;虽然它们可能仍然可以工作,但我无法再对这些版本进行测试。它们也已过时。是时候升级了!

  • 由出色的 pytesttox 管理的自动化多版本测试。

  • 作者 Jonathan Eunice 或在Twitter上的 @jeunice 欢迎您的评论和建议。

安装

pip install -U mdx_smartypants

要使用 pip 在特定的Python版本下安装,查找类似 pip-3.3(例如,在Unix衍生系统上使用 which pip-3.3)。如果找不到这样的程序,您可能可以通过以下方式在特定的Python版本下(在这个例子中是3.3)使用 easy_install

python3.3 -m easy_install --upgrade mdx_smartypants

(您可能需要在这些命令前加上“sudo ”来授权安装。)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

mdx_smartypants-1.5.1.zip (30.1 kB 查看哈希值)

上传时间 源代码

mdx_smartypants-1.5.1.tar.gz (19.5 kB 查看哈希值)

上传时间 源代码

支持