From 8577dc9d458c255f74831fedd35813091449a138 Mon Sep 17 00:00:00 2001
From: suVene
Date: Mon, 22 Dec 2008 12:06:29 +0000
Subject: add $U.runnable(generator)
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27232 d0d07461-0603-4401-acd4-de1884942a52
---
 _libly.js | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/_libly.js b/_libly.js
index f3c4dd3..abb846a 100644
--- a/_libly.js
+++ b/_libly.js
@@ -5,7 +5,7 @@ var PLUGIN_INFO =
     Vimperator plugins library?
     適当なライブラリっぽいものたち。
     suVene
-    0.1.13
+    0.1.14
     1.2
     2.0pre
     http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/_libly.js
@@ -47,6 +47,8 @@ evalJson(str, toRemove):
 dateFormat(dtm, fmt):
     Date型インスタンスを、指定されたフォーマットで文字列に変換します。
     fmt を省略した場合、"%y/%M/%d %h:%m:%s" となります。
+runnable(generator):
+    gererator を実行し、再帰的に resume する為の引数を渡します。
 
 ==  Browser ==
 getSelectedString:
@@ -181,6 +183,22 @@ libly.$U = {//{{{
         }
         return (fmt || '%y/%M/%d %h:%m:%s').replace(/%([yMdhms%])/g, function (_, n) d[n]);
     },
+    /**
+     * example)
+     *  $U.runnable(function(resume) {
+     *      // execute asynchronous function.
+     *      // goto next yield;
+     *      var val = yield setTimeout(function() { resume('value!'), 1000) });
+     *      alert(val);  // value!
+     *      yield;
+     *  });
+     */
+    runnable: function(generator) {
+        var it = generator(function(value) {
+                    try { it.send(value); } catch (e) {}
+                 });
+        it.next();
+    },
     // }}}
     // Browser {{{
     getSelectedString: function() {
-- 
cgit v1.2.3