緣起
今年發現博客園支持markdown語法,就開始用markdown些博客了.markdown寫文章最大的好處就是不用局限在瀏覽器里寫了,有個記事本就可以開始了.
markdown里對代碼塊的引用語法是三個撇[ ``` ],在其后可增加代碼名稱,比如java,js等標記該部分代碼的類型.之后在頁面展現的時候就可以高亮顯示關鍵字了.
比如下面這段代碼:
```java
package com.qyf404.learn.maven;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class AppTest {
private App app;
@Before
public void setUp() {app = new App();}
@Test
public void testAdd() throws InterruptedException {
int a = 1;
int b = 2;
int result = app.add(a, b);
Assert.assertEquals(a + b, result);
}
@After
public void tearDown() throws Exception {
}
}
```
在頁面展現成了這樣:
package com.qyf404.learn.maven;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class AppTest {
private App app;
@Before
public void setUp() {
app = new App();
}
@Test
public void testAdd() throws InterruptedException {
int a = 1;
int b = 2;
int result = app.add(a, b);
Assert.assertEquals(a + b, result);
}
@After
public void tearDown() throws Exception {
}
}
后面讓我們扒一扒頁面源碼探一探這其中的緣由.
其根本原因是博客園頁面里引入了一段js,該段js可以解析markdown里的代碼塊,並高亮顯示.
扒一扒頁面源碼
在頁面源碼中我們發現有個js很特別 http://www.cnblogs.com//bundles/blog-common.js?v=CLLiFNNgL6CohO3Olq2i7r9tPyHtCoryr0KngxdwUm41.
讓我們在里面搜一搜java,就發現這么一段代碼
來取出來整理整理:
function cb_CodeHighlight() {
var n=!1, t = $("pre");
(t.length && $.each(t, function() {
var t = $(this).attr("class");
t && t.indexOf("brush:") >= 0 && (n=!0, t.indexOf("gutter:true;") >= 0 && $(this).parent().addClass("sh-gutter"))
}), n) && (SyntaxHighlighter.autoloader.apply(null, shBushPathPrepare("applescript\t\t\t @shBrushAppleScript.js", "actionscript3 as3\t\t@shBrushAS3.js", "bash shell\t\t\t\t@shBrushBash.js", "coldfusion cf\t\t\t@shBrushColdFusion.js", "cpp c\t\t\t\t\t@shBrushCpp.js", "c# c-sharp csharp\t\t@shBrushCSharp.js", "css\t\t\t\t\t @shBrushCss.js", "delphi pascal pas\t\t@shBrushDelphi.js", "diff patch \t\t@shBrushDiff.js", "erl erlang\t\t\t\t@shBrushErlang.js", "groovy\t\t\t\t\t@shBrushGroovy.js", "java\t\t\t\t\t @shBrushJava.js", "jfx javafx\t\t\t\t@shBrushJavaFX.js", "js jscript javascript\t@shBrushJScript.js", "perl pl Perl\t\t\t\t@shBrushPerl.js", "php\t\t\t\t\t @shBrushPhp.js", "text plain\t\t\t\t@shBrushPlain.js", "py python\t\t\t\t@shBrushPython.js", "ruby rails ror rb\t\t@shBrushRuby.js", "sass scss\t\t\t\t@shBrushSass.js", "scala\t\t\t\t\t@shBrushScala.js", "sql\t\t\t\t\t @shBrushSql.js", "vb vbnet\t\t\t\t @shBrushVb.js", "xml xhtml xslt html\t @shBrushXml.js?id=20150508", "objc obj-c @shBrushObjectiveC.js", "f# f-sharp fsharp @shBrushFSharp.js", "xpp dynamics-xpp @shBrushDynamics.js", "r s splus @shBrushR.js", "matlab @shBrushMatlab.js", "swift @shBrushSwift.js", "go golang @shBrushGo.js")), SyntaxHighlighter.config.strings.expandSource = "+ View Code", SyntaxHighlighter.vars.discoveredBrushes = null, SyntaxHighlighter.all())
}
原來博客園用了這個SyntaxHighlighter框架來作代碼高亮顯示啊.
支持高亮顯示的語言
讓我們現在整理個表格,看看博客園的markdown到底支持多少種語言高亮顯示.
名稱 | 關鍵字 | 調用的js | 說明 |
---|---|---|---|
AppleScript | applescript | shBrushAppleScript.js | |
ActionScript 3.0 | actionscript3 , as3 | shBrushAS3.js | |
Shell | bash , shell | shBrushBash.js | |
ColdFusion | coldfusion , cf | shBrushColdFusion.js | |
C | cpp , c | shBrushCpp.js | |
C# | c# , c-sharp , csharp | shBrushCSharp.js | |
CSS | css | shBrushCss.js | |
Delphi | delphi , pascal , pas | shBrushDelphi.js | |
diff&patch | diff patch | shBrushDiff.js | 用代碼版本庫時,遇到代碼沖突,其語法就是這個. |
Erlang | erl , erlang | shBrushErlang.js | |
Groovy | groovy | shBrushGroovy.js | |
Java | java | shBrushJava.js | |
JavaFX | jfx , javafx | shBrushJavaFX.js | |
JavaScript | js , jscript , javascript | shBrushJScript.js | |
Perl | perl , pl , Perl | shBrushPerl.js | |
PHP | php | shBrushPhp.js | |
text | text , plain | shBrushPlain.js | 就是普通文本. |
Python | py , python | shBrushPython.js | |
Ruby | ruby , rails , ror , rb | shBrushRuby.js | |
SASS&SCSS | sass , scss | shBrushSass.js | |
Scala | scala | shBrushScala.js | |
SQL | sql | shBrushSql.js | |
Visual Basic | vb , vbnet | shBrushVb.js | |
XML | xml , xhtml , xslt , html | shBrushXml.js | |
Objective C | objc , obj-c | shBrushObjectiveC.js | |
F# | f# f-sharp , fsharp | shBrushFSharp.js | |
xpp , dynamics-xpp | shBrushDynamics.js | ||
R | r , s , splus | shBrushR.js | |
matlab | matlab | shBrushMatlab.js | |
swift | swift | shBrushSwift.js | |
GO | go , golang | shBrushGo.js |
整理完又發現好幾個沒聽說過的語言.里面有個xpp
,我沒查出來是個啥語言,如果誰知道煩勞留言告知.