是否有一个命令行实用程序渲染GitHub风味Markdown?

我想知道是否有一个命令行实用程序来获取GitHub风味Markdown文件并将其呈现为HTML。

我正在使用GitHub维基创建网站内容。我已经在服务器上克隆了存储库,然后想把它处理成常规HTML。对我来说,重要的是,在GitHub上出现的内容正是我的网站应该如何寻找的。我也非常喜欢使用~~~的围栏块,所以我宁愿不使用标准Markdown语法。

我已经看了一下JavaScript的实时预览,我想我可以把它挂钩到Node.js,但他们说它已经被弃用了。我已经查看了红地毯存储库,但它看起来不像有命令行界面。

我选择了自己的解决方案,但是,由于这里没有一个解决方案明显比其他解决方案更好,所以我将不选择答案。

130257 次浏览

也可参见https://softwareengineering.stackexchange.com/a/128721/24257


如果你对我们[Github]如何渲染Markdown文件感兴趣,你可能想看看Redcarpet,我们的Ruby接口到Sundown库。

Ruby-script,使用Redcarpet,将是“命令行实用程序”,如果你有本地Ruby

我还没有找到一个快速和简单的方法,github风味Markdown,但我发现了一个稍微更通用的版本- Pandoc。它可以从/转换为多种格式,包括Markdown, Rest, HTML和其他格式。

我还开发了一个Makefile来将所有.md文件转换为.html(在很大程度上是Writing, Markdown and Pandoc .中的示例):

# 'Makefile'
MARKDOWN = pandoc --from gfm --to html --standalone
all: $(patsubst %.md,%.html,$(wildcard *.md)) Makefile


clean:
rm -f $(patsubst %.md,%.html,$(wildcard *.md))
rm -f *.bak *~


%.html: %.md
$(MARKDOWN) $< --output $@

我找到了一个网站,将为您做这个:http://tmpvar.com/markdown.html。粘贴你的Markdown,它会为你显示它。它似乎工作得很好!

然而,它似乎不能处理代码的语法高亮显示选项;也就是说,~~~ruby特性不起作用。它只打印‘ruby’。

可能不是你想要的,但既然你提到了Node.js:我找不到一个好工具来预览GitHub调味Markdown文档在我的本地驱动器之前提交到GitHub,所以今天我创建了一个,基于Node.js: https://github.com/ypocat/gfms

因此,如果您的问题仍然是实际的,也许您可以在您的Wiki中重用其中的showdown.js。如果不是这样,也许其他和我面临同样问题的人会发现(就像我一样)这个问题和这个答案。

我最终的解决方案是使用Python减价。我滚动了我自己的 扩展,固定了栅栏块。

pip3 install --user markdown
python3 -m markdown readme.md > readme.html

它不能处理GitHub扩展,但总比没有强。我相信您可以扩展模块来处理GitHub的添加。

使用标志着。它支持GitHub调味Markdown,可以作为Node.js模块和从命令行使用。

一个例子是:

$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>

也许这可能会有所帮助:

gem install github-markdown

没有文档存在,但我从咕噜文档中得到它。查看rubydoc.info,看起来你可以使用:

require 'github/markdown'
puts GitHub::Markdown.render_gfm('your markdown string')

在你的Ruby代码中。你可以在脚本中轻松地将其包装成命令行实用程序:

#!/usr/bin/env ruby


# render.rb
require 'github/markdown'


puts GitHub::Markdown.render_gfm File.read(ARGV[0])

使用./render.rb path/to/my/markdown/file.md执行它。注意,在没有消毒的生产中使用是不安全的。

我用Python写了一个小的CLI,并添加了GFM支持。它叫做Grip (Github Readme即时预览)

安装方法:

$ pip install grip

要使用它,简单地说:

$ grip

然后访问localhost:5000以查看该位置的readme.md文件。

你也可以指定你自己的文件:

$ grip CHANGES.md

并更改端口:

$ grip 8080

当然,特别渲染github - flavour Markdown,可选的存储库上下文:

$ grip --gfm --context=username/repo issue.md

显著的特点:

  • 渲染页面显示完全像在GitHub
  • Fenced块
  • Python API
  • 在链接文件之间导航(谢谢,vladwing!
  • 导出到单个文件(谢谢,iliggio!
  • 新:stdin读取并导出到stdout 3.0新增

希望这能帮助到这里的人。看看吧

我最近做了你想要的东西,因为我需要从Markdown文件生成文档,GitHub风格非常好。试一试。它是用Node.js编写的。

gfm

基于吉姆·林的回答,我安装了GitHub Markdown gem。这包括一个名为gfm的脚本,它接受命令行上的文件名,并将等效的HTML写入标准输出。我稍微修改了一下,把文件保存到磁盘上,然后用launchy打开标准浏览器:

#!/usr/bin/env ruby


HELP = <<-help
Usage: gfm [--readme | --plaintext] [<file>]
Convert a GitHub-Flavored Markdown file to HTML and write to standard output.
With no <file> or when <file> is '-', read Markdown source text from standard input.
With `--readme`, the files are parsed like README.md files in GitHub.com. By default,
the files are parsed with all the GFM extensions.
help


if ARGV.include?('--help')
puts HELP
exit 0
end


root = File.expand_path('../../', __FILE__)
$:.unshift File.expand_path('lib', root)


require 'github/markdown'
require 'tempfile'
require 'launchy'


mode = :gfm
mode = :markdown if ARGV.delete('--readme')
mode = :plaintext if ARGV.delete('--plaintext')


outputFilePath = File.join(Dir.tmpdir, File.basename(ARGF.path))  + ".html"


File.open(outputFilePath, "w") do |outputFile |
outputFile.write(GitHub::Markdown.to_html(ARGF.read, mode))
end


outputFileUri = 'file:///' + outputFilePath


Launchy.open(outputFileUri)

有一个非常好的和简单的工具来浏览GFM Markdown文档:

GFMS - Github调味Markdown服务器

它是简单和轻量级的(不需要配置)HTTP服务器,您可以在任何包含标记文件的目录中启动以浏览它们。

特点:

  • 全GFM Markdown支持
  • 源代码语法突出显示
  • 浏览文件和目录
  • 漂亮的输出(以及可配置的CSS样式表)
  • 导出为PDF

GitHub有Markdown API你可以使用。

GitHub开发了一个很好的模块化文本编辑器,名为原子(基于Chromium,并使用node . js模块进行包)。

默认的预安装包减价预览可以让你使用Ctrl + 转变 + 在单独的选项卡中显示预览。

我还没有测试它的完整语法,但由于它来自GitHub,如果预览的语法与他们的不同(使用~~~工作的围栏块),我会非常惊讶。

现在,虽然它在技术上不是基于命令行,但它使用Node.js并输出到基于__abc0的渲染器,这可能会帮助任何试图在基于Node.js的web服务器上渲染基于GitHub语法的HTML的人,或者只是编辑她/他的README。md离线。

阅读自述文件。md文件在终端我使用:

pandoc README.md | lynx -stdin

Pandoc以HTML格式输出,Lynx将其呈现在您的终端中。

它的工作很棒:它充满了我的终端,快捷方式如下所示,我可以滚动,和链接工作! 虽然只有一种字体大小,但颜色+缩进+对齐方式弥补了这一点

安装:

  • 恰当的:sudo apt-get install pandoc lynx
  • 拒绝:nix-shell -p pandoc lynx

这主要是@barry- states对使用Pandoc的回答的后续。如果你用的是Mac电脑,Homebrew也有这个功能:

brew install pandoc

Pandoc通过markdown_github名称支持GFM作为输入格式。

输出到文件

cat foo.md | pandoc -f markdown_github > foo.html

打开在山猫

cat foo.md | pandoc -f markdown_github | lynx -stdin # To open in Lynx

在OS X的默认浏览器中打开

cat foo.md | pandoc -f markdown_github > foo.html && open foo.html # To open in the default browser on OS X`

TextMate软件集成

像大多数编辑器所允许的那样,您始终可以将当前选择或当前文档输送到上述其中一个。您还可以轻松地配置环境,以便pandoc替换减价包使用的默认Markdown处理器。

首先,创建一个包含以下内容的shell脚本(我将其称为ghmarkdown):

#!/bin/bash
# Note included, optional --email-obfuscation arg
pandoc -f markdown_github --email-obfuscation=references

然后,你可以将TM_MARKDOWN变量(在Preferences→Variables中)设置为/path/to/ghmarkdown,它将取代默认的Markdown处理器。

我创建了一个类似于Atom预览功能的工具,但是作为一个独立的应用程序。不确定这是否是你要找的,但它可能会有帮助。——https://github.com/yoshuawuyts/vmd

vmd

一个“快速和肮脏”的方法是使用wget实用程序下载wiki HTML页面,而不是克隆它。例如,这是我如何从GitHub下载Hystrix维基(我使用Ubuntu Linux):

 $ wget -e robots=off -nH -E -H -k -K -p https://github.com/Netflix/Hystrix/wiki
$ wget -e robots=off -nH -E -H -k -K -I "Netflix/Hystrix/wiki" -r -l 1 https://github.com/Netflix/Hystrix/wiki

第一个调用将下载wiki条目页面及其所有依赖项。第二个将调用它的所有子页面。你现在可以通过打开Netflix/Hystrix/wiki.1.html来浏览维基。

注意,对wget的两次调用都是必要的。如果您只运行第二个,那么您将错过正确显示页面所需的一些依赖项。

改进@barry- state的解决方案。将这段代码插入~/.bashrc中

function mdviewer(){
pandoc $* | lynx -stdin
}

然后,我们可以从命令行快速查看该文件。也可以很好地工作在SSH/Telnet会话。

mdviewer README.md

改进@barry- state和@Sandeep的答案,为普通用户的elinks,你会添加以下到。bashrc:

function mdviewer() {
pandoc $* | elinks --force-html
}

不要忘记安装pandoc(和elinks)。

pandocbrowser对我来说很好。

用法:cat README.md | pandoc -f markdown_github | browser

安装(假设你使用的是Mac OSX):

  • $ brew install pandoc

  • $ brew install browser

在Debian/Ubuntu上:apt-get install pandoc browser

后期添加,但是showdownjs有一个CLI工具,你可以使用它将MD解析为HTML。

为此,我设法使用了一行Ruby脚本(尽管它必须放在单独的文件中)。首先,在每台客户端机器上运行这些命令一次,你将从下面的机器推送文档:

gem install github-markup
gem install commonmarker

接下来,在客户端镜像中安装这个脚本,并将其命名为render-readme-for-javadoc.rb:

require 'github/markup'


puts GitHub::Markup.render_s(GitHub::Markups::MARKUP_MARKDOWN, File.read('README.md'))

最后,像这样调用它:

ruby ./render-readme-for-javadoc.rb >> project/src/main/javadoc/overview.html

ETA:这不会帮助你与stackoverflow风味Markdown,这似乎是失败的答案。

我使用Pandoc选项--from=gfm为GitHub调味Markdown如下:

$ pandoc my_file.md   --from=gfm -t html -o my_file.html

这样的评论的基础上,我写了一个一行程序,使用curljq来命中Github Markdown API

将这个bash函数粘贴到命令行或~/.bash_profile中:

mdsee(){
HTMLFILE="$(mktemp -u).html"
cat "$1" | \
jq --slurp --raw-input '{"text": "\(.)", "mode": "markdown"}' | \
curl -s --data @- https://api.github.com/markdown > "$HTMLFILE"
echo $HTMLFILE
open "$HTMLFILE"
}

然后查看呈现的HTML在浏览器中运行:

mdsee readme.md

如果需要纯终端解决方案,则将open "$HTMLFILE"替换为lynx "$HTMLFILE"

另一个选项是AllMark - 降价服务器

. Docker镜像可用于准备就绪的设置

$ allmark serve .

注意:它递归扫描目录服务网站从markdown文件。因此,为了更快地处理单个文件,请将其移动到单独的目录。