static Grammar CreateGrammar(XmldocStyle style) { return(new SourceJavadocToXmldocGrammar(style) { LanguageFlags = LanguageFlags.Default | LanguageFlags.CreateAst, }); }
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); }
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()); }
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; }
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); }
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; }