據(jù)機(jī)制)
移動(dòng)開發(fā)【免費(fèi)下載鏈接】markorText editor - Notes ToDo (for Android) - Markdown, todo.txt, plaintext, math, ..項(xiàng)目地址https://gitcode.com/gh_mirrors/ma/markor點(diǎn)擊查看免費(fèi)下載output_article基于 Markor 的 Jekyll 博客寫作指南從模板文件到 Front Matter 渲染機(jī)制導(dǎo)讀本文以 Markor 內(nèi)置模板 app/src/main/assets/templates/jekyll-post.md 為切入點(diǎn)系統(tǒng)講解在 Android 設(shè)備上使用 Markor 編寫 Jekyll 博客文章的完整工作流從模板中的 YAML Front Matter前置元數(shù)據(jù)字段含義、Markor 內(nèi)置的 Jekyll 語(yǔ)法擴(kuò)展到新建文件時(shí)的模板加載與占位符替換機(jī)制。讀完本文你將掌握如何在 Markor 中直接產(chǎn)出符合 Jekyll 規(guī)范、可直接推送至 GitHub Pages 等靜態(tài)站點(diǎn)的 Markdown 博文并能理解預(yù)覽模式下 Front Matter 被解析和渲染的底層原理。一、模板全貌一份為 Jekyll 預(yù)置的 Markdown 博文骨架Markor 在應(yīng)用內(nèi)置資產(chǎn)目錄assets/templates下隨包分發(fā)了一批文檔模板AppSettings.java 中的getBuiltinTemplates()通過(guò)AssetManager.list(templates)枚舉并讀取該目錄下的全部文件其中 jekyll-post.md 專為 Jekyll 靜態(tài)博客定制。模板完整內(nèi)容如下--- layout: post tags: [] categories: [] #date: 2019-06-25 13:14:15 #excerpt: #image: BASEURL/assets/blog/img/.png #description: #permalink: title: title ---可以看到這是一份形簡(jiǎn)意豐的骨架正文區(qū)為空真正有價(jià)值的是文件頂部的 YAML Front Matter 塊。它與 Jekyll 官方對(duì)博文文件的要求完全對(duì)齊——Jekyll 要求每篇文章在文件開頭用---包裹的 YAML 塊聲明元數(shù)據(jù)Markor 恰好把這一步做成了開箱即用的模板。值得注意的是倉(cāng)庫(kù)中還存在同主題的 AsciiDoc 版本 app/src/main/assets/templates/jekyll-post.adoc以及用于演示的實(shí)際示例文件 samples/2029-01-01-jekyll-post.md、samples/2029-01-01-jekyll-post.adoc。示例文件名帶2029-01-01日期前綴正是 Jekyll 標(biāo)準(zhǔn)的文章命名約定見本文第五節(jié)。二、Front Matter 字段逐項(xiàng)解析模板中的每一行字段都有明確的 Jekyll 語(yǔ)義下面逐一說(shuō)明其作用、取值方式與在 Markor 中的表現(xiàn)。2.1 布局與標(biāo)題必填核心字段字段模板默認(rèn)值作用layoutpost指定 Jekyll 使用的布局模板對(duì)應(yīng)站點(diǎn)_layouts/post.html幾乎所有博文都應(yīng)保持posttitletitle文章標(biāo)題會(huì)在站點(diǎn)列表頁(yè)、RSS 與title標(biāo)簽中展示寫作時(shí)務(wù)必替換其中title建議保留單引號(hào)包裹——Jekyll 的 YAML 解析器基于 Ruby對(duì)未加引號(hào)、含特殊字符的字符串容易誤解析引號(hào)是安全寫法。2.2 標(biāo)簽與分類內(nèi)容組織字段tags: [] categories: []兩個(gè)字段默認(rèn)是空數(shù)組但取值方式不同tags文章標(biāo)簽可寫為[markdown, android]或 YAML 列表形式tags: - markdown - android在 Markor 的預(yù)覽渲染中tags會(huì)被特殊處理源碼 MarkdownTextConverter.java 中有一條專門的分支——當(dāng)tags恰好只有一個(gè)元素且形如[tag1,tag2,tag3]時(shí)會(huì)先按逗號(hào)拆分、再通過(guò)LinkedHashSet去重保序最終展開為獨(dú)立的標(biāo)簽項(xiàng)同時(shí)模板的 CSSCSS_FRONTMATTER會(huì)為標(biāo)簽渲染圓角膠囊樣式。categories文章分類Jekyll 用它生成分類歸檔頁(yè)支持層級(jí)結(jié)構(gòu)如[tech, android]。2.3 被注釋的可選字段按需啟用模板用#注釋保留了四個(gè)常用可選字段取消注釋即可啟用字段默認(rèn)示例用途date2019-06-25 13:14:15手動(dòng)固定發(fā)布時(shí)間不設(shè)置時(shí) Jekyll 使用文件名中的日期前綴excerpt自定義文章摘要不設(shè)置時(shí) Jekyll 自動(dòng)截取正文開頭imageBASEURL/assets/blog/img/.png封面圖路徑注意BASEURL是占位符應(yīng)替換為站點(diǎn)根路徑如/assets/blog/img/xxx.pngpermalink空自定義文章 URL如/blog/my-post留空時(shí)使用默認(rèn)的/:categories/:year/:month/:day/:title規(guī)則description空頁(yè)面描述通常用于 SEO meta 標(biāo)簽這種默認(rèn)必填字段開啟、可選字段注釋保留的設(shè)計(jì)讓模板既能開箱即用又保留了完整的擴(kuò)展空間。三、Markor 如何解析與渲染 Jekyll 語(yǔ)法模板之所以能無(wú)縫工作是因?yàn)?Markor 的 Markdown 轉(zhuǎn)換器在底層集成了對(duì) Jekyll 語(yǔ)法的完整支持。證據(jù)集中在 MarkdownTextConverter.java3.1 解析器擴(kuò)展注冊(cè)轉(zhuǎn)換器基于 flexmark-java 構(gòu)建在flexmarkExtensions列表中顯式注冊(cè)了與 Jekyll 直接相關(guān)的三個(gè)擴(kuò)展源碼 L126-L147JekyllTagExtension.create(), // 識(shí)別 {% ... %} 標(biāo)簽語(yǔ)法 JekyllFrontMatterExtension.create(), // 識(shí)別 --- 包裹的 Front Matter 塊 YamlFrontMatterExtension.create(), // 將 Front Matter 解析為結(jié)構(gòu)化 YAML這意味著即使沒有開啟任何額外選項(xiàng)Markor 在預(yù)覽模式中也能正確把---之間的 YAML 塊從正文中剝離出來(lái)解析而不會(huì)把它誤當(dāng)作水平分割線或正文文本。3.2 Front Matter 的可視化渲染Markor 默認(rèn)不會(huì)把 Front Matter 原樣顯示在預(yù)覽中而是按需渲染成結(jié)構(gòu)化信息條。其邏輯位于 MarkdownTextConverter.java L216-L241只有當(dāng)文檔以---開頭且滿足以下任一條件時(shí)才觸發(fā)解析用戶在設(shè)置中配置了要顯示的 YAML 鍵AppSettings.getMarkdownShownYamlFrontMatterKeys()正文中出現(xiàn)了{(lán){ post.xxx }}形式的令牌YAML_FRONTMATTER_TOKEN_PATTERN正則匹配。通過(guò)extractYamlAttributes()用YamlFrontMatterExtension單獨(dú)解析得到MapString, ListString形式的鍵值對(duì)。僅渲染白名單內(nèi)的屬性每個(gè)屬性包裝為front-matter-item容器整體放入.front-matter-container并注入CSS_FRONTMARTTER樣式——這就是預(yù)覽中頂部那條標(biāo)題、標(biāo)簽?zāi)z囊、描述信息條的來(lái)源。3.3 正文內(nèi)的{{ post.xxx }}令牌替換這是模板與 Markor 交互最巧妙的一環(huán)。在 Jekyll 站點(diǎn)中正文可以使用{{ page.title }}、{{ page.tags }}等 Liquid 變量Markor 在本地預(yù)覽時(shí)無(wú)法運(yùn)行 Jekyll于是實(shí)現(xiàn)了近似機(jī)制源碼 replaceTokens() 會(huì)掃描正文中的{{ post.attr }}令牌并把對(duì)應(yīng) YAML 屬性的值經(jīng)過(guò)去引號(hào)、HTML 轉(zhuǎn)義、--→–破折號(hào)處理回填進(jìn)去最終渲染為高亮的post-item-attr標(biāo)簽。例如若 Front Matter 中聲明了tags: [markdown, android]正文某處寫入本文標(biāo)簽{{ post.tags }}預(yù)覽時(shí)會(huì)自動(dòng)顯示為兩個(gè)獨(dú)立的標(biāo)簽條目。這讓你在手機(jī)上寫作時(shí)就能即時(shí)看到標(biāo)簽、標(biāo)題等元數(shù)據(jù)最終會(huì)以什么形態(tài)出現(xiàn)在頁(yè)面上。3.4 Jekyll Liquid 令牌的本地化替代模板注釋與正文中可能出現(xiàn){{ site.time | date: %x }}、{{ site.baseurl }}這類 Liquid 表達(dá)式。Markor 在轉(zhuǎn)換時(shí)做了兩處替換MarkdownTextConverter.java L299-L300markup markup.replace({{ site.baseurl }}, ..) .replace(TOKEN_SITE_DATE_JEKYLL, TOKEN_POST_TODAY_DATE);{{ site.baseurl }}被替換為..——因?yàn)?Markor 中 Jekyll 文章通常存放在_posts目錄該目錄相對(duì)于站點(diǎn)根目錄恰好上跳一級(jí)圖片等資源引用如因此可正確解析{{ site.time | date: %x }}被替換為{{ post.date_today }}后者在 TextConverterBase.java 中最終被替換為設(shè)備當(dāng)前的本地化日期字符串。這套機(jī)制讓 Markor 的預(yù)覽與 Jekyll 站點(diǎn)的最終渲染保持一致本地所見即線上所得。四、在 Markor 中使用模板新建博文模板的消費(fèi)入口是新建文件對(duì)話框?qū)?yīng)源碼 NewFileDialog.java。4.1 模板加載流程N(yùn)ewFileDialog.java L156-L162 將三部分來(lái)源合并進(jìn)模板下拉框第一項(xiàng)固定為空文件R.string.empty_file接著是用戶在設(shè)置中配置的 snippets 目錄下的所有純文本片段文件getSnippetFiles()最后是內(nèi)置模板getBuiltinTemplates()即assets/templates下的全部文件——jekyll-post.md就在這里。4.2 文件名自動(dòng)生成選中jekyll-post.md模板后對(duì)話框會(huì)用模板文件名自動(dòng)建議標(biāo)題與擴(kuò)展名jekyll-post.mdNewFileDialog.java L173-L188標(biāo)題格式可通過(guò)格式輸入框定制支持{{title}}占位符與yyyy-MM-ddTHHmmss等日期格式默認(rèn)規(guī)則見 NewFileDialog.java L244-L257確認(rèn)后模板內(nèi)容作為新文件內(nèi)容寫入模板名與格式偏好會(huì)被記住下次新建同類型文件時(shí)自動(dòng)預(yù)選NewFileDialog.java L311-L315。4.3 與 AsciiDoc 模板的對(duì)照若你的博客使用 AsciiDocJekyll 同樣支持可對(duì)照參考 jekyll-post.adoc它以 My Title起頭用:page-subtitle:、:page-tags:、:page-last-updated:等文檔屬性承載元數(shù)據(jù)并通過(guò)ifndef::env-site[]條件塊實(shí)現(xiàn)本地預(yù)覽顯示副標(biāo)題、線上 Jekyll 站點(diǎn)不重復(fù)顯示的差異化渲染。兩份模板體現(xiàn)了 Markor 對(duì) Markdown / AsciiDoc 雙格式 Jekyll 工作流的完整覆蓋。五、寫作到發(fā)布的完整流程結(jié)合模板與 Markor 的功能一條完整的移動(dòng)端 Jekyll 寫作鏈路如下新建文件打開新建文件對(duì)話框模板選擇jekyll-post.md標(biāo)題格式可設(shè)置為 Jekyll 規(guī)范的yyyy-MM-dd-{{title}}日期前綴便于 Jekyll 識(shí)別發(fā)布時(shí)間。填寫元數(shù)據(jù)把title: title替換為真實(shí)標(biāo)題按需填寫tags、categories取消注釋date、excerpt、permalink等可選字段。寫作正文利用 Markor 的 Markdown 全語(yǔ)法支持任務(wù)列表、表格、腳注、數(shù)學(xué)公式 KaTeX、Mermaid 圖表等均由 MarkdownTextConverter.java 注冊(cè)的 flexmark 擴(kuò)展提供需要展示元數(shù)據(jù)時(shí)在正文中寫{{ post.tags }}等令牌。本地預(yù)覽切換預(yù)覽模式Front Matter 會(huì)渲染為信息條{{ site.baseurl }}與日期令牌被替換為本地可解析值圖片路徑經(jīng)escapeSpacesInLink()處理空格轉(zhuǎn)%20見 MarkdownTextConverter.java L349-L376。歸檔發(fā)布將文件放入 Jekyll 倉(cāng)庫(kù)的_posts目錄Markor 檢測(cè)到_posts/blog/post文件夾時(shí)還會(huì)自動(dòng)為預(yù)覽注入目錄 TOC見 MarkdownTextConverter.java L244-L259經(jīng) Git 推送后由 Jekyll 構(gòu)建發(fā)布。值得強(qiáng)調(diào)的是模板中注釋字段與文件命名都遵循 Jekyll 官方約定YYYY-MM-DD-title.ext、---定界符、layout必填因此只要不刪改 Front Matter 結(jié)構(gòu)Markor 產(chǎn)出的文件即可直接進(jìn)入 Jekyll 構(gòu)建流水線無(wú)需二次編輯。六、小結(jié)jekyll-post.md雖僅十余行卻是 Markor 面向 Jekyll 博客場(chǎng)景的核心載體它既是可復(fù)制的寫作骨架又是測(cè)試 Markor Jekyll 語(yǔ)法支持的天然樣例。配合 MarkdownTextConverter.java 中的 Jekyll 擴(kuò)展注冊(cè)、Front Matter 白名單渲染與令牌替換機(jī)制以及 NewFileDialog.java 的模板加載流程你完全可以在手機(jī)端完成建文件—填元數(shù)據(jù)—寫作—預(yù)覽—?dú)w檔的 Jekyll 博客全流程且預(yù)覽結(jié)果與線上渲染保持一致。 /output_article贊分享移動(dòng)開發(fā)【免費(fèi)下載鏈接】markorText editor - Notes ToDo (for Android) - Markdown, todo.txt, plaintext, math, ..項(xiàng)目地址https://gitcode.com/gh_mirrors/ma/markor點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Jekyll 博客寫作實(shí)戰(zhàn)基于 _posts 目錄的純文本博客系統(tǒng)Jekyll 博客寫作實(shí)戰(zhàn)基于 _posts 目錄的純文本博客系統(tǒng) 核心主題 Jekyll 是博客感知的靜態(tài)站點(diǎn)生成器其博客功能完全由文本文件驅(qū)動(dòng)——前端CMS使用 Devbox 搭建可復(fù)現(xiàn)的 Jekyll 博客開發(fā)環(huán)境基于 examples/stacks/jekyll 模板使用 Devbox 搭建可復(fù)現(xiàn)的 Jekyll 博客開發(fā)環(huán)境基于 examples/stacks/jekyll 模板 本指南以本倉(cāng)庫(kù) examples/st開發(fā)工具CLIacademicpages.github.io CV 頁(yè)面搭建指南基于 Jekyll 的 Markdown 簡(jiǎn)歷模板解析academicpages.github.io CV 頁(yè)面搭建指南基于 Jekyll 的 Markdown 簡(jiǎn)歷模板解析 本篇技術(shù)指南圍繞 academicp前端文檔上一篇掌握UnrealPakViewerPak文件解析從入門到精通下一篇UnrealPakViewerUE4資源包解析全攻略——從加密容器到資產(chǎn)洞察創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考