2012-01-01から1ヶ月間の記事一覧
とりあえず、自力で書いてみました。 構文解析とかあんまりやったことが無いので、もっと簡単なやり方がありそうですね。 コードがだいぶアレな感じになってしまってぐぬぬ。 多分問題ない…はず。 ちなみに括弧は対応していないです。 [ソース] #define SPRO…
strtol の第二引数と同じですね。 メンバ関数 current() で取得出来るみたいです。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> int main(){ namespace w = sprout::weed; { static constexpr auto data = sprout::to_</sprout/weed.hpp>…
weed::eol を使用します。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> #include <iostream> #include <sprout/array.hpp> #include <sprout/tuple/array.hpp> #include <sprout/string/alias.hpp> template<typename Parsed> struct parsed_holder{ constexpr operator bool(…</typename></sprout/string/alias.hpp></sprout/tuple/array.hpp></sprout/array.hpp></iostream></sprout/weed.hpp>
先日書いた記事なんですが、コメントでやり方を教えていただいたので覚書。 kind で default_action を設定すれば出来るみたいです。 [unite-qfixlist] let s:source = { \ "name" : "qfixhowm", \ "description" : "qfixhowm", \} function! s:source.gathe…
すっかり忘れていたんですが、いつの間にか OGLplus が 0.9.0 になっていました。 oglplus-0.9.0 - sourceforge あと破壊的な変更点があったのでいくつか。 Matrix4f と Matrix4d の名前が変更 名前が変更されました。 Matrix4f → Mat4f Matrix4d → Mat4d な…
[ソース] function! s:main() echo repeat("無駄", 5) echo repeat("ほむ", 10) endfunction call s:main() [出力] 無駄無駄無駄無駄無駄 ほむほむほむほむほむほむほむほむほむほむ (…今まで join と map を使っていたなんて言えない。
欲しかったのでちょっと書いてみました。 [unite-qfixlist] let s:source = { \ "name" : "qfixlist", \ "description" : "qfixlist", \ "action_table" : { \ "new_memo" : { \ "is_selectable" : 0, \ } \ } \} function! s:source.action_table.new_memo.…
すごくピンポイントなんですが、小数を代入したグローバル変数を定義します。 let g:Hoge = 1.1 この時に sessionoptions に globals が含まれている場合、mksession で次のような書き込みがされ、source 時にエラーになります。 let Hoge = &1.100000 これ…
出来そうだったのでやってみた。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> #include <iostream> template<typename Parsed> struct parsed_holder{ constexpr operator bool() const{ return parsed.success(); } template<typename T> constexpr bool oper</typename></typename></iostream></sprout/weed.hpp>…
weed::eoi を使用します。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Parsed> struct parsed_holder{ constexpr operator bool() const{ return parsed.success(); } template<typename T> constexpr bool operator ==(T&& t) c</typename></typename></sprout/weed.hpp>…
さて、 homu:mado のような『:』区切りの構文をパースする場合、 namespace weed = sprout::weed; static constexpr auto parser = *weed::lim<4>(weed::char_ - ':') >> ":" >> *weed::lim<4>(weed::char_); のようなパーサを記述すると思います。 しかし、…
unite.vim を使用して、切替オプションの設定を行います。 こちらも unite-checking-global-variables と同様にチェックボックス表記です。 手動でガシガシ書いたので抜けがあるかも知れませぬ。 [Vimプラグイン] unite-set-toggle-options - github NeoBund…
名前が無駄に長いんですが、0 と 1 のグローバル変数を unite.vim で編集する unite-source です。 要はチェックボックスですね。 元々は unite.vim でチェックボックスを記述する為のテストソースとして書いていたんですが、そのままでも使えそうだったので…
Sprout の index_iterator で簡単に実装出来そうだったのでちょっと試してみた。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/algorithm/transform.hpp> #include <sprout/iterator/index_iterator.hpp> #include <sprout/array.hpp> #include <sprout/pit.hpp> #include <iostream> template</iostream></sprout/pit.hpp></sprout/array.hpp></sprout/iterator/index_iterator.hpp></sprout/algorithm/transform.hpp>
ちょっとハマったことがあったので覚書 [比較] Sprout.Variant で比較を行う場合、型が合っていないとエラーになります。 typedef sprout::variant<int, float> var_type; static constexpr var_type x{10}; static_assert(x == 10, ""); static_assert(x != 0.0f, ""); </int,>…
見てもらえれば分かると思いますが、ステータスラインをカラーリングしたりプラグインです。 知っている人は知っている、気になっていた人は気になっていた EasyMotion のスクリーンショットに載っていたアレですね。 カラーリング以外にも色々と設定出来る…
例えば、次のような除算を行う関数で、ゼロ除算の場合にエラーを出力したいと思います。 constexpr int division(int a, int b){ return a / b; } constexpr int x1 = division(4, 2); // ok constexpr int x2 = division(4, 0); // ゼロ除算を行うのでエラ…
例えば、vimshell や unite.vim などといったファイルが存在しないバッファの削除を行います。 [ソース] function! s:delete_no_file_buffer() let list = filter(range(1, bufnr("$")), \ 'bufexists(v:val) && !filereadable(expand("#".v:val.":p"))' \ )…
Sprout.Weed では以下の符号付き10進数のパーサが用意されています。 Expression Attribute uint_ std::uintmax_t uint8 std::uint8_t uint16 std::uint16_t uint32 std::uint32_t uint64 std::uint64_t [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_C…
*weed::omit[a]という記述で連続した a を無視することが出来ます。 これを利用して連続したスペースを無視します。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Parsed> struct parsed_holder{ constexpr operator b</typename></sprout/weed.hpp>…
そういう機能が欲しかったのでちょっと Vim script を書いてみました。 既存の機能でもっと簡単に出来るかも。 [ソース] function! s:delete_hide_buffer() let list = filter(range(1, bufnr("$")), "bufexists(v:val) && !buflisted(v:val)") for num in l…
Vim Advent Calendar 2011 46日目の記事になります。 特に Vim Advent のネタにする予定もなかったのですが、他に書く人もいなさそうなので、46日目にしました。 こんな感じで書きたいことがあれば各々が好きなように Vim Advent に投稿すればいいと思います…
weed::omit を使用して特定の構文を無視することが出来ます。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Parsed> struct parsed_holder{ constexpr operator bool() const{ return parsed.success(); } template<typename T> co</typename></typename></sprout/weed.hpp>…
演算子を使用して // 数値かアルファベットにマッチするパーサ weed::int_ | weed::alpha のようなパーサを記述することが出来ます。 また、上記のパーサだと attribute の型は sprout::variant<std::intmax_t, char> のように sprout::variant 型になります。 [ソース] #define S</std::intmax_t,>…
Sprout.Weed では以下の符号付き10進数のパーサが用意されています。 Expression Attribute int_ std::intmax_t int8 std::int8_t int16 std::int16_t int32 std::int32_t int64 std::int64_t [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_I…
テストしやすいようにちょっとラップしてみました。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Parsed> struct parsed_holder{ constexpr operator bool() const{ return parsed.success(); } template<typename T> constexpr b</typename></typename></sprout/weed.hpp>…
次のように特定の文字まで文字列を読み込む場合に、マイナス演算子を使用して、特定の文字をマッチさせないようにします。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Char, std::size_t N, typename Parser> constexpr bool check_parser(Char con</typename></sprout/weed.hpp>…
Vim Advent Calendar 2011 43日目の記事となります。 もはや Advent Calendar がなんなのかわからなくなってきましたね。 明日以降、誰が書くか未定なので、もし書いた or 書きたい人がいれば ATND のコメントに投稿して下さい。 特にもう日付を気にする必要…
weed::char_ と weed::lim を利用して複数の文字のパースを行います。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/weed.hpp> template<typename Char, std::size_t N, typename Parser> constexpr bool check_parser(Char const(&str)[N], Parser&& parser){ using sprout::weed</typename></sprout/weed.hpp>…
Boost.Spirit.Qi のドキュメントに載っている test_parser を Sprout.Weed でも書いてみました。 ただし、関数内で static_assert はできないので、結果の出力は実行時に行います。 コンパイル時にチェックを行いたい場合は、check_parser で static_assert …