From b0a017e0dfa2766dd137ce4f2116fd26b260db53 Mon Sep 17 00:00:00 2001 From: visor Date: Tue, 16 Mar 2010 00:24:55 +0900 Subject: [PATCH] :default option of formvar functions. --- lib/util_string.cc | 8 ++++---- modules/ml-formvar.cc | 55 +++++++++++++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/lib/util_string.cc b/lib/util_string.cc index 059fd57..994f71b 100644 --- a/lib/util_string.cc +++ b/lib/util_string.cc @@ -872,9 +872,9 @@ static void format_int_sub (ustring& ans, MNode* a, std::vector& par, } } if (fzero) - s = snprintf (buf, 32, "%.*ld", p, v); + s = snprintf (buf, 32, "%.*d", p, v); else - s = snprintf (buf, 32, "%*ld", p, v); + s = snprintf (buf, 32, "%*d", p, v); if (fclip && s > p) ans.append (buf + s - p, p); else if (! fclip && fc3) @@ -907,9 +907,9 @@ static void format_int (ustring& ans, MNode* a, int c, bool pad0 = false) { if (c > 20) c = 20; if (pad0) - s = snprintf (buf, 32, "%.*ld", c, v); + s = snprintf (buf, 32, "%.*d", c, v); else - s = snprintf (buf, 32, "%*ld", c, v); + s = snprintf (buf, 32, "%*d", c, v); if (s > c) ans.append (buf + s - c, c); else diff --git a/modules/ml-formvar.cc b/modules/ml-formvar.cc index d15f948..6d991f2 100644 --- a/modules/ml-formvar.cc +++ b/modules/ml-formvar.cc @@ -19,48 +19,48 @@ */ /*DOC: ===input-text=== - (input-text VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-text VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Text - (input-text ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Text + (input-text VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-text VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Text + (input-text ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Text 指定のFORM変数から値を読み込み,Motor変数に格納するか,または,関数の戻り値として値を返す。FORM変数名の先頭に@をつけると,同じ名前で指定した複数のFORM変数を全て読み込み,@をつけないと,最初のひとつのみ読み込む。 ^#valueパラメータを指定すると,FORM変数の値は,LISP関数の戻り値として返され,指定しないと,同名のMotor変数に格納される。 ===input-textarea=== - (input-textarea VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-textarea VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Text - (input-textarea ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Text + (input-textarea VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-textarea VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Text + (input-textarea ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Text ===input-int=== - (input-int VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-int VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Number - (input-int ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Number + (input-int VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-int VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Number + (input-int ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Number ===input-real=== - (input-real VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-real VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Number - (input-real ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Number + (input-real VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-real VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Number + (input-real ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Number ===input-int-or-blank=== - (input-int-or-blank VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-int-or-blank VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Number - (input-int-or-blank ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Number + (input-int-or-blank VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-int-or-blank VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Number + (input-int-or-blank ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Number ===input-real-or-blank=== - (input-real-or-blank VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-real-or-blank VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Number - (input-real-or-blank ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Number + (input-real-or-blank VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-real-or-blank VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Number + (input-real-or-blank ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Number ===input-ascii=== - (input-ascii VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-ascii VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Text - (input-ascii ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Text + (input-ascii VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-ascii VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Text + (input-ascii ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Text ===input-bool=== - (input-bool VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> NIL - (input-bool VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> Bool - (input-bool ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA]) -> LIST_of_Bool + (input-bool VARIABLE_or_ARRAY [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> NIL + (input-bool VARIABLE [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> Bool + (input-bool ARRAY [#value | :value BOOL] [:max NUM] [#nowhite | #nw | :nowhite BOOL | :nw BOOL] [:filter REGEX] [:error-filter LAMBDA] [:default VALUE]) -> LIST_of_Bool */ @@ -72,6 +72,7 @@ class opt_t { size_t max; ustring filter; MNodePtr errFilter; + ustring defaultVal; opt_t () { fvalue = false; @@ -155,6 +156,9 @@ static void opt_filter (const ustring& name, ustring& val, opt_t& opt, MlEnv* m mlenv->env->setErrorVar (name); } } + if (opt.defaultVal.size () > 0 && val.size () == 0) { + val = opt.defaultVal; + } } static void formvar_input_readopt (MNode*& arg, MlEnv* mlenv, ustring& name, opt_t& opt) { @@ -167,6 +171,7 @@ static void formvar_input_readopt (MNode*& arg, MlEnv* mlenv, ustring& name, op {CharConst ("filter"), false}, {CharConst ("error-filter"), false}, {CharConst ("value"), true}, + {CharConst ("default"), true}, {NULL, 0, 0} }; @@ -191,6 +196,8 @@ static void formvar_input_readopt (MNode*& arg, MlEnv* mlenv, ustring& name, op } if (keywords[5]) opt.fvalue = eval_bool (keywords[5], mlenv); + if (keywords[6]) + opt.defaultVal = eval_str (keywords[6], mlenv); if (name.size () == 0) throw (uErrorVarNameEmpty); -- 2.11.0