hmLJで特別に追加されているlua関数等

概要

hmLJはLuaJIT v2.0.4の機能の全てを踏襲しています。
しかし、素のLuaJITの状態では

  • CP932/SJISも未だに多用されている 秀丸マクロ上での使い心地
  • LuaJITではない 普通のLuaのソースとの互換性

といった点で大きな問題が発生します。

そこでhmLJでは、特別に以下のような「修正」や「API追加」が施されています。

機能の概要

  • cp932(sjis)の文字コードに強い

    レガシー文字列であるcp932(sjis)を中心とする秀丸マクロ内外での使い勝手を向上するため、
    cp932(sjis)の文字コードで記述されたLuaコードが原則そのまま取り扱えるようになっています。
    cp932の文字を対象とするための専用の関数なども基本的なものなら取り揃えています。

  • 5.2への対応

    独自拡張を施しており、その中には、Lua 5.2向きに書かれたスクリプトを互換動作させるような修正も含まれます。
    Lua5.2の深層機能を利用していない限り、Lua5.2のスクリプトも極めて高い確率で動作します。

  • 5.3への対応

    Lua5.3にて導入されたビット演算子こそありませんが、Lua5.3で追加されたLua関数の多くが、hmLJにも実装されています。
    よって、Lua5.3向けに記述されたスクリプトすらも、それなりに高い確率で動作します。

特別な追加機能

  • 秀丸デバッグモニターへの出力機能

    • hm.debuginfo(...) 関数

      luaのprint関数と同じですが、出力先が「秀丸デバッグモニター」など「DebugMonitor」系ツールとなります。
      (これは、hmPyやhmRbと共通仕様となります)

  • 追加ライブラリ

    • lfs(LuaFileSystem)

      Lua言語では準標準ライブラリともいっても差し支えない「lfs」ライブラリを追加しています。

    • bit32

      luajitに元々備わっているbitライブラリとは別に、
      Lua5.2の資産でも流用しやすいように、5.2と同一動作のbit32ライブラリも追加されています。

    • cp932(sjis)用の関数

      stringライブラリやutf8ライブラリのcp932版として、
      (cp932.len、cp932.upper、cp932.lower、cp932.reverse、cp932.sub、cp932.char、cp932.codepoint、cp932.codes、
      そして、sjisをutf8へと変換するための cp932.encode(文字列, "utf8")
      ) が追加されています。

    • math系関数

      luaの5.3にて新たに加えられたmath関数を持っています。
      (math.type、 math.ult、math.mininteger、math.maxinteger、math.tointeger、math.round(x [, precision ])))

    • string系関数

      luaの5.3にて新たに加えられたstring関数を持っています。
      (string.pack、string.unpack)

    • 文字列エンコードを推測する関数

      string.getencoding(文字列)
      が追加されています。
      主に対象の文字コードが「utf8」か「cp932」かを判定するための関数となります。
      (その他も判定可能ですが、誤判定が多くなるでしょう)

    • table系関数

      nilもしくは空のテーブルであることを判定するtable.emptyが追加されています。

      luaの5.2の機能に準ずる 2つの関数を搭載しています。
      (table.unpack / table.pack)

      luaの5.3にて新たに加えられたtable関数を持っています。
      (table.move)

    • utf8系関数

      luaの5.3にて加えられたutf8系ライブラリを全て持っています。
      (そして、utf8をcp932に変換するための utf8.encode(文字列, "cp932") )が特別に追加されています。

    • json系関数

      cjsonライブラリが特別に追加されています。
      外部に保存するための永続データ用APIがデフォルトで1つ搭載されていると使い勝手が良いと判断したためです。