本文を読み飛ばす

Nim: Nikolaのtags-categories出力を修正するスクリプト例

nikolaの出力で、 articles.html には
各年の記事数が出力されますが、
tags-categoriesには記事数がでません。

2023年 (100) の100みたいな感じ

nikolaのプラグインを改造したら修正できるかもしれませんが、
ファイルの数を数えてちょっと修正するだけのスクリプトとして組んでみます。

code::

proc parse_articles(dname, key: string): int =
    let dname = os.joinPath(dname, key)
    let rex_item = re("^<time class=\"listdate")
    result = 0
    for line in lines(dname & "/index.html"):
        if re.find(line, rex_item) < 0: continue
        result += 1
    return result


proc main3(fname, dname: string): int =
    ##[summarize tags or categories
    ]##
    let rex_item = re("<a class=\"reference.* href=\"[-/A-Za-z0-9]+\">" &
                      "([-A-Za-z0-9]+)</a>")

    var fs = newStringStream("")
    for line in lines(fname):
        var mo: array[1, string]
        if re.find(line, rex_item, mo) < 0:
            fs.write(line & "\n"); continue
        let key = mo[0].strip()
        let n = parse_articles(dname, key.toLower())
        let l = line.replace(">" & key & "</a>",
                             ">" & key & "(" & $n & ")</a>")
        fs.write(l & "\n")

    let fo = if f_ovr: open(fname, fmWrite)
             else:     stdout
    fs.setPosition(0)
    for line in lines(fs):
        fo.write(line & "\n")
    fs.close()
    fo.close()
    return 0

修正対象のmarkup::

    <ul class="postlist">
<li><a class="reference listtitle" href="3dprint/">3Dprint(3)</a></li>
                <li><a class="reference listtitle" href="account/">account</a></li>
                <li><a class="reference listtitle" href="android/">android</a></li>
                <li><a class="reference listtitle" href="arcade/">arcade</a></li>
                <li><a class="reference listtitle" href="armbian/">armbian</a></li>
                <li><a class="reference listtitle" href="az/">AZ</a></li>
                <li><a class="reference listtitle" href="bb10/">BB10</a></li>
        </ul>

nikolaで記事をbuildするときに走るようにMakefileに記述して使います

tools/numbers: tools/numbers.nim
    nim c -o:$@ $<
numbers: tools/numbers
    $< output/categories/index.html
build:
    $(nikola) build
    make numbers

コメント

Comments powered by Disqus
宣伝: