︿
Top

2014年7月22日 星期二

如何在 Blogger 加入程式段落 Part 1: 純 CSS 與 Google Code Prettify

緣起

如何在 Blogger 插入程式段落, 是寫資訊技術文章必備的能力; 這樣才能讓讀者能更易於閱讀.

以下為主要步驟 並區分為是否採用 Google Code Prettify 而有不同效果呈現:



不採用  Google Code Prettify

(1) 修改預設的 Html 範本

修改範本 Html
(2) 修改預設的 Html 範本: 加入 CSS 設定,
內容請參考以下呈現的範例 (2): 含 Html tag 的 < 或 > 符號
修改範本 Html: 加入 CSS 設定
(3) 修改本身的網頁: 加入 <pre class='codeblock'> ...
若含有 Html tag 的 < 或 > 符號, 要記得作 Html Encoding

在本身網頁加上 <pre class='codeblock'> ,,,
注意: Html Encoding

以下為實際效果呈現:
(1) 不含 Html tag 的 < 或 > 符號
//
// POST: /Member/Create

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Member member)
{
    if (ModelState.IsValid)
    {
        db.Members.Add(member);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(member);
}

(2) 含 Html tag 的 < 或 > 符號
<style>
  .codeblock {
 display: block; /* fixes a strange ie margin bug */
 font-family: Courier New;
 font-size: 10pt;
 overflow:auto;
 background: #f0f0f0 url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAASwCAYAAAAt7rCDAAAABHNCSVQICAgIfAhkiAAAAQJJREFUeJzt0kEKhDAMBdA4zFmbM+W0upqFOhXrDILwsimFR5pfMrXW5jhZr7PwRlxVX8//jNHrGhExjXzdu9c5IiIz+7iqVmB7Hwp4OMa2nhhwN/PRGEMBh3Zjt6KfpzPztxW9MSAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzB8HS+J9kUTvzEDMwAAAABJRU5ErkJggg==) left top repeat-y;
 border: 1px solid #ccc;
 padding: 10px 10px 10px 21px;
 max-height:1000px;
 line-height: 1.2em;
 }
</style>

採用  Google Code Prettify

(1) 修改範本Html: 加入 Google Code Prettify

修改範本Html: 加入 Google Code Prettify

  1. <script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>


(2) 修改本身的網頁: 加入 <pre class='prettyprint linenums'>

套用至本身的網頁

以下為實際效果呈現, 但請注意 Line Number 只會出現 5, 10, 15 ... 這種值; 然而, 請注意, 實際手工複製程式碼時, 會連同 Line Number 一併複製 !!!

  1. public ActionResult Create(Member member)
  2. {
  3. if (ModelState.IsValid)
  4. {
  5. db.Members.Add(member);
  6. db.SaveChanges();
  7. return RedirectToAction("Index");
  8. }
  9. return View(member);
  10. }


總結

關於程式段落的部份, 相關設定如下:
1. 範本 Html
  1. <!-- added by jasper -->
  2. <style>
  3. .codeblock {
  4. display: block; /* fixes a strange ie margin bug */
  5. font-family: Courier New;
  6. font-size: 10pt;
  7. overflow:auto;
  8. background: #f0f0f0 url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAASwCAYAAAAt7rCDAAAABHNCSVQICAgIfAhkiAAAAQJJREFUeJzt0kEKhDAMBdA4zFmbM+W0upqFOhXrDILwsimFR5pfMrXW5jhZr7PwRlxVX8//jNHrGhExjXzdu9c5IiIz+7iqVmB7Hwp4OMa2nhhwN/PRGEMBh3Zjt6KfpzPztxW9MSAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzB8HS+J9kUTvzEDMwAAAABJRU5ErkJggg==) left top repeat-y;
  9. border: 1px solid #ccc;
  10. padding: 10px 10px 10px 21px;
  11. max-height:1000px;
  12. line-height: 1.2em;
  13. }
  14. </style>
  15. <!-- added by jasper -->
  16. <script src='https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js'/>


2. 自身網頁設定:  <pre class="prettyprint linenums">
<pre class="prettyprint linenums">
    public ActionResult Create(Member member)
    {
        if (ModelState.IsValid)
        {
            db.Members.Add(member);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    
        return View(member);
    }
</pre>
上述語句的執行結果如下:

  1. public ActionResult Create(Member member)
  2. {
  3. if (ModelState.IsValid)
  4. {
  5. db.Members.Add(member);
  6. db.SaveChanges();
  7. return RedirectToAction("Index");
  8. }
  9. return View(member);
  10. }

3. 若是2者合併顯示, 發現程式碼, 會跑到左方 CODE 文字區塊; 要特別注意. <pre class="codeblock prettyprint linenums">
<pre class="codeblock prettyprint linenums">
    public ActionResult Create(Member member)
    {
        if (ModelState.IsValid)
        {
            db.Members.Add(member);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    
        return View(member);
    }
</pre>

上述語句的執行結果如下:

  1. public ActionResult Create(Member member)
  2. {
  3. if (ModelState.IsValid)
  4. {
  5. db.Members.Add(member);
  6. db.SaveChanges();
  7. return RedirectToAction("Index");
  8. }
  9. return View(member);
  10. }

參考文件




沒有留言:

張貼留言