//──────────────────────────────────────── /// <summary> /// このデータは、ファイルパス型だ、と想定して、ファイルパスを取得します。 /// </summary> /// <returns></returns> public Expr_Filepath Lv4Execute_OnImplement_AsFilepath( EnumHitcount request, Log_Reports log_Reports ) { return(Expr_StringImpl.Execute4_OnExpressionString_AsFilepath_Impl(this, request, log_Reports)); }
/// <summary> /// 属性。 /// </summary> /// <param name="out_E_Result">検索結果。</param> /// <param name="sName"></param> /// <param name="bRequired"></param> /// <param name="hits"></param> /// <param name="log_Reports"></param> /// <returns>検索結果が1件以上あれば真。</returns> public bool TrySelectAttribute( out Expr_String out_eResult, string sName, EnumHitcount hits, Log_Reports log_Reports ) { // 使いません。 out_eResult = new Expr_StringImpl(this, null); return(false); }
/// <summary> /// 属性。 /// </summary> /// <param name="out_E_Result">検索結果。</param> /// <param name="name"></param> /// <param name="bRequired"></param> /// <param name="hits"></param> /// <param name="log_Reports"></param> /// <returns>検索結果が1件以上あれば真。</returns> public bool TrySelectAttribute( out Expr_String eResult_Out, string name, EnumHitcount hits, Log_Reports log_Reports ) { // 使いません。 eResult_Out = new Expr_StringImpl(this, this.Conf); return(false); }
//──────────────────────────────────────── public Expr_String Compile( Log_Reports log_Reports ) { Log_Method log_Method = new Log_MethodImpl(); log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Compile", log_Reports); // String sTxtTmpl = this.Text; Conf_String parent_Cnf = new Conf_StringImpl("!ハードコーディング_TextTemplateImpl#Compile", null); Expr_StringImpl result = new Expr_StringImpl(null, parent_Cnf); int nCur = 0; while (nCur < sTxtTmpl.Length) { int nPreCur = nCur; // 開き%記号(open percent) int nOp = sTxtTmpl.IndexOf('%', nCur); if (nOp != -1) { // 開き%記号があった。 nCur = nOp + 1;//「開き%」の次へ。 // 閉じ%記号(close percent) int cp = sTxtTmpl.IndexOf('%', nCur); if (cp != -1) { // 閉じ%記号があれば。 nCur = cp + 1;//「閉じ%」の次へ。 // 「%」と「%」の間に数字があるはず。 // 「開き%」の次から、「閉じ% - 開き% - 1」文字分。(-1しないと、終了%を含んでしまう) string sMarker = sTxtTmpl.Substring(nOp + 1, cp - nOp - 1); // 「%1%」といった記号の数字部分。 int nParameterIndex; try { nParameterIndex = Int32.Parse(sMarker); // 開き「%」までを、まず文字列化。 int nPreLen = nOp - nPreCur; string sPre = sTxtTmpl.Substring(nPreCur, nPreLen); result.AppendTextNode( sPre, parent_Cnf, log_Reports ); // 引数から値を取得。 // %数字%を、Expression化して追加。 Expr_TexttemplateP1pImpl expr_P1p = new Expr_TexttemplateP1pImpl(null, parent_Cnf); expr_P1p.NumberP1p = nParameterIndex; expr_P1p.Dictionary_P1p = this.ParameterMap; result.ChildNodes.Add( expr_P1p, log_Reports ); // 続行。 } catch (Exception) { // 数字でないようなら。 // 今回の判定は失敗したものとして、残りの長さ全て int nRestLen = sTxtTmpl.Length - nPreCur; result.AppendTextNode( sTxtTmpl.Substring(nPreCur, nRestLen), parent_Cnf, log_Reports ); nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す) } } else { // 閉じ%がなければ。 // 今回の判定は失敗したものとして、残りの長さ全て int nRestLen = sTxtTmpl.Length - nPreCur; result.AppendTextNode( sTxtTmpl.Substring(nPreCur, nRestLen), parent_Cnf, log_Reports ); nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す) } } else { // 開き%がなければ。 // 残りの長さ全て int nRestLen = sTxtTmpl.Length - nCur; result.AppendTextNode( sTxtTmpl.Substring(nCur, nRestLen), parent_Cnf, log_Reports ); nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す) } } // // log_Method.EndMethod(log_Reports); return(result); }
//──────────────────────────────────────── /// <summary> /// 親E_Stringを遡って検索。一致するものがなければヌル。 /// </summary> /// <param name="name"></param> /// <returns></returns> public Expr_String GetParentExpressionOrNull(string name) { return(Expr_StringImpl.GetParentEOrNull_(this, name)); }