2014年10月24日

Luaの文字列リテラル

Luaの文字列リテラルの字句構造についてのメモです。

Luaの文字列リテラルは対応するシングルクォートまたはダブルクォートで囲みます。
文字列リテラルの中には、以下のエスケープシーケンスを含むことができます。
それぞれ、対応するLuaのバージョンを示し、Lua 5.3については5.3(alpha)の時点のものとします。


制御文字 (Lua 5.1, 5.2, 5.3)


\a   -   bell、ベル
\b   -   backspace、後退
\f   -   form feed、改頁
\n   -   newline、改行
\r   -   carriage return、復帰
\t   -   horizontal tab、水平タブ
\v   -   virtical tab、垂直タブ
\\   -   back slash、バックスラッシュ
\"   -   double quote、引用符・ダブルクォート
\'   -   apostrophe (single quote)、アポストロフィ (シングルクォート)
\(実際の改行)   -   改行
\z   -   後続の改行を含むスペース文字をスキップします。

バイト値 10進数 (Lua 5.1, 5.2, 5.3)


\ddd   -   dddは最大3桁の10進数 (0〜255) で、後続に数字があるときは0を左詰めして3桁にします。

バイト値 16進数 (Lua 5.2, 5.3)


\xXX   -   XXは2桁の16進数 (00 〜 FF)。

Unicode (Lua 5.3)


\u{XXX}   -   XXXは1文字以上の16進数 (0〜10FFFF)。波括弧で囲む点に注意。内部ではUTF-8として扱われます。

長括弧 (Lua 5.1, 5.2, 5.3)


Luaの文字リテラルは長括弧 ( [[, ]] ) で囲むこともできます。
長括弧内ではエスケープシーケンスは無視され、改行は改行そのものとして扱われます。ただし、開き長括弧の直後の改行は無視されます。
レベル0長括弧 ( [[, ]] )、レベル1長括弧 ( [=[, ]=] ) 、さらにレベル2長括弧 ( [==[, ]==] )と角括弧に任意の個数の等号を加えた形式にすることもできますが、開き長括弧と閉じ長括弧のレベルは同じである必要があります。

Luaの文字列リテラルは単なるバイト列で文字コードに依存しませんが、Shift_JISなどの2バイト目が0x5C(バックスラッシュまたは円記号)となりうる文字コードではそれがエスケープシーケンスとして扱われてしまい問題となります。いわゆるダメ文字です。その場合、他の言語でもありがちですが以下のように2つ重ねることで文字そのものとすることができます。

print( "表\" )      --   Shift_JISにおける print( "\149\\" ) と同じ

長括弧がエスケープシーケンスを無視する性質であることを利用して以下のようにも記述できます。

print( [[表]] )

今日一般的によく使われると思われるUTF-8ではこのような考慮は不要です。
というわけで、Windows版ですが、文字列リテラルをUTF-8固定としてUnicode版の各種WindowsAPIやCランタイム関数を呼ぶようにパッチを当てたLuaの派生を作りました。CorvusSKKに組み込む目的で作りましたが、Luaの部分を抜き出した形で公開したものです。

lua-u8w
https://github.com/nathancorvussolis/lua-u8w

Lua 5.3のリリース版はまだかなと思っていたら先程ベータ版が出たようです。
http://www.lua.org/work/



【参照】

Lua 5.1 - Lexical Conventions
http://www.lua.org/manual/5.1/manual.html#2.1

Lua 5.2 - Lexical Conventions
http://www.lua.org/manual/5.2/manual.html#3.1

Lua 5.3(alpha) - Lexical Conventions
http://www.lua.org/work/doc/manual.html#3.1

2014年10月19日

IME開発者向けリンク集

CorvusSKKというDDSKKの入力方式を用いたWindowsで動くIMEを開発しております。
DOS、Windowsの世界では過去に様々なFEP、IMEが存在していましたが、現在のWindowsにおいては選択肢がちょっと少ないのでは?ということで、これからIMEを作ってみたい方向けに有益かと思われるリンクをまとめてみました。



Text Services Framework (TSF) 実装例

  • ソースコードが公開されているもの
    • CorvusSKK
      • 手前味噌ですみません。
    • tsf-tutcode
      • CorvusSKKをフォークして頂きました。漢字直接入力機能が追加されています。
    • tsf-vim
      • vi風な操作をIMEとして実装されたもの
    • Mozc
      • Google日本語入力のオープンソース版。辞書はそれに劣るようですが、Mac、Linux、Android、ChromeOSでも動くそうです。
  • ソースコードが公開されていないもの
    • SKK日本語入力FEP (SKKFEP)
      • SKKの操作性をベースに革新的な機能が盛り沢山なIMEです。一度はまると抜け出せなくなります。
    • Google日本語入力
      • あのGoogleがIMEを作った!と衝撃が走ったのは記憶に新しいところ。Windows 7まではIMM32実装が、Windows 8以降でTSF実装が使用されます。
    • MS-IME
      • Windowsに標準で組み込まれています。リンクはMS-IME2010のものですが、OfficeのライセンスがあればXP、Vista、7で使用可能です。
    • ATOK
      • 賢い変換が可能だそうです。個人的には試用版を少し触れた程度なので
    • Baidu IME
      •  検索エンジンのサービスを開発運用しているとIMEも作っちゃおうぜみたいになるのでしょうか。
    • WinAnthy
      • Anthyの移植版
    • Social IME
      • インターネット経由でかな漢字変換を行うユーザー参加型のIME。以前ソースコードが公開されていたみたいなのですが現在では見付かりませんでした。

 

Text Services Framework (TSF) 全般


WindowsにおけるIMEは、notepad.exeやexplorer.exeなどのプロセスにIMEのDLLがロードされた状態で動きます。IMEのDLLはプロセス側と同等のアクセス制限が課されるため、ファイルアクセスやプロセス間通信を行うときにそれを考慮しなければなりません。

セキュリティ全般


Internat Explorer

Windows Vista 以降の Internet Explorer の保護モードについて

AppContainer

Windows 8 以降のAppContainerについて


Adobe Sandbox

Adobe Acrobat/Reader X以降、Firefox 4.0以降で動くAdobe Flash Player 11.3以降で有効となるサンドボックスについて



 ざっとこんなところでしょうか。