Perl 6 - 給標題添加換行

簡書太扯了, 不管是什么空格都替換掉了。
開門見山, 廢話不多說。如果非標題行在標題行上面, 那么這倆行之間會有一段空白, 但是你肯定遇到過:

這個標題會和下面的非標題行貼在一塊

即使我在這一行換行也于事無補, 它們被簡書吃掉啦。這不能忍! 看起來很丑有沒有?下面我們就來解決這個問題, 手動在這一行的上面加上一個全角的空格, 就 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
 
'''perl6
say 'hello';
### 我是 Perl 6 代碼
'''

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^

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容