[Blogger] 替程式碼上色
這邊筆記一下如何在 Blogger 中加入程式碼並 Highlight,有兩種方法,分別為 Google Code Prettify 與 SyntaxHighlighter。
首先先介紹 Google Code Prettify,進入你的 Blogger -> 設計 -> [版面配置],按下 [新增小工具],選擇新增 [HTML/JavaScript],然後在小工具中貼入以下程式碼:
<style type='text/css'> /* 程式碼高亮設定 */ /* Main Box */ .pre-highborder{ border: 1px solid #ff0000; padding: 3px 3px 3px 0; } pre.prettyprint, code.prettyprint { border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; padding: 5px; overflow: auto; background-color: #eee !important; color: black; box-shadow: 0 0 5px #999; -moz-box-shadow: 0 0 5px #999; -webkit-box-shadow: 0 0 5px #999; } /*font*/ pre span, code span { font-family: 'Consolas', 'Courier New', 'Microsoft JhengHei', sans-serif !important; font-size: 12px !important; } /*each line*/ li.L0, li.L1, li.L2, li.L3, li.L4, li.L5, li.L6, li.L7, li.L8, li.L9 { margin: 0 !important; padding: 2px 0 2px 4px !important; list-style-type:decimal !important; border-left: 1px solid #999; } /*even line*/ li.L1, li.L3, li.L5, li.L7, li.L9 { background-color: #f6f6f6 !important; } /*odd line*/ li.L0, li.L2, li.L4, li.L6, li.L8 { background-color: #FFF !important; } /*line-number background color*/ ol.linenums { background-color: #eee; margin-left: 10px; } </style> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
這樣就完成了。之後當想插入程式碼時,就在文章編輯器中以 HTML 模式編輯並加入 <pre></pre> 成對標籤即可:
如果想要替程式碼上色,只需要改成輸入:
<pre class="codeblock linenums:1"> 中間可以插入你想放入的程式碼 </pre>
如果想要替程式碼上色,只需要改成輸入:
<pre class="codeblock prettyprint linenums:1">
中間可以插入你想放入的程式碼
</pre>
Google Code Prettify 會自動替你的程式碼上色,如果想要指定語言,可以在 prettyprint 後面加入 lang-* 參數來指定語言,假設我現在有一段 Java 程式碼要上色:
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello, world!\n"); } }
======================= 我是分隔線 =======================
<!--SYNTAX HIGHLIGHTER BEGINS--> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/> <script language='javascript'> SyntaxHighlighter.config.bloggerMode = true; SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf'; SyntaxHighlighter.all(); </script> <!--SYNTAX HIGHLIGHTER ENDS-->
注意的是,第二行中的 shThemeDefault 表示模板樣式,如果想要更換模板,可以參考下表或官方網站:
至於第五行中的 shBrushJava.js 表示為 Java 語言,如果想要加入其他語言,就必須加入其他的 shBrush,支援語言如下表或參考官方網站:
表 1 模板樣式
模板名稱 | 檔名 |
---|---|
Default | shThemeDefault.css |
Django | shThemeDjango.css |
Eclipse | shThemeEclipse.css |
Emacs | shThemeEmacs.css |
Fade To Grey | shThemeFadeToGrey.css |
Midnight | shThemeMidnight.css |
RDark | shThemeRDark.css |
至於第五行中的 shBrushJava.js 表示為 Java 語言,如果想要加入其他語言,就必須加入其他的 shBrush,支援語言如下表或參考官方網站:
表 2 SyntaxHighlighter 支援語言列表
語言名稱 | 指定縮寫 | 檔名 |
---|---|---|
ActionScript3 | as3, actionscript3 | shBrushAS3.js |
Bash/shell | bash, shell | shBrushBash.js |
ColdFusion | cf, coldfusion | shBrushColdFusion.js |
C# | c-sharp, csharp | shBrushCSharp.js |
C++ | cpp, c | shBrushCpp.js |
CSS | css | shBrushCss.js |
Delphi | delphi, pas, pascal | shBrushDelphi.js |
Diff | diff, patch | shBrushDiff.js |
Erlang | erl, erlang | shBrushErlang.js |
Groovy | groovy | shBrushGroovy.js |
JavaScript | js, jscript, javascript | shBrushJScript.js |
Java | java | shBrushJava.js |
JavaFX | jfx, javafx | shBrushJavaFX.js |
Perl | perl, pl | shBrushPerl.js |
PHP | php | shBrushPhp.js |
Plain Text | plain, text | shBrushPlain.js |
PowerShell | ps, powershell | shBrushPowerShell.js |
Python | py, python | shBrushPython.js |
Ruby | rails, ror, ruby | shBrushRuby.js |
Scala | scala | shBrushScala.js |
SQL | sql | shBrushSql.js |
Visual Basic | vb, vbnet | shBrushVb.js |
XML | xml, xhtml, xslt, html, xhtml | shBrushXml.js |
最後加入程式碼的方法與 Google Code Prettify 相同,到文章的 HTML 編輯模式中使用:
舉例來說,一樣以相同的 Java Code 作展示:
<pre name="code" class="brush: java;"> .. Your Code Here .. </pre>
舉例來說,一樣以相同的 Java Code 作展示:
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello, world!\n"); } }
需要注意的是,再把程式碼放入 HTML 編輯器中,記得要先將程式碼做 HTML Encode 的動作,否則可能會因為特殊字元或標記造成程式碼顯示錯誤。HTML Encode 的方式可以利用線上的 Converter 或是參考使用筆者所撰寫的 HtmlCodeConverter.exe 小程式,這邊舉幾個比較常見的 Converter:
- Offline : HtmlCodeConverter.exe
- Online : mothereff.in
- Online : Web2Generators
- Online : OpinionatedGeek
- Online : string-functions
另外,因為本篇操作方法是利用 JavaScript 做處理,因此若是瀏覽器不支援 JavaScript 或是利用手機版來檢視 Blogger 會發生上色失效的狀況。
Thx for sharing!
回覆刪除thx~ very help for me
回覆刪除VERY HELPFUL
回覆刪除請教一下,我用Google Code Prettify在預覽的時候有看到行號
回覆刪除但實際檢視的時候又沒有行號?!有遇過這個問題嗎?
您好,筆者再次實驗操作時也並未發生這樣的問題,只能請您再次確認文章中程式碼區塊標籤中的 linenums 這項 Attribute 是否正確,不好意思。
刪除