OSDN Git Service

setvector function.
authorvisor <visor@users.sourceforge.jp>
Sat, 4 Apr 2015 05:30:18 +0000 (14:30 +0900)
committervisor <visor@users.sourceforge.jp>
Sat, 4 Apr 2015 05:30:18 +0000 (14:30 +0900)
dovector wiki command.
vector join table wiki inline function.

modules/ml-variable.cc
modules/ml-variable.h
wiki/wikicmd.cc
wiki/wikicmd.h
wiki/wikiformat.cc
wiki/wikiformat.h
wiki/wikiline.cc
wiki/wikiline.h
wiki/wikimotor.cc

index 54dfe2c..d59ea00 100644 (file)
@@ -165,6 +165,82 @@ MNode*  ml_setarray (MNode* cell, MlEnv* mlenv) {
 }
 
 /*DOC:
+===setvector===
+ (setvector ARRAY_LIST VECTOR_OF_VECTOR [ARRAY_LIST VECTOR_OF_VECTOR]...) -> LAST_VALUE
+
+*/
+//#AFUNC       setvector       ml_setvector
+//#WIKIFUNC    setvector
+MNode*  ml_setvector (MNode* cell, MlEnv* mlenv) {
+    MNode*  arg = cell->cdr ();
+    MNodePtr  ans;
+
+    while (arg) {
+       MNodePtr  v1;
+       v1 = eval (arg->car (), mlenv);
+       nextNode (arg);
+       if (arg) {
+           ans = eval (arg->car (), mlenv);
+           nextNode (arg);
+       } else {
+           ans = NULL;
+       }
+       MNode*  a1 = v1 ();
+       MNode*  a2 = ans ();
+       if (isCons (a1)) {
+           std::vector<ustring>  vars;
+           boost::ptr_vector<MNodePtr>  vals;
+           boost::ptr_vector<MNodePtr>::iterator  b, e;
+           while (isCons (a1)) {
+               vars.push_back (to_string (a1->car ()));
+               MNodePtr*  p = new MNodePtr;
+               vals.push_back (p);
+               *p = newMNode_vector ();
+               nextNode (a1);
+           }
+           if (isNil (a2)) {
+           } else if (isVector (a2)) {
+               size_t  i;
+               size_t  m = a2->vectorSize ();
+               for (i = 0; i < m; ++ i) {
+                   MNode*  a3 = a2->vectorGet (i);
+                   size_t  j;
+                   for (b = vals.begin (), e = vals.end (), j = 0; b < e; ++ b, ++ j) {
+                       if (isNil (a3)) {
+                           (*b) ()->vectorPush (NULL);
+                       } else {
+                           (*b) ()->vectorPush (a3->vectorGet (j));
+                       }
+                   }
+               }
+           } else if (isCons (a2)) {
+               while (isCons (a2)) {
+                   MNode*  a3 = a2->car ();
+                   for (b = vals.begin (), e = vals.end (); b < e; ++ b) {
+                       if (isCons (a3)) {
+                           (*b) ()->vectorPush (a3->car ());
+                       } else {
+                           (*b) ()->vectorPush (NULL);
+                       }
+                       nextNode (a3);
+                   }
+                   nextNode (a2);
+               }
+           } else {
+               throw (ustring (CharConst ("wrong type of value")));
+           }
+           size_t  i, n;
+           for (i = 0, n = vars.size (); i < n; ++ i) {
+               mlenv->setVar (vars[i], vals[i] ());
+           }
+       } else {
+           throw (ustring (CharConst ("wrong type of parameter")));
+       }
+    }
+    return mlenv->retval = ans ();
+}
+
+/*DOC:
 ===setevar===
  (setevar VARIABLE ...) -> VARIABLE
 
@@ -176,7 +252,6 @@ MNode*  ml_setevar (MNode* cell, MlEnv* mlenv) {
     MNodePtr  p;
 
     while (arg) {
-//     a = eval_str (arg->car (), mlenv);
        p = eval (arg->car (), mlenv);
        a = to_string (p ());
        nextNode (arg);
index 1e833bc..681deb8 100644 (file)
@@ -6,6 +6,7 @@ class  MlEnv;
 
 MNode*  ml_setvar (MNode* cell, MlEnv* mlenv);
 MNode*  ml_setarray (MNode* cell, MlEnv* mlenv);
+MNode*  ml_setvector (MNode* cell, MlEnv* mlenv);
 MNode*  ml_setevar (MNode* cell, MlEnv* mlenv);
 MNode*  ml_let (MNode* cell, MlEnv* mlenv);
 MNode*  ml_getvar (MNode* cell, MlEnv* mlenv);
index 03287d9..8224864 100644 (file)
@@ -171,6 +171,85 @@ void  wc_doarray (WikiLine* wl, WikiFormat* wiki) {
 
 /* ============================================================ */
 /*DOC:
+===$dovector===
+ $dovector:''VAR1'',''VAR2'',...[:''INDEX_VAR'']
+ ...
+ $enddovector
+
+ベクタ''VAR1'', ''VAR2'', ...の各要素をそれぞれ変数''VAR1'', ''VAR2'', ...に代入しながら,$enddovectorまでのブロックを繰り返し実行する。
+ブロックの中で変数''VAR1'', ...に代入した値は,配列に書き戻されない。
+ベクタの長さが異なる場合は,ベクタ''VAR1''の長さに揃えられる。
+''INDEX_VAR''を指定すると,配列のインデックス番号を変数''INDEX_VAR''に代入して,ブロックを実行する。
+
+*/
+//#WIKICMD     $dovector       $enddovector    wc_dovector
+void  wc_dovector (WikiLine* wl, WikiFormat* wiki) {
+    WikiMotor  motor (wl->begin, wl->end, wiki);
+    WikiMotorObjVec  objv;
+    WikiMotorObjVecVec  args;
+    std::vector<ustring>  lv;
+    boost::ptr_vector<MNodePtr>  lvv;
+    ustring  iv;
+    int  i, n, iu, it;
+    MNodePtr  h;
+    ustring  s;
+    MNode*  t;
+
+#ifdef WIKIREPEATPROTECT
+    if (wiki->protectMode && ! wl->fsuper) {
+#ifdef DEBUG
+       std::cerr << "(wiki):(protected)\n";
+#endif /* DEBUG */
+       return;
+    }
+#endif
+
+#ifdef DEBUG
+    std::cerr << "(wiki):" << ustring (wl->begin0, wl->end) << "\n";
+#endif /* DEBUG */
+    motor.compile (objv);
+    objv.splitCharA (':', args);
+    if (args.size () == 1 || args.size () == 2) {
+       WikiMotorObjVecVec  v;
+       args[0]->splitCharA (',', v);
+       for (int i = 0; i < v.size (); i ++) {
+           s = clipWhite (v[i]->textOut (wiki));
+           t = wiki->getVar (s);
+           if (isVector (t)) {
+               lv.push_back (s);
+               lvv.push_back (new MNodePtr);
+               lvv.back () = t;
+           } else {
+               wiki->errorMsg.append (CharConst ("$dovector: bad value type.\n"));
+           }
+       }
+       if (args.size () == 2) {
+           iv = clipWhite (args[1]->textOut (wiki));
+       }
+    } else {
+       wiki->errorMsg.append (CharConst ("$dovector: wrong number of parameters.\n"));
+    }
+    iu = lv.size ();
+    if (iu > 0) {
+       n = lvv[0] ()->vectorSize ();
+       for (i = 0; i < n; ++ i) {
+           for (it = 0; it < iu; ++ it) {
+               wiki->mlenv->setVar (lv[it], lvv[it] ()->vectorGet (i));
+           }
+           if (iv.size () > 0) {
+               h = newMNode_num (i);
+               wiki->mlenv->setVar (iv, h ());
+           }
+           do_linevec (wl->block, wiki);
+       }
+       for (it = 0; it < iu; ++ it) {
+           wiki->mlenv->setVar (lv[it], lvv[it] ());
+       }
+    }
+}
+
+/* ============================================================ */
+/*DOC:
 ===$block===
  $block:''EXPR''
  ...
@@ -367,7 +446,6 @@ void  wc_evalblock (WikiLine* wl, WikiFormat* wiki) {
 
     if (wl->block) {
        ustring  sexp (wl->end + 1, wl->block->back ().end + 1);
-//     std::cerr << "[" << sexp << "]\n";
 #ifdef DEBUG
        std::cerr << "(wiki): $evalblock\n";
 #endif /* DEBUG */
@@ -452,7 +530,7 @@ void  wc_insert (WikiLine* wl, WikiFormat* wiki) {
     }
     if (args.size () >= 1) {
        AutoInclCount  autoIncl (wiki->mlenv);
-       ustring  text = wiki->getVar (args[0]);
+       ustring  text = wiki->getVar_string (args[0]);
        WikiLine::linevec  bl;
        wiki->headbase += hn;
        wiki->pass1 (text, &bl, super);
index 29e183d..e02fd69 100644 (file)
@@ -9,6 +9,7 @@ class  WikiFormat;
 
 void  wc_repeat (WikiLine* wl, WikiFormat* wiki);
 void  wc_doarray (WikiLine* wl, WikiFormat* wiki);
+void  wc_dovector (WikiLine* wl, WikiFormat* wiki);
 void  wc_block (WikiLine* wl, WikiFormat* wiki);
 void  wc_setvar (WikiLine* wl, WikiFormat* wiki);
 void  wc_eval (WikiLine* wl, WikiFormat* wiki);
index 1530747..0b0a2e4 100644 (file)
@@ -1242,7 +1242,7 @@ void  WikiBlockSelect::output (MotorOutput* out) {
     out->out_raw (CharConst (">\n"));
 
     if (attrib.fdefault)
-       u = wiki->getVar (name);
+       u = wiki->getVar_string (name);
 #ifdef DEBUG2
     std::cerr << "u:" << u << uLF;
 #endif /* DEBUG */
@@ -1370,8 +1370,6 @@ void  WikiBlockDiv::output (MotorOutput* out) {
  {form:POST:''URL''
  ...
  }
-// {form:POST:id=form1:class=formclass:post.hml
-// {form:POST:post.hml:id=form1:class=formclass
  {form:POST:''URL'':target=''TargetWindow'':id=''ID'':class=''ClassName''
  ...
  }
@@ -1566,8 +1564,6 @@ static bool  findCmdSep (uiterator& b, uiterator e, uiterator& u) {
 
 int  WikiFormat::pass1_1 (Splitter& sp, ustring* elseword, ustring* endword, WikiLine::linevec* block, uiterator* elsebegin0, uiterator* elsebegin, uiterator* elseend, bool fsuper) {
     uiterator  b, e, t, u, v;
-//    umatch  m;
-//    static uregex  re_wikicmdsep ("(:)|([ \t]+$)");
 
     while (sp.next ()) {
        b = sp.begin ();
@@ -1577,15 +1573,10 @@ int  WikiFormat::pass1_1 (Splitter& sp, ustring* elseword, ustring* endword, Wik
        if (matchSkip (b, e, CharConst (kComment))) {
            // comment
        } else if (b != e && b[0] == kWikiCmd) {
-//         if (usearch (b, e, m, re_wikicmdsep)) {
-//             t = b;
-//             u = m[0].first;
-//             v = m[0].second;
            t = b;
            u = b;
            if (findCmdSep (u, e, v)) {
            } else {
-//             t = b;
                u = e;
                v = e;
            }
@@ -2037,7 +2028,7 @@ MNode*  WikiFormat::arrayToTexp (const ustring& name) {
     for (i = 1; i <= n; i ++) {
        e.append (mlenv->getAry (name, i));
     }
-    return e ();
+    return mlenv->retval = e ();
 }
 
 MNode*  WikiFormat::evalVar (const ustring& name) {
@@ -2075,20 +2066,12 @@ void  WikiFormat::wikiMotorInline (uiterator b, uiterator e, WikiMotorObjVec& an
     objv.eval (ans, this);
 }
 
-//MNode*  WikiFormat::buildArgs (WikiMotorObjVecVec::const_iterator b, WikiMotorObjVecVec::const_iterator e, bool dumpmode) {
 MNode*  WikiFormat::buildArgs (WikiMotorObjVecVec::const_iterator b, WikiMotorObjVecVec::const_iterator e) {
     MNodeList  ans;
 
-//    if (dumpmode) {
-//     for (; b < e; b ++) {
-//         ans.append (newMNode_str (new ustring ((*b)->dump ())));
-//     }
-//    } else {
-       for (; b < e; b ++) {
-//         ans.append (newMNode_str (new ustring ((*b)->textOut (this))));
-           ans.append ((*b)->toMNode (this));
-       }
-//    }
+    for (; b < e; b ++) {
+       ans.append ((*b)->toMNode (this));
+    }
     
     return ans.release ();
 }
index 65a852c..505546d 100644 (file)
@@ -627,10 +627,13 @@ class  WikiFormat {
     virtual void  outputClass (MotorOutput* out, std::vector<ustring>& classes);
     virtual void  outputSubmitScript (MotorOutput* out, const char* name, size_t len, const ustring& onclick, bool scriptcut);
     virtual void  outputNum (MotorOutput* out, const char* name, size_t len, int val);
-    virtual ustring  getVar (const ustring& name) {
+    virtual MNode*  getVar (const ustring& name) {
+       return mlenv->getVar (name);
+    };
+    virtual ustring  getVar_string (const ustring& name) {
        return mlenv->getVar_string (name);
     };
-    virtual ustring  getAry (const ustring& name, size_t i) {
+    virtual ustring  getAry_string (const ustring& name, size_t i) {
        return mlenv->getAry_string (name, i);
     };
     virtual size_t  getArySize (const ustring& name) {
@@ -638,7 +641,6 @@ class  WikiFormat {
     };
     virtual MNode*  arrayToTexp (const ustring& name);
     virtual MNode*  evalVar (const ustring& name);
-//    virtual MNode*  buildArgs (WikiMotorObjVecVec::const_iterator b, WikiMotorObjVecVec::const_iterator e, bool dumpmode = false);
     virtual MNode*  buildArgs (WikiMotorObjVecVec::const_iterator b, WikiMotorObjVecVec::const_iterator e);
     virtual void  logLispFunctionError (const ustring& msg, const ustring& cmd);
 };
index 37244d4..b5bb5e3 100644 (file)
@@ -26,6 +26,26 @@ static void  errorBadParam (WikiMotorObjVec* param, WikiFormat* wiki) {
     wiki->errorMsg.append (param->dump()).append (CharConst (": bad parameter.\n"));
 }
 
+static bool  outamp_opt (MotorOutputWiki& o, int opt, const ustring& val) {
+    switch (opt) {
+    case '/':
+       o.outamp_br (val);
+       break;
+    case '~':
+       o.outamp_nw (val);
+       break;
+    case ',':
+       o.outamp_c3 (val);
+       break;
+//   case '^':
+//     o.outamp_wbr (val);
+//     break;
+    default:
+       return false;
+    }
+    return true;
+}
+
 /* ============================================================ */
 /*DOC:
 ===強制改行===
@@ -74,25 +94,10 @@ bool  wl_getvar (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wik
     if (args->size () >= 2)
        opt = (*args)[1]->textOut (wiki);
 
-    val = fixUTF8 (wiki->getVar (var));
+    val = fixUTF8 (wiki->getVar_string (var));
     if (opt.length () > 0) {
        if (opt.length () == 1) {
-           switch (opt[0]) {
-           case '/':
-               o.outamp_br (val);
-               break;
-           case '~':
-               o.outamp_nw (val);
-               break;
-           case ',':
-               o.outamp_c3 (val);
-               break;
-//         case '^':
-//             o.outamp_wbr (val);
-//             break;
-           default:
-               return false;
-           }
+           return outamp_opt (o, opt[0], val);
        } else {
            return false;
        }
@@ -106,28 +111,138 @@ bool  wl_getvar (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wik
 /*DOC:
 ===配列展開===
  [[getarray:NAME]]
+ [[string-join:TEXT:NAME]]
 
 */
 //#WIKILINE    getarray        wl_getarray
 bool  wl_getarray (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki) {
     MotorOutputWiki  o (out);
     ustring  var;
+
+    if (args->size () == 0 || args->size () > 1)
+       return false;
+    var = (*args)[0]->textOut (wiki);
+    o.outamp (fixUTF8 (dump_to_texp (wiki->arrayToTexp (var))));
+
+    return true;
+}
+
+/*DOC:
+===ベクタ展開===
+ [[vector:NAME:i]]
+ [[vector:NAME:i:/]]
+ [[vector:NAME:i:~]]
+ [[vector:NAME:i:,]]
+ [[join:TEXT:NAME]]
+
+*/
+//#WIKILINE    vector  wl_vector
+bool  wl_vector (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki) {
+    MotorOutputWiki  o (out);
+    ustring  var;
     ustring  val;
+    size_t  i;
+    ustring  opt;
+    MNodePtr  e;
+
+    if (args->size () < 2 || args->size () > 3)
+       return false;
+    var = (*args)[0]->textOut (wiki);
+    i = to_int32 ((*args)[1]->textOut (wiki));
+    if (args->size () == 3)
+       opt = (*args)[2]->textOut (wiki);
+    e = wiki->getVar (var);
+    if (e ()) {
+       e = e ()->vectorGet (i);
+       val = fixUTF8 (to_string (e ()));
+       switch (opt.length ()) {
+       case 0:
+           o.outamp (val);
+           break;
+       case 1:
+           return outamp_opt (o, opt[0], val);
+       default:
+           return false;
+       }
+    }
+
+    return true;
+}
+
+//#WIKILINE    join    wl_join
+bool  wl_join (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki) {
+    MotorOutputWiki  o (out);
+    ustring  sep;
+    ustring  var;
+    MNodePtr  val;
     size_t  i, n;
-    MNodeList  e;
+    ustring  ans;
 
-    if (args->size () == 0 || args->size () > 1)
+    if (args->size () != 2)
+       return false;
+    sep = (*args)[0]->textOut (wiki);
+    var = (*args)[1]->textOut (wiki);
+    val = wiki->getVar (var);
+    if (isCons (val ())) {
+       MNode*  a = val ();
+       i = 0;
+       while (isCons (a)) {
+           if (i > 0)
+               ans.append (sep);
+           ans.append (to_string (a->car ()));
+           nextNode (a);
+           ++ i;
+       }
+       o.outamp (fixUTF8 (ans));
+    } else if (isVector (val ())) {
+       n = val ()->vectorSize ();
+       for (i = 0; i < n; ++ i) {
+           if (i > 0)
+               ans.append (sep);
+           ans.append (to_string (val ()->vectorGet (i)));
+       }
+       o.outamp (fixUTF8 (ans));
+    }
+    return true;
+}
+
+/*DOC:
+===テーブル展開===
+ [[table:NAME:i]]
+ [[table:NAME:i:/]]
+ [[table:NAME:i:~]]
+ [[table:NAME:i:,]]
+
+*/
+//#WIKILINE    table   wl_table
+bool  wl_table (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki) {
+    MotorOutputWiki  o (out);
+    ustring  var;
+    ustring  val;
+    ustring  key;
+    ustring  opt;
+    MNodePtr  e;
+
+    if (args->size () < 2 || args->size () > 3)
        return false;
     var = (*args)[0]->textOut (wiki);
-#if 0
-    n = wiki->mlenv->getArySize (var);
-    for (i = 1; i <= n; i ++) {
-       e.append (wiki->mlenv->getAry (var, i));
+    key = (*args)[1]->textOut (wiki);
+    if (args->size () == 3)
+       opt = (*args)[2]->textOut (wiki);
+    e = wiki->getVar (var);
+    if (e ()) {
+       e = e ()->tableGet (key);
+       val = fixUTF8 (to_string (e ()));
+       switch (opt.length ()) {
+       case 0:
+           o.outamp (val);
+           break;
+       case 1:
+           return outamp_opt (o, opt[0], val);
+       default:
+           return false;
+       }
     }
-    val = fixUTF8 (dump_to_sexp (e ()));
-    o.outamp (val);
-#endif
-    o.outamp (fixUTF8 (dump_to_texp (wiki->arrayToTexp (var))));
 
     return true;
 }
@@ -524,7 +639,8 @@ static bool  wl_input_sub (const char* type, size_t typelen, WikiMotorObjVecVec*
     attrib.output (&html);
     if (! novalue) {
        if (attrib.pdefault) {
-           wiki->outputName (&html, CharConst ("value"), wiki->getVar (name), false);
+//         wiki->outputName (&html, CharConst ("value"), wiki->getVar (name), false);
+           wiki->outputName (&html, CharConst ("value"), wiki->getVar_string (name), false);
        } else {
            wiki->outputName (&html, CharConst ("value"), arg2->textOut (wiki), false);
        }
@@ -558,7 +674,7 @@ bool  wl_input_radiocheck (const char* type, size_t typelen, WikiMotorObjVecVec*
     attrib.onclick.append (attrib.script);
     text = arg2->htmlOut (wiki);
 
-    if (attrib.pdefault && wiki->getVar (name) == value)
+    if (attrib.pdefault && wiki->getVar_string (name) == value)
        attrib.pchecked = true;
     if (text.length () > 0)
        html.out_raw (CharConst ("<label>"));
@@ -675,7 +791,7 @@ bool  wl_textarea (WikiMotorObjVecVec* args, WikiMotorObjVec* arg2, WikiMotorObj
     attrib.output (&html);
     html.out_raw (CharConst (">"));
     if (attrib.pdefault) {
-       html.out_toHTML (wiki->getVar (name));
+       html.out_toHTML (wiki->getVar_string (name));
     } else {
        html.out_toText (arg2->htmlOut (wiki));
     }
@@ -702,7 +818,7 @@ bool  wl_pad0 (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki)
        b ++;
        if (b < e) {
            t = (*b)->textOut (wiki);
-           out.push_back (WikiMotorObjPtr (new WikiMotorObjText (omitCtrl (zeroPad (n, wiki->getVar (t))))));
+           out.push_back (WikiMotorObjPtr (new WikiMotorObjText (omitCtrl (zeroPad (n, wiki->getVar_string (t))))));
            return true;
        }
     }
@@ -733,7 +849,7 @@ bool  wl_date (WikiMotorObjVecVec* args, WikiMotorObjVec* arg2, WikiMotorObjVec&
 
     if (b < e) {
        val = (*b)->textOut (wiki);
-       val = wiki->getVar (val);
+       val = wiki->getVar_string (val);
        if (val.length () > 0) {
            tm = strtol (val);
            if (arg2->size () > 0)
index 4c20929..b7e8764 100644 (file)
@@ -8,6 +8,9 @@ class  WikiMotorObjVecVec;
 
 bool  wl_getvar (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki);
 bool  wl_getarray (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki);
+bool  wl_vector (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki);
+bool  wl_join (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki);
+bool  wl_table (WikiMotorObjVecVec* args, WikiMotorObjVec& out, WikiFormat* wiki);
 bool  wl_italic (WikiMotorObjVec* arg2, WikiMotorObjVec& out, WikiFormat* wiki);
 bool  wl_bold (WikiMotorObjVec* arg2, WikiMotorObjVec& out, WikiFormat* wiki);
 bool  wl_bolditalic (WikiMotorObjVec* arg2, WikiMotorObjVec& out, WikiFormat* wiki);
index c29930f..319a274 100644 (file)
@@ -783,7 +783,7 @@ ustring  WikiMotorObjZWSP::dump () {
 
 /* ============================================================ */
 void  WikiMotorObjVar::eval (WikiMotorObjVec& ans, const WikiMotorObjPtr* self, WikiFormat* wiki) {
-    ustring  val = fixUTF8 (wiki->getVar (name));
+    ustring  val = fixUTF8 (wiki->getVar_string (name));
     MotorOutputWiki  o (ans);
 
     switch (vopt) {
@@ -810,13 +810,11 @@ void  WikiMotorObjVar::eval (WikiMotorObjVec& ans, const WikiMotorObjPtr* self,
 }
 
 ustring  WikiMotorObjVar::textOut (WikiFormat* wiki) {
-//    return fixUTF8 (omitCtrl (wiki->getVar (name)));
-    return fixUTF8 (wiki->getVar (name));
+    return fixUTF8 (wiki->getVar_string (name));
 }
 
 ustring  WikiMotorObjVar::htmlOut (WikiFormat* wiki) {
-//    ustring  val = fixUTF8 (omitCtrl (wiki->getVar (name)));
-    ustring  val = fixUTF8 (wiki->getVar (name));
+    ustring  val = fixUTF8 (wiki->getVar_string (name));
     MotorOutputString  o;
 
     switch (vopt) {
@@ -1068,7 +1066,7 @@ ustring  WikiMotorObjFuncLink::dump () {
 
 /* ============================================================ */
 void  WikiMotorObjCond::eval (WikiMotorObjVec& ans, const WikiMotorObjPtr* self, WikiFormat* wiki) {
-    ustring  v = wiki->getVar (name);
+    ustring  v = wiki->getVar_string (name);
     ustring  val = value.textOut (wiki);
     bool  c = (v == val);
     WikiMotorObjVec*  o;
@@ -1086,7 +1084,7 @@ void  WikiMotorObjCond::eval (WikiMotorObjVec& ans, const WikiMotorObjPtr* self,
 }
 
 ustring  WikiMotorObjCond::textOut (WikiFormat* wiki) {
-    ustring  v = wiki->getVar (name);
+    ustring  v = wiki->getVar_string (name);
     ustring  val = value.textOut (wiki);
     bool  c = (v == val);
 
@@ -1098,7 +1096,7 @@ ustring  WikiMotorObjCond::textOut (WikiFormat* wiki) {
 }
 
 ustring  WikiMotorObjCond::htmlOut (WikiFormat* wiki) {
-    ustring  v = wiki->getVar (name);
+    ustring  v = wiki->getVar_string (name);
     ustring  val = value.textOut (wiki);
     bool  c = (v == val);