给标题添加换行

简书太扯了, 不管是什么空格都替换掉了。 开门见山, 废话不多说。如果非标题行在标题行上面, 那么这俩行之间会有一段空白, 但是你肯定遇到过:

这个标题会和下面的非标题行贴在一块

即使我在这一行换行也于事无补, 它们被简书吃掉啦。这不能忍! 看起来很丑有没有?下面我们就来解决这个问题, 手动在这一行的上面加上一个全角的空格, 就 okay 了。

问题似乎已经解决了, 但是我不能够。必须写个程序来帮我们解决这烦人的问题。方法就是在标题行后面添加一个换行符和一个全角空格(测试后行不通, 还是被吃, 换成 <br> 吧)。

use v6;

for dir(test => /\. md|markdown $/) -> $file {
    my $out   = open $file ~ '.txt', :w;
    my @lines = $file.lines;

    for @lines -> $line is rw {
        if $line ~~ /^\s*$/ {
            $out.say($line);
            next;
        }

        $line ~~ s/^ ('#' ** 1..7 .*?) $/$0\n  <br>/ unless
            $line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;
        $out.say($line);

    }
    $out.close;
}

其中有段代码比较有意思, 就是:

 $line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;

这是用来匹配代码片段的。 它匹配 ``` 标识之间的东西。这能够用于提取代码片段, 假如我有一个叫做 input.txt 的文本文件:


# 提取代码片段
 
## Flip 和 Flop
 
这俩单词是什么鬼? 反转操作符? 看起来很牛的样子, `方`, 我觉得它像开关

## 片段1
 
'''raku
say 'hello';
### 我是 Raku 代码
'''

ff 还有 ^ff ff^  ^ff^ 三种变体


## 片段2
 
''' perl
# 我是 Perl 5 代码
say 'hello' ~ 'world';
'''

# 片段3
 
'''
fff 用于对付某些特殊情况。
### 这是注释
我只是在测试 ff 和 fff 的不同。显然, fff 更智能点。
'''

因为简书对嵌套的 ``` 这种结构处理不好, 所以我使用单引号 ' 来代替 `。我需要提取每对 ``` 之间的内容, 那么:

use v6;

my @lines = "input.txt".IO.lines;
for @lines -> $line {
    say $line if $line ~~ /^\s*'```'\s*(\w+)?$/ ff $line ~~ /^\s*'```'\s*$/;
}

但是对于片段3, 因为开始标识符和结束标识符都是 ```, ff 提取不到, 这时需要用到 fff 了:

 say $line if $line ~~ /^\s*'```'\s*(\w+)?$/ fff $line ~~ /^\s*'```'\s*$/;

如果你连开始和结尾的 ``` 标识符也不想要, 那么使用 ^fff^

comments powered by Disqus