2011年1月アーカイブ

文字実体参照に変換したりURLエンコードしたりquotemetaしたり何かと面倒なので久しぶりにAppleScriptで書いてみた。

TextWranglerのスクリプトメニュー

とりあえずは下記の5種類。

  • 文字実体参照変換
  • 文字実体参照から戻す
  • URLエンコード
  • URLデコード
  • quotemeta(Perl)

↓TextWranglerユーザーの方はよろしければどうぞ。

# 直接PerlやPythonとかでも書けるみたい(今回は選択範囲とかの受け渡し方がちょっとわからんかったのでAppleScriptで書いた)。

~/Library/Application Support/TextWrangler/AppleScriptディレクトリを作成。

最初に定番?の文字列置換モジュールを書いてAppleScriptディレクトリに設置。

(*
TextReplacer.scpt
*)
on replace_all(theText, serchStr, replaceStr)
	set theDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to serchStr
	set theList to every text item of theText
	set AppleScript's text item delimiters to replaceStr
	set theText to theList as string
	set AppleScript's text item delimiters to theDelim
	return theText
end replace_all

メニュースクリプトは ~/Library/Application Support/TextWrangler/Scripts 以下に置く

簡単な文字実体参照変換とか...

(*
To Character Entity Reference.scpt
*)
set libpath to path to library folder from user domain
set libpath to (libpath as Unicode text) & "Application Support:TextWrangler:AppleScript:TextReplacer.scpt"
set TextReplacer to load script file libpath

tell application "TextWrangler"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to TextReplacer's replace_all(selectionText, "&", "&")
	set selectionText to TextReplacer's replace_all(selectionText, "<", "&lt;")
	set selectionText to TextReplacer's replace_all(selectionText, ">", "&gt;")
	set selectionText to TextReplacer's replace_all(selectionText, "\"", "&quot;")
	set selection of targetWin to selectionText
end tell

Perlのワンライナーを実行させたり...

(*
Perl Quotemeta.scpt
*)
tell application "TextWrangler"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to quoted form of selectionText
	set command to "perl -e"
	set perlScript to quoted form of "print quotemeta($ARGV[0])"
	set selectionText to do shell script command & " " & perlScript & " " & selectionText
	set selection of targetWin to selectionText
end tell

正規表現も...

(*
Encode URL.scpt
*)
tell application "TextWrangler"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to quoted form of selectionText
	set command to "perl -e"
	set perlScript to quoted form of "$s=$ARGV[0];$s=~s!([^a-zA-Z0-9_.~-])!uc sprintf \"%%%02x\", ord($1)!eg;print $s"
	set selectionText to do shell script command & " " & perlScript & " " & selectionText
	set selection of targetWin to selectionText
end tell

こんな配布の仕方もできるのね...

今さらだけど!! MT を知らない人に MT の話して欲しいと言われてないけどブログ書きました。

難しい話は抜きにして <mt:〜> で囲えば動きます。

MTが動くサーバーなら今まで作ってたテンプレートにタグを記入すれば良いだけです。

<mt:blogname>

拡張子は自由に設定できます。普通にhtmlにすればいいと思います。デフォルトでもそうなっています。

フレームの代わりに MT を使うってのがないので、参考になるのはありません。

致し方ないので、フレームの代わりにPHPを使うを参考にしてください。

ついでに MT を少しでも使えるようになれば、こんなことができるという一例を紹介します。

コピーライトの西暦を自動更新

MT 使えばページフッタの西暦も自動更新します*1

Copyright (c) 2001-<mt:date format="%Y"> Weble inc. All Rights Reserved.

自分の年齢を自動更新

MT を使えば自分の年齢を自動更新して表示できます。

<mt:setvar name="birthday" value="19900605">
<mt:date format="%Y%m%d" setvar="date">
<mt:var name="birthday" value="$date" op="-" setvar="age">
<mt:var name="age" value="10000" op="/" regex_replace="/\..*/","" regex_replace="/\..*/","" regex_replace="/[^0-9]/g",""$>

ページの部品を読み込む

MT を使えばページ内に部品を読み込むことができます。

<mt:include file="/path/to/footer.html">

これを応用すれば以下のようにしてフッタとヘッダを同期できますよ。

<mt:include file="/path/to/header.html">
<div id="contents">
テキストテキストテキスト
</div>
<mt:include file="/path/to/footer.html">

他人のサイトの内容を読み込む*2

人のサイトのデータをチェックして何かするときなどに便利。

※これは...さすがにない(ないよね?)のでFileGetContentsプラグイン(ZIPファイル)ってのを書いた。/mt_dir/plugins/に追加

<mt:filegetcontents url="http://google.com/">

複数のメッセージをランダムに表示*3

<mt:date format="%S" regex_replace="/^[0-9]/","" setvar="rand">
<mt:var name="rand" value="2" op="/" regex_replace="/\.[0-9]/","" setvar="rand">
<mt:var name="rand" value="1" op="+" setvar="rand">
<mt:setvars>
    1=メッセージA
    2=メッセージB
    3=メッセージC
    4=メッセージD
    5=メッセージE
</mt:setvars>
<mt:var name="$rand">

指定した月のカレンダーを出力

少し長いですが、2010年12月のカレンダーを出力します。

<mt:setvars>
    1=日
    2=月
    3=火
    4=水
    5=木
    6=金
    7=土
</mt:setvars>
<table>
    <mt:for var="jpweek" from="1" to="7">
    <mt:if name="__first__"><tr></mt:if>
        <th><mt:var name="$jpweek"></th>
    <mt:if name="__last__"></tr></mt:if>
    </mt:for>
    <mt:calendar month="201012">
        <mt:calendarweekheader>
            <tr>
        </mt:calendarweekheader>
                <td>
                    <mt:calendarifblank>
                    <mt:else><$mt:calendarday$>
                    </mt:calendarifblank>
                </td>
        <mt:calendarweekfooter>
            </tr>
        </mt:calendarweekfooter>
    </mt:calendar>
</table>

以上のように結構便利なものがあります。コピーして貼りつけても大体のサーバーで動きますのでどうぞ。

本当はサーバーで動かす前に自分のパソコンでテストした方が良いんですけど、興味のある方はぜひ以下の記事をご覧ください。

# まぁ...ちょっと忙しさから逃げた! ごめん。

Facebook

Twitter

このアーカイブについて

このページには、2011年1月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年12月です。

次のアーカイブは2011年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6