public bool createFunc_work(string state, ref List <string> lines) { if (lines == null) { return(false); } for (var i = 0; i < lines.Count; i++) { var tstate = state; var line = lines[i]; var targetvalue = RegexUtil.Get1stMatch(@"\[\[.*?\]\]", line); if (string.IsNullOrEmpty(targetvalue)) { continue; } var tmp_targetvalue = targetvalue; // ::STATE_NAMEの取得 if (tmp_targetvalue.StartsWith("[[::")) { tstate = RegexUtil.Get1stMatch(@"^" + RegexUtil.VARNAME_PATTERN, tmp_targetvalue.Substring(4)); if (string.IsNullOrEmpty(tstate)) { continue; } tmp_targetvalue = tmp_targetvalue.Substring(4); if (string.IsNullOrEmpty(tmp_targetvalue)) { continue; } tmp_targetvalue = tmp_targetvalue.Substring(tstate.Length); if (string.IsNullOrEmpty(tmp_targetvalue)) { continue; } if (tmp_targetvalue[0] != ':') // [[::STATE:ITEM]]となるのが正しい { continue; } tmp_targetvalue = tmp_targetvalue.Substring(1); tmp_targetvalue = "[[" + tmp_targetvalue; //以降が期待する [[item]]の形 } var name = RegexUtil.Get1stMatch(@"[\!0-9a-zA-Z_\-]+", tmp_targetvalue); var macroname = string.Empty; var linenum = -1; var argnum = -1; var num_colon = StringUtil.CountChar(tmp_targetvalue, ':'); if (num_colon >= 1) { try { var linenumstr = RegexUtil.GetNthMatch(@":\d+", tmp_targetvalue, 1); linenumstr = linenumstr.Substring(1); linenum = int.Parse(linenumstr); } catch (SystemException e) { throw new SystemException("Unpexected! {09F04A64-E5DE-4692-8784-1D0A493715D7} " + e.Message + "\n" + line); } } if (num_colon >= 2) { try { var argnumstr = RegexUtil.GetNthMatch(@":\d+", tmp_targetvalue, 2); argnumstr = argnumstr.Substring(1); argnum = int.Parse(argnumstr); } catch (SystemException e) { throw new SystemException("Unpexected! {68DE5327-ECE6-4241-A2E3-CF9F87C9F5F1} " + e.Message + "\n" + line); } } bool?b_loweCamel_or_upper = null; if (tmp_targetvalue.Contains(">>lc")) { b_loweCamel_or_upper = true; } if (tmp_targetvalue.Contains(">>uc")) { b_loweCamel_or_upper = false; } macroname = name; if (tmp_targetvalue.Contains("->@")) { macroname = RegexUtil.Get1stMatch(@"->@.+?]", tmp_targetvalue); macroname = macroname.Substring(3); macroname = macroname.Substring(0, macroname.Length - 1); if (argnum != -1) { throw new SystemException("Macro cannot use with argnument number. { 68DE5327 - ECE6 - 4241 - A2E3 - CF9F87C9F5F1 } \n" + line); } {//nameの語尾に - があるケースがあった。targetvalueの ->のインデックスまではnameとする。 var s = (string)tmp_targetvalue; var idx = s.IndexOf("->@"); var newname = s.Substring(0, idx); name = newname.TrimStart('['); } } if (string.IsNullOrEmpty(name)) { continue; } var val = getString2(tstate, name); if (!string.IsNullOrEmpty(val) && linenum >= 0) { var tmplines = StringUtil.SplitTrimEnd(val, StringUtil._0a[0]); val = linenum < tmplines.Count ? tmplines[linenum] : string.Empty; } if (!string.IsNullOrEmpty(val) && argnum >= 0) { var args = StringUtil.SplittComma_And_ApiArges(val); val = argnum < args.Count ? args[argnum] : string.Empty; } if (b_loweCamel_or_upper != null) { var upper_or_lower = !((bool)b_loweCamel_or_upper); val = StringUtil.convert_to_camel_word(val, upper_or_lower); } if (name == "brcond") //コンディションの改行対応 { if (!string.IsNullOrEmpty(val)) { if (!string.IsNullOrEmpty(BRANCHEDIT_NEWLINECHAR)) { val = val.Replace(BRANCHEDIT_NEWLINECHAR, Environment.NewLine); } } } var replacevalue = val; var replacevalue3 = get_line_macro_value(macroname, replacevalue); // @stateマクロがあれば、各行に適用する var tmplines2 = StringUtil.ReplaceWordsInLine(line, targetvalue, replacevalue3); lines.RemoveAt(i); lines.InsertRange(i, tmplines2); return(true); } return(false); }