ということで実験です。
デザインモード
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 | 停止/手動 |