背景
Markdown 文档使用某些需要以特殊方式排版的字符串。在本例中,我们希望将文本出现在源文档中的任何地方都排版a.m.
为p.m.
小写。即:
11 a.m. → 11 AM
11 p.m. → 11 PM
ConTeXt LMTX,最新版本。
问题
连接到 ConTeXt 的文本处理算法。
代码
以下代码片段显示了两个部分。第一部分表示输入源文档。第二部分显示如何替换文本。
\starttext
{\bf Markdown Input}
Our grandmother clock rang 11 p.m. and we fled.
Our grandmother clock rang 11 p.m., so we fled.
Our grandmother clock rang 11 p.m. We fled.
\blank[big]
{\bf \ConTeXt{} Output}
Our grandmother clock rang 11 \cap{pm} and we fled.
Our grandmother clock rang 11 \cap{pm}, so we fled.
Our grandmother clock rang 11 \cap{pm}. We fled.
\stoptext
英语使得这比直接替换更具挑战性。例如:
晚上11点,库克船长烹制了一块弯曲的黄瓜。
我们不要担心那个案子。
问题
如何在不修改源文档的情况下在 ConTeXt 中执行字符串替换?是否有类似以下内容:
\definereplacement[SubstPostmeridian][
match={[Pp].[Mm].]}
replace={\cap{pm}}
]
\definereplacement[SubstMac][
match={Mc(\W)}
replace={M\sup{c}\1}
]
第二个示例将“McGenius”更改为“MᶜGenius”。
答案1
您可以使用该translate
模块:
\startbuffer
Our grandmother clock rang 11 p.m. and we fled.
Our grandmother clock rang 11 p.m., so we fled.
Our grandmother clock rang 11 p.m. We fled.
\stopbuffer
\usemodule[translate]
\translateinput[ a.m.][ \cap{AM}]
\translateinput[ p.m.][ \cap{PM}]
\starttext
\getbuffer
\enableinputtranslation
\getbuffer
\disableinputtranslation
\getbuffer
\stoptext