accessLevelsToShow = listToArray(instance.documentedAccessLevels); accessLevelLookup.remote = structNew(); accessLevelLookup.public = structNew(); accessLevelLookup.package = structNew(); accessLevelLookup.private = structNew(); for(ii in data.functions){ accessLevelLookup[data.functions[ii].method.access][ii] = data.functions[ii].method.name; } Documentation for: #data.name# //a struct to hold any additional attributes of CFCOMPONENT otherAttributes = structCopy(data); structDelete(otherAttributes,"name"); structDelete(otherAttributes,"fullname"); structDelete(otherAttributes,"hint"); structDelete(otherAttributes,"wsdlURL"); structDelete(otherAttributes,"properties"); structDelete(otherAttributes,"functions"); structDelete(otherAttributes,"CFCDOCUMETER_DATELASTMODIFIED");
BASIC INFORMATION
STANDARD INFORMATION
Name: #data.name# (#data.fullName#)
Hint: #data.hint# 
WSDL: #data.wsdlURL#
Last Modified: #dateFormat(data.CFCDOCUMETER_DATELASTMODIFIED,"long")# #timeFormat(data.CFCDOCUMETER_DATELASTMODIFIED,"HH:mm:ss")# UTC
OTHER INFORMATION
#ii#: #otherAttributes[ii]#
//make a struct that will hold any additional attributes otherAttributes = duplicate(data.properties[ii].property); structDelete(otherAttributes,"name"); structDelete(otherAttributes,"hint"); structDelete(otherAttributes,"type"); structDelete(otherAttributes,"required"); structDelete(otherAttributes,"default");
PROPERTIES
NAME TYPE REQUIRED DEFAULT IMPLEMENTED IN OTHER ATTRIBUTES
#data.properties[ii].property.name#
#data.properties[ii].property.hint#
#data.properties[ii].property.type# #data.properties[ii].property.required#  #data.properties[ii].property.default#  #data.properties[ii].implementedIn# #lcase(jj)# = #otherAttributes[jj]#
 
METHOD SUMMARY
#uCase(accessLevelsToShow[ii])# METHODS
#thisThing.method.name#( #cfcDocumenter_parameterSummaryFormat(thisThing.method.parameters[kk],kk IS 1)# )
#thisThing.method.hint#

    return type: #thisThing.method.returnType#
    [detail on: #thisThing.method.name#()]
//make a struct that will hold any additional attributes otherAttributes = duplicate(thisThing.method); structDelete(otherAttributes,"name"); structDelete(otherAttributes,"hint"); structDelete(otherAttributes,"access"); structDelete(otherAttributes,"output"); structDelete(otherAttributes,"parameters"); structDelete(otherAttributes,"returnType");
METHOD DETAILS
#thisThing.method.name#    [top]
Hint: #thisThing.method.hint#
Access: #thisThing.method.access#
Return Type: #thisThing.method.returnType#
Output: #thisThing.method.output#
Implemented In: #thisThing.implementedIn#
Arguments: //make a struct that will hold any additional attributes otherAttributes = duplicate(thisThing.method.parameters[jj]); structDelete(otherAttributes,"name"); structDelete(otherAttributes,"hint"); structDelete(otherAttributes,"type"); structDelete(otherAttributes,"required"); structDelete(otherAttributes,"default");
#thisThing.method.parameters[jj].name#
Hint: #thisThing.method.parameters[jj].hint#
Type: #thisThing.method.parameters[jj].type#
Required: #yesNoFormat(thisThing.method.parameters[jj].required)#
Default: #thisThing.method.parameters[jj].default#
Other Attributes: #lcase(kk)# = #otherAttributes[kk]#
Other Attributes: #lcase(kk)# = #otherAttributes[kk]#
This Document Created With CFCRemoteDocumenter by Nathan Dintenfass.
Unauthorized use of the content on this page is strictly prohibited.
#repeatString("
",400)#
//set up default values in the data struct allData.hint = ""; //since we can't duplicate() metaData AND since changes to meta data persist on the server, we need to do the brute-force method of getting a copy of the meta data for(ii in hierarchy[1]){ allData[ii] = hierarchy[1][ii]; } //set the dateLastModified allData.CFCDocumeter_dateLastModified = dateAdd("s",getTimeZoneInfo().utcTotalOffset,fileInfo.dateLastModified[1]); //clean up the allData struct by removing the extraneous keys structDelete(allData,"extends"); structDelete(allData,"type"); structDelete(allData,"path"); //massage the name allData.fullName = allData.name; allData.name = listLast(allData.name,"."); allData.wsdlURL = "http://" & cgi.http_host & cgi.script_name & "?wsdl"; //set up some structs to hold the data allData.properties = structNew(); allData.functions = structNew(); //loop through the ancestor hierarchy, populating the data structures //we loop backwards, so that we can override functions and properties with the "younger" components for(ii = arrayLen(hierarchy); ii GTE 1; ii = ii - 1){ structAppend(allData.properties,cfcDocumenter_getProperties(hierarchy[ii]),true); structAppend(allData.functions,cfcDocumenter_getFunctions(hierarchy[ii]),true); } //traverse the meta data, appending the array of meta data structs as we move up the inheritance hierarchy while(structKeyExists(thisMeta,"extends")){ arrayAppend(hierarchy,thisMeta); thisMeta = thisMeta.extends; } //if this metaData has properties, loop through them, populating a struct of properties if(structKeyExists(arguments.metaDataToCheck,"properties")){ for(ii = 1; ii LTE arrayLen(arguments.metaDataToCheck.properties); ii = ii + 1){ thisProperty = structNew(); //set up the defaults for thisProperty thisProperty.name = ""; thisProperty.type = ""; thisProperty.required = ""; thisProperty.default = ""; thisProperty.hint = ""; //now override with the actual values structAppend(thisProperty,arguments.metaDataToCheck.properties[ii],true); //stick this property in the theseProperties struct theseProperties[thisProperty.name] = structNew(); theseProperties[thisProperty.name].implementedIn = arguments.metaDataToCheck.name; theseProperties[thisProperty.name].property = thisProperty; } } //here are the default keys for a function argument defaultArgument.type = "any"; defaultArgument.required = false; defaultArgument.hint = ""; //if this metaData has functions, loop through them, populating a struct of functions if(structKeyExists(arguments.metaDataToCheck,"functions")){ for(ii = 1; ii LTE arrayLen(arguments.metaDataToCheck.functions); ii = ii + 1){ thisFunction = structNew(); //set up the defaults for this method thisFunction.access = "public"; thisFunction.returnType = "any"; thisFunction.output = "default"; thisFunction.hint = ""; //override with the real ones structAppend(thisFunction,arguments.metaDataToCheck.functions[ii],true); //now, we need to manually replace the parameters, so we don't mess up the meta data and to put in the defaults! thisFunction.parameters = arrayNew(1); for(jj = 1; jj LTE arrayLen(arguments.metaDataToCheck.functions[ii].parameters); jj = jj + 1){ thisParameter = arguments.metaDataToCheck.functions[ii].parameters[jj]; thisFunction.parameters[jj] = structNew(); for(kk in thisParameter){ thisFunction.parameters[jj][kk] = thisParameter[kk]; } structAppend(thisFunction.parameters[jj],defaultArgument,false); } theseFunctions[thisFunction.name] = structNew(); theseFunctions[thisFunction.name].implementedIn = arguments.metaDataToCheck.name; theseFunctions[thisFunction.name].method = thisFunction; } } //if it's not required, we'll wrap it in brackets if(NOT arguments.parameter.required){ starter = "["; ender = "]"; } //if it's NOT the first one, add a comma if(NOT arguments.isFirst){ starter = starter & ", "; } //build the string string = starter & ""; string = string & arguments.parameter.type; string = string & " "; string = string & arguments.parameter.name; //if it has a default if(structKeyExists(arguments.parameter,"default")) string = string & "=" & arguments.parameter.default & ""; string = string & ender;