예제 #1
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            BaseLanguage language = this.options.Language.CastTo <BaseLanguage>();
            EnumTemplate template = (EnumTemplate)fragment;

            output.Add(template.Attributes)
            .Add(language.ClassScope)
            .Add(" enum ")
            .Add(template.Name);
            if (template.BasedOn != null)
            {
                output.Add(" : ").Add(template.BasedOn);
            }
            output.StartBlock();
            EnumValueTemplate last = template.Values.LastOrDefault();

            foreach (EnumValueTemplate enumTemplateValue in template.Values)
            {
                output.Add($"{enumTemplateValue.FormattedName} = ")
                .Add(enumTemplateValue.Value)
                .Add(last == enumTemplateValue ? string.Empty : ",")
                .BreakLine();
            }
            output.EndBlock();
        }
예제 #2
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            TypeScriptTemplate template = (TypeScriptTemplate)fragment;

            output.Add(template.Code);
            if (template.CloseAfter)
            {
                output.CloseLine();
            }
            if (template.BreakAfter)
            {
                output.BreakLine();
            }
            if (template.StartBlockAfter)
            {
                output.StartBlock();
            }
            if (template.EndBlockAfter)
            {
                output.EndBlock();
            }
            if (template.IndentAfter)
            {
                output.Indent();
            }
            if (template.UnindentAfter)
            {
                output.UnIndent();
            }
        }
예제 #3
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            LambdaTemplate template = (LambdaTemplate)fragment;

            output.Add("(");
            if (template.Parameters != null)
            {
                output.Add(template.Parameters, ", ");
            }
            else if (template.ParameterNames?.Count == 1)
            {
                output.Add(template.ParameterNames[0]);
            }
            else if (template.ParameterNames?.Count > 1)
            {
                output.Add(string.Join(", ", template.ParameterNames));
            }
            output.Add(")")
            .Add(" =>");
            if (template.Code is MultilineCodeFragment)
            {
                output.StartBlock();
            }
            else
            {
                output.Add(" ");
            }
            output.Add(template.Code);
            if (template.Code is MultilineCodeFragment)
            {
                output.EndBlock(this.options.Formatting.StartBlockInNewLine);
            }
        }
예제 #4
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            LambdaTemplate template = (LambdaTemplate)fragment;

            output.Add(template.ParameterName ?? "()")
            .Add(" =>");
            if (template.Code is MultilineCodeFragment)
            {
                output.StartBlock();
            }
            else
            {
                output.Add(" ");
            }
            output.Add(template.Code);
            if (template.Code is MultilineCodeFragment)
            {
                output.EndBlock(output.Language.Formatting.StartBlockInNewLine);
            }
        }
예제 #5
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            NamespaceTemplate template = (NamespaceTemplate)fragment;

            if (template.Children.Count == 0)
            {
                return;
            }

            bool hasNamespace = !string.IsNullOrEmpty(template.Name);

            if (hasNamespace)
            {
                output.Add($"{this.NamespaceKeyword} {template.Name}")
                .StartBlock();
            }
            output.Add(template.Children);
            if (hasNamespace)
            {
                output.EndBlock();
            }
        }
예제 #6
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            SwitchTemplate template = (SwitchTemplate)fragment;

            output.Add("switch (")
            .Add(template.Expression)
            .Add(")")
            .StartBlock();
            foreach (CaseTemplate caseTemplate in template.Cases)
            {
                output.Add(caseTemplate);
            }
            if (template.Default.Fragments.Count > 0)
            {
                output.Add("default:")
                .Indent()
                .Add(template.Default)
                .Add("break").CloseLine()
                .UnIndent();
            }
            output.EndBlock();
        }
예제 #7
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            BaseLanguage  language = this.options.Language.CastTo <BaseLanguage>();
            ClassTemplate template = (ClassTemplate)fragment;

            output.Add(template.Comment);
            output.Add(template.Attributes);
            output.Add(language.ClassScope).Add(" ");
            if (template.IsAbstract && language.HasAbstractClasses && !template.IsInterface)
            {
                output.Add("abstract ");
            }
            if (template.IsStatic && language.HasStaticClasses)
            {
                output.Add("static ");
            }
            else if (!string.IsNullOrEmpty(language.PartialKeyword))
            {
                output.Add(language.PartialKeyword).Add(" ");
            }
            if (template.IsInterface)
            {
                output.Add("interface ");
            }
            else
            {
                output.Add("class ");
            }
            output.Add(template.Name);
            if (template.Generics.Count > 0)
            {
                output.Add("<").Add(template.Generics.Select(x => Code.Instance.Type(x.Name)), ", ").Add(">");
            }
            template.BasedOn.OrderBy(x => x.ToType().IsInterface).ForEach(x => output.Add(x));
            output.Add(template.Generics.Select(x => x.ToConstraints()).Where(x => x.Types.Count > 0));
            output.StartBlock();
            if (template.IsInterface)
            {
                template.Fields.ForEach(x => x.Visibility     = Visibility.None);
                template.Properties.ForEach(x => x.Visibility = Visibility.None);
            }
            bool isFirst = true;

            if (template.Classes.Count > 0)
            {
                output.Add(template.Classes);
                isFirst = false;
            }
            if (template.Fields.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Fields);
                isFirst = false;
            }
            if (template.Properties.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Properties);
                isFirst = false;
            }
            if (template.Code != null)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Code);
                isFirst = false;
            }
            if (template.Methods.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                MethodTemplate last = template.Methods.Last();
                foreach (MethodTemplate method in template.Methods)
                {
                    output.Add(method);
                    if (method != last)
                    {
                        output.BreakLine();
                    }
                }
            }
            if (this.options.Formatting.CollapseEmptyClasses && output.LastFragments.First().Equals(template))
            {
                output.UnBreakLine();
                output.Add(this.options.Formatting.CollapsedClassesSpacer, true);
            }
            output.EndBlock();
        }