// this is inefficient without a stringBuilder, but only used for dev work and changing it to use one isn't straightforward. private static string Serialize(Doc document, string indent) { var newLine = Environment.NewLine; var nextIndent = indent + " "; string PrintIndentedDocTree(Doc doc) { return Serialize(doc, nextIndent); } string PrintConcat(Concat concatToPrint) { var result = indent + "Doc.Concat("; if (concatToPrint.Contents.Count > 0) { result += newLine; } for (var x = 0; x < concatToPrint.Contents.Count; x++) { var printResult = PrintIndentedDocTree(concatToPrint.Contents[x]); result += printResult; if (x < concatToPrint.Contents.Count - 1) { result += "," + newLine; } } result += newLine + indent + ")"; return result; } return document switch { NullDoc => indent + "Doc.Null", StringDoc { IsDirective: true } directive => $"{indent}Doc.Directive({directive.Value.Replace("\"", "\\\"")})", StringDoc stringDoc => indent + "\"" + stringDoc.Value.Replace("\"", "\\\"") + "\"", HardLine hardLine => indent + "Doc.HardLine" + (hardLine.Squash ? "IfNoPreviousLine" : string.Empty) + (hardLine.SkipBreakIfFirstInGroup ? "SkipBreakIfFirstInGroup" : string.Empty), LiteralLine => indent + "Doc.LiteralLine", Concat concat => PrintConcat(concat), LineDoc lineDoc => indent + (lineDoc.Type == LineDoc.LineType.Normal ? "Doc.Line" : "Doc.SoftLine"), BreakParent => "", Align align => $"{indent}Doc.Align({align.Width}, {PrintIndentedDocTree(align.Contents)})", Trim => $"{indent}Doc.Trim", ForceFlat forceFlat => $"{indent}Doc.ForceFlat({newLine}{PrintIndentedDocTree(forceFlat.Contents)})", IndentDoc indentDoc => $"{indent}Doc.Indent({newLine}{PrintIndentedDocTree(indentDoc.Contents)}{newLine}{indent})", ConditionalGroup conditionalGroup => $"{indent}Doc.ConditionalGroup({newLine}{PrintIndentedDocTree(conditionalGroup.Contents)}{newLine}{indent})", Group group => @$"{indent}Doc.Group{(@group.GroupId != null ? "WithId" : string.Empty)}( {(@group.GroupId != null ? $"{nextIndent}\"{@group.GroupId}\",{newLine}" : string.Empty)}{PrintIndentedDocTree(@group.Contents)}{newLine}{indent})",
protected void btnSave_Click(object sender, EventArgs e) { var groupName = txtGroupName.Text; var description = txtDescript.Text; var condition = txtCondition.Value; if (groupName.Trim() == "") { ClientScript.RegisterStartupScript(this.GetType(), "errorAlert", "alert('名称不能为空!');", true); } else { if (condition.Trim() == "") { ClientScript.RegisterStartupScript(this.GetType(), "errorAlert", "alert('条件不能为空!');", true); } else { try { var result = Common.GetCalculatedGroupMembers(condition); using (TransactionScope scope = TransactionScopeFactory.Create()) { ConditionalGroup group = null; if (_GroupID.IsNotEmpty()) { group = ConditionalGroupAdapter.Instance.Load(p => p.AppendItem("GroupID", _GroupID)).FirstOrDefault(); } else { group = new ConditionalGroup(); group.GroupID = UuidHelper.NewUuidString(); } group.Name = groupName; group.Description = description; group.Condition = condition; group.CalculateTime = DateTime.Now; ConditionalGroupAdapter.Instance.Update(group); GroupAndMemberAdapter.Instance.DeleteByGroupID(group.GroupID); foreach (var member in result) { GroupAndMember gm = new GroupAndMember(); gm.GroupID = group.GroupID; gm.MemberID = member.MemberID; GroupAndMemberAdapter.Instance.Update(gm); } scope.Complete(); } ClientScript.RegisterStartupScript(this.GetType(), "success", "alert('保存成功'); window.returnValue = true; window.close();", true); } catch (Exception ex) { ClientScript.RegisterStartupScript(this.GetType(), "errorAlert", "alert('发生错误,原因:" + ex.Message.Replace("\'", "") + "');", true); } } } }
public void loadEntriesFromFile(string filename) { string[] allFileLines = System.IO.File.ReadAllLines(filename); int oneTimeIndex = 0; for (int i = 0; i < allFileLines.Length; i++) { string fileLine = allFileLines[i].Trim(); if (fileLine.Length == 0) continue; if (fileLine.StartsWith("#if ")) { ConditionalGroup condLines = new ConditionalGroup(); condLines.statement = fileLine.Substring("#if ".Length).Trim(); bool once_on = false; for (int j = i + 1; j < allFileLines.Length; j++) { fileLine = allFileLines[j].Trim(); if (fileLine.Length == 0) continue; if (fileLine.StartsWith("#once")) { once_on = true; continue; } if (fileLine.StartsWith("#end")) { conditionalLines.Add(condLines); i = j; break; } MonologueLine mLine = new MonologueLine(fileLine); if (once_on) { mLine.oneTimeIndex = oneTimeIndex++; once_on = false; } condLines.lines.Add(mLine); } } if (fileLine.StartsWith("#default")) { for (int j = i + 1; j < allFileLines.Length; j++) { fileLine = allFileLines[j].Trim(); if (fileLine.Length == 0) continue; if (fileLine.StartsWith("#end")) { i = j; break; } defaultLines.Add(new MonologueLine(fileLine)); } } } }