來自 GitHub Markdown 標頭
# S?me/title-header_
GitHub 的渲染器創建錨點
#s?metitle-header_
顯然,空格和/被洗掉,字母(ASCII 和 Unicode)被小寫,-并且_被保留。
這個對嗎; 還有其他規則嗎?
uj5u.com熱心網友回復:
GitHub.com 將 Markdown 標題文本轉換id=""為自動#fragment鏈接屬性的程序并未由任何 Markdown 規范或實作定義。
例如,GitHub Flavored Markdown Spec中沒有描述它。
相反,這是 GitHub在完成從 Markdown 到 HTML 的初始轉換后私下做的事情,這在GitHub 自己的關于該主題的自述檔案的第 4 步中進行了描述(強調我的):
這個庫是存盤庫中的每個標記檔案在呈現到 GitHub.com 之前進行的旅程的第一步:
github-markup選擇一個底層庫以將原始標記轉換為 HTML。- HTML 被清理,積極地洗掉可能傷害您和您的親屬的東西 - 例如腳本標簽、行內樣式以及類或 id 屬性。
- 語法高亮是在代碼塊上執行的。有關語法突出顯示的更多資訊,請參閱 github/linguist。
- HTML 通過添加特殊調味料的其他過濾器傳遞,例如表情符號、任務串列、命名錨點、影像的 CDN 快取和自動鏈接。
- 生成的 HTML 在 GitHub.com 上呈現。
.md/ Markdown 檔案由 CommonMarker libcmark 處理,不包含id=""屬性和#fragmentURI 生成作為內置功能,但 CommonMarker 的檔案實際上提供了一個用于首頁鏈接的id=""Markdown 標頭屬性的示例實作,重復如下:#fragment
class MyHtmlRenderer < CommonMarker::HtmlRenderer
def initialize
super
@headerid = 1
end
def header(node)
block do
out("<h", node.header_level, " id=\"", @headerid, "\">",
:children, "</h", node.header_level, ">")
@headerid = 1
end
end
end
# this renderer prints directly to STDOUT, instead
# of returning a string
myrenderer = MyHtmlRenderer.new
print(myrenderer.render(doc))
# Print any warnings to STDERR
renderer.warnings.each do |w|
STDERR.write("#{w}\n")
end
上面生成了單調遞增的數字標頭id=""值,這有助于防止id=""沖突(盡管這不是一個完美的解決方案),而正如您所觀察到的,GitHub 更喜歡使用標頭textContent作為id=""屬性值的基礎。
...這意味著 GitHub在生成屬性時只是在做自己的事情id="",并且對于 GitHub 使用的任何轉換都沒有發布的規范。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488735.html
