使用这个 Gawk 脚本为你的社交媒体帖子创建花哨的文本

通过以手写体、花体或双线体字符发布文本,为你的状态更新增添一些风格。
118 位读者喜欢这个。
Chat via email

像地球上几乎所有人一样,我也有几个社交媒体账户。我主要使用 Facebook 与朋友和家人保持联系,并使用 Twitter 关注其他人。

你是否曾经想发布包含斜体或其他花哨格式的帖子?当你在写电子邮件时,你可以轻松地将文本更改为斜体或粗体,但大多数社交媒体平台不提供太多格式选项。

有时,我只是想对我写的内容稍作强调。如果我度过了非常美好的一天,并且想与我的朋友分享,我可能想将文本设置为斜体。对于其他帖子,我可能想使用不同的格式,这将有助于我的文本脱颖而出。当然,你可以使用表情符号,但有时一点文本格式可以为你的帖子增添额外的活力。

我找到了一种方法来做到这一点。通过我编写的一个简短的 Gawk 脚本,我可以创建花哨的格式,我可以将其复制并粘贴到我的社交媒体帖子中。

特殊 HTML

HTML 包含许多用于数学、符号和其他语言的特殊字符,但大多数人并没有意识到。在数学标记语言 (MathML) 的数学字符支持中,HTML 包括用于手写体、花体和双线体(分别在此图像中显示)字母表的替代版本。

script, fraktur, and double-strike text

你可以使用这些字母表的替代版本来创建花哨的文本。

手写体字母表的变体写法是在字母后跟 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 浏览器中打开临时页面,并将我最喜欢的花哨文本复制并粘贴到我的社交媒体帖子中。

标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,以在 GNOME 中进行可用性测试以及作为 FreeDOS 的创始人兼项目协调员而闻名。

1 条评论

这是一个例子

ℋℯ??ℴ ?ℴ???
ℌ???? ?????
ℍ???? ?????

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.