예제 #1
0
        // 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})",
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
        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));
                    }
                }
            }
        }
        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);
                    }
                }
            }
        }