Doxygen-ProgDoc / Design / ProgDoc.rnc

default namespace = "https://bitbucket.org/alfonse/doxygen-progdoc/overview"
datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"


## Main elements and structure.
div
{
    start = pd.rootelements
    
    pd.rootelements =
        pd.codedocs
        
    pd.codedocs =
        element codedocs { pd.codedocs.content }
        
    pd.codedocs.content =
        pd.codedocs.attlist, pd.info, pd.container
        
    pd.info =
        element info { pd.info.content }
        
    pd.info.content =
        pd.info.attlist
        
    pd.lang_string =
        mixed { pd.lang_ref* }
        
    pd.lang_ref =
        element ref { pd.lang_ref.content }
        
    pd.lang_ref.content =
        pd.lang_ref.attlist

    ## Language feature descriptions.
    div
    {
        pd.container =
            element container { pd.container.content }
            
        pd.container.content =
            pd.container.attlist &
            pd.container.parent* &
            pd.container.child* &
            pd.template_list? &
            pd.property_list? &
            (pd.container*) &
            (pd.member_section*) &
            (pd.member*)
            
        pd.container.parent =
            element parent { pd.container.parent.content }
            
        pd.container.parent.content =
            pd.container.parent.attlist, pd.container.linkage*
            
        pd.container.linkage =
            element linkage { pd.container.linkage.content }
            
        pd.container.linkage.content =
            pd.container.linkage.attlist
        
        pd.container.child =
            element child { pd.container.child.content }
            
        pd.container.child.content =
            pd.container.child.attlist
            
        pd.template_list =
            element template-list { pd.template_list.content }
            
        pd.template_list.content =
            pd.template*
            
        pd.template =
            element template { pd.template.attlist, pd.template.content }
            
        pd.template.content =
            pd.template.type, pd.template.default?
            
        pd.template.type =
            element type { pd.template.type.content }
        
        pd.template.type.content =
            pd.lang_string
            
        pd.template.default =
            element default { pd.template.default.content }
            
        pd.template.default.content =
            pd.lang_string
            
        pd.property_list =
            element property-list { pd.property_list.content }
        
        pd.property_list.content =
            pd.property+
            
        pd.property =
            element property { pd.property.attlist }
            
        pd.member_section =
            element member_section { pd.member_section.attlist, pd.member_section.content }

        pd.member_section.content =
            pd.member+
            
        pd.member =
            element member { pd.member.attlist, pd.member.content }
            
        pd.member.content =
            pd.template_list? &
            pd.property_list? &
            pd.member.type? &
            pd.param_list?
        
        pd.member.type =
            element type { pd.member.type.content }
            
        pd.member.type.content =
            pd.member.type.attlist, pd.lang_string
            
        pd.param_list =
            element param-list { pd.param_list.content }
            
        pd.param_list.content =
            pd.param*
            
        pd.param =
            element param { pd.param.attlist, pd.param.content }
            
        pd.param.content =
            pd.param.type &
            pd.param.default? &
            pd.param.array? &
            pd.enum_value_list?
            
        pd.param.type =
            element type { pd.param.type.attlist, pd.param.type.content }
            
        pd.param.type.content =
            pd.lang_string
            
        pd.param.default =
            element default { pd.param.default.content }
            
        pd.param.default.content =
            pd.lang_string
            
        pd.param.array =
            element array { pd.param.array.content }
            
        pd.param.array.content =
            text | empty
            
        pd.enum_value_list =
            element enum-value-list { pd.enum_value_list.content }
            
        pd.enum_value_list.content =
            pd.enum_value+
            
        pd.enum_value =
            element enum-value { pd.enum_value.attlist, pd.enum_value.content }
            
        pd.enum_value.content =
            pd.enum.value?
            
        pd.enum.value =
            element value { pd.enum.value.content }
            
        pd.enum.value.content =
            pd.lang_string
    }
}
    


## Attributes
div
{
    pd.codedocs.attlist =
        pd.codedocs.language.attribute, pd.codedocs.version.attribute,
        pd.codedocs.tool_version.attribute?
        
    pd.codedocs.language.attribute =
        attribute language { text }
        
    pd.codedocs.version.attribute =
        attribute version { text }
    
    pd.codedocs.tool_version.attribute =
        attribute tool-version{ text }
        
    pd.info.attlist =
        pd.info.name.attribute, pd.info.version.attribute
        
    pd.info.name.attribute =
        attribute name { text }
    
    pd.info.version.attribute =
        attribute version { text }
        
    pd.lang_ref.attlist =
        pd.common.lang_ref.attribute
        
    pd.common.language.attlist =
        pd.identifier.attribute, pd.common.name.attribute, pd.common.file_ref.attribute?,
        pd.common.doc_ref.attribute?
        
    pd.container.attlist = pd.common.language.attlist, pd.container.kind.attribute
    
    pd.identifier.attribute =
        attribute xml:id { text }
    
    pd.container.name.attribute =
        attribute name { text }
        
    pd.common.file_ref.attribute =
        attribute file-ref { xsd:IDREF }
        
    pd.common.doc_ref.attribute =
        attribute doc-ref { xsd:IDREF }
        
    pd.common.lang_ref.attribute =
        attribute lang-ref { xsd:IDREF }
        
    pd.common.idref.attribute =
        attribute idref { xsd:IDREF }
        
    pd.common.name.attribute =
        attribute name { text }
        
    pd.container.kind.attribute =
        attribute kind { "class" | "struct" | "interface" | "union" | "namespace" }
        
    pd.container.parent.attlist =
        pd.common.idref.attribute
        
    pd.linkage.kind.attribute =
        attribute kind { "public" | "protected" | "private" | "virtual" }
        
    pd.container.linkage.attlist =
        pd.linkage.kind.attribute

    pd.container.child.attlist =
        pd.common.idref.attribute
        
    pd.template.attlist =
        pd.common.name.attribute?
    
    pd.property.attlist =
        pd.property.kind.attribute
        
    pd.property.kind.attribute =
        "abstract" |
        "static" |
        "mutable" |
        "virtual" |
        "pure-virtual" |
        "override" |
        "explicit" |
        "extern" |
        "volatile" |
        "const" |
        "constructor" |
        "destructor" |
        "public" |
        "final" |
        "protected" |
        "internal" |
        "package" |
        "private" |
        "protected-internal"
        
    pd.member_section.attlist =
        pd.common.language.attlist
    
    pd.member.attlist =
        pd.common.language.attlist, pd.member.kind.attribute, pd.member.overrides.attribute
        
    pd.member.kind.attribute =
        attribute kind {
            "variable" |
            "property" |
            "function" |
            "typedef" |
            "delegate" |
            "event" |
            "enumeration" |
            "prototype" |
            "friend" |
            "define"
        }
    
    pd.member.overrides.attribute =
        attribute overrides { xsd:IDREF }
        
    pd.member.type.attlist =
        pd.common.doc_ref.attribute?
        
    pd.param.attlist =
        pd.param.name.attribute?, pd.common.doc_ref.attribute?
        
    pd.param.name.attribute =
        attribute name { text }
        
    pd.param.type.attlist =
        pd.common.doc_ref.attribute?
        
    pd.enum_value.attlist =
        pd.common.language.attlist
}


## Utilities and Accessories
div
{
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.