來源:Soimort
給GitHub-Linguist添加Literate CoffeeScript支持的時候稍稍總結了一下這個問題,即GitHub是怎樣在前端渲染它的Markdown和處理代碼高亮的。
大體上似乎是這個流程:
GitHub在前端用到的一系列工具基本上都是開源的。現簡單地整理如下。
GitHub的標記 & 模板風格指南:https://github.com/styleguide/templates
GitHub使用的CSS替代品是
採用文檔框架
GitHub的樣式 & CSS風格指南:https://github.com/styleguide/css
GitHub使用的JavaScript替代品是
GitHub的行為 & JavaScript風格指南:https://github.com/styleguide/javascript
GitHub使用的Markdown是對原標準的一個擴展集:
支持GitHub Flavored Markdown的渲染引擎:
RedCarpet的核心庫是用C實現的,叫做Sundown(RedCarpet是Sundown的Ruby wrapper):
Sundown項目已經中止開發。GitHub正在計劃與Reddit、StackOverflow、Meteor協作開發一個統一的Markdown標準,以及一個相應的輕量級、快速的、高安全性的渲染引擎。發布時間預期為去年年底(或者今年年底?)。關於該替代品的開發狀況,目前尚無可靠消息得以確認。
GitHub用來渲染各種文本標記語言的框架(支持多種主流的輕量級標記語言,如Markdown、Textile、RDoc、Org mode、reStructuredText、AsciiDoc等,依賴於具體的引擎來完成。例如對Markdown的渲染依賴於RedCarpet):
基於Python的代碼高亮工具Pygments的一個Ruby wrapper:
取代了原來的Albino: https://github.com/github/albino
GitHub用它來識別代碼庫中的語言(屬於何種程序語言 或 文本標記語言):
這個庫也決定了GitHub的Top Languages頁面中哪些編程語言將會被展示出來。
對於程序語言,GitHub將調用Pygments.rb對代碼進行高亮處理;
對於文本標記語言,GitHub將把文件交由GitHub-Markup進行渲染。
在線代碼編輯功能使用的是Ace(Ajax.org Cloud9 Editor)。這是一個非GitHub項目:
用於託管GitHub的項目Wiki:
用於渲染Contribution graphs / Network graphs等頁面的可視化效果:
GitHub Pages託管服務使用的靜態網站生成器:
(Jekyll並非GitHub的官方項目,沒有使用GitHub-Markup作為其渲染框架。在最近的版本中才開始支持使用RedCarpet作為其Markdown引擎。)
GitHub官方指定繪文字表情(詳細列表參見http://www.emoji-cheat-sheet.com/):
(這一套通用的繪文字同時也被Campfire和Trac等支持。)
[火星人 ] 前端之美——GitHub前端工具鏈整理匯總已經有471次圍觀