使用 PrismJS 高亮 C++ Doxygen 注释

之前咱用 VSCode 写代码的时候会发现,对于某些特定格式的注释会有高亮。查了一下,这个叫 Doxygen。很方便可读性也很高。

但是用了 PrismJS 自带的代码高亮你会发现,这些注释没有高亮。

那为什么不自己写一个呢?

然后就自己写了一个(x

项目仓库

相当于是新建了一个语言 doxycpp

演示:

(由于高亮插件更换,因此下面两张图应该看不出什么区别,参见后文提供的 demo 链接)

(无插件)

/** @file imken/cp/odt.h */

/// @brief ODT 的 split 操作。
/// @param pos 需要切分的区间端点。
/// @return 第一个包含 x 区间的后面一个。
inline auto split(int pos)
{
    if (pos > n)
        return odt.end();
    auto it = --odt.upper_bound(Node { pos, 0, 0, 0 });
    if (it->l == pos)
        return it;
    int l = it->l, r = it->r;
    i64 v = it->v, bg = it->bg;
    odt.erase(it);
    odt.insert({ l, pos - 1, v, bg });
    return odt.insert({ pos, r, v, bg }).first;
}

(有插件)

/** @file imken/cp/odt.h */

/// @brief ODT 的 split 操作。
/// @param pos 需要切分的区间端点。
/// @return 第一个包含 x 区间的后面一个。
inline auto split(int pos)
{
    if (pos > n)
        return odt.end();
    auto it = --odt.upper_bound(Node { pos, 0, 0, 0 });
    if (it->l == pos)
        return it;
    int l = it->l, r = it->r;
    i64 v = it->v, bg = it->bg;
    odt.erase(it);
    odt.insert({ l, pos - 1, v, bg });
    return odt.insert({ pos, r, v, bg }).first;
}

用法:

<script src="https://fastly.jsdelivr.net/npm/[email protected]/components/prism-clike.min.js"></script>
<script src="https://fastly.jsdelivr.net/npm/[email protected]/components/prism-c.min.js"></script>
<script src="https://fastly.jsdelivr.net/npm/[email protected]/components/prism-cpp.min.js"></script>
<script src="https://fastly.jsdelivr.net/npm/[email protected]/prism-cpp-doxygen.min.js"></script>

需要注意的是这个 doxycpp 语言是从 cpp 语言继承的,所以就需要在加载这个之前加载 clike, c, cpp 语言。

现在还在想 AutoLoader 的适配怎么做(x

之后的信息会在这篇博文更新的(x

不过不得不说 JSDoc 的类型标注的调试比 TypeScript 方便多了(x


2023 年 10 月 9 日更新:

AutoLoader 的适配没法做(会有很多 Breaking Changes)于是 Fork 了一个 AutoLoader(x

仓库地址在这里,主要变动是加了两个配置项可以手动指定语言的脚本加载链接和依赖。

2024 年 1 月 7 日更新

因为这个博客的高亮插件又更换了,所以新的 demo 在这里,可以去看看!