hexojs/hexo-renderer-pandoc

高版本的未知兼容问题

sli1989 opened this issue · 7 comments

pandoc-2.7.1WIN10环境中 hexo-renderer-pandoc 的0.2.4及其以上版本出现未知问题。DEMO是在pandoc-2.7.1hexo-renderer-pandoc@0.2.3下生成的。

SITE'S _config.yml:

  
pandoc:
  filters:
  extra:
  template: 
  meta:
  mathEngine:
  1. 安装 npm install hexo-renderer-pandoc@0.2.4 --save 版本,部分渲染丢失和失效。

丢失:

image

源MD文件:

Pandoc is a universal document converter!对 md 扩展支持让我拜倒,例如[脚注的支持](http://pandoc.org/MANUAL.html#footnotes)部分。需要提醒的是:pandoc 渲染器对 md 的格式要求更加规范些,例如 链接需要用`< >`括号显式包含;quoteblock 每行必须跟两空格表示换行(如果后续行没有`>`标记的话)。当然,把 [Pandoc’s Markdown](http://pandoc.org/MANUAL.html#pandocs-markdown) 浏览一下是很有必要的,或者 [pdf 版本](http://pandoc.org/MANUAL.pdf)。

1. 第二种方法,使用Pandoc渲染器:

    在文件`/layout/_layout.swig`中`/body`前加入:

    ```
    <script type="text/javascript" src="/js/custom.js"></script>
    ```

    在`/themes/next/source/js`中添加文件`custom.js`,在`custom.js`中添加

    ```
    // 函数: html 中去掉 某 tag 最后那一次出现
    var rmLastElm = function(text, selector) {
        var wrapped = $("<div>" + text + "</div>");
        wrapped.find(selector).last().remove();
        return wrapped.html();
    }
    // 弹出 tip 显示 脚注
    var $fRef = $(".footnoteRef");
    for(let i=0; i<$fRef.length; i++) {
    	var sup = $fRef.children("sup")[i];		//work reliably as long as there's exactly one sup per footnotRef
    //	var sup = $fRef[i].children("sup");		//a classic Dom Element, so it doesn't have any children method
    	sup.onmouseover = function(event) {
    		$('.footnoteTip').remove();
    		var pTip = document.createElement('div');
    		pTip.className = 'footnoteTip';		// CSS
    		pTip.innerHTML = rmLastElm(document.getElementById($fRef[i].getAttribute("href").substring(1)).innerHTML,"a");
    		document.body.appendChild(pTip);

    		var posLeft = event.pageX - 180;
    		if (posLeft<0) posLeft = 20;
    		var posTop = event.pageY + 20;
    		var od = $('.footnoteTip');
    		var oH = od.outerHeight();
    		var oW = od.outerWidth();
    		if(posTop + oH - window.pageYOffset > $(window).height()) 	posTop = posTop - oH -40;
    		if (posLeft + oW > $(window).width()) posLeft = $(window).width() - oW -20;	//NexT.Mist pageXOffset=0
    		pTip.style.left = posLeft + 'px';
    		pTip.style.top = posTop + 'px';

    	};

    	sup.onmouseout = function(event) {
    		$('.footnoteTip').remove();
    	};
    }
    ```

## 外链播放器

部分 HEXO tags 失效:

image

源MD文件:

## Quick Start

{% tabs First unique name %}
<!-- tab -->
**This is Tab 1.**
<!-- endtab -->
<!-- tab -->
**This is Tab 2.**
<!-- endtab -->
<!-- tab -->
**This is Tab 3.**
<!-- endtab -->
{% endtabs %}
  1. 安装 npm install hexo-renderer-pandoc@0.2.5 --save 或者更高版本,出现未知问题
Administrator@DESKTOP-ALEX MINGW64 /f/alex/hexo (gh-pages)
$ hexo clean && hexo g && hexo s
INFO  Deleted database.
INFO  Deleted public folder.
INFO  Start processing
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: write EOF
    at WriteWrap.afterWrite [as oncomplete] (net.js:868:14)

pandoc 2.7.1
hexo-renderer-pandoc 0.2.4
测试环境 hexo 未安装任何除默认插件及 hexo-renderer-pandoc@0.2.4 以外的插件。
测试文件 source/_posts/test.md

```
test
```

命令 cat source/_posts/test.md | pandoc -f markdown -t html --mathjax 正确输出

<pre><code>test</code></pre>

命令 hexo g 输出(部分)

<div class="article-entry" itemprop="articleBody">
        <!--0-->
</div>

其中 <!--0--> 中字符 0 前有不可见字符 uFFFC.

进一步检验发现,hexo 从 stdin 写给 pandoc 的字符流如下

<!--0-->

猜测 hexo 从 markdown 中提取了 codeblock 后没有将其插入回去。因而也不是本插件的错误。

更详细的测试随后进行。

issue
#21
讨论的是同样的问题,并在 0.2.5 版本已经修复。因此请使用 0.25 以上版本。

我在 0.2.5 下测试以下文件

{% tabs First unique name %}
<!-- tab -->
**This is Tab 1.**
<!-- endtab -->
<!-- tab -->
**This is Tab 2.**
<!-- endtab -->
<!-- tab -->
**This is Tab 3.**
<!-- endtab -->
{% endtabs %}

收到错误 unknown block tag: tabs。我不是特别了解 hexo tag,但是看起来它不允许使用自定义的 tag 类型。
后发现 tabs tag 由 NexT 主题自定义于 themes\next\scripts\tags\tabs.js 中:hexo.extend.tag.register('tabs', postTabs, {ends: true});

而以下文件

```
test
```

## Quick Start

{% blockquote David Levithan, Wide Awake %}
Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
{% endblockquote %}

正常输出:

image

其中 fenced code block 与 hexo tag 都正确渲染。因此我无法复现您所说的

安装 npm install hexo-renderer-pandoc@0.2.5 --save 或者更高版本,出现未知问题

可否提供完整且尽可能小的 case? 包括从 hexo init 开始, npm install ... , 一直到 hexo g 为止的所有命令,以及站点的 _config.yml 文件。

另外可否提供完整的报错信息?看起来你截去了整个调用栈。

非常感谢详细解答。
我是在footnote测试的,不知道是不是公式书写问题。我有空再自己排除一下吧。

这个错误的原因应该是我刚刚见的Issue里的问题: #33

@huangy10 感谢您指出问题的根源以及修复的方法。随后我会对该方法进行测试。

@sli1989 关于 Tag 的问题已于 v0.3.0 中修复。若您能测试并提供反馈我们将会非常感激。

另外关于您 “安装 npm install hexo-renderer-pandoc@0.2.5 --save 或者更高版本,出现未知问题” 的问题,现在解决了吗?

@RichardYan314

emm,应该是我自己问题。pandoc同时装了两个版本,而实际起作用的是1.9版本。
后续如有问题,我再给您反馈,谢谢。