ということで実験です。
デザインモード
onをクリックすると確かにブラウザがエディタになりますね。挙動はブラウザによって違うみたいですが…。
document.designMode = 'on'; とするだけなので、非常に楽です。C#からブラウザを使えば、結果的にテキストエディタも作れそう。
ただ、水平タブの処理は細かくできそうにないので、その辺りが難点でしょうか。


SyntaxHighlighter.all();
function test()
{
alert("test");
}
そして、表示しているページで以下のスクリプトを実行。
<script type="text/javascript">
var script = document.createElement('script');
script.src = 'js1.js';
script.type = 'text/javascript';
script.language = 'javascript';
script.onload = function()
{
test();
};
document.body.appendChild(script);
</script>
ちゃんと外部ファイルのtest()が呼ばれて、"test"とアラートが出ました。script.onload = script.onreadystatechange = function()
{
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))
{
//省略
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
script.parentNode.removeChild(script);
}
};
調べてみると、script.onloadはIEの場合反応しないとか。
.syntaxhighlighter table td.gutter .line
{
padding: 0 5px !important;
}
.syntaxhighlighter
{
overflow-y: hidden !important;
border: 1px solid #ccc !important;
}
.syntaxhighlighter div,
.syntaxhighlighter span,
.syntaxhighlighter code,
.syntaxhighlighter textarea
{
font-size:12px !important;
font-family: "Consolas", "monospace" !important;
}
.syntaxhighlighter textarea
{
font-size: 13px !important;
line-height: 13px !important;
margin-top: -1px !important;
}
.syntaxhighlighter .line.alt1
{
border-bottom-width: 1px !important;
border-bottom-style: solid !important;
border-bottom-color: rgb(240,240,240) !important;
background-color: white !important;
}
.syntaxhighlighter .line.alt2
{
border-bottom-width: 1px !important;
border-bottom-style: solid !important;
border-bottom-color: rgb(240,240,240) !important;
background-color: white !important;
}
.syntaxhighlighter .gutter
{
color: rgb(175, 175, 175) !important;
}
.syntaxhighlighter .gutter .line
{
border-right: 3px solid rgb(240,240,240) !important;
}
.syntaxhighlighter .line.highlighted.alt1,
.syntaxhighlighter .line.highlighted.alt2
{
background-color: rgb(255, 255, 223) !important;
}
.syntaxhighlighter .gutter .line.highlighted
{
background-color: rgb(255, 255, 223) !important;
color: black !important;
}
.syntaxhighlighter table caption
{
color: rgb(45,103,22) !important;
background-color: rgb(173,201,248) !important;
text-align: left !important;
padding: 2px !important;
line-height: 1em !important;
}
.syntaxhighlighter a:hover
{
background-color: rgb(204, 204, 255) !important;
}
.syntaxhighlighter a,
.syntaxhighlighter div,
.syntaxhighlighter code,
.syntaxhighlighter table,
.syntaxhighlighter table td,
.syntaxhighlighter table tr,
.syntaxhighlighter table tbody,
.syntaxhighlighter table thead,
.syntaxhighlighter table caption,
.syntaxhighlighter textarea
{
line-height: 1em !important;
}
| 名前 | デフォルト値 | 説明 |
| bloggerMode | false | コード中の<br />を実際の改行として扱う |
| strings | Object | 各種メッセージの定義 |
| stripBrs | false | コード中の<br />の無視 |
| tagName | "pre" | ターゲットのタグを変更する |
SyntaxHighlighter.config.bloggerMode = true;このモードをtrueにすると、preタグの中(若しくはscriptタグ使用時のCDATAセクション)の<br />タグの扱いが変わります。

| 名前 | デフォルト値 | 説明 |
| expandSource | "+ expand source" | タイトルを設定せずに折りたたんだ時に表示される |
| help | "?" | 右上に出るツールバーにマウスオーバーすると表示される文字 |
| alert | "SyntaxHighlighter\n\n" | エラーが発生した時に出るウィンドウに表示される。他のnoBrushやbrushNotHtmlScriptのメッセージと組み合わされる |
| noBrush | "Can't find brush for:" | brushが読み込めなかった時に表示される |
| brushNotHtmlScript | "Brush wasn't made for html-script option:" | HTML混在モードの時に、読み込んだbrushがそのモードに対応していない時に表示される |
SyntaxHighlighter.config.strings.expandSource = "+展開します"; SyntaxHighlighter.config.strings.noBrush = "brushファイルを読み込めません。";
SyntaxHighlighter.config.stripBrs = true;bloggerModeでは、preタグ中の<br />を実際の改行として扱いましたが、こちらはpreタグ中の<br />を無視し、表示もしません。
SyntaxHighlighter.config.tagName = "h6";
| 名前 | デフォルト値 | 説明 |
| auto-links | true | コード内アドレスにリンクを張る |
| class-name | '' | SyntaxHighlighterの全要素にクラスを追加する |
| collapse | false | 折りたたみ表示をする |
| first-line | 1 | 開始行番号を設定する |
| gutter | true | 行番号を表示する |
| highlight | null | ハイライト行を設定する |
| html-script | false | コードをHTMLと他言語の混在として扱う |
| smart-tabs | true | スマートタブを使用する |
| tab-size | 4 | タブサイズの設定をする |
| toolbar | true | ツールバーを表示する |
SyntaxHighlighter.defaults['auto-links'] = true;
<script language="javascript" type="text/javascript"> var a = "https://hogehoge.hoge.hoge/"; </script> http://hogehoge.hoge.hoge/ ftp://hogehoge.hoge.hoge/ hoge://hogehoge.hoge.hoge +://a _://あ _://h あ://st ://
<script language="javascript" type="text/javascript"> var a = "https://hogehoge.hoge.hoge/"; </script> http://hogehoge.hoge.hoge/ ftp://hogehoge.hoge.hoge/ hoge://hogehoge.hoge.hoge +://a _://あ _://h あ://st ://
SyntaxHighlighter.defaults['class-name'] = 'test';SyntaxHighlighterの全要素にスタイルを追加します。スペースで複数追加できます。
SyntaxHighlighter.defaults['collapse'] = true;折りたたみ表示を設定します。
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
SyntaxHighlighter.defaults['first-line'] = 50;
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
SyntaxHighlighter.defaults['gutter'] = true;
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
SyntaxHighlighter.defaults['highlight'] = [1, 3];
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
SyntaxHighlighter.defaults['html-script'] = true;
<!-- javascript --> <script language="javascript" type="text/javascript"> SyntaxHighlighter.all(); </script> <!-- HTML --> <p> test </p>
<!-- javascript --> <script language="javascript" type="text/javascript"> SyntaxHighlighter.all(); </script> <!-- HTML --> <p> test </p>
SyntaxHighlighter.defaults['smart-tabs'] = true;
1 1 1 1 12 12 12 12 123 123 123 123 1234 1234 1234 12345 12345 12345
1 1 1 1 12 12 12 12 123 123 123 123 1234 1234 1234 12345 12345 12345
SyntaxHighlighter.defaults['tab-size'] = 2;
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
1 1 1 1 1234567890123
SyntaxHighlighter.defaults['toolbar'] = true;
<script language="javascript" type="text/javascript"> SyntaxHighlighter.all(); </script>
<script language="javascript" type="text/javascript"> SyntaxHighlighter.all(); </script>
<pre class="brush: js; highlight: [6,7]; tab-size: 2; toolbar: false" title="sample">
<script type="syntaxhighlighter" class="brush: c-sharp"><![CDATA[
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
]]></script>
2~10行のハイライト部分にコードを記述します。
| 利点 | 欠点 | |
| preタグ | タグ中のコードは非表示にならない。 | <>&"'の文字をエスケープする必要がある。 |
| scriptタグ | 殆どの文字をそのまま記述できる。 | </script>だけはエスケープする必要がある。 タグ中のコードが非表示になる事がある。 |
<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> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type="text/javascript"></script>※ここでは、デフォルトテーマを読み込んでいます。
<script language="javascript" type="text/javascript">
function path() {
var args = arguments, result = [];
for (var i = 0; i < args.length; i++)
result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/'));
return result
};
SyntaxHighlighter.autoloader.apply(null, path(
'applescrip @shBrushAppleScript.js',
'actionscript3 as3 @shBrushAS3.js',
'bash shell @shBrushBash.js',
'coldfusion cf @shBrushColdFusion.js',
'cpp c @shBrushCpp.js',
'c# c-sharp csharp @shBrushCSharp.js',
'css @shBrushCss.js',
'delphi pascal @shBrushDelphi.js',
'diff patch pas @shBrushDiff.js',
'erl erlang @shBrushErlang.js',
'groovy @shBrushGroovy.js',
'java @shBrushJava.js',
'jfx javafx @shBrushJavaFX.js',
'js jscript javascript @shBrushJScript.js',
'perl pl @shBrushPerl.js',
'php @shBrushPhp.js',
'text plain @shBrushPlain.js',
'py python @shBrushPython.js',
'ruby rails ror rb @shBrushRuby.js',
'sass scss @shBrushSass.js',
'scala @shBrushScala.js',
'sql @shBrushSql.js',
'vb vbnet @shBrushVb.js',
'xml xhtml xslt html @shBrushXml.js'
));
SyntaxHighlighter.all();
</script>
公式サイトに書いてあるコードそのままです。
9行~34行がAutoloaderで、必要なbrushファイルを読み出しています。
2行~7行がファイルのパスを書き換える処理で、必要に応じて5行目のアドレス部分を変えるだけで、柔軟にファイルの場所を変更出来ます。
<pre class="brush: c-sharp; toolbar: false" title="sample">
namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
</pre>
ハイライトされている部分が、貼り付けたいコードの内容になります。| 制限される文字 | 代替文字 |
| < | < |
| > | > |
| & | & |
| " | " |
| ' | ' |
| コードの言語 | brushに記述するエイリアス (複数あるものはどれでも可) |
使用するために必要なファイル |
| 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 |

namespace Program
{
public class Program
{
static void Main(string[] args)
{
}
}
}
これはいいですね。既に定番なツールの様で、多くのサイトで紹介や解説が説明がなされています。比較的楽に情報を集めて設置する事が出来ました。| 必要なサービス | 標準の設定 |
| Application Layer Gateway Service | 停止/手動 |
| Network Connections | 開始/手動 |
| Network Location Awareness | 開始/自動 |
| Plug and Play | 開始/自動 |
| Remote Access Auto Connection Manager | 停止/手動 |
| Remote Access Connection Manager | 停止/手動 |
| Remote Procedure Call (RPC) | 開始/自動 |
| Telephony | 停止/手動 |