Salient Solutions

wrasslin ones and nones for fun and profit - Sky Sanders' Blog
Get your own ranked flair here
posts - 92, comments - 108, trackbacks - 0

Sandcastle Help File Builder from a POJO (plain ol' javascript object) perspective.

This work is in support of a POJO automated documentation tool that will be released shortly.

Find attached commented xml file walkthroughs of the comment.xml and reflection.org files that are consumed by Sandcastle Help File Builder to generate documentation and working samples to test these conclusions

Steps to generate docs:

C:\docGen\
C:\docGen\docGen.shfbproj
C:\docGen\Explained\
C:\docGen\Explained\comments.xml
C:\docGen\Explained\reflection.org
C:\docGen\Output\
C:\docGen\Output\docgen.org
C:\docGen\Output\docgen.xml
C:\docGen\Projects\
C:\docGen\Projects\docgen.project.xml

If uncompressed to the default directory shown, you may simply dblclick docGen.shfbproj and build the sample help file.

Otherwise you will need to change output path and working path in the Paths section of config and redirect the AjaxDoc plugin.

To take a step back and walk through configuring a SHFB project to generate JS docs:

  1. File>New Project
  2. Build section>PlugInConfigurations Dialog>Add AjaxDoc Builder plugin.
  3. Configure>
       Set AjaxDoc URL to the root of your doc project (C:\docGen) or to a virtual directory.
       Set project name to 'docGen'
       UNCHECK Regenerate the output files. We are not using Bertrands MS Ajax doc tool, just the directory structure that the plugin recognizes.
    OK>CLOSE.
  4. Paths section>
     Output Path>C:\docGen\Help
     Working Path>C:\docGen\Temp
  5. Help File section>Syntax Filters>
    uncheck all but JScript. This is as close as it gets.
  6. Build the help file. 

Walkthroughs:

comments.xml

<?xml version="1.0" encoding="utf-8"?>
<!--

// 
// salientJS JavaScript Library v1.0
// http://skysanders.net/code/salientJs/
// 
// Copyright (c) 2009 Sky Sanders - sky@skysanders.net
// Dual licensed under the MIT and GPL licenses.
// http://skysanders.net/code/salientJs/license.txt
//
    COMMENTS.XML FILE WALKTHROUGH
  
    The comments file and reflection file are used in tandem to generate documentation.

    Each <member/> element in this file will be referenced by an <api/> element in the 
    reflection file for documentation.

    This represents the minimum content required in the comments file to generate Javascript 
    Documentation using Sandcastle/SHFB/AjaxDocPlugin.


    While salient.docGen will extract and SHFB and Sandcastle will recognize and render 
    the full compliment of xml doc comments (http://msdn.microsoft.com/en-us/library/b2s063f7.aspx),
    the Visual Studio JavaScript Intellisense formatter only recognizes summary, param, field, 
    value and returns. It is recommended to utilize these tags to convey relevant information 
    to the programmer and defer use of the other tags for supplemental information. 
    
    Informative documentation regarding the format and implementation of the comments and reflection 
    file schemas can be found at (insert the documents i was unable to find here. lolz)

    NOTE: version 1 of salient.docGen does not traverse inheritance. All type members are explicitely 
    documented on the type. Typically non-overridden inherited members are referenced in the elements 
    node of the declaration.

-->
<doc>
  <members>

    <!-- 
      PROJECT SUMMARY

      Note: if specified in the comments file AND in the SHFB Gui both instances will be rendered. Choose one 
      location to create them.

      salient.docGen reads the project summary from the project.xml file and namespace summary from the 
      project.xml and the xml comments in the namespace object itself giving priority to the source code.

      This is to enable documentation of object literal namespace declarations and any static fields they might 
      expose as an object literal does not expose source code for parsing of comments.

    -->

    <member name="R:Project">
      <summary>{project summary}</summary>
    </member>

    <!-- 
      NAMESPACE SUMMARY see PROJECT SUMMARY
    -->
    
    <member name="N:{namespace}">
      <summary>{namespace summary}</summary>
    </member>

    <!-- 
      TYPE COMMENTS
    -->

    <member name="T:{namespace}.{type}">
      <summary>{type summary}</summary>
    </member>

    <!-- 
      METHOD COMMENTS

      If the method accepts params the param types should be included in the signature. e.g. 

      <member name="M:mynamespace.myclass.mymethod(String,Boolean)">

      The javascript syntaxGenerator and Visual Studio JavaScript Intellisense formatter do not 
      provide for optional params that are so prevelant in js code. 

      Specify in the param description  that a param is optional and in the summary what behavior 
      to expect.

      This applies to constructor methods as well.

    -->

    <!-- 
      METHOD COMMENTS
    -->

    <member name="M:{namespace}.{type}.{method}{signature}">
      <summary>{method summary}</summary>
      <param name="{param}">{param description}</param>
      <returns>{return summary}</returns>
      <exception cref="T:{type}">{error description}</exception>
    </member>

    <!-- 
      CONSTRUCTOR COMMENTS
    -->

    <member name="M:{namespace}.{type}.#ctor">
      <summary>{.ctor summary}</summary>
    </member>

    <!-- 
      FIELD COMMENTS
    -->

    <member name="F:{namespace}.{type}.{field}">
      <summary>{field summary}</summary>
    </member>


    <!-- 
      STATIC NAMESPACE STATIC METHOD AND FIELD HACK
      
      JavaScript 'namespaces' are objects and as such can and do contain static methods and fields.

      These can be documented in a limited fashion by declaring the method or field as a type (T:). 
      
      This will result in the method or field being listed as a direct child of the namespace in the TOC.

      The limitation of this hack is that in the namespace content page there is not a section for 
      methods and fields, only classes, enums, interfaces etc. 
      
      So the only place the method or field is discoverable is in the TOC, Index and search. In that they are 
      immediate children of the namespace this seems to be an acceptable concession.

      Also be aware that VS intellisense formatter does not parse comments for object literals.

      An alternative is to create a static type of the same name as the namespace.
      
      This will give full discovery. 

      Short version of preceding text: declare static methods and fields as types (T:) and omit the typename 
      in the name attribute effectively hanging them directly off the namespace.
    -->
    
    <member name="T:{namespace}.{method}{signature}">
      <summary>{method summary}</summary>
      <param name="{param}">{param description}</param>
    </member>

    <member name="T:{namespace}.{field}">
      <summary>{field summary}</summary>
    </member>

    <member name="T:{namespace}.{field}">
      <summary>{field summary}</summary>
    </member>


  </members>
</doc>

reflection.org

lt;?xml version="1.0" encoding="utf-8"?>
<!--
  
  
  
// 
// salientJS JavaScript Library v1.0
// http://skysanders.net/code/salientJs/
// 
// Copyright (c) 2009 Sky Sanders - sky@skysanders.net
// Dual licensed under the MIT and GPL licenses.
// http://skysanders.net/code/salientJs/license.txt
//


    REFLECTION.ORG FILE WALKTHROUGH FROM A JAVASCRIPT DOCUMENTATION PERSPECTIVE
  
    The comments file and reflection file are used in tandem to generate documentation.

 
    Each <api/> element in this file will look for a <member/> element in the comments 
    file for documentation.

    This represents the minimum content required in the comments file to generate Javascript 
    Documentation using Sandcastle/SHFB/AjaxDocPlugin.


    While salient.docGen will extract and SHFB and Sandcastle will recognize and render 
    the full compliment of xml doc comments (http://msdn.microsoft.com/en-us/library/b2s063f7.aspx),
    the Visual Studio JavaScript Intellisense formatter only recognizes summary, param, field, 
    value and returns. It is recommended to utilize these tags to convey relevant information 
    to the programmer and defer use of the other tags for supplemental information. 
    
    Informative documentation regarding the format and implementation of the comments and reflection 
    file schemas can be found at (insert the documents i was unable to find here. lolz)

    NOTE: version 1 of salient.docGen does not traverse inheritance. All type members are explicitely 
    documented on the type. Typically non-overridden inherited members are referenced in the elements 
    node of the declaration.

-->
<reflection>
  <apis>

    <!-- 
      NAMESPACE REFLECTION
    -->
    <api id="N:{namespace}">
      <apidata name="{namespace}" group="namespace"/>
      <elements>
        <element api="T:{namespace}.{type}"/>
        <element api="T:{namespace}.{method}{signature}"/>
        <element api="T:{namespace}.{field}"/>
        <!-- 
          to hang static members directly off the namespace object declare the member as a type (T:) and
          set both container element to point to N:{namespace}. See hack notes at the end of this document 
          for gory details.
        -->
        <element api="T:{method}{signature}"/>
        <element api="T:{field}"/>

      </elements>
    </api>

    <!-- 
      TYPE REFLECTION

      Static and instance types are declared similarly with the exception of the typedata.static attribute.

      From a documentation generation perspective this flag has no effect. For clarity perhaps it should be 
      set if the class is static.

      On the other hand, the static flag on methods and fields DO render a static 's' in the docs.
      
    -->

    <api id="T:{namespace}.{type}">
      <apidata name="{type}" group="type" subgroup="class"/>
      <!-- note static attribute. -->
      <typedata visibility="public" static="false"/>
      <family>
        <ancestors>
          <!-- 
          Optional. Ancestors are listed in ascending order. 
          i.e. closest base class first.
          -->
          <type api="T:{namespace}.{type}" ref="true"/>
          <type api="T:{type}" ref="true"/>
        </ancestors>
      </family>
      <elements>
        <!-- type members -->
        <element api="M:{namespace}.{type}.#ctor" />
        <element api="M:{namespace}.{type}.{method}{signature}"/>
        <element api="F:{namespace}.{type}.{field}"/>
      </elements>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
      </containers>
    </api>


    <!-- 
      METHOD REFLECTION

      Static and instance methods are declared similarly with the exception of the memberdata.static 
      attribute.

      If the method accepts params the param types should be included in the signature. e.g. 

      <member name="M:mynamespace.myclass.mymethod(String,Boolean)">

      The javascript syntaxGenerator and Visual Studio JavaScript Intellisense formatter do not 
      provide for optional params that are so prevelant in js code. Specify in the param description
      that a param is optional and in the summary what behavior to expect.

      This applies constructor methods as well.

      The method names of the constructor(s) is an ummutable #ctor and .ctor. The method belongs to 
      the constructor subgroup and is marked special. 

      Method signature and params follow the same pattern as normal method declaraions.

      Of course multiple constructors are possible and would be very nice in the documentation. What 
      is needed is a  convention for documenting it. 

      TODO: add special case for method comment blocks and extract multiple blocks if they are seperated 
      by the constant /* OVERLOADS */

    -->

    <api id="M:{namespace}.{type}.{method}{signature}">
      <apidata name="{method}" group="member" subgroup="method"/>

      <!-- note static attribute. 
        All methods on a static class should be marked static.
      -->
      <memberdata visibility="public" static="{static}"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="{param}">
          <type api="T:{type}" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="T:{namespace}.{type}" ref="true"/>
      </containers>
    </api>

    <!-- 
      CONSTRUCTOR METHOD REFLECTION
    -->

    <api id="M:{namespace}.{type}.#ctor">
      <apidata name=".ctor" group="member" subgroup="constructor" />
      <memberdata visibility="public" special="true"/>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="T:{namespace}.{type}" ref="true"/>
      </containers>
    </api>


    <!-- 
       FIELD REFLECTION
       
       Static and instance fields are declared similarly with the exception of th fielddata.static attribute.
       
     -->

    <api id="F:{namespace}.{type}.{field}">
      <apidata name="{field}" group="member" subgroup="field"/>
      <!-- note 'static' attribute -->
      <memberdata visibility="public" static="{static}"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:{type}" ref="true"/>
      </returns>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="T:{namespace}.{type}" ref="true"/>
      </containers>
    </api>

    <!-- 
      CONSTANT FIELD REFLECTION

      A constant field is a static literal field with a return value type.
    -->
    <api id="F:{namespace}.{type}.{field}">
      <apidata name="{field}" group="member" subgroup="field"/>
      <!-- note 'static' attribute -->
      <memberdata visibility="public" static="true"/>
      <!-- note 'literal' attribute -->
      <fielddata literal="true" />
      <returns>
        <type api="T:{type}" ref="false"/>
      </returns>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="T:{namespace}.{type}" ref="false"/>
      </containers>
    </api>

    <!-- 
      ENUM REFLECTION
    -->

    <api id="T:{namespace}.{type}">
      <apidata name="{type}" group="type" subgroup="enumeration"/>
      <typedata visibility="public"/>
      <elements>
        <element api="F:{namespace}.{type}.{field}"/>
        <!-- repeat -->
      </elements>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
      </containers>
    </api>

    <!-- 
      ENUM FIELD REFLECTION

      An enum field is simply a static literal (constant) field.

      <returns/> element is not required for enum fields.
    -->
    <api id="F:{namespace}.{type}.{field}">
      <apidata name="{field}" group="member" subgroup="field"/>
      <!-- note 'static' attribute -->
      <memberdata visibility="public" static="true"/>
      <!-- note 'literal' attribute -->
      <fielddata literal="true" />
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="T:{namespace}.{type}" ref="false"/>
      </containers>
    </api>



    <!-- 
    STATIC NAMESPACE STATIC METHOD AND FIELD HACK
    
    
    JavaScript 'namespaces' are objects and as such can and do contain static methods and fields.

    These can be documented in a limited fashion by declaring the method or field as a type (T:). 
    This will result in the method or field being listed as a direct child of the namespace in the TOC.

    The limitation of this hack is that in the namespace content page there is not a section for methods 
    and fields, only classes, enums, interfaces etc. So the only place the method or field is discoverable 
    is in the TOC, Index and search. In that they are immediate children of the namespace this seems to
    be an acceptable concession.

    Also be aware that VS intellisense formatter does not parse comments for object literals.

    An alternative is to create a static type of the same name as the namespace. This will give full discovery. 

    Short version of preceding text: declare static methods and fields as types (T:) and omit the typename in 
    the name attribute effectively hanging them directly off the namespace.
    -->

    <api id="T:{namespace}.{method}{signature}">
      <apidata name="{method}" group="member" subgroup="method"/>
      <memberdata visibility="public" static="true"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="{param}">
          <type api="T:{type}" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="N:{namespace}" ref="true"/>
      </containers>
    </api>

    <!-- 
      STATIC NAMESPACE FIELD HACK REFLECTION
    -->

    <api id="T:{namespace}.{field}">
      <apidata name="{field}" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="false" />
      <returns>
        <type api="T:{type}" ref="true"/>
      </returns>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="N:{namespace}" ref="true"/>
      </containers>
    </api>

    <!-- 
      STATIC NAMESPACE CONSTANT HACK REFLECTION
    -->

    <api id="T:{namespace}.{field}">
      <apidata name="{field}" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true" />
      <returns>
        <type api="T:{type}" ref="false"/>
      </returns>
      <containers>
        <library assembly="{file}" module="{project}"/>
        <namespace api="N:{namespace}"/>
        <type api="N:{namespace}" ref="false"/>
      </containers>
    </api>

  </apis>
</reflection>

Samples:

comments.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
// 
// salientJS JavaScript Library v1.0
// http://skysanders.net/code/salientJs/
// 
// Copyright (c) 2009 Sky Sanders - sky@skysanders.net
// Dual licensed under the MIT and GPL licenses.
// http://skysanders.net/code/salientJs/license.txt
//
-->
<doc>
  <members>
    
    <member name="R:Project">
      <summary>docGen example documentation</summary>
    </member>
    
    <member name="N:docGen">
      <summary>docGen is a Sandcastle helper for POJO code.</summary>
    </member>
    
    
    <member name="T:docGen.class01">
      <summary>class01 Summary</summary>
    </member>
    <member name="M:docGen.class01.#ctor">
      <summary>.ctor summary</summary>
    </member>
    <member name="M:docGen.class01.method01(String)">
      <summary>method01 summary</summary>
      <param name="arg">arg description</param>
      <returns>returns a string</returns>
      <exception cref="T:Error">Throws a javascript Error if you have been bad</exception>
    </member>
    <member name="F:docGen.class01.field01">
      <summary>field01 summary</summary>
    </member>
    <member name="M:docGen.class01.staticMethod01(String)">
      <summary>staticMethod01 summary</summary>
      <param name="arg">arg description</param>
      <returns>returns a string</returns>
      <exception cref="T:Error">Throws a javascript Error if you have been bad</exception>
    </member>
    <member name="F:docGen.class01.staticField01">
      <summary>field01 summary</summary>
    </member>
    <member name="F:docGen.class01.constantField">
      <summary>constantField summary</summary>
    </member>


    <member name="T:docGen.subClass01">
      <summary>subClass01 Summary</summary>
    </member>
    <member name="M:docGen.subClass01.#ctor">
      <summary>.ctor summary</summary>
    </member>
    <member name="M:docGen.subClass01.method01(String)">
      <summary>method01 summary</summary>
      <param name="arg">arg description</param>
      <returns>returns a string</returns>
      <exception cref="T:Error">Throws a javascript Error if you have been bad</exception>
    </member>
    <member name="F:docGen.subClass01.field01">
      <summary>field01 summary</summary>
    </member>
    <member name="M:docGen.subClass01.staticMethod01(String)">
      <summary>staticMethod01 summary</summary>
      <param name="arg">arg description</param>
      <returns>returns a string</returns>
      <exception cref="T:Error">Throws a javascript Error if you have been bad</exception>
    </member>
    <member name="F:docGen.subClass01.staticField01">
      <summary>field01 summary</summary>
    </member>
    <member name="F:docGen.subClass01.constantField">
      <summary>constantField summary</summary>
    </member>
    

    <member name="T:docGen.staticClass01">
      <summary>staticClass01 summary</summary>
    </member>
    <member name="M:docGen.staticClass01.method01(String)">
      <summary>method01 summary</summary>
      <param name="arg">arg description</param>
      <returns>returns a string</returns>
      <exception cref="T:Error">Throws a javascript Error if you have been bad</exception>
    </member>
    <member name="F:docGen.staticClass01.field01">
      <summary>field01 summary</summary>
    </member>
    <member name="F:docGen.staticClass01.constantField">
      <summary>constantField summary</summary>
    </member>



    <member name="T:docGen.enumClass01">
      <summary>An enum as easy as 1,2,3</summary>
    </member>
    <member name="F:docGen.enumClass01.field01">
      <summary>the number 1</summary>
    </member>
    <member name="F:docGen.enumClass01.field02">
      <summary>the number 2</summary>
    </member>
    <member name="F:docGen.enumClass01.field03">
      <summary>the number 3</summary>
    </member>
    
    
    <member name="T:docGen.staticNamespaceMethod(String)">
      <summary>staticNamespaceMethod summary</summary>
      <param name="arg">arg description</param>
    </member>
    
    <member name="T:docGen.staticNamespaceField">
      <summary>staticNamespaceField summary</summary>
    </member>
    
    <member name="T:docGen.namespaceConstantField">
      <summary>namespaceConstantField summary</summary>
    </member>

    
  </members>
</doc>

reflection.org

<?xml version="1.0" encoding="utf-8"?>
<!--
// 
// salientJS JavaScript Library v1.0
// http://skysanders.net/code/salientJs/
// 
// Copyright (c) 2009 Sky Sanders - sky@skysanders.net
// Dual licensed under the MIT and GPL licenses.
// http://skysanders.net/code/salientJs/license.txt
//
-->

<reflection>
  <apis>
    <api id="N:docGen">
      <apidata name="docGen" group="namespace"/>
      <elements>
        <element api="T:docGen.class01"/>
        <element api="T:docGen.subClass01"/>
        <element api="T:docGen.staticClass01"/>
        <element api="T:docGen.enumClass01"/>
        <element api="T:docGen.staticNamespaceMethod(String)"/>
        <element api="T:docGen.staticNamespaceField"/>
        <element api="T:docGen.namespaceConstantField"/>
      </elements>
    </api>
    
    
    <api id="T:docGen.class01">
      <apidata name="class01" group="type" subgroup="class"/>
      <typedata visibility="public" static="false"/>
      <family>
        <ancestors>
          <type api="T:Object" ref="true"/>
        </ancestors>
      </family>
      <elements>
        <element api="M:docGen.class01.#ctor" />
        <element api="M:docGen.class01.method01(String)"/>
        <element api="F:docGen.class01.field01"/>
        <element api="M:docGen.class01.staticMethod01(String)"/>
        <element api="F:docGen.class01.staticField01"/>
        <element api="F:docGen.class01.constantField"/>
      </elements>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
      </containers>
    </api>
    
    <api id="M:docGen.class01.#ctor">
      <apidata name=".ctor" group="member" subgroup="constructor" />
      <memberdata visibility="public" special="true"/>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="true"/>
      </containers>
    </api>
    
    <api id="M:docGen.class01.method01(String)">
      <apidata name="method01" group="member" subgroup="method"/>
      <memberdata visibility="public"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="true"/>
      </containers>
    </api>
    
    <api id="F:docGen.class01.field01">
      <apidata name="field01" group="member" subgroup="field"/>
      <memberdata visibility="public"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="true"/>
      </containers>
    </api>

    <api id="M:docGen.class01.staticMethod01(String)">
      <apidata name="staticMethod01" group="member" subgroup="method"/>
      <memberdata visibility="public" static="true"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="true"/>
      </containers>
    </api>
    <api id="F:docGen.class01.staticField01">
      <apidata name="staticField01" group="member" subgroup="field"/>
      <memberdata visibility="public"  static="true"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="true"/>
      </containers>
    </api>

    <api id="F:docGen.class01.constantField">
      <apidata name="constantField" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <returns>
        <type api="T:String" ref="false"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.class01" ref="false"/>
      </containers>
    </api>


    <api id="T:docGen.subClass01">
      <apidata name="subClass01" group="type" subgroup="class"/>
      <typedata visibility="public" static="false"/>
      <family>
        <ancestors>
          <type api="T:docGen.class01" ref="true"/>
          <type api="T:Object" ref="true"/>
        </ancestors>
      </family>
      <elements>
        <element api="M:docGen.subClass01.#ctor" />
        <element api="M:docGen.subClass01.method01(String)"/>
        <element api="F:docGen.subClass01.field01"/>
        <element api="M:docGen.subClass01.staticMethod01(String)"/>
        <element api="F:docGen.subClass01.staticField01"/>
        <element api="F:docGen.subClass01.constantField"/>
      </elements>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
      </containers>
    </api>

    <api id="M:docGen.subClass01.#ctor">
      <apidata name=".ctor" group="member" subgroup="constructor" />
      <memberdata visibility="public" special="true"/>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="true"/>
      </containers>
    </api>

    <api id="M:docGen.subClass01.method01(String)">
      <apidata name="method01" group="member" subgroup="method"/>
      <memberdata visibility="public"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="true"/>
      </containers>
    </api>

    <api id="F:docGen.subClass01.field01">
      <apidata name="field01" group="member" subgroup="field"/>
      <memberdata visibility="public"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="true"/>
      </containers>
    </api>

    <api id="M:docGen.subClass01.staticMethod01(String)">
      <apidata name="staticMethod01" group="member" subgroup="method"/>
      <memberdata visibility="public" static="true"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="true"/>
      </containers>
    </api>
    <api id="F:docGen.subClass01.staticField01">
      <apidata name="staticField01" group="member" subgroup="field"/>
      <memberdata visibility="public"  static="true"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="true"/>
      </containers>
    </api>

    <api id="F:docGen.subClass01.constantField">
      <apidata name="constantField" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <returns>
        <type api="T:String" ref="false"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.subClass01" ref="false"/>
      </containers>
    </api>


















    <api id="T:docGen.staticClass01">
      <apidata name="staticClass01" group="type" subgroup="class"/>
      <typedata visibility="public"/>
      <family>
        <ancestors>
          <type api="T:Object" ref="true"/>
        </ancestors>
      </family>

      <elements>
        <element api="M:docGen.staticClass01.method01(String)"/>
        <element api="F:docGen.staticClass01.field01"/>
        <element api="F:docGen.staticClass01.constantField"/>
      </elements>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
      </containers>
    </api>
    <api id="M:docGen.staticClass01.method01(String)">
      <apidata name="method01" group="member" subgroup="method"/>
      <memberdata visibility="public" static="true"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.staticClass01" ref="true"/>
      </containers>
    </api>
    <api id="F:docGen.staticClass01.field01">
      <apidata name="field01" group="member" subgroup="field"/>
      <memberdata visibility="public"  static="true"/>
      <fielddata literal="false"/>
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.staticClass01" ref="true"/>
      </containers>
    </api>
    
    <api id="F:docGen.staticClass01.constantField">
      <apidata name="constantField" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <returns>
        <type api="T:String" ref="false"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.staticClass01" ref="false"/>
      </containers>
    </api>


    <api id="T:docGen.enumClass01">
      <apidata name="enumClass01" group="type" subgroup="enumeration"/>
      <typedata visibility="public"/>
      <family>
        <ancestors>
          <type api="T:Object" ref="true"/>
        </ancestors>
      </family>

      <elements>
        <element api="F:docGen.enumClass01.field01"/>
        <element api="F:docGen.enumClass01.field02"/>
        <element api="F:docGen.enumClass01.field03"/>
      </elements>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
      </containers>
    </api>
    <api id="F:docGen.enumClass01.field01">
      <apidata name="field01" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.enumClass01" ref="false"/>
      </containers>
    </api>
    <api id="F:docGen.enumClass01.field02">
      <apidata name="field02" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.enumClass01" ref="false"/>
      </containers>
    </api>
    <api id="F:docGen.enumClass01.field03">
      <apidata name="field03" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="T:docGen.enumClass01" ref="false"/>
      </containers>
    </api>
    
    
    <api id="T:docGen.staticNamespaceMethod(String)">
      <apidata name="staticNamespaceMethod" group="member" subgroup="method"/>
      <memberdata visibility="public" static="true"/>
      <proceduredata virtual="false"/>
      <parameters>
        <parameter name="arg">
          <type api="T:String" ref="true"/>
        </parameter>
      </parameters>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="N:docGen" ref="true"/>
      </containers>
    </api>
    <api id="T:docGen.staticNamespaceField">
      <apidata name="staticNamespaceField" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="false"  />
      <returns>
        <type api="T:String" ref="true"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="N:docGen" ref="true"/>
      </containers>
    </api>

    <api id="T:docGen.namespaceConstantField">
      <apidata name="namespaceConstantField" group="member" subgroup="field"/>
      <memberdata visibility="public" static="true"/>
      <fielddata literal="true"  />
      <returns>
        <type api="T:String" ref="false"/>
      </returns>
      <containers>
        <library assembly="source.js" module="docGen"/>
        <namespace api="N:docGen"/>
        <type api="N:docGen" ref="false"/>
      </containers>
    </api>


  </apis>
</reflection>




Print | posted on Wednesday, July 29, 2009 5:26 PM |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 8 and type the answer here:

Powered by: