SyntaxHighlighter のカスタマイズ
SyntaxHighlighter をカスタマイズして、Small Basic のプログラムを表示できるようにしました。
実行結果
' Sample Small Basic Program
GraphicsWindow.Width = 598
GraphicsWindow.Height = 428
x1 = 100
y1 = 100
size = 100
x2 = x1 + size
y2 = y1 + size
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.FillRectangle(x1, y1, size, size)
GraphicsWindow.MouseDown = OnMouseDown
While "True"
If mouseDown Then
If x1 <= mx And mx <= x2 And y1 <= my And my <= y2 Then
Sound.PlayBellRing()
EndIf
mouseDown = "False"
Else
Program.Delay(200)
EndIf
EndWhile
Sub OnMouseDown
mouseDown = "True"
mx = GraphicsWindow.MouseX
my = GraphicsWindow.MouseY
GraphicsWindow.Title = mx + "," + my
EndSub
ソース
expand source と表示されている場合はその文字をクリックするとソースが展開表示されます。 展開したソースを元に戻すにはブラウザーの再読み込みボタンを押してください。shsb.html
今回作成したテーマとブラシを指定している部分です。<link type="text/css" rel="stylesheet" href="css/javascript.css"> <link type="text/css" rel="stylesheet" href="css/shCore.css"> <link type="text/css" rel="stylesheet" href="css/shThemeSb.css"> <script type="text/javascript" src="js/shCore.js"></script> <script type="text/javascript" src="js/shBrushJScript.js"></script> <script type="text/javascript" src="js/shBrushSb.js"></script> <script type="text/javascript" src="js/shBrushXml.js"></script> <script type="text/javascript" src="js/shBrushCss.js"></script> <script type="text/javascript"> SyntaxHighlighter.all(); </script>コードのフォント等をクラスとして指定している部分です。
<style>
.code {
font-family: Consolas "Courier New" !important;
border: 1px solid lightgray;
max-height: 300px
}
</style>
実際に Small Basic のコードを指定している部分です。
<h2>実行結果</h2>
<pre class="brush:sb; class-name:'code'; collapse:true; highlight:[12,18,24,25,26,27,28,29]">
' Sample Small Basic Program
GraphicsWindow.Width = 598
GraphicsWindow.Height = 428
x1 = 100
y1 = 100
size = 100
x2 = x1 + size
y2 = y1 + size
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.FillRectangle(x1, y1, size, size)
GraphicsWindow.MouseDown = OnMouseDown
While "True"
If mouseDown Then
If x1 <= mx And mx <= x2 And y1 <= my And my <= y2 Then
Sound.PlayBellRing()
EndIf
mouseDown = "False"
Else
Program.Delay(200)
EndIf
EndWhile
Sub OnMouseDown
mouseDown = "True"
mx = GraphicsWindow.MouseX
my = GraphicsWindow.MouseY
GraphicsWindow.Title = mx + "," + my
EndSub
</pre>
shThemeSb.css
今回作成したテーマです。
/**
* SyntaxHighlighter
* http://alexgorbatchev.com/SyntaxHighlighter
*
* SyntaxHighlighter is donationware. If you are using it, please donate.
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
*
* @version
* 3.0.83 (July 02 2010)
*
* @copyright
* Copyright (C) 2004-2010 Alex Gorbatchev.
* Copyright (c) 2014 Nonki Takahashi.
*
* @license
* Dual licensed under the MIT and GPL licenses.
*/
.syntaxhighlighter {
background-color: #f8f8f8 !important;
}
.syntaxhighlighter .line.alt1 {
background-color: #fcfcfc !important;
}
.syntaxhighlighter .line.alt2 {
background-color: #f8f8f8 !important;
}
.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
background-color: #d4e9fd !important;
}
.syntaxhighlighter .line.highlighted.number {
color: #d4d0c8 !important;
}
.syntaxhighlighter table caption {
color: #f8f8f8 !important;
}
.syntaxhighlighter .gutter {
color: #5c5c5c !important;
}
.syntaxhighlighter .gutter .line {
border-right: 3px solid #d4d0c8 !important;
}
.syntaxhighlighter .gutter .line.highlighted {
background-color: #d4d0c8 !important;
color: black !important;
}
.syntaxhighlighter.printing .line .content {
border: none !important;
}
.syntaxhighlighter.collapsed {
overflow: visible !important;
}
.syntaxhighlighter.collapsed .toolbar {
color: black !important;
background: #f8f8f8 !important;
border: 1px solid #cccccc !important;
}
.syntaxhighlighter.collapsed .toolbar a {
color: #999999 !important;
}
.syntaxhighlighter.collapsed .toolbar a:hover {
color: black !important;
}
.syntaxhighlighter .toolbar {
color: #a0a0a0 !important;
background: #d4d0c8 !important;
border: none !important;
}
.syntaxhighlighter .toolbar a {
color: #a0a0a0 !important;
}
.syntaxhighlighter .toolbar a:hover {
color: black !important;
}
.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
color: #000000 !important;
}
.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
color: #008020 !important;
font-style: italic !important;
}
.syntaxhighlighter .string, .syntaxhighlighter .string a {
color: #cc6633 !important;
}
.syntaxhighlighter .keyword {
color: #7777ff !important;
}
.syntaxhighlighter .preprocessor {
color: #802020 !important;
}
.syntaxhighlighter .variable {
color: #000000 !important;
}
.syntaxhighlighter .value {
color: #dd6633 !important;
}
.syntaxhighlighter .functions {
color: #006060 !important;
}
.syntaxhighlighter .constants {
color: #006060 !important;
}
.syntaxhighlighter .script {
font-weight: bold !important;
color: #9b703f !important;
background-color: none !important;
}
.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
color: #800000 !important;
}
.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
color: #cc6633 !important;
}
.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
color: #802020 !important;
}
.syntaxhighlighter .keyword {
font-weight: bold !important;
}
.syntaxhighlighter .xml .keyword {
color: #9b703f !important;
font-weight: normal !important;
}
.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
color: #9b703f !important;
}
.syntaxhighlighter .xml .string {
font-style: italic !important;
color: #cc6633 !important;
}
shBrushSb.js
今回作成したブラシです。
/**
* SyntaxHighlighter
* http://alexgorbatchev.com/SyntaxHighlighter
*
* SyntaxHighlighter is donationware. If you are using it, please donate.
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
*
* @version
* 3.0.83 (July 02 2010)
*
* @copyright
* Copyright (C) 2004-2010 Alex Gorbatchev.
* Copyright (C) 2017 Nonki Takahashi.
*
* @license
* Dual licensed under the MIT and GPL licenses.
*/
;(function()
{
// CommonJS
typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
function Brush()
{
var keywords = 'Else ElseIf EndFor EndIf EndSub EndWhile ' +
'For Goto If Step Sub Then To While';
var objects = 'Array Clock Control Desktop Dictionary ' +
'File Flickr GraphicsWindow ImageList Math Mouse ' +
'Network Program Shapes Sound Stack ' +
'Text TextWindow Timer Turtle';
this.regexList = [
{ regex: /'.*$/gm, css: 'comments' }, // one line comments
{ regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings
{ regex: new RegExp(this.getKeywords(keywords), 'g'), css: 'keyword' }, // sb keyword
{ regex: /(\b\d+[\.]?\d*\b|\.\d+\b)/g, css: 'value' }, // sb number
{ regex: /And|Or|\+|\-|\*|\/|<|=|>|\(|\)|\.|\,/g, css: 'color1' }, // sb operator
{ regex: new RegExp(this.getKeywords(objects), 'g'), css: 'constants' }, // sb object
{ regex: /\.\b\w+\b/g, css: 'preprocessor' } // sb property,operation,event
];
this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);
};
Brush.prototype = new SyntaxHighlighter.Highlighter();
Brush.aliases = ['sb', 'smallbasic'];
SyntaxHighlighter.brushes.Sb = Brush;
// CommonJS
typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();