static Grammar CreateGrammar(XmldocStyle style)
 {
     return(new SourceJavadocToXmldocGrammar(style)
     {
         LanguageFlags = LanguageFlags.Default | LanguageFlags.CreateAst,
     });
 }
Exemplo n.º 2
0
        public static JavadocInfo CreateInfo(XElement element, XmldocStyle style)
        {
            if (element == null)
            {
                return(null);
            }

            string javadoc = element.Element("javadoc")?.Value;

            var    desc                        = GetMemberDescription(element);
            string declaringJniType            = desc.DeclaringJniType;
            string declaringMemberName         = desc.DeclaringMemberName;
            var    declaringMemberJniSignature = desc.DeclaringMemberJniSignature;

            XElement[] extra = GetExtra(element, style, declaringJniType, declaringMemberName, declaringMemberJniSignature);

            if (string.IsNullOrEmpty(javadoc) && extra == null)
            {
                return(null);
            }

            var info = new JavadocInfo()
            {
                ExtraRemarks      = extra,
                Javadoc           = javadoc,
                MemberDescription = declaringMemberName == null
                                        ? declaringJniType
                                        : $"{declaringJniType}.{declaringMemberName}.{declaringMemberJniSignature}",
                XmldocStyle = style,
            };

            return(info);
        }
Exemplo n.º 3
0
        static (XElement[] Extras, XElement[] Copyright) GetExtra(XElement element, XmldocStyle style, string declaringJniType, string declaringMemberName, string declaringMemberParameterString, bool appendCopyrightExtra)
        {
            if (!style.HasFlag(XmldocStyle.IntelliSenseAndExtraRemarks))
            {
                return(null, null);
            }

            XElement javadocMetadata = null;

            while (element != null)
            {
                javadocMetadata = element.Element("javadoc-metadata");
                if (javadocMetadata != null)
                {
                    break;
                }
                element = element.Parent;
            }

            List <XElement>        extra     = null;
            IEnumerable <XElement> copyright = null;

            if (javadocMetadata != null)
            {
                var link      = javadocMetadata.Element("link");
                var urlPrefix = (string)link.Attribute("prefix");
                var linkStyle = (string)link.Attribute("style");
                var kind      = ParseApiLinkStyle(linkStyle);

                XElement docLink = null;
                if (!string.IsNullOrEmpty(urlPrefix))
                {
                    docLink = CreateDocLinkUrl(kind, urlPrefix, declaringJniType, declaringMemberName, declaringMemberParameterString);
                }
                extra = new List <XElement> ();
                extra.Add(docLink);
                copyright = javadocMetadata.Element("copyright").Elements();
                if (appendCopyrightExtra)
                {
                    extra.AddRange(copyright);
                }
            }
            return(extra?.ToArray(), copyright?.ToArray());
        }
Exemplo n.º 4
0
        public SourceJavadocToXmldocGrammar(XmldocStyle style)
        {
            BlockTagsTerms  = new BlockTagsBnfTerms();
            InlineTagsTerms = new InlineTagsBnfTerms();
            HtmlTerms       = new HtmlBnfTerms();

            XmldocStyle = style;

            BlockTagsTerms.CreateRules(this);
            InlineTagsTerms.CreateRules(this);
            HtmlTerms.CreateRules(this);

            var remark = new NonTerminal("<html>", ConcatChildNodes)
            {
                Rule = HtmlTerms.AllHtmlTerms,
            };
            var remarks = new NonTerminal("<html>*", ConcatChildNodes);

            remarks.MakeStarRule(this, remark);

            var block = new NonTerminal("@block", ConcatChildNodes)
            {
                Rule = BlockTagsTerms.AllBlockTerms,
            };
            var blocks = new NonTerminal("@blocks", ConcatChildNodes);

            blocks.MakeStarRule(this, block);

            var root = new NonTerminal("<javadocs>", ConcatChildNodes)
            {
                Rule = remarks + blocks,
            };

            root.AstConfig.NodeCreator = (context, parseNode) => {
                FinishParse(context, parseNode);
            };

            this.Root = root;
        }
Exemplo n.º 5
0
        public static JavadocInfo CreateInfo(XElement element, XmldocStyle style, bool appendCopyrightExtra = true)
        {
            if (element == null)
            {
                return(null);
            }

            string javadoc = element.Element("javadoc")?.Value;

            var    desc                       = GetMemberDescription(element);
            string declaringJniType           = desc.DeclaringJniType;
            string declaringMemberName        = desc.DeclaringMemberName;
            var    declaringMemberParamString = desc.DeclaringMemberParameterString;

            var extras = GetExtra(element, style, declaringJniType, declaringMemberName, declaringMemberParamString, appendCopyrightExtra);

            XElement[] extra     = extras.Extras;
            XElement[] copyright = extras.Copyright;

            if (string.IsNullOrEmpty(javadoc) && extra == null)
            {
                return(null);
            }

            var info = new JavadocInfo()
            {
                ExtraRemarks      = extra,
                Copyright         = copyright,
                Javadoc           = javadoc,
                MemberDescription = declaringMemberName == null
                                        ? declaringJniType
                                        : $"{declaringJniType}.{declaringMemberName}{declaringMemberParamString}",
                XmldocStyle = style,
            };

            return(info);
        }
Exemplo n.º 6
0
        static void AddJavadoc(GenBase type, Dictionary <string, XElement> typeJavadocs, XmldocStyle style)
        {
            if (!typeJavadocs.TryGetValue(type.JniName, out XElement typeJavadoc))
            {
                return;
            }
            if (typeJavadoc == null)
            {
                return;
            }

            if (type.JavadocInfo == null)
            {
                type.JavadocInfo = JavadocInfo.CreateInfo(typeJavadoc, style);
            }

            foreach (var method in type.Methods)
            {
                if (method.JavadocInfo != null)
                {
                    continue;
                }
                var methodJavadoc = GetMemberJavadoc(typeJavadoc, "method", method.JavaName, method.JniSignature);
                method.JavadocInfo = JavadocInfo.CreateInfo(methodJavadoc?.Parent, style);
            }

            foreach (var property in type.Properties)
            {
                if (property.Getter != null && property.Getter.JavadocInfo == null)
                {
                    var getterJavadoc = GetMemberJavadoc(typeJavadoc, "method", property.Getter.JavaName, property.Getter.JniSignature);
                    property.Getter.JavadocInfo = JavadocInfo.CreateInfo(getterJavadoc?.Parent, style, appendCopyrightExtra: false);
                }
                if (property.Setter != null && property.Setter.JavadocInfo == null)
                {
                    var setterJavadoc = GetMemberJavadoc(typeJavadoc, "method", property.Setter.JavaName, property.Setter.JniSignature);
                    property.Setter.JavadocInfo = JavadocInfo.CreateInfo(setterJavadoc?.Parent, style, appendCopyrightExtra: false);
                }
            }

            foreach (var field in type.Fields)
            {
                if (field.JavadocInfo != null)
                {
                    continue;
                }
                var fieldJavadoc = GetMemberJavadoc(typeJavadoc, "field", field.JavaName, field.JniSignature);
                field.JavadocInfo = JavadocInfo.CreateInfo(fieldJavadoc?.Parent, style);
            }

            if (type is ClassGen @class)
            {
                foreach (var ctor in @class.Ctors)
                {
                    if (ctor.JavadocInfo != null)
                    {
                        continue;
                    }
                    var ctorJavadoc = GetMemberJavadoc(typeJavadoc, "constructor", null, ctor.JniSignature);
                    ctor.JavadocInfo = JavadocInfo.CreateInfo(ctorJavadoc?.Parent, style);
                }
            }
        }
 public SourceJavadocToXmldocParser(XmldocStyle style = XmldocStyle.Full)
     : base(CreateGrammar(style))
 {
     XmldocStyle = style;
 }