<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Deps在準備好NewPathSpec,NewSpec,NewContentSpec,NewSourceSpec後,呼叫onCreate正式建立HugoSites,並在最後一步,載入模板執行器。
模板執行器只是提前將模板資訊轉換成了模板執行器,如何使用並沒有涉及到。
為了讓我們對模板生命週期有更全面的瞭解,讓我們以robots.txt為例,來看看是如何通過模板執行器生成最終檔案的。
從時序圖中,可以瞭解到建立執行器,主要分兩步。
先建立包含了各種功能函數的executor。 其中的功能函數由兩部分組成,一部分來自hugo,像htmlEscape等。 另一部分來自於golang的內建函數,如fmt.Sprint等等。 正是因為有這些功能函數的支援,才得以讓模板的action塊 - ‘{{}}‘功能如此強大。
執行器建立好後,接下來就要建立模板的handler了。 處理器提供了模板載入、查詢等相關的服務,以方便使用。 因為查詢服務依賴於載入服務,所以在處理器範例後,緊接著就是載入模板了。 而模板又分兩部分,一部分是由hugo提供的預設模板,像robot.txt等。 另一部分就是由使用者所提供的layouts檔案,有來於主題的,也有來於使用者自定義的layout。
載入的是磁碟檔案,得到的是解析過後的模板範例。
templ, err := prototype.New(info.name).Parse(info.template)
原始碼裡用的是prototype,而不是直接用的html。 這是因為我們的模板有兩種字尾,一種是txt,另一種是html,需要找到相應的原型來對模板進行解析。
不管是什麼模板,都是文字,HTML也不例外,也是文字。 HTML模板的原始碼也應證了這一點 - 直接呼叫文字模板的方法。 那這種關係是如何用程式碼實現的呢?
拿到模板位元組資訊後,用詞法分析器對模板位元組流進行解析,得到分析好的詞義結構。 對於HTML模板而言,為了安全,需要對詞義結構進行檢查和必要地修改。 因為我們可以從不同渠道,獲得不同的主題,這些主題中又包含了很多模板,並且主題中可以巢狀主題,為了保證安全,避免執行惡意程式碼。 最後就是執行解析好的模板。
為了方便理解,我們來舉個例子 - robot.txt模板使用流程:
知道了工作流程後,讓我們從原始碼層面,更深入的對Template進行理解。
我們先來看第一步: 模板解析。
建立Deps的最後一步是loadResources,其中主要指的是Template資源。 在建立templateExec範例的過程中,就需要載入hugo預設和使用者建立的模板。 載入模板後,獲取了模板的位元組資訊,要想為我們所有,首先要讀懂這些位元組,這時,我們就用到了解析Parse,而且是由text模板提供的。 Parse為什麼可以讀懂這些字元資訊呢,她依靠的是內部了詞法分析器lex - lexer,分析器需要對action block的語意有充分的理解。 讀懂後轉換為方便後續操作的資料結構tree,在hugo中實際載體是listNode型別。
我們拿一段模板舉個例子:
從上例中,我們可以看到,左上方是輸入的資訊。 包含一篇部落格 - post.md,和一個模板 - single.html。 通過轉換會得到最右邊的輸出網頁內容。 其中,包含在模板中第一行的資訊,剩下的是由部落格提供的資訊,其中的特殊字元,還被進行了跳脫。
在左下方第一步中,建立templateExec過程中,讀取到了模板single.html。 通過解析,利用詞法分析器,會得到如下狀態:
[「<p><!-- HT…」, 「{{」, 「 「, 」.Content」, 」 「, 」}}」, EOF]
為了理解其中的工作原理,讓我們在下一章節中一起來看一下action block的詞法分析器是如何工作的。
以上就是go開源Hugo站點渲染之模板詞法解析的詳細內容,更多關於Hugo站點渲染模板詞法的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45