コード例 #1
0
 /// <summary>
 /// Default ctor
 /// </summary>
 private CodeGenerator(TextWriter writer, IDocTypeNameResolver resolver, ICodeGeneratorContext context, TargetFramework target)
 {
     this.writer   = writer;
     this.resolver = resolver;
     this.context  = context;
     this.target   = target;
 }
コード例 #2
0
ファイル: DocDescription.cs プロジェクト: rfcclub/dot42
 /// <summary>
 /// Write as C# code.
 /// </summary>
 private void WriteAsCode(XNode node, CommentBuilder builder,  CommentSection section, bool inCode, IDocTypeNameResolver resolver)
 {
     switch (node.NodeType)
     {
         case XmlNodeType.Text:
             WriteAsCode((XText)node, section, inCode);
             break;
         case XmlNodeType.Element:
             WriteAsCode((XElement) node, builder, section, inCode, resolver);
             break;
     }
 }
コード例 #3
0
ファイル: DocDescription.cs プロジェクト: rfcclub/dot42
        /// <summary>
        /// Write as C# code.
        /// </summary>
        public void WriteAsCode(TextWriter writer, string indent, IDocTypeNameResolver resolver, string originalJavaName)
        {
            if (element == null)
                return;

            var builder = new CommentBuilder();
            foreach (var child in element.Nodes())
            {
                WriteAsCode(child, builder, builder.Summary, false, resolver);
            }
            if (!string.IsNullOrEmpty(originalJavaName))
            {
                builder.JavaName.Write(originalJavaName);
            }
            builder.WriteTo(writer, indent);
        }
コード例 #4
0
ファイル: DocDescription.cs プロジェクト: yuva2achieve/dot42
        /// <summary>
        /// Write as C# code.
        /// </summary>
        public void WriteAsCode(TextWriter writer, string indent, IDocTypeNameResolver resolver, string originalJavaName)
        {
            if (element == null)
            {
                return;
            }

            var builder = new CommentBuilder();

            foreach (var child in element.Nodes())
            {
                WriteAsCode(child, builder, builder.Summary, false, resolver);
            }
            if (!string.IsNullOrEmpty(originalJavaName))
            {
                builder.JavaName.Write(originalJavaName);
            }
            builder.WriteTo(writer, indent);
        }
コード例 #5
0
ファイル: DocDescription.cs プロジェクト: rfcclub/dot42
        /// <summary>
        /// Write as C# code.
        /// </summary>
        private void WriteAsCode(XElement element, CommentBuilder builder, CommentSection section, bool inCode, IDocTypeNameResolver resolver)
        {
            string tag = null;
            string postfix = null;
            var appendNewline = false;

            if (IsEmpty(element))
                return;

            switch (element.Name.LocalName)
            {
                case "para":
                    tag = "para";
                    break;
                case "ref":
                    var id = element.GetAttribute("refid");
                    DocClass @class;
                    string name = null;
                    if (model.TryGetClassById(id, out @class))
                    {
                        name = resolver.ResolveTypeName(@class.Name);
                    }
                    if (name != null)
                    {
                        section.Write("<see cref=\"{0}\">", name);
                        postfix = "</see>";
                    } 
                    break;
                case "heading":
                    var level = element.GetAttribute("level");
                    tag = "h" + level;
                    break;
                case "preformatted":
                    tag = "pre";
                    inCode = true;
                    break;
                case "itemizedlist":
                    tag = "ul";
                    break;
                case "orderedlist":
                    tag = "ol";
                    break;
                case "listitem":
                    tag = "li";
                    break;
                case "linebreak":
                    tag = "br";
                    break;
                case "bold":
                case "emphasis":
                    tag = "b";
                    break;
                case "computeroutput":
                    tag = "code";
                    break;
                case "programlisting":
                    if (!inCode) tag = "c";
                    break;
                case "codeline":
                    if (inCode) appendNewline = true;
                    break;
                case "table":
                    tag = "table";
                    break;
                case "superscript":
                case "verbatim":
                    tag = "span";
                    break;
                case "simplesect":
                    var kind = element.GetAttribute("kind");
                    if (kind == "return") section = builder.Returns;
                    break;
                case "nonbreakablespace":
                case "sp":
                    section.Write(" ");
                    return;
                case "mdash":
                case "ndash":
                case "ulink":
                case "parameterlist":
                case "variablelist":
                case "anchor":
                    return;
                case "highlight":
                    break;
                default:
                    tag = element.Name.LocalName;
                    break;
            }

            if (tag != null)
            {
                section.Write("<{0}>", tag);
            }

            foreach (var child in element.Nodes())
            {
                WriteAsCode(child, builder, section, inCode, resolver);
            }

            if (tag != null)
            {
                section.Write("</{0}>", tag);
            }
            if (postfix != null)
            {
                section.Write("{0}", postfix);
            }
            if (appendNewline)
            {
                section.WriteLine();
            }
        }
コード例 #6
0
ファイル: DocDescription.cs プロジェクト: yuva2achieve/dot42
        /// <summary>
        /// Write as C# code.
        /// </summary>
        private void WriteAsCode(XElement element, CommentBuilder builder, CommentSection section, bool inCode, IDocTypeNameResolver resolver)
        {
            string tag           = null;
            string postfix       = null;
            var    appendNewline = false;

            if (IsEmpty(element))
            {
                return;
            }

            switch (element.Name.LocalName)
            {
            case "para":
                tag = "para";
                break;

            case "ref":
                var      id = element.GetAttribute("refid");
                DocClass @class;
                string   name = null;
                if (model.TryGetClassById(id, out @class))
                {
                    name = resolver.ResolveTypeName(@class.Name);
                }
                if (name != null)
                {
                    section.Write("<see cref=\"{0}\">", name);
                    postfix = "</see>";
                }
                break;

            case "heading":
                var level = element.GetAttribute("level");
                tag = "h" + level;
                break;

            case "preformatted":
                tag    = "pre";
                inCode = true;
                break;

            case "itemizedlist":
                tag = "ul";
                break;

            case "orderedlist":
                tag = "ol";
                break;

            case "listitem":
                tag = "li";
                break;

            case "linebreak":
                tag = "br";
                break;

            case "bold":
            case "emphasis":
                tag = "b";
                break;

            case "computeroutput":
                tag = "code";
                break;

            case "programlisting":
                if (!inCode)
                {
                    tag = "c";
                }
                break;

            case "codeline":
                if (inCode)
                {
                    appendNewline = true;
                }
                break;

            case "table":
                tag = "table";
                break;

            case "superscript":
            case "verbatim":
                tag = "span";
                break;

            case "simplesect":
                var kind = element.GetAttribute("kind");
                if (kind == "return")
                {
                    section = builder.Returns;
                }
                break;

            case "nonbreakablespace":
            case "sp":
                section.Write(" ");
                return;

            case "mdash":
            case "ndash":
            case "ulink":
            case "parameterlist":
            case "variablelist":
            case "anchor":
                return;

            case "highlight":
                break;

            default:
                tag = element.Name.LocalName;
                break;
            }

            if (tag != null)
            {
                section.Write("<{0}>", tag);
            }

            foreach (var child in element.Nodes())
            {
                WriteAsCode(child, builder, section, inCode, resolver);
            }

            if (tag != null)
            {
                section.Write("</{0}>", tag);
            }
            if (postfix != null)
            {
                section.Write("{0}", postfix);
            }
            if (appendNewline)
            {
                section.WriteLine();
            }
        }
コード例 #7
0
ファイル: DocDescription.cs プロジェクト: yuva2achieve/dot42
        /// <summary>
        /// Write as C# code.
        /// </summary>
        private void WriteAsCode(XNode node, CommentBuilder builder, CommentSection section, bool inCode, IDocTypeNameResolver resolver)
        {
            switch (node.NodeType)
            {
            case XmlNodeType.Text:
                WriteAsCode((XText)node, section, inCode);
                break;

            case XmlNodeType.Element:
                WriteAsCode((XElement)node, builder, section, inCode, resolver);
                break;
            }
        }
コード例 #8
0
        /// <summary>
        /// Generate code for the given types.
        /// </summary>
        public static void Generate(string folder, List <NetTypeDefinition> types, List <NetCustomAttribute> assemblyAttributes, IDocTypeNameResolver resolver, ICodeGeneratorContext context, TargetFramework target)
        {
            // Clean
            foreach (var iterator in context.PossibleNamespaceRoots)
            {
                var root = iterator;
                var path = Path.Combine(folder, root + ".cs");
                File.Delete(path);
            }

            // Select namespace roots
            var roots = types.Select(context.GetNamespaceRoot).Distinct().ToList();

            // Save
            var addAssemblyAttributes = true;

            foreach (var iterator in roots)
            {
                var root = iterator;
                var path = Path.Combine(folder, root + ".cs");
                using (var writer = new StreamWriter(path, false, Encoding.UTF8, 128 * 1024))
                {
                    GenerateHeader(writer, context);
                    var selectedTypes = types.Where(x => context.GetNamespaceRoot(x) == root);
                    var generator     = new CodeGenerator(writer, resolver, context, target);
                    if (addAssemblyAttributes)
                    {
                        generator.GenerateAssemblyAttributes(assemblyAttributes);
                        addAssemblyAttributes = false;
                    }
                    generator.Generate(selectedTypes);
                }
            }
        }