AAML:Android向けの最もシンプルなマークアップ言語

この愚かさを見つけるかもしれませんが、私はIDEが好きではありません。 通常、すべての作業はvim + tmux +端末で行います。 IDEのすべての利点を認識しています。優れたテキストエディターの方が便利です。 しかし、これはそれについてではありません。



Android向けに何かを書くとき、XML(マークアップ、スタイル、行など)を編集することがよくあります。 したがって、テキストエディターでは、これはあまり便利ではありません。 そして、数時間を費やして、簡略化されたマークアップ言語(CSSのlesscssやスタイラスなど)に基づいてXMLジェネレーターを作成することにしました。 それでも、 NIHは非常に誘惑的な刺激です。



AAML言語(別のAndroidマークアップ言語)は、非常に単純な構文で判明しました。 要素はコロンで始まります。 コンマ(または改行)は属性を分離します。 タブ(またはスペース、またはその両方)は、要素のネストを決定します。 コメントはポンドで始まります。 いくつかの単純なレイアウトは次のようになります。



# Main layout :LinearLayout layout fill, padding 0dp 16dp, orientation vertical :EditText layout fill wrap hint @string/to :EditText layout fill wrap hint @string/subject :EditText layout fill 0dp 1 gravity top hint @string/message :Button#btn_send layout 100dp wrap gravity right text @string/send
      
      





このようなAAMLマークアップは以下にコンパイルされます。



 <?xml version="1.0" encoding="utf-8"?> <!-- Main layout --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="0dp" android:paddingRight="16dp" android:paddingBottom="0dp" android:paddingLeft="16dp" android:orientation="vertical"> <EditText android:layout_width="fill_parent" android:layout_height="match_parent" android:hint="@string/to" /> <EditText android:layout_width="fill_parent" android:layout_height="match_parent" android:hint="@string/subject" /> <EditText android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="top" android:hint="@string/message" /> <Button android:id="@+id/btn_send" android:layout_width="100dp" android:layout_height="match_parent" android:gravity="right" android:text="@string/send" /> </LinearLayout>
      
      





DRY原則は、マクロとエイリアスもサポートしています。 エイリアスを使用すると、何かに新しい名前を設定できます-属性(「wrap_content」の代わりに「wrap」を書き込む)、値(フォントの色またはサイズを一度決定し、エイリアスを変数の名前として使用する)など



マクロはいくつかの引数を取ります。 確かに、引数に名前を付けることはできません(マクロは最も単純なものであると想定されています)。 代わりに、Bashのように位置引数が使用されます($ 1、$ 2、$ 3など)。 上記の例で使用されているマクロとエイリアスは次のとおりです。



 #  :def wrap wrap_content :def fill match_parent :def match match_parent #  :def layout:3 layout_widht $1, layout_height $2, layout_weight $3 :def layout:2 layout_widht $1, layout_height $2 :def layout:1 layout $1 $1 :def padding:4 paddingTop $1, paddingRight $2, paddingBottom $3, paddingLeft $4 :def padding:2 padding $1 $2 $1 $2 :def padding:1 padding $1 $1
      
      





おそらく、そのようなマクロは、さまざまなタイプのXMLに対して標準にする必要があります(レイアウト用-1つ、ストリング用-他など)。



pythonでAAMLによって書かれました。 2つのモードで動作します-* .aamlファイルを* .xmlに変換するか、1つのフォルダーからすべてのファイルを再帰的に処理し、結果のxmlを別のフォルダーに配置します。 これは、aaml / layout、aaml / values、aaml / xmlを作成し、res / layoutなどに結果を追加する場合に便利です。



このプロセスを自動化するには、custom_rules.xmlを作成できます。



 <?xml version="1.0" encoding="UTF-8"?> <project> <target name="-pre-build"> <exec executable="aaml"> <arg value="aaml"/> <arg value="res"/> </exec> </target> </project>
      
      





これで、プロジェクトを自動的にビルドするたびにaamlがxmlに変換されます。



ソースはbitbucketにあります: bitbucket.org/zserge/aaml

ライセンス-MIT。



投稿の最後に、ハブロフスクの住民に質問があります-このプロジェクトを開発する価値はありますか? XMLを手動で記述する他のフリークはいますか? もしそうなら、提案、機能要求、コメント、バグ、批判を歓迎します。



All Articles