Esempio n. 1
0
 public override void Run(TextWriter writer, Class t)
 {
     if (t.Export)
     {
         writer.Append("export ");
     }
     writer.Append("class ").Append(t.Name).AppendLine("{");
     if (t.Properties != null)
     {
         foreach (var property in t.Properties)
         {
             writer.Run(writeProperty, property).WriteLine();
         }
     }
     writer.Append("}");
 }
Esempio n. 2
0
        public override void Run(TextWriter writer, Method t)
        {
            writer.Run(writeAccessModifier, t.AccessModifier).Space();
            if (t.Static)
            {
                writer.Static();
            }
            else if (t.Override)
            {
                writer.Write("override ");
            }
            else if (t.Virtual)
            {
                writer.Write("virtual ");
            }
            if (t.Async)
            {
                writer.Write("async ");
            }

            writer.Run(writeType, t.ReturnType).Space();

            writer.Append(t.Name).OpenParenthesis();
            writer.Run(writeParams, t.Parameters);
            writer.CloseParenthesis();
            writer.Run(writeCodeBlock, t.Body);
        }
Esempio n. 3
0
 public override void Run(TextWriter writer, Field field)
 {
     if (field.Modifier != AccessModifier.None)
     {
         writer.Run(writeAccessModifier, field.Modifier).Space();
     }
     if (field.Const)
     {
         writer.Const();
     }
     if (field.ReadOnly)
     {
         writer.ReadOnly();
     }
     if (field.Static)
     {
         writer.Static();
     }
     writer.Run(writeType, field.Type).Space().Append(field.Name);
     if (!string.IsNullOrEmpty(field.Value))
     {
         writer.Append(" = ").Append(field.Value);
     }
     writer.Semicolon();
 }
Esempio n. 4
0
 public override void Run(TextWriter writer, Parameter t)
 {
     if (t.Modifier == ParameterModifier.Out)
     {
         writer.Append("out ");
     }
     else if (t.Modifier == ParameterModifier.Ref)
     {
         writer.Append("ref ");
     }
     else if (t.Modifier == ParameterModifier.In)
     {
         writer.Append("in ");
     }
     writer.Run(writeType, t.Type).Space().Append("@").Append(t.Name);
 }
Esempio n. 5
0
        /// <summary>
        /// ユニット定義情報を<see cref="TextWriter"/>に書き出します。
        /// メソッド内で<see cref="IDisposable.Dispose"/>は呼び出されません。
        /// 呼び出し側で必要に応じて呼び出しを行ってください。
        /// </summary>
        /// <param name="self">レシーバ・オブジェクト</param>
        /// <param name="writer">ライター・オブジェクト</param>
        /// <param name="options">書式化オプション</param>
        public static void WriteTo(this IUnit self, TextWriter writer, FormatOptions options)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var           depth = self.FullName.Fragments.Count;
            StringBuilder b     = new StringBuilder();

            writer.AppendTabs(depth - 1, options).Append("unit=")
            .Append(self.Attributes.UnitName).Append(',')
            .Append(self.Attributes.PermissionMode).Append(',')
            .Append(self.Attributes.Jp1UserName).Append(',')
            .Append(self.Attributes.ResourceGroupName).Append(';').Append(options.NewLine)
            .AppendTabs(depth - 1, options).Append('{').Append(options.NewLine);

            foreach (IParameter p in self.Parameters)
            {
                writer.AppendTabs(depth, options).Append(p.ToString()).Append(options.NewLine);
            }

            foreach (IUnit u in self.SubUnits)
            {
                u.WriteTo(writer, options);
                writer.Append(options.NewLine);
            }

            writer.AppendTabs(depth - 1, options).Append('}');
            writer.Flush();
        }
Esempio n. 6
0
        public override void Run(TextWriter writer, Class @class)
        {
            if (@class.Imports?.Count() > 0)
            {
                foreach (var item in @class.Imports)
                {
                    writer.Append("using ").Append(item).AppendLine(";");
                }
                writer.WriteLine();
            }

            using (var scope = writer.BeginScope($"namespace {@class.Namespace}")) {
                scope.Writer.Run(writeAccessModifier, @class.AccessModifier);
                if (@class.Static)
                {
                    scope.Writer.Append(" static");
                }
                if (@class.Partial)
                {
                    scope.Writer.Append(" partial");
                }
                scope.Writer.Append(" class ").Append(@class.Name);
                if (@class.BaseClass != null)
                {
                    scope.Writer.Append(" : ").Append(@class.BaseClass.Name);
                }

                using (var childScope = scope.Writer.BeginScope()) {
                    if (@class.Constructors?.Count() > 0)
                    {
                        foreach (var constructor in @class.Constructors)
                        {
                            childScope.Writer.Run(writeConstructor, constructor).WriteLine();
                        }
                    }
                    if (@class.Fields?.Count() > 0)
                    {
                        foreach (var field in @class.Fields)
                        {
                            childScope.Writer.Run(writeField, field).WriteLine();
                        }
                    }
                    if (@class.Properties?.Count() > 0)
                    {
                        foreach (var property in @class.Properties)
                        {
                            childScope.Writer.Run(writeProperty, property).WriteLine();
                        }
                    }
                    if (@class.Methods?.Count() > 0)
                    {
                        foreach (var method in @class.Methods)
                        {
                            childScope.Writer.Run(writeMethod, method).WriteLine();
                        }
                    }
                }
            }
        }
Esempio n. 7
0
 public override void Run(TextWriter writer, DotNetType type)
 {
     if (type.IsVoid && !type.IsAsync)
     {
         writer.Append("void");
     }
     else
     {
         writer.Append(type.Name);
         if (type.IsGeneric)
         {
             if (type.GenericTypeArguments?.Count() > 0)
             {
                 writer.OpenAngleBracket();
                 bool first = true;
                 foreach (var genericType in type.GenericTypeArguments)
                 {
                     if (!first)
                     {
                         writer.Comma().Space();
                     }
                     else
                     {
                         first = false;
                     }
                     writer.Run(this, genericType);
                 }
                 writer.CloseAngleBracket();
             }
             else
             {
                 throw new CodeGenException("Missing Generic Arguments");
             }
         }
         if (type.IsArray)
         {
             writer.Append("[]");
         }
     }
 }
Esempio n. 8
0
        public override void Run(TextWriter writer, Constructor constructor)
        {
            if (constructor.Static)
            {
                writer.Static();
            }
            else
            {
                writer.Run(writeAccessModifier, constructor.AccessModifier).Space();
            }
            writer.Append(constructor.Name).OpenParenthesis();
            writer.Run(writeParams, constructor.Parameters);
            writer.CloseParenthesis();

            if (constructor.BaseConstructor != null)
            {
                writer.Append(" : ").Append(constructor.BaseConstructor.Name).OpenParenthesis();
                writer.WriteItems(constructor.Parameters, ", ", (w, item) => { w.Append("@").Append(item.Name); });
                writer.CloseParenthesis();
            }
            writer.Run(writeCodeBlock, constructor.Body);
        }
Esempio n. 9
0
 public static TextWriter WriteItems <T>(this TextWriter writer, IEnumerable <T> items, string delimiter, Action <TextWriter, T> action)
 {
     if (items != null)
     {
         int count = 0, total = items.Count();
         foreach (var item in items)
         {
             action?.Invoke(writer, item);
             count++;
             if (count != total)
             {
                 writer.Append(delimiter);
             }
         }
     }
     return(writer);
 }
Esempio n. 10
0
 static TextWriter AppendTabs(this TextWriter self, int count, FormatOptions options)
 {
     for (var i = 0; i < count; i++)
     {
         if (options.SoftTab)
         {
             for (var j = 0; j < options.TabSize; j++)
             {
                 self.Append(' ');
             }
         }
         else
         {
             self.Write('\t');
         }
     }
     return(self);
 }
Esempio n. 11
0
 /// <exception cref="System.IO.IOException"/>
 public void Write(TextWriter @out)
 {
     @out.Append(sb);
 }
Esempio n. 12
0
 public static TextWriter EscapeSql(this TextWriter writer, string content)
 {
     return(writer.Append("[").Append(content).Append("]"));
 }
Esempio n. 13
0
 public override void Run(TextWriter writer, Table source)
 {
     writer.Append("merge").Append(" [").Append(source.Schema).Append("].[").Append(source.Name).Append("] dst");
 }
Esempio n. 14
0
 public override void Run(TextWriter writer, Expression source)
 {
     writer.Append(source.Value).Space().EscapeSql(source.Alias);
 }
        private void SqlReplace(string sql, char paramPrefix, TextWriter builder, Func <string, string> replace)
        {
            char endChar   = '\0';
            int  i         = 0;
            var  paramName = new StringBuilder(32);
            int  lastWrite = 0;

            while (i < sql.Length)
            {
                if (endChar == '\0')
                {
                    switch (sql[i])
                    {
                    case '\'':
                        endChar = '\'';
                        break;

                    case '"':
                        endChar = '"';
                        break;

                    case '[':
                        endChar = ']';
                        break;

                    case '-':
                        if (i + 1 < sql.Length && sql[i + 1] == '-')
                        {
                            endChar = '\n';
                        }
                        break;

                    case '/':
                        if (i + 1 < sql.Length && sql[i + 1] == '*')
                        {
                            endChar = '/';
                        }
                        break;
                    }

                    if (sql[i] == paramPrefix)
                    {
                        builder.Append(sql.Substring(lastWrite, i - lastWrite));
                        i++;
                        paramName.Length = 0;
                        while (i < sql.Length && (Char.IsLetterOrDigit(sql[i]) || sql[i] == '_'))
                        {
                            paramName.Append(sql[i]);
                            i++;
                        }
                        builder.Append(replace.Invoke(paramName.ToString()));
                        lastWrite = i;
                        i--;
                    }
                }
                else if ((endChar == '\n' && sql[i] == '\r') ||
                         (endChar == '/' && sql[i] == '*' && i + 1 < sql.Length && sql[i + 1] == '/') ||
                         (sql[i] == endChar))
                {
                    endChar = '\0';
                }
                i++;
            }

            if ((i - lastWrite) > 0)
            {
                builder.Append(sql.Substring(lastWrite, i - lastWrite));
            }
        }