剛才在弄貼程式碼的事情,沒辦法,我這個人就是比較龜毛,貼得醜醜的還不如不要貼。

  這些關於 Javascript 的資料,都是從網路上找來的,這點不得不讓人歌頌網路的偉大,加速了知識的傳播與分享。至於後半段的修改,則是我自己依樣畫葫蘆改的,反正程式碼大多雷同,只要有原始碼,要舉一反三其實不難,作點小修改還是不成問題的。廢話不多說,先來看怎麼貼程式碼。



  雖然搜尋 Online Syntax Highlight ,可以找到一大堆的資源,可惜的是,能同時具有標示顏色、顯示行數以及獨立背景的轉換並不好找,幸運的是,這款 SyntaxHighlighter 還不錯用,至於不符合自己風格的地方,只需要小修一下就可以了。

  這款軟體的官網是 SyntaxHighlighter


  下載完檔案之後,解壓縮並且上傳到自己的空間裡,順帶提一下,我用的是 3.0 版的。當然,除了自己上傳到空間並使用以外,也可以用官網提供的服務,只是,這不保證隨時可用,畢竟有著流量的限制存在。接下來,如果要在痞客邦使用的話,則需要作下列設定: 

  側邊欄位設定 -> 頁尾 -> 設定


  然後貼上下列程式碼:

<script type="text/javascript" src="http://.../scripts/shCore.js"></script>
<script type="text/javascript" src="http://.../scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="http://.../styles/shCoreDefault.css"/>
<link type="text/css" rel="stylesheet" href="http://.../styles/shThemeDefault.css" />
<script type="text/javascript">
SyntaxHighlighter.autoloader(
  'c cpp                       http://.../scripts/shBrushCpp.js',
  'js jscript javascript       http://.../scripts/shBrushJScript.js',
  'c-sharp csharp              http://.../scripts/shBrushCSharp.js',
  'css                         http://.../scripts/shBrushCss.js',
  'sql                         http://.../scripts/shBrushSql.js',
  'xml xhtml xslt html xhtml   http://.../scripts/shBrushXml.js'
);
SyntaxHighlighter.config.bloggerMode = false;
SyntaxHighlighter.defaults['auto-links'] = false;
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
</script>

 

  其中上面的程式碼中,路徑的部份需要稍作修改,換成自己上傳的檔案網址,至於怎麼換,可以打開資料夾下的檔案作確認,基本上,檔案的名稱沒什麼改變。  到了這一步之後,其實就大功告成了,不過,裡面的檔案其實沒有很多,如果之後要加什麼檔案進去的話,照上面的格式小修一下就行了,反正大致上就是縮寫,加上該檔案網址而已。



  接下來要用時,只要在發表新文章的時候,以下列的格式貼上即可。不過要注意的是,內容可以要先經過 Html Encoder 先進行編碼才行,否則有些內容會無法顯示出來,像是括號或是箭頭之類的。這個的話,可以參考這個網址: Html Encoder

<pre class="brush: cpp">
/* This is Test */
int main(){
    int a;
    return 0;
}
</pre>

 


  至於後半段的部分,則是講如何客製化的過程。簡單來說,我們習慣變數宣告的時候,資料形態的顯示為淡紫色,但是在原本的設定中,卻是呈現灰色的狀態,這點倒是讓人有點不太適應。關於這部分,想上網直接找,看看有沒有人有其他的設定檔可以直接套用,但很可惜的,很難找,所以只好反求諸己,看看裡面的檔案中,是不是可以稍作小修改即可奏效。事實上還不難修改,可以看看下面的說明。

 

  接下來的例子,我們以修改 C++ 程式語言的顯示顏色為例:

  首先觀察 shBrushCpp.js 這個檔案,找尋是否有出現 int 的地方,去觀察他怎麼定義,關於這個關鍵字的變色。可以觀察到,這裡把 int 這個字串,定義到屬於 datatypes 這個群集中。

        var datatypes =    'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +
                        ....
                        'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +
                        ....
                        'va_list wchar_t wctrans_t wctype_t wint_t signed';

 

  接下來,便是找尋在哪邊,定義了屬於 datatypes 這個群集的顏色,以方便我們作進一步的修改。結果在下面不遠的地方,能看到下列程式碼。這裡可以看到後面的選項中,出現 color1 以及 bold 這個選項,這代表著,只要是歸類在屬於 datatypes 的字串,都會以 color1 bold 的形式呈現,因此我們的下一步,便是去搜尋,哪裡定義了 color1 這個選項。

        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },            // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,        css: 'comments' },            // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },            // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },            // strings
            { regex: /^ *#.*/gm,                                        css: 'preprocessor' },
            { regex: new RegExp(this.getKeywords(datatypes), 'gm'),        css: 'color1 bold' },
            { regex: new RegExp(this.getKeywords(functions), 'gm'),        css: 'functions bold' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),        css: 'keyword bold' }
            ];

 

  最後,我們可以在 shCoreDefault.css 個檔案裡面,查到關於這個選項 color1 的定義。果然,在未作修改的情況下,原本資料形態的關鍵字顯示,就是為灰色的設定。

.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
  color: gray !important;
}

 

  因此,想要將它改成其他顏色,只要改成該色碼就可以了。至於色碼的話,我是到這個網站查詢:Color-Cord


   到這邊為止,應該就有了修改初步的認識,接下來想寫其他語言,應該就是依樣畫葫蘆了。時間已晚,還是先去睡了!

arrow
arrow

    uxijgil 發表在 痞客邦 留言(0) 人氣()