像地球上几乎所有人一样,我也有几个社交媒体账户。我主要使用 Facebook 与朋友和家人保持联系,并使用 Twitter 关注其他人。
你是否曾经想发布包含斜体或其他花哨格式的帖子?当你在写电子邮件时,你可以轻松地将文本更改为斜体或粗体,但大多数社交媒体平台不提供太多格式选项。
有时,我只是想对我写的内容稍作强调。如果我度过了非常美好的一天,并且想与我的朋友分享,我可能想将文本设置为斜体。对于其他帖子,我可能想使用不同的格式,这将有助于我的文本脱颖而出。当然,你可以使用表情符号,但有时一点文本格式可以为你的帖子增添额外的活力。
我找到了一种方法来做到这一点。通过我编写的一个简短的 Gawk 脚本,我可以创建花哨的格式,我可以将其复制并粘贴到我的社交媒体帖子中。
特殊 HTML
HTML 包含许多用于数学、符号和其他语言的特殊字符,但大多数人并没有意识到。在数学标记语言 (MathML) 的数学字符支持中,HTML 包括用于手写体、花体和双线体(分别在此图像中显示)字母表的替代版本。

你可以使用这些字母表的替代版本来创建花哨的文本。
手写体字母表的变体写法是在字母后跟 scr。字符可以是大小写。例如,要在 HTML 页面中打印手写体字母 a,请输入 𝒶,要在 HTML 中打印手写体字母 Z,请输入 𝒵。
花体和双线体变体的引用方式类似。花体数学小写字母 a 是 𝔞,大写字母 Y 是 𝔜。数学双线体 a 的引用方式为 𝕒,双线体 X 的引用方式为 𝕏。
Gawk 函数
一旦你知道如何引用每个字母的替代版本,就很容易定义一些 Gawk 函数来打印这些 HTML 实体。由于这些替代字符仅存在于字母,而不存在于标点符号或数字,因此首先从一个简单的包装函数开始,以确定字符是大写字母还是小写字母。
#!/usr/bin/gawk -f
# Echo the input as different "fonts." Redirect this into an html
# page and copy/paste fancy text into twitter or facebook.
BEGIN { alpha="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
function is_alpha(c) {
return(index(alpha, c));
}
BEGIN 语句定义了一个名为 alpha 的字母表字符串,其中包含所有字母 a–z 和 A–Z。is_alpha(c) 函数使用内置的 index() 函数来返回字符 c 在字符串 alpha 中的位置。如果字符 c 不是字母,index() 将返回零,脚本将其用作 False 值。
因为 is_alpha(c) 函数只是“包装”了对 index() 函数的调用,而没有做任何其他事情;这被称为包装函数。可以将其视为使 Gawk 脚本更易于阅读的简写。
有了这个,很容易定义一些将单个字母转换为字母表每个替代版本的函数。通常,每个函数都调用 is_alpha(c) 来确定字符是否为字母 a–z 或 A–Z。如果是(即,如果返回值为非零),则该函数将该字母的 HTML 实体打印为手写体、花体和双线体。否则,该函数将打印该字母。
function print_script(c) {
if ( is_alpha(c) ) { printf("&%cscr;", c); } else { printf("%c", c); }
}
function print_fraktur(c) {
if ( is_alpha(c) ) { printf("&%cfr;", c); } else { printf("%c", c); }
}
function print_double(c) {
if ( is_alpha(c) ) { printf("&%copf;", c); } else { printf("%c", c); }
}
print_script(c) 函数以手写体打印单个字母。同样,print_fraktur(c) 函数以花体打印字母,print_double(c) 函数以双线体打印单个字母。
剩下的就是一个 Gawk 循环,用于将纯文本转换为每个替代字母表字符。此脚本循环遍历每一行三次,并以手写体、花体或双线体打印文本。每行都包含在 <p> 和 </p> HTML 标签中。
{ text=$0;
len=length(text);
print "<p>";
for (i=1; i<=len; i++) {
print_script( substr(text, i, 1) );
}
print "</p><p>";
for (i=1; i<=len; i++) {
print_fraktur( substr(text, i, 1) );
}
print "</p><p>";
for (i=1; i<=len; i++) {
print_double( substr(text, i, 1) );
}
print "</p>";
}
整合在一起
我将以上代码行保存在一个名为 htmlecho 的脚本文件中,并将其放在我的 ~/bin 目录中。
$ htmlecho > /tmp/hello.html
Hello world
^Z
每当我想为我的 Facebook 和 Twitter 帖子添加花哨的文本时,我只需运行该脚本并将输出保存到一个临时 HTML 页面。我在 Web 浏览器中打开临时页面,并将我最喜欢的花哨文本复制并粘贴到我的社交媒体帖子中。
1 条评论