Update to the documentation generation process

Include a doc update too.
This commit is contained in:
Grey-Echo 2017-05-03 16:35:34 +02:00
parent 9ca007ccf4
commit 7b2f0fda9c
25 changed files with 2695 additions and 174 deletions

View File

@ -3,6 +3,6 @@
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
</listAttribute>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/Moose_Framework/Utils/luadocumentor.bat}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/Moose_Framework/Utils/GenerateDocumentations.bat}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Moose_Framework/Utils}"/>
</launchConfiguration>

View File

@ -0,0 +1,13 @@
@echo off
:: Generate Luadocumentor documentation
echo Generating LuaDocumentor Documentation
echo --------------------------------------
call luadocumentor.bat
:: Generate Slate documentation
echo Generating Slate Documentation
echo ------------------------------
cd "Slate Documentation Generator"
call Generate.bat
cd ..

View File

@ -0,0 +1,10 @@
:: Generate the Markdown doc
"./bin/SlateDocGenerator2.exe" "../../../MOOSE/Moose Development/Moose" ../../../slate/source
:: Do some cleanup
del /s /q "TreeHierarchySorted.csv"
del /s /q "FuctionList.txt"
rmdir /s /q "./bin/TEMP"
:: Copy the Images that go with the documentation
robocopy ../../docs/Presentations ../../../slate/source/includes/Pictures /MIR /NJH /NJS

View File

@ -0,0 +1,35 @@
@K=function, @M=Task_A2G, @N=onafterRouteToRendezVous, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua, @C=5129,
@K=function, @M=Task_A2G, @N=OnAfterArriveAtRendezVous, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua, @C=5789,
@K=function, @M=Task_A2G, @N=onafterEngage, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua, @C=6186,
@K=function, @M=Task_A2G, @N=onafterRouteToTarget, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua, @C=6508,
@K=function, @M=Task_A2G, @N=onafterRouteToTargets, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua, @C=7380,
@K=function, @M=Task_Cargo, @N=onenterWaitingForCommand, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=10431,
@K=function, @M=Task_Cargo, @N=OnLeaveWaitingForCommand, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=12652,
@K=function, @M=Task_Cargo, @N=onafterRouteToPickup, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=13428,
@K=function, @M=Task_Cargo, @N=onafterArriveAtPickup, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=13882,
@K=function, @M=Task_Cargo, @N=onafterRouteToDeploy, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=14310,
@K=function, @M=Task_Cargo, @N=onafterArriveAtDeploy, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=14757,
@K=function, @M=Task_Cargo, @N=onafterLand, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=15187,
@K=function, @M=Task_Cargo, @N=onafterLanded, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=16069,
@K=function, @M=Task_Cargo, @N=onafterPrepareBoarding, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=16762,
@K=function, @M=Task_Cargo, @N=onafterBoard, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=17166,
@K=function, @M=Task_Cargo, @N=onafterBoarded, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=18074,
@K=function, @M=Task_Cargo, @N=onafterPrepareUnBoarding, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=18704,
@K=function, @M=Task_Cargo, @N=onafterUnBoard, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=19134,
@K=function, @M=Task_Cargo, @N=onafterUnBoarded, @P=Fsm, @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua, @C=19788,
@K=function, @M=Designate, @N=OnBeforeLaseOn, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=12232,
@K=function, @M=Designate, @N=OnAfterLaseOn, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=12480,
@K=function, @M=Designate, @N=LaseOn, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=12701,
@K=function, @M=Designate, @N=__LaseOn, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=12824,
@K=function, @M=Designate, @N=OnBeforeLaseOff, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=13114,
@K=function, @M=Designate, @N=OnAfterLaseOff, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=13364,
@K=function, @M=Designate, @N=LaseOff, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=13587,
@K=function, @M=Designate, @N=__LaseOff, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=13712,
@K=function, @M=Designate, @N=OnBeforeSmoke, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=13944,
@K=function, @M=Designate, @N=OnAfterSmoke, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=14190,
@K=function, @M=Designate, @N=Smoke, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=14409,
@K=function, @M=Designate, @N=__Smoke, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=14530,
@K=function, @M=Designate, @N=OnBeforeStatus, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=15628,
@K=function, @M=Designate, @N=OnAfterStatus, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=15876,
@K=function, @M=Designate, @N=Status, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=16097,
@K=function, @M=Designate, @N=__Status, @P=DESIGNATE , @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua, @C=16220,
1 @K=function @M=Task_A2G @N=onafterRouteToRendezVous @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua @C=5129
2 @K=function @M=Task_A2G @N=OnAfterArriveAtRendezVous @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua @C=5789
3 @K=function @M=Task_A2G @N=onafterEngage @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua @C=6186
4 @K=function @M=Task_A2G @N=onafterRouteToTarget @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua @C=6508
5 @K=function @M=Task_A2G @N=onafterRouteToTargets @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_A2G.lua @C=7380
6 @K=function @M=Task_Cargo @N=onenterWaitingForCommand @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=10431
7 @K=function @M=Task_Cargo @N=OnLeaveWaitingForCommand @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=12652
8 @K=function @M=Task_Cargo @N=onafterRouteToPickup @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=13428
9 @K=function @M=Task_Cargo @N=onafterArriveAtPickup @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=13882
10 @K=function @M=Task_Cargo @N=onafterRouteToDeploy @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=14310
11 @K=function @M=Task_Cargo @N=onafterArriveAtDeploy @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=14757
12 @K=function @M=Task_Cargo @N=onafterLand @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=15187
13 @K=function @M=Task_Cargo @N=onafterLanded @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=16069
14 @K=function @M=Task_Cargo @N=onafterPrepareBoarding @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=16762
15 @K=function @M=Task_Cargo @N=onafterBoard @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=17166
16 @K=function @M=Task_Cargo @N=onafterBoarded @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=18074
17 @K=function @M=Task_Cargo @N=onafterPrepareUnBoarding @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=18704
18 @K=function @M=Task_Cargo @N=onafterUnBoard @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=19134
19 @K=function @M=Task_Cargo @N=onafterUnBoarded @P=Fsm @F=../../../MOOSE/Moose Development/Moose\Tasking\Task_CARGO.lua @C=19788
20 @K=function @M=Designate @N=OnBeforeLaseOn @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=12232
21 @K=function @M=Designate @N=OnAfterLaseOn @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=12480
22 @K=function @M=Designate @N=LaseOn @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=12701
23 @K=function @M=Designate @N=__LaseOn @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=12824
24 @K=function @M=Designate @N=OnBeforeLaseOff @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=13114
25 @K=function @M=Designate @N=OnAfterLaseOff @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=13364
26 @K=function @M=Designate @N=LaseOff @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=13587
27 @K=function @M=Designate @N=__LaseOff @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=13712
28 @K=function @M=Designate @N=OnBeforeSmoke @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=13944
29 @K=function @M=Designate @N=OnAfterSmoke @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=14190
30 @K=function @M=Designate @N=Smoke @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=14409
31 @K=function @M=Designate @N=__Smoke @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=14530
32 @K=function @M=Designate @N=OnBeforeStatus @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=15628
33 @K=function @M=Designate @N=OnAfterStatus @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=15876
34 @K=function @M=Designate @N=Status @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=16097
35 @K=function @M=Designate @N=__Status @P=DESIGNATE @F=../../../MOOSE/Moose Development/Moose\Functional\Designate.lua @C=16220

View File

@ -0,0 +1,174 @@
; This file only constains function related to storing the hierarchy in a tree-like tructure
Func AddNode($Kind, $Module ,$Node, $Parent, $File, $CarretPos)
FileSetPos($DataFile, 0, $FILE_END)
If $Parent == "" And $Kind == "type" Then
$Parent = "ROOT"
ElseIf $Kind == "module" Then
$Module = " "
$Parent = " "
EndIf
FileWrite($DataFile, "@K="&$Kind&", @M="&$Module&", @N="&$Node&", @P="&$Parent&", @F="&$File&", @C="&$CarretPos&","&@CRLF)
EndFunc
; Search node by name and returns one data
Func GetData($Node, $Data)
FileSetPos($DataFile, 0, $FILE_BEGIN)
Local $CurrentLine = ""
Local $CurrentData
Local $RegexResult
Local $Regex
Switch $Data
Case "kind"
$Regex = "\@K=(.+?),"
Case "parent"
$Regex = "\@P=(.+?),"
Case "file"
$Regex = "\@F=(.+?),"
Case "carretpos"
$Regex = "\@C=(.+?),"
EndSwitch
FileSetPos($DataFile, 0, $FILE_BEGIN)
Do
$CurrentLine = FileReadLine($DataFile)
If @error == -1 Then
Return ""
ExitLoop
EndIf
$CurrentData = StringRegExp($CurrentLine, "\@N=(.+?),", $STR_REGEXPARRAYMATCH)
Until $Node == $CurrentData[0]
$CurrentData = StringRegExp($CurrentLine, $Regex, $STR_REGEXPARRAYMATCH)
Return $CurrentData[0]
EndFunc
; Returns an array of parent nodes, up to the root, starting with the root
Func GetParents($Node)
Local $CurrentParent = $Node
Local $ParentsArray[0]
Local $NbOfParents = 1
While $CurrentParent <> "ROOT"
ReDim $ParentsArray[$NbOfParents]
$ParentsArray[$NbOfParents-1] = $CurrentParent
$CurrentParent = GetData($CurrentParent, "parent")
If $CurrentParent == "" Then
FileWrite($Log, "ERROR : Couldn't find "&$ParentsArray[$NbOfParents-1]&"'s parent !")
$CurrentParent = "ERROR !"
ReDim $ParentsArray[$NbOfParents]
$ParentsArray[$NbOfParents-1] = $CurrentParent
ExitLoop
EndIf
$NbOfParents += 1
WEnd
_ArrayReverse($ParentsArray)
_ArrayDelete($ParentsArray, $NbOfParents)
Return $ParentsArray
EndFunc
Func DataSort()
Local $SortedDataFile = FileOpen(@ScriptDir & "\TreeHierarchySorted.csv", $FO_OVERWRITE)
Local $Line = ""
Local $LineNb = 1
Local $RegexResults
Local $CurrentModule
Local $CurrentType
FileSetPos($DataFile, 0, $FILE_BEGIN)
While True
$Line = FileReadLine($DataFile)
If @error then ExitLoop
$RegexResults = StringRegExp($Line, "\@K=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResults[0] == "module" Then
ConsoleWrite(".")
$RegexResults = StringRegExp($Line, "\@N=(.+?),", $STR_REGEXPARRAYMATCH)
$CurrentModule = $RegexResults[0]
FileWriteLine($SortedDataFile, $Line)
FileClose($DataFile)
_FileWriteToLine(@ScriptDir & "\TreeHierarchy.csv", $LineNb, "", True)
$DataFile = FileOpen(@ScriptDir & "\TreeHierarchy.csv", 1)
FileSetPos($DataFile, 0, $FILE_BEGIN)
$LineNb = 1
While True
$Line = FileReadLine($DataFile)
If @error then ExitLoop
$RegexResults = StringRegExp($Line, "\@K=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResults[0] == "type" Then
$RegexResults = StringRegExp($Line, "\@M=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResults[0] == $CurrentModule Then
$RegexResults = StringRegExp($Line, "\@N=(.+?),", $STR_REGEXPARRAYMATCH)
$CurrentType = $RegexResults[0]
FileWriteLine($SortedDataFile, $Line)
FileClose($DataFile)
_FileWriteToLine(@ScriptDir & "\TreeHierarchy.csv", $LineNb, "", True)
$DataFile = FileOpen(@ScriptDir & "\TreeHierarchy.csv", 1)
FileSetPos($DataFile, 0, $FILE_BEGIN)
$LineNb = 1
While True
$Line = FileReadLine($DataFile)
If @error then ExitLoop
$RegexResults = StringRegExp($Line, "\@K=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResults[0] == "function" Then
$RegexResults = StringRegExp($Line, "\@P=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResults[0] == $CurrentType Then
FileWriteLine($SortedDataFile, $Line)
FileClose($DataFile)
_FileWriteToLine(@ScriptDir & "\TreeHierarchy.csv", $LineNb, "", True)
$DataFile = FileOpen(@ScriptDir & "\TreeHierarchy.csv", 1)
FileSetPos($DataFile, 0, $FILE_BEGIN)
$LineNb = 0
EndIf
EndIf
$LineNb += 1
WEnd
FileSetPos($DataFile, 0, $FILE_BEGIN)
$LineNb = 0
EndIf
EndIf
$LineNb += 1
WEnd
FileSetPos($DataFile, 0, $FILE_BEGIN)
$LineNb = 0
EndIf
$LineNb += 1
Wend
If FileGetSize(@ScriptDir & "\TreeHierarchy.csv") <> 0 Then
FileWrite($Log, "ERROR : Some items couldn't be sorted. Verify them in the file TreeHierarchy.csv"&@CRLF)
ConsoleWrite(@CRLF&"INFO : Some items couldn't be sorted. Verify them in the file TreeHierarchy.csv"&@CRLF)
EndIf
FileClose($DataFile)
$DataFile = $SortedDataFile
EndFunc
Func FindInFunctionList($String)
Local $Line = ""
Local $TempStringArray
FileSetPos($FunctionList, 0, $FILE_BEGIN)
;FileWrite($Log, 'Trying to find the function prototype for : ' & $String & @CRLF)
While 1
$Line = FileReadLine($FunctionList)
If @error = -1 Then
SetError(0)
FileWrite($Log, "ERROR : Couldn't find " & $String & " in file. Does this method exitsts ?" & @CRLF)
Return $String
EndIf
If StringInStr($Line, $String) Then
$TempStringArray = StringSplit($Line, "-")
$Line = "[" & $TempStringArray[1] & ":" & $TempStringArray[2] & "()]" & '(#' & StringLower($Line) & ')'
Return $Line
EndIf
WEnd
EndFunc

View File

@ -0,0 +1,460 @@
; This file include every function strictly related to the parsing of data in .lua files
; Get the first comment block after $CarretPos
; We will also grab function declaration if possible/applicable
; The return is a Array : CarretPosition|BlockContent|Declaration|CarretPositionStart
Func ReadNextBlock($File, $CarretPos)
local $CommentBlock = "" ; This is where we'll store the comment block
local $Declaration = "" ; This is the next line after the comment block : usually the declaration statement
local $CurrentLine = ""
local $CurrentCarretPos = 0
local $IsCommentBlock = False
local $RegExResult
local $RegexPos
; Start reading from $CarretPos
FileSetPos($File, $CarretPos, $FILE_BEGIN)
; Read till we find a comment block
Do
$CurrentLine = FileReadLine($File)
If @error Then ; We probably reached the eof
Local $ReturnArray[3] = [$CurrentCarretPos, "", ""]
Return $ReturnArray
ElseIf StringInStr($CurrentLine, "---") Then
$IsCommentBlock = True
EndIf
Until $IsCommentBlock
Local $CarretPosStart = FileGetPos($File) - StringLen($CurrentLine) - 2
; Add the first line to our comment block
$RegExResult = StringRegExp($CurrentLine, "---(.*)", $STR_REGEXPARRAYMATCH)
If Not @error Then ; The first line of the comment could be empty !
$CommentBlock &= $RegExResult[0]&@CRLF
EndIf
; Read the comment block
Do
$CurrentCarretPos = FileGetPos($File)
$CurrentLine = FileReadLine($File)
If StringInStr($CurrentLine, "--") Then ; If we can't find any "--" in the line, then it's not the comment block anymore
$RegExResult = StringRegExp($CurrentLine, "--(.*)", $STR_REGEXPARRAYMATCH)
If Not @error Then; The line of the comment could be empty !
$CommentBlock &= $RegExResult[0]&@CRLF
EndIf
Else
$IsCommentBlock = False
EndIf
Until Not $IsCommentBlock
; Ok, so now this is strange. If the comment block is class', we're going to have to check the
; next comment block. If this next comment block contains a field, that is the same name as the class, then this
; new comment block contains the whole informtion for the class. This is very shitty, but it's a workaround to
; make intellisense show classes info while programing
If ParseForOneTag($CommentBlock, "@type") Then
Local $CommentBlock2 = ""
Do
$CurrentLine = FileReadLine($File)
If @error Then
Local $ReturnArray[3] = [$CurrentCarretPos, "", ""]
Return $ReturnArray
ElseIf StringInStr($CurrentLine, "---") Then
$IsCommentBlock = True
EndIf
Until $IsCommentBlock
$RegExResult = StringRegExp($CurrentLine, "---(.*)", $STR_REGEXPARRAYMATCH)
If Not @error Then
$CommentBlock2 &= $RegExResult[0]&@CRLF
EndIf
; Yep, the next comment is the description of the class, let's read on !
If StringInStr($CurrentLine, ParseForOneTag($CommentBlock, "@type")) And StringInStr($CurrentLine, "extend") Then
Do
$CurrentLine = FileReadLine($File)
If StringInStr($CurrentLine, "--") Then
$RegExResult = StringRegExp($CurrentLine, "--(.*)", $STR_REGEXPARRAYMATCH)
If Not @error Then
$CommentBlock2 &= $RegExResult[0]&@CRLF
EndIf
Else
$IsCommentBlock = False
EndIf
Until Not $IsCommentBlock
; remove the line(s) with "@field" in the comment block. They are only needed for the intellisense hack
While 1
$RegexResult = StringRegExp($CommentBlock2, "(.*)@field(.*)", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$CommentBlock2 = StringRegExpReplace($CommentBlock2, "(.*)@field(.*)", "", 1)
WEnd
; We also don't need the first line of the first comment block anymore...
; $CommentBlock = StringRegExpReplace($CommentBlock, "(.*)", "", 1)
; append the description at the start of the comment block
$CommentBlock = $CommentBlock2&$CommentBlock
EndIf
; We also need to check if the type is a list or a map. If so, the comment block does not describe a class, but a simple list / map.
; It will have the formatting of a class, though, because it's closer closer to the actual code, even though it is highly confusing.
; But it will only have 1 field : the list or map.
If StringInStr($CommentBlock, "@list") Then
$RegExResult = StringRegExp($CommentBlock, "@list\h<(.*?)>\h(.*)", $STR_REGEXPARRAYMATCH)
if not @error Then
$CommentBlock &= "@field #table["&$RegExResult[0]&"] "&$RegExResult[1]
EndIf
EndIf
; TODO : Add support for @map the same way...
EndIf
; We'll take the next line, as it might be the declaration statement
$Declaration = $CurrentLine
; let's do some cleanup
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)^\h+", "") ;remove leading whitespaces
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)\h+$", "") ;remove trailing whitespaces
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)^[#]+", "##### ")
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)^\h+", "") ;remove leading whitespaces again now that we removed the "#"s
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)-{3,}", "") ;remove sequences of at least 3 "-" which will mess up markdown
$CommentBlock = StringRegExpReplace($CommentBlock, "(?m)={3,}", "") ; remove sequences of at least 3 "=" which will mess up markdown
Local $ReturnArray[4] = [$CurrentCarretPos, $CommentBlock, $Declaration, $CarretPosStart]
Return $ReturnArray
EndFunc
; Parses the block and returns the data for one tag
; don't use it to find the function tag !
Func ParseForOneTag($Block, $Tag)
Local $i = 1
Local $DataArray[1]
Local $RegexResult[1]
Local $RegexPos = 1
Local $Regex
; If we look for @usage, then it's a multiline data, the regex is different
If $Tag == "@usage" Then
$Regex = "(?s)@usage(.*)"
$RegexResult = StringRegExp($Block, $Regex, $STR_REGEXPARRAYMATCH, $RegexPos)
Else
$Regex = $Tag&"\h(.*)\s"
$RegexResult = StringRegExp($Block, $Regex, $STR_REGEXPARRAYMATCH, $RegexPos)
Endif
If @error Then
Return ""
Else
Return $RegexResult[0]
EndIf
EndFunc ;==>ReadOneTag
; Parses the block and returns the data for multiple tags in an array
; Don't use it for @param !
Func ParseForTags($Block, $Tag)
Local $i = 1
Local $DataArray[1]
Local $RegexResult[1]
Local $RegexPos = 1
Local $Regex = $Tag&"(?m)\h([^\s]*)(?:\h)?([^\s]*)?(?:\h)?(.*)?$"
; For each tag
While True
$RegexResult = StringRegExp($Block, $Regex, $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If $RegexPos == 0 Then ; We couldn't find any tag
If Not $DataArray[0] Then
Return ""
Else
Return $DataArray
EndIf
EndIf
; Add the tag to the array.The array looks like this : type1|param1|description1|type2...
ReDim $DataArray[$i * 3]
$DataArray[($i * 3) - 3] = $RegexResult[0]
If $RegexResult[1] == "" Then
$DataArray[($i * 3) - 2] = "self" ; if the first param doesn't have a name, then it's self
Else
$DataArray[($i * 3) - 2] = $RegexResult[1]
EndIf
$DataArray[($i * 3) - 1] = $RegexResult[2]
$i += 1
WEnd
EndFunc
; Parses both the comment block and the declaration to find the function name and it's type
; Compares both of them if possible, but will always return the one in the comment block if possible
Func ParseFunctionName($CommentBlock, $Declaration)
local $RegExResult
local $FunctionNameFromDec
local $FunctionNameFromComment
local $ReturnArray[2]
; Parse for function name in both the comment block and the desclaration
$RegExResult = StringRegExp($CommentBlock, "\@function\h(?:(\[.*\]\h))?(.*)", $STR_REGEXPARRAYMATCH)
If Not @error Then
$FunctionNameFromComment = $RegExResult[1]
EndIf
$RegExResult = StringRegExp($Declaration, "function\h(?:.*\:)?(.*)\(.*\)", $STR_REGEXPARRAYMATCH)
If Not @error Then
$FunctionNameFromDec = $RegExResult[0]
EndIf
; compare them to each other
If $FunctionNameFromComment Then
If $FunctionNameFromDec <> $FunctionNameFromComment Then
FileWrite($Log,"CAUTION : The commented function doesn't match its declaration : "&$FunctionNameFromComment& " -> "&$Declaration&@CRLF)
EndIf
$ReturnArray[0] = $FunctionNameFromComment
ElseIf $FunctionNameFromDec Then
;FileWrite($Log, "CAUTION: No data matching @function found in block, inferring the function name from its declaration : "& $FunctionNameFromDec & @CRLF)
$ReturnArray[0] = $FunctionNameFromDec
Else
$ReturnArray[0] = ""
$ReturnArray[1] = ""
return $ReturnArray
EndIf
;parses for function type in both the comment block and the desclaration
local $TypeFromComment
local $TypeFromDec
$RegExResult = StringRegExp($Declaration, "function\h(.*):", $STR_REGEXPARRAYMATCH)
If Not @error Then
$TypeFromDec = $RegExResult[0]
EndIf
$RegExResult = StringRegExp($CommentBlock, "function\h\[parent=#(.*)\]", $STR_REGEXPARRAYMATCH)
If Not @error Then
$TypeFromComment = $RegExResult[0]
EndIf
; compare them to each other
If $TypeFromComment Then
If $TypeFromDec <> $TypeFromComment Then
FileWrite($Log,"CAUTION : The commented function type doesn't match its declaration : "&$TypeFromComment& " -> "&$Declaration&@CRLF)
EndIf
$ReturnArray[1] = $TypeFromComment
ElseIf $TypeFromDec Then
;FileWrite($Log, "CAUTION: No function type found in block, inferring the function type from its declaration : "& $TypeFromDec & @CRLF)
$ReturnArray[1] = $TypeFromDec
Else
$ReturnArray[0] = ""
$ReturnArray[1] = ""
return $ReturnArray
EndIf
Return $ReturnArray
EndFunc
; Specifically designed to parse for @param tags
; will verify the comment by matching with the declaration (theoretically, I'm pretty sure it's bugged)
Func ParseParams($CommentBlock, $Declaration)
Local $ParamsFromComment = ParseForTags($CommentBlock, "@param")
Local $RegExResult
Local $RegexPos = StringInStr($Declaration, "(")
Local $ParamsFromDec[0]
Local $NbParam = 0
If StringInStr($Declaration, ":") Then
$NbParam = 1
ReDim $ParamsFromDec[1]
$ParamsFromDec[0] = "self"
EndIf
; extract params from function decaration
While True
$RegExResult = StringRegExp($Declaration, "([^,\(\)\h]+)", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NbParam += 1
Redim $ParamsFromDec[$NbParam]
$ParamsFromDec[$NbParam-1] = $RegExResult[0]
WEnd
; compare these parameters with those found in the comment block
If UBound($ParamsFromComment) <> UBound($ParamsFromDec)*3 Then
FileWrite($Log, "CAUTION: The number of parameters don't match between the comment block and declaration "& @CRLF)
Else
For $i=0 To $NbParam-1
If $ParamsFromDec[$i] <> $ParamsFromComment[($i*3)+1] Then
FileWrite($Log, "CAUTION: Parameters missmatch between the comment block and declaration "& @CRLF)
FileWrite($Log, $ParamsFromComment[($i*3)+1]& " -> " & $ParamsFromDec[$i]&@CRLF)
ExitLoop
EndIf
Next
EndIf
Return $ParamsFromComment
EndFunc
; This does 3 things :
; - Replace the hyperlinks with new ones
; - change the stuff starting with # (#nil -> <u>Nil</u>)
; - Replace pictures paths
Func ReplaceHyperlinks($TempFile)
Local $StringFile = ""
Local $RegexResult
Local $RegexPos = 1
Local $NewURL = ""
Local $i = 0
FileSetPos($TempFile, 0, $FILE_BEGIN)
$StringFile = FileRead($TempFile)
; Replace HyperLinks Using Regexs
; ---------------------------------------------------------
While 1 ; @{File.Module}
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^\.#}]+)\.([^\.#}]+)}", $STR_REGEXPARRAYMATCH, $RegexPos) ;
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = "[" & $RegexResult[1] & "](#" & StringLower($RegexResult[1]) & "-module-)"
;FileWrite($Log, "Module : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^\.#}]+)\.([^\.#}]+)}", $NewURL, 1)
WEnd
While 1 ; @{Module}
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^\.#}]+)}", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = "[" & $RegexResult[0] & "](#" & StringLower($RegexResult[0]) & "-module-)"
;FileWrite($Log, "Module : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^\.#}]+)}", $NewURL, 1)
WEnd
While 1 ; @{File.Module#TYPE}
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^\.#}]+)\.([A-Z][^\.#}]+)#([A-Z,_]+)}", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = "[" & $RegexResult[2] & "](#" & StringLower($RegexResult[2]) & "-class-)"
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^\.#}]+)\.([A-Z][^\.#}]+)#([A-Z,_]+)}", $NewURL, 1)
WEnd
While 1 ; @{Module#TYPE}
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^\.#}]+)#([A-Z,_]+)}", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = "[" & $RegexResult[1] & "](#" & StringLower($RegexResult[1]) & "-class-)"
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^\.#}]+)#([A-Z,_]+)}", $NewURL, 1)
WEnd
While 1 ; @{#TYPE}
$RegexResult = StringRegExp($StringFile, "\@{#([A-Z,_]+)}", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = "[" & $RegexResult[0] & "](#" & StringLower($RegexResult[0]) & "-class-)"
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{#([A-Z,_]+)}", $NewURL, 1)
WEnd
While 1 ; #TYPE&@CR
$RegexResult = StringRegExp($StringFile, "\h#([A-Z,_]+)\s", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = " [" & $RegexResult[0] & "](#" & StringLower($RegexResult[0]) & "-class-)"&@CRLF
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\h#([A-Z,_]+)\s", $NewURL, 1)
WEnd
While 1 ; @{File.Module#TYPE.Function}(), catches the parenthesis
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^#}\.]+)\.([A-Z][^#}\.]+)#([A-Z,_]+)\.([^#\.]+)}[\(]?[\)]?", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = FindInFunctionList($RegexResult[2] & "-" & $RegexResult[3]&"-")
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^#}\.]+)\.([A-Z][^#}\.]+)#([A-Z,_]+)\.([^#\.]+)}[\(]?[\)]?", $NewURL, 1)
WEnd
While 1 ; @{Module#TYPE.Function}(), catches the parenthesis
$RegexResult = StringRegExp($StringFile, "\@{([A-Z][^#}\.]+)#([A-Z,_]+)\.([^#}\.]+)}[\(]?[\)]?", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = FindInFunctionList($RegexResult[1] & "-" & $RegexResult[2]&"-")
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{([A-Z][^#}\.]+)#([A-Z,_]+)\.([^#}\.]+)}[\(]?[\)]?", $NewURL, 1)
WEnd
While 1 ; @{#TYPE.Function}(), catches the parenthesis
$RegexResult = StringRegExp($StringFile, "\@{#([A-Z,_]+)\.([^#}\.]+)}[\(]?[\)]?", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = FindInFunctionList($RegexResult[0] & "-" & $RegexResult[1]&"-")
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\@{#([A-Z,_]+)\.([^#}\.]+)}[\(]?[\)]?", $NewURL, 1)
WEnd
While 1 ; Module#TYPE
$RegexResult = StringRegExp($StringFile, "\h(\w+[^\h\_])#(.*?)\h", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = " [" & $RegexResult[1] & "](#" & StringLower($RegexResult[1]) & "-class-) "
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\h(\w+[^\h\_])#(.*?)\h", $NewURL, 1)
WEnd
While 1 ; File.Module#TYPE
$RegexResult = StringRegExp($StringFile, "\h(\w+)\.(\w+)#(.*?)\h", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = " [" & $RegexResult[2] & "](#" & StringLower($RegexResult[2]) & "-class-) "
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\h(\w+)\.(\w+)#(.*?)\h", $NewURL, 1)
WEnd
While 1 ; #TYPE.type (nested type... really annoying and confusing lua stuff)
$RegexResult = StringRegExp($StringFile, "\h#([A-Z,_]+)\.(\w+)\h", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewURL = " [" & $RegexResult[1] & "](#" &StringLower($RegexResult[0])& "-"& StringLower($RegexResult[1]) & "-class-)"
;FileWrite($Log, "Class : " & $RegexPos & " : " & _ArrayToString($RegexResult) & " -> " & $NewURL & @CRLF)
$StringFile = StringRegExpReplace($StringFile, "\h#([A-Z,_]+)\.(\w+)\h", $NewURL, 1)
WEnd
; Clean stuff with #
; ---------------------------------------------------------
$StringFile = StringReplace($StringFile, "#nil", "<u>Nil</u>")
$StringFile = StringReplace($StringFile, "#number", "<u>Number</u>")
$StringFile = StringReplace($StringFile, "#boolean", "<u>Boolean</u>")
$StringFile = StringReplace($StringFile, "#string", "<u>String</u>")
$StringFile = StringReplace($StringFile, "#table", "<u>List[]</u>")
$StringFile = StringReplace($StringFile, "#function", "<u>Function()</u>")
; And replace the pictures Path if any
; ---------------------------------------------------------
While 1
$RegexResult = StringRegExp($StringFile, "!\[(.*)\]\(.*\\(.*)\\(.*)\)", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
$NewPic = "![" & $RegexResult[0] & "](/includes/Pictures/" & $RegexResult[1] & "/"& $RegexResult[2]&")"
$StringFile = StringRegExpReplace($StringFile, "!\[(.*)\]\(.*\\(.*)\\(.*)\)", $NewPic, 1)
WEnd
While 1
$RegexResult = StringRegExp($StringFile, "(?m)^(\d(?:(\.\d))*\)(.*))$", $STR_REGEXPARRAYMATCH, $RegexPos)
$RegexPos = @extended
If @extended == 0 Then ExitLoop
;$StringFile = StringRegExpReplace($StringFile, "(?m)^(\d(?:(\.\d))*\)(.*))$", "<h4>"&$RegExResult[0]&"</h4>", 1)
$StringFile = StringRegExpReplace($StringFile, "(?m)^(\d(?:(\.\d))*\)(.*))$", "##### "&$RegExResult[0], 1)
WEnd
Return $StringFile
EndFunc

View File

@ -0,0 +1,310 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=..\bin\SlateDocGenerator2.exe
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs
This is the main script
The script goal is to read .lua file, extract the documentation in comment blocks, and write .md files to be converted to html by Slate : https://github.com/lord/slate
It works in 5 steps :
First, it reads the .lua files one bt one, indentifying the comment blocks. for each comment block, it determines the kind of content the comment block describes (module, class/type or function),
find some usefull stuff (for exemple in the declaration...) and writes all of this info in the creatively named TreeHierarchy.csv, with this format :
@K=kind, @M=ParentModule, @N=Name, @P=Parent, @F=FileWhereTheCommentBlockIsLocated, @C=CarretPositionOfTheCommentBlock
The functions used to do this step are mostly found in Parser.au3
Then the second step is the longest : we sort the TreeHiearchy.csv, and put the result into TreeHierarchySorted.csv
The idea is to have the data in this order :
Module A
Class A (belongs to Module A)
Function A (belongs to Class A)
Function B (belongs to Class A)
Class B Class A (belongs to Module A)
Function C (belongs to Class B)
Function D (belongs to Class B)
Module B ...
The functions used to do this step are found in DataStorer.au3
Then, step 3 : We read each line of TreeHierarchySorted.csv, read the appropriate comment block in the .lua source files,
and write the appropriate Markdown documentation for it in a temporary folder
This is where the markdown documentation is actually written for the first time.
The functions used to do this step are found in Writer.au3
Step 4 ! We read the newly created Markdown files, trying to find hyperlinks/picture paths... and we replace them with the new ones.
We copy each processed file into it's final destination.
The functions used to do this step are mostly found in Parser.au3
And finally Step 5 : We add the new markdown files to Slate's index and delete temporary files and folder
#ce
#include <FileConstants.au3>
#include <StringConstants.au3>
#include <Array.au3>
#include <File.au3>
; Those are the arguments that need to be passed at the start
Global $SourceFolder = $CmdLine[1] ;"./Results"
Global $OutputFolder = $CmdLine[2] ;"@ScriptDir&"/source/index.html.md"
Global $Log = FileOpen(@ScriptDir & "\SlateGenerator2.log", 2)
Global $DataFile = FileOpen(@ScriptDir & "\TreeHierarchy.csv", 2)
Global $FunctionList = FileOpen(@ScriptDir & "\FuctionList.txt", 2)
#include "Parser.au3"
#include "DataStorer.au3"
#include "Writer.au3"
Func ExitCleanly()
FileClose($DataFile)
FileClose($FunctionList)
FileWrite($Log, "SlateGenerator2 exited cleanly")
FileClose($Log)
EndFunc
; Small function to determine if a comment block is describing a module, a type or a function
Func IdentifyBlock($Block, $Declaration)
Local $Kind
Local $KindFunction
$Kind = ParseForOneTag($Block, "@module")
If $Kind Then
Return "module"
EndIf
$Kind = ParseForOneTag($Block, "@type")
If $Kind Then
Return "type"
EndIf
$KindFunction = ParseFunctionName($Block, $Declaration)
If $KindFunction[0] Then
Return "function"
EndIf
Return ""
EndFunc
; -----------------------------------------------------------------
; Main
; -----------------------------------------------------------------
; Step 1 !
; -----------------------------------------------------------------
Local $SourceList = _FileListToArrayRec($SourceFolder, "*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
Local $CurrentFile
Local $CarretPos = 0
Local $CommentBlock
Local $CommentKind
Local $CommentInfo[2]
Local $CurrentModule
ConsoleWrite("1. Parsing Source Files... ")
FileWrite($Log, @CRLF&@CRLF&@TAB&"INFO : Building Hierarchy" & @CRLF)
For $i=1 To $SourceList[0] ; for each .lua source file
FileWrite($Log, "DEBUG : "&$SourceList[$i])
; let's read the next .lua source file
$CurrentFile = FileOpen($SourceList[$i], $FO_READ)
FileWrite($Log, @CRLF&"INFO : Reading File "&$SourceList[$i] & @CRLF)
While True ; for each comment block in the current .lua source file
; We read the next comment block. If we could not, it's probably eof, time to open the next .lua file
$CommentBlock = ReadNextBlock($CurrentFile, $CarretPos)
If Not $CommentBlock[1] Then
ExitLoop
EndIf
$CarretPos = $CommentBlock[0]
$CommentKind = IdentifyBlock($CommentBlock[1], $CommentBlock[2])
; Depending on the kind of comment block it is, we write the appropriate line in TreeHierarchy.csv
Switch $CommentKind
Case "function"
$CommentInfo = ParseFunctionName($CommentBlock[1], $CommentBlock[2])
AddNode("function", $CurrentModule, $CommentInfo[0], $CommentInfo[1], $SourceList[$i], $CommentBlock[3])
FileWrite($Log, "INFO : Added function "&$CommentInfo[0]&" to hierarchy" & @CRLF)
Case "type"
$CommentInfo[0] = ParseForOneTag($CommentBlock[1], "@type")
$CommentInfo[1] = ParseForOneTag($CommentBlock[1], "@extends")
$CommentInfo[1] = StringRegExpReplace($CommentInfo[1], "(.*#)", "")
AddNode("type", $CurrentModule, $CommentInfo[0], $CommentInfo[1], $SourceList[$i], $CommentBlock[3])
FileWrite($Log, "INFO : Added type "&$CommentInfo[0]&" to hierarchy" & @CRLF)
Case "module"
$CurrentModule = ParseForOneTag($CommentBlock[1], "@module")
AddNode("module", "", $CurrentModule, "", $SourceList[$i], $CommentBlock[3])
FileWrite($Log, "INFO : Added module "&$CurrentModule&" to hierarchy" & @CRLF)
EndSwitch
WEnd
$CarretPos = 0
FileClose($CurrentFile)
Next
ConsoleWrite("Done"&@CRLF)
; Step 2 !
; -----------------------------------------------------------------
ConsoleWrite("2. Sorting Hierarchy")
FileWrite($Log, @CRLF&@CRLF&@TAB&"INFO : Sorting Hierarchy" & @CRLF)
; The magic happens in DataStorer.au3
DataSort()
ConsoleWrite("Done"&@CRLF)
; Step 3 !
; -----------------------------------------------------------------
ConsoleWrite("3. Writing Markdown Documentation")
FileWrite($Log, @CRLF&@CRLF&@TAB&"INFO : Writing Markdown Documentation" & @CRLF)
Local $CurrentOutput
Local $CurrentFolder
Local $RegexResult
Local $Line
Local $CarretPos = 0
Local $Results
Local $Output
Local $Declaration
FileSetPos($DataFile, 0, $FILE_BEGIN)
While True ; For each line in TreeHierarchySorted.csv
; read the next line until eof
FileSetPos($DataFile, $CarretPos, $FILE_BEGIN)
$Line = FileReadLine($DataFile)
If @error Then ; eof
ExitLoop
Endif
$CarretPos = FileGetPos($DataFile)
; find the file/position of the next comment block referenced in the line
$RegexResult = StringRegExp($Line, "\@F=(.+?),", $STR_REGEXPARRAYMATCH)
$CurrentFile = FileOpen($RegexResult[0], $FO_READ)
$RegexResult = StringRegExp($Line, "\@C=(.+?),", $STR_REGEXPARRAYMATCH)
$DataPos = $RegexResult[0]
; get the comment block itself
$Results = ReadNextBlock($CurrentFile, $DataPos)
$Block = $Results[1]
$Declaration = $Results[2]
; choose the right function to write mardown depending on the type of comment block
$RegexResult = StringRegExp($Line, "\@K=(.+?),", $STR_REGEXPARRAYMATCH)
If $RegexResult[0] == "module" Then
ConsoleWrite(".")
; We need the name of the folder containing this particular source file
$RegexResult = StringRegExp($Line, "\@F=(.+?),", $STR_REGEXPARRAYMATCH)
$RegexResult = StringRegExp($RegexResult[0], "\\(.*)\\.*\.lua", $STR_REGEXPARRAYMATCH)
If @error Then
$CurrentFolder = ""
Else
$CurrentFolder = $RegexResult[0]
Endif
; Now we can write the markdown for this module
$CurrentOutput = WriteModule($Block, $CurrentFolder)
EndIf
If $RegexResult[0] == "type" Then
; We need the name of the Module containing the type
$RegexResult = StringRegExp($Line, "\@M=(.+?),", $STR_REGEXPARRAYMATCH)
; Now we can write the markdown for this type
WriteType($Block, $RegexResult[0], $CurrentOutput)
EndIf
If $RegexResult[0] == "function" Then
; We can write the markdown for this function
WriteFunction($Block, $Declaration, $CurrentOutput)
EndIf
FileClose($CurrentFile)
Wend
ConsoleWrite("Done"&@CRLF)
; Step 4 !
; -----------------------------------------------------------------
ConsoleWrite("4. Processing Hyperlinks...")
FileWrite($Log, @CRLF&@CRLF&@TAB&"INFO : Processing Hyperlinks" & @CRLF)
Local $i=1
Local $TempFilesArray = _FileListToArray(@ScriptDir & "/TEMP")
Local $CurrentFile
Local $FinalFile
While $i <= $TempFilesArray[0] ; For each markdown file in the temporary folder
;read the file
$CurrentFile = FileOpen(@ScriptDir & "/TEMP/" & $TempFilesArray[$i], 0)
; The magic happens in Parser.au3
$FinalString = ReplaceHyperlinks($CurrentFile)
; copy the result to the final file location
$FinalFile = FileOpen($OutputFolder & "/includes/" & $TempFilesArray[$i], 2)
FileWrite($FinalFile, $FinalString)
FileClose($FinalFile)
FileClose($CurrentFile)
$i += 1
WEnd
ConsoleWrite("Done"&@CRLF)
; Step 5 !
; -----------------------------------------------------------------
ConsoleWrite("5. Adding new documentation to index...")
FileWrite($Log, @CRLF&@CRLF&@TAB&"INFO : Adding new documentation to index" & @CRLF)
; Now this is a bit annoying : there is no way to insert a line in a document.
; So we need to read the first half of it, read the second half, and the wipe the whole document
; This way, in the new doc, we can write the first half, what we wanted to insert, and then the second half !
; Let's store the index file in $IndexString
Local $IndexFile = $OutputFolder&"/index.html.md"
Local $IndexFileHandle = FileOpen($IndexFile, 0)
Local $IndexString = FileRead($IndexFileHandle)
$IndexString = StringRegExpReplace($IndexString, "-\h[A-Z][a-z]+\.[A-Z][a-z]+\s", "")
; Now we slpit it into and store the results in $BeforeString and $AfterString
Local $SearchPos = StringInStr($IndexString, "search:")
local $BeforeString = StringTrimRight($IndexString, StringLen($IndexString) - $SearchPos + 5)
local $AfterString = StringTrimLeft($IndexString, $SearchPos - 1)
; reopening the index file wiping everything
FileClose($IndexFileHandle)
$IndexFileHandle = FileOpen($IndexFile, 2)
; write the first half
FileWrite($IndexFileHandle, $BeforeString)
Local $IncludePos = StringInStr($IndexString, "includes:")
FileSetPos($IndexFileHandle, $IncludePos + 10, $FILE_BEGIN)
; add the new markdown files to the index
$i = 1
While $i <= $TempFilesArray[0]
FileWrite($Log, StringTrimRight($TempFilesArray[$i], 3)&@CRLF)
FileWrite($IndexFileHandle, " - "&StringTrimRight($TempFilesArray[$i], 3)&@CRLF)
$i+=1
WEnd
FileWrite($IndexFileHandle, @CRLF)
; append the second half of the file
FileWrite($IndexFileHandle, $AfterString)
FileClose($IndexFileHandle)
ConsoleWrite("Done"&@CRLF)
; WE ARE DONE !
ExitCleanly()

View File

@ -0,0 +1,209 @@
; Takes an array and returns it in a markdown flavored list
; If the list is a retun, then, there is no variable name...
Func ArrayToList($Array, $Return)
$String = ""
$i = 0
do
$String &= "* "
$String &= $Array[$i] & " "
If $Return Then
If $Array[$i + 2] == "" or $Array[$i + 2] == " " Then
$String &= @CRLF
Else
$String &= " " & $Array[$i + 1] & " " & $Array[$i + 2] & @CRLF
EndIf
Else
$String &= $Array[$i + 1]
If $Array[$i + 2] == "" or $Array[$i + 2] == " " Then
$String &= @CRLF
Else
$String &= " : " & $Array[$i + 2] & @CRLF
EndIf
EndIf
$i += 3
Until $i >= UBound($Array)
Return $String
EndFunc
Func WriteModule($Block, $Group)
Local $ModuleName = ParseForOneTag($Block, "@module")
DirCreate(@ScriptDir & "\TEMP")
Local $Output = FileOpen(@ScriptDir & "\TEMP\" & $Group & "." & $ModuleName & ".md", $FO_OVERWRITE)
Local $Data = ""
Local $DataPos = 1
FileWrite($Log, @CRLF&@TAB&"Writing "&$Group & "." & $ModuleName & ".md" &@CRLF)
FileWrite($Log, "Writing Module "&$ModuleName&@CRLF)
; Add title of Module
FileWrite($Output, "# " & $Group & "." & $ModuleName & " Module" & @CRLF)
; Copy the short description
While StringRight($Data, 1) <> @CRLF And StringRight($Data, 1) <> @CR
If StringRight($Data, 7) == "@module" Then ; If there is no comment in the module block
Return $Output
EndIf
$Data &= StringMid($Block, $DataPos, 1)
$DataPos += 1
WEnd
$Data = StringTrimRight($Data, 1)
$Block = StringTrimLeft($Block, $DataPos)
FileWrite($Output, $Data & @CRLF)
; copy the long description
$DataPos = 1
$Data = ""
$Omit = False
While StringRight($Data, 7) <> "@module"
$Data &= StringMid($Block, $DataPos, 1)
$DataPos += 1
WEnd
$Data = StringTrimRight($Data, 8)
FileWrite($Output, $Data & @CRLF)
Return $Output
EndFunc
Func WriteType($Block, $ModuleName, $Output)
Local $TypeName = ParseForOneTag($Block, "@type")
Local $ParentClass = GetData($TypeName, "parent")
Local $Fields = ParseForTags($Block, "@field")
FileWrite($Log, "Writing Type "&$TypeName&@CRLF)
; Add title of Type
FileWrite($Output, "## " & $TypeName & " Class" & @CRLF)
; Add hierearchy info if necessary. Some cool ASCII drawing is going on !
If $ParentClass <> "ROOT" Then
FileWrite($Output, "<pre>" & @CRLF)
FileWrite($Output, "Inheritance : The " & $TypeName & " Class inherits from the following parents :" & @CRLF)
Local $Hierarchy = GetParents($TypeName)
Local $String = ""
Local $TabBuffer = @TAB
$String &= $Hierarchy[0]&@CRLF
For $i=1 to UBound($Hierarchy)-1
$String &= $TabBuffer&"`-- "&$Hierarchy[$i]&@CRLF
$TabBuffer &= @TAB
Next
FileWrite($Output, $String)
FileWrite($Output, "</pre>" & @CRLF)
Else
FileWrite($Output, "<pre>" & @CRLF)
FileWrite($Output, "The " & $TypeName & " class does not inherit" & @CRLF)
FileWrite($Output, "</pre>" & @CRLF)
EndIf
; Copy the long description
Local $DataPos = 1
Local $Data = ""
Local $Omit = False
While StringRight($Data, 1) <> @CR ; We discard the first line
$Data &= StringMid($Block, $DataPos, 1)
$DataPos += 1
WEnd
; If there is a tag in the first line, there is no description
if StringInStr($Data, "@type") == 0 and StringInStr($Data, "@extends") == 0 and StringInStr($Data, "@field") == 0 Then
$Data = ""
$DataPos += 1
While StringRight($Data, 5) <> "@type"
$Data &= StringMid($Block, $DataPos, 1)
$DataPos += 1
WEnd
$Data = StringTrimRight($Data, 5)
FileWrite($Output, $Data & @CRLF)
EndIf
; Add the Attributes
If IsArray($Fields) Then
FileWrite($Output, "<h4> Attributes </h4>" & @CRLF & @CRLF)
FileWrite($Output, ArrayToList($Fields, False) & @CRLF)
EndIf
FileWrite($Output, @CRLF)
Return $TypeName
EndFunc
Func WriteFunction($Block, $Declaration, $Output)
Local $RegexResult = ParseFunctionName($Block, $Declaration)
Local $FunctionName = $RegexResult[0]
Local $TypeName = $RegexResult[1]
Local $Parameters = ParseParams($Block, $Declaration)
Local $Returns = ParseForTags($Block, "@return")
Local $Usage = ParseForOneTag($Block, "@usage")
Local $RegexResult
FileWrite($Log, "Writing Function "&$FunctionName&@CRLF)
If StringLeft($FunctionName, 1) == "_" Then
_FileWriteLog($Log, @TAB&@Tab&"Function is private. Ignored." & @CRLF)
Return $FunctionName
EndIf
; Add the class before the function name
If IsArray($Parameters) Then
If $Parameters[1] == "self" Then
$FunctionName = $TypeName & ":" & $FunctionName
EndIf
Else
$FunctionName = $TypeName & "." & $FunctionName
EndIf
; add the parameters in parenthesis
$FunctionName &= "("
If IsArray($Parameters) Then
For $i = 3 To UBound($Parameters) - 3 Step 3
$FunctionName &= $Parameters[$i + 1] & ", "
Next
If UBound($Parameters) > 3 Then
$FunctionName = StringTrimRight($FunctionName, 2)
EndIf
EndIf
$FunctionName &= ")"
;write the file name
FileWrite($Output, "### " & $FunctionName & @CRLF)
;Write the exemple if any
If $Usage <> "" Then
FileWrite($Output, "``` lua")
FileWrite($Output, $Usage)
FileWrite($Output, "```" & @CRLF)
EndIf
;Write the description
FileWrite($Log, $Block)
FileWrite($Log, StringTrimRight($Block, StringLen($Block) - StringInStr($Block, "@param") + 1) & @CRLF)
FileWrite($Output, StringTrimRight($Block, StringLen($Block) - StringInStr($Block, "@param") + 1) & @CRLF)
; Write the parameters
FileWrite($Output, "<h4> Parameters </h4>" & @CRLF)
If IsArray($Parameters) Then
FileWrite($Output, ArrayToList($Parameters, False) & @CRLF)
EndIf
; Write the returns
FileWrite($Output, "<h4> Returns </h4>" & @CRLF)
If IsArray($Returns) Then
FileWrite($Output, ArrayToList($Returns, True) & @CRLF)
EndIf
FileWrite($Output, @CRLF)
; add to the list of function balises (useful for hyperlinks)
$RegexResult = ParseFunctionName($Block, $Declaration)
Local $URLBalise = $TypeName & "-" & $RegexResult[0] & "-"
If IsArray($Parameters) Then
For $i = 3 To UBound($Parameters) - 3 Step 3
$URLBalise &= StringLower($Parameters[$i + 1]) & "-"
Next
EndIf
$URLBalise = StringTrimRight($URLBalise, 1)
FileWrite($FunctionList, $URLBalise & @CRLF)
return $FunctionName
EndFunc

View File

@ -951,6 +951,9 @@ Use the method <a href="##(AI_PATROL_ZONE).ManageDamage">AI<em>PATROL</em>ZONE.M
<p> This table contains the targets detected during patrol.</p>
</dd>
</dl>
<dl class="function">

View File

@ -251,24 +251,60 @@
<td class="name" nowrap="nowrap"><a href="##(REPORT).Add">REPORT:Add(Text)</a></td>
<td class="summary">
<p>Add a new line to a REPORT.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).AddIndent">REPORT:AddIndent(Text)</a></td>
<td class="summary">
<p>Add a new line to a REPORT.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).ClassName">REPORT.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).HasText">REPORT:HasText()</a></td>
<td class="summary">
<p>Has the REPORT Text?</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).Indent">REPORT.Indent</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).New">REPORT:New(Title)</a></td>
<td class="summary">
<p>Create a new REPORT.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).Report">REPORT.Report</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).SetIndent">REPORT:SetIndent(Indent)</a></td>
<td class="summary">
<p>Set indent of a REPORT.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).Text">REPORT:Text(Delimiter)</a></td>
<td class="summary">
<p>Produces the text of the report, taking into account an optional delimeter, which is \n by default.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(REPORT).Title">REPORT.Title</a></td>
<td class="summary">
</td>
</tr>
</table>
@ -765,6 +801,32 @@ Group#GROUP</p>
<p><em><a href="##(REPORT)">#REPORT</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(REPORT).AddIndent" >
<strong>REPORT:AddIndent(Text)</strong>
</a>
</dt>
<dd>
<p>Add a new line to a REPORT.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#string Text </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(REPORT)">#REPORT</a>:</em></p>
</dd>
</dl>
<dl class="function">
@ -779,6 +841,38 @@ Group#GROUP</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(REPORT).HasText" >
<strong>REPORT:HasText()</strong>
</a>
</dt>
<dd>
<p>Has the REPORT Text?</p>
<h3>Return value</h3>
<p><em>#boolean:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(REPORT).Indent" >
<strong>REPORT.Indent</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
@ -805,6 +899,46 @@ Group#GROUP</p>
<p><em><a href="##(REPORT)">#REPORT</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(REPORT).Report" >
<strong>REPORT.Report</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(REPORT).SetIndent" >
<strong>REPORT:SetIndent(Indent)</strong>
</a>
</dt>
<dd>
<p>Set indent of a REPORT.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number Indent </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(REPORT)">#REPORT</a>:</em></p>
</dd>
</dl>
<dl class="function">
@ -832,6 +966,20 @@ Group#GROUP</p>
<p><em>#string:</em>
The report text.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(REPORT).Title" >
<strong>REPORT.Title</strong>
</a>
</dt>
<dd>
</dd>
</dl>

View File

@ -382,7 +382,7 @@ This is different from the EnRoute tasks, where the targets of the task need to
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CONTROLLABLE).IsTargetDetected">CONTROLLABLE:IsTargetDetected(DCSObject)</a></td>
<td class="name" nowrap="nowrap"><a href="##(CONTROLLABLE).IsTargetDetected">CONTROLLABLE:IsTargetDetected(DCSObject, DetectVisual, DetectOptical, DetectRadar, DetectIRST, DetectRWR, DetectDLINK)</a></td>
<td class="summary">
</td>
@ -1466,19 +1466,49 @@ WayPoints If WayPoints is given, then return the WayPoints structure.</p>
<dt>
<a id="#(CONTROLLABLE).IsTargetDetected" >
<strong>CONTROLLABLE:IsTargetDetected(DCSObject)</strong>
<strong>CONTROLLABLE:IsTargetDetected(DCSObject, DetectVisual, DetectOptical, DetectRadar, DetectIRST, DetectRWR, DetectDLINK)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> DCSObject </em></code>: </p>
</li>
<li>
<p><code><em> DetectVisual </em></code>: </p>
</li>
<li>
<p><code><em> DetectOptical </em></code>: </p>
</li>
<li>
<p><code><em> DetectRadar </em></code>: </p>
</li>
<li>
<p><code><em> DetectIRST </em></code>: </p>
</li>
<li>
<p><code><em> DetectRWR </em></code>: </p>
</li>
<li>
<p><code><em> DetectDLINK </em></code>: </p>
</li>
</ul>
</dd>

View File

@ -326,6 +326,12 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachPlayerJoined">DATABASE:ForEachPlayerJoined(IteratorFunction, ...)</a></td>
<td class="summary">
<p>Iterate the DATABASE and call an iterator function for each player who has joined the mission, providing the Unit of the player and optional parameters.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachStatic">DATABASE:ForEachStatic(IteratorFunction, FinalizeFunction, ...)</a></td>
<td class="summary">
<p>Iterate the DATABASE and call an iterator function for each <strong>alive</strong> STATIC, providing the STATIC and optional parameters.</p>
</td>
</tr>
<tr>
@ -1279,6 +1285,43 @@ self</p>
<dl class="function">
<dt>
<a id="#(DATABASE).ForEachStatic" >
<strong>DATABASE:ForEachStatic(IteratorFunction, FinalizeFunction, ...)</strong>
</a>
</dt>
<dd>
<p>Iterate the DATABASE and call an iterator function for each <strong>alive</strong> STATIC, providing the STATIC and optional parameters.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function IteratorFunction </em></code>:
The function that will be called for each object in the database. The function needs to accept a STATIC parameter.</p>
</li>
<li>
<p><code><em> FinalizeFunction </em></code>: </p>
</li>
<li>
<p><code><em> ... </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE).ForEachUnit" >
<strong>DATABASE:ForEachUnit(IteratorFunction, FinalizeFunction, ...)</strong>
</a>

View File

@ -279,7 +279,7 @@ each detected set of potential targets can be lased or smoked...</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuStatus">DESIGNATE:MenuStatus(AttackGroup)</a></td>
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuStatus">DESIGNATE:MenuStatus(AttackGroup, Duration)</a></td>
<td class="summary">
</td>
@ -375,7 +375,7 @@ each detected set of potential targets can be lased or smoked...</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SendStatus">DESIGNATE:SendStatus(AttackGroup, MenuAttackGroup)</a></td>
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SendStatus">DESIGNATE:SendStatus(AttackGroup, Duration, MenuAttackGroup)</a></td>
<td class="summary">
<p>Sends the status to the Attack Groups.</p>
</td>
@ -1065,19 +1065,24 @@ function below will use the range 1-7 just in case</p>
<dt>
<a id="#(DESIGNATE).MenuStatus" >
<strong>DESIGNATE:MenuStatus(AttackGroup)</strong>
<strong>DESIGNATE:MenuStatus(AttackGroup, Duration)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> AttackGroup </em></code>: </p>
</li>
<li>
<p><code><em> Duration </em></code>: </p>
</li>
</ul>
</dd>
@ -1556,7 +1561,7 @@ The Attack collection of GROUP objects to designate and report for.</p>
<dt>
<a id="#(DESIGNATE).SendStatus" >
<strong>DESIGNATE:SendStatus(AttackGroup, MenuAttackGroup)</strong>
<strong>DESIGNATE:SendStatus(AttackGroup, Duration, MenuAttackGroup)</strong>
</a>
</dt>
<dd>
@ -1572,6 +1577,12 @@ The Attack collection of GROUP objects to designate and report for.</p>
</li>
<li>
<p><code><em>#number Duration </em></code>:
The time in seconds the report should be visible.</p>
</li>
<li>
<p><code><em> MenuAttackGroup </em></code>: </p>
</li>

View File

@ -192,6 +192,12 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).CreateDetectionItems">DETECTION_AREAS:CreateDetectionItems()</a></td>
<td class="summary">
<p>Make a DetectionSet table.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).DetectedItemMenu">DETECTION_AREAS:DetectedItemMenu(Index)</a></td>
<td class="summary">
<p>Menu of a detected item using a given numeric index.</p>
</td>
</tr>
<tr>
@ -204,6 +210,12 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).DetectedItems">DETECTION_AREAS.DetectedItems</a></td>
<td class="summary">
<p>A list of areas containing the set of <a href="Unit.html">Unit</a>s, <a href="Zone.html">Zone</a>s, the center <a href="Unit.html">Unit</a> within the zone, and ID of each area that was detected within a DetectionZoneRange.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).DetectedReportDetailed">DETECTION_AREAS:DetectedReportDetailed()</a></td>
<td class="summary">
<p>Report detailed of a detection result.</p>
</td>
</tr>
<tr>
@ -331,7 +343,7 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).AddDetectedItem">DETECTION_BASE:AddDetectedItem(DetectedItemIndex, Set)</a></td>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).AddDetectedItem">DETECTION_BASE:AddDetectedItem(ItemPrefix, DetectedItemIndex, Set)</a></td>
<td class="summary">
<p>Adds a new DetectedItem to the DetectedItems list.</p>
</td>
@ -424,6 +436,12 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).DetectedItemMax">DETECTION_BASE.DetectedItemMax</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).DetectedItemMenu">DETECTION_BASE:DetectedItemMenu(Index)</a></td>
<td class="summary">
<p>Menu of a detected item using a given numeric index.</p>
</td>
</tr>
<tr>
@ -513,12 +531,24 @@ The different values of Unit.Category can be:</p>
</ul>
<p>Multiple Unit.Category entries can be given as a table and then these will be evaluated as an OR expression.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedID">DETECTION_BASE:GetDetectedID(Index)</a></td>
<td class="summary">
<p>Get a detected ID using a given numeric index.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedItem">DETECTION_BASE:GetDetectedItem(Index)</a></td>
<td class="summary">
<p>Get a detected item using a given numeric index.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedItemID">DETECTION_BASE:GetDetectedItemID(Index)</a></td>
<td class="summary">
<p>Get a detected ItemID using a given numeric index.</p>
</td>
</tr>
<tr>
@ -905,6 +935,42 @@ The different values of Unit.Category can be:</p>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).Identified">DETECTION_BASE.DetectedObject.Identified</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).IsVisible">DETECTION_BASE.DetectedObject.IsVisible</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).KnowDistance">DETECTION_BASE.DetectedObject.KnowDistance</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).KnowType">DETECTION_BASE.DetectedObject.KnowType</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).LastPos">DETECTION_BASE.DetectedObject.LastPos</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).LastTime">DETECTION_BASE.DetectedObject.LastTime</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).LastVelocity">DETECTION_BASE.DetectedObject.LastVelocity</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -917,12 +983,6 @@ The different values of Unit.Category can be:</p>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).Type">DETECTION_BASE.DetectedObject.Type</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedObject).Visible">DETECTION_BASE.DetectedObject.Visible</a></td>
<td class="summary">
</td>
</tr>
</table>
@ -939,6 +999,12 @@ The different values of Unit.Category can be:</p>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_TYPES).CreateDetectionItems">DETECTION_TYPES:CreateDetectionItems()</a></td>
<td class="summary">
<p>Create the DetectedItems list from the DetectedObjects table.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_TYPES).DetectedItemMenu">DETECTION_TYPES:DetectedItemMenu(Index, DetectedTypeName)</a></td>
<td class="summary">
<p>Menu of a DetectedItem using a given numeric index.</p>
</td>
</tr>
<tr>
@ -1015,6 +1081,12 @@ The different values of Unit.Category can be:</p>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_UNITS).CreateDetectionItems">DETECTION_UNITS:CreateDetectionItems()</a></td>
<td class="summary">
<p>Create the DetectedItems list from the DetectedObjects table.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_UNITS).DetectedItemMenu">DETECTION_UNITS:DetectedItemMenu(Index)</a></td>
<td class="summary">
<p>Menu of a DetectedItem using a given numeric index.</p>
</td>
</tr>
<tr>
@ -1476,6 +1548,32 @@ self</p>
<p><em><a href="##(DETECTION_AREAS)">#DETECTION_AREAS</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_AREAS).DetectedItemMenu" >
<strong>DETECTION_AREAS:DetectedItemMenu(Index)</strong>
</a>
</dt>
<dd>
<p>Menu of a detected item using a given numeric index.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
@ -1516,6 +1614,24 @@ self</p>
<p>A list of areas containing the set of <a href="Unit.html">Unit</a>s, <a href="Zone.html">Zone</a>s, the center <a href="Unit.html">Unit</a> within the zone, and ID of each area that was detected within a DetectionZoneRange.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_AREAS).DetectedReportDetailed" >
<strong>DETECTION_AREAS:DetectedReportDetailed()</strong>
</a>
</dt>
<dd>
<p>Report detailed of a detection result.</p>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
@ -1944,7 +2060,7 @@ self</p>
<dt>
<a id="#(DETECTION_BASE).AddDetectedItem" >
<strong>DETECTION_BASE:AddDetectedItem(DetectedItemIndex, Set)</strong>
<strong>DETECTION_BASE:AddDetectedItem(ItemPrefix, DetectedItemIndex, Set)</strong>
</a>
</dt>
<dd>
@ -1958,6 +2074,11 @@ self</p>
<ul>
<li>
<p><code><em> ItemPrefix </em></code>: </p>
</li>
<li>
<p><code><em>#string DetectedItemIndex </em></code>:
The index of the DetectedItem.</p>
@ -2223,6 +2344,32 @@ The index of the DetectedItem.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_BASE).DetectedItemMenu" >
<strong>DETECTION_BASE:DetectedItemMenu(Index)</strong>
</a>
</dt>
<dd>
<p>Menu of a detected item using a given numeric index.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
@ -2468,6 +2615,32 @@ self</p>
<dl class="function">
<dt>
<a id="#(DETECTION_BASE).GetDetectedID" >
<strong>DETECTION_BASE:GetDetectedID(Index)</strong>
</a>
</dt>
<dd>
<p>Get a detected ID using a given numeric index.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
DetectedItemID</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_BASE).GetDetectedItem" >
<strong>DETECTION_BASE:GetDetectedItem(Index)</strong>
</a>
@ -2489,6 +2662,32 @@ self</p>
<p><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_BASE).GetDetectedItemID" >
<strong>DETECTION_BASE:GetDetectedItemID(Index)</strong>
</a>
</dt>
<dd>
<p>Get a detected ItemID using a given numeric index.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
DetectedItemID</p>
</dd>
</dl>
<dl class="function">
@ -4061,6 +4260,90 @@ The To State string.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(DETECTION_BASE.DetectedObject).IsVisible" >
<strong>DETECTION_BASE.DetectedObject.IsVisible</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(DETECTION_BASE.DetectedObject).KnowDistance" >
<strong>DETECTION_BASE.DetectedObject.KnowDistance</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(DETECTION_BASE.DetectedObject).KnowType" >
<strong>DETECTION_BASE.DetectedObject.KnowType</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(DETECTION_BASE.DetectedObject).LastPos" >
<strong>DETECTION_BASE.DetectedObject.LastPos</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(DETECTION_BASE.DetectedObject).LastTime" >
<strong>DETECTION_BASE.DetectedObject.LastTime</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(DETECTION_BASE.DetectedObject).LastVelocity" >
<strong>DETECTION_BASE.DetectedObject.LastVelocity</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
@ -4089,20 +4372,6 @@ The To State string.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(DETECTION_BASE.DetectedObject).Visible" >
<strong>DETECTION_BASE.DetectedObject.Visible</strong>
</a>
</dt>
<dd>
</dd>
</dl>
@ -4154,6 +4423,37 @@ Beware that when the amount of different types detected is large, the DetectedIt
<p><em><a href="##(DETECTION_TYPES)">#DETECTION_TYPES</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_TYPES).DetectedItemMenu" >
<strong>DETECTION_TYPES:DetectedItemMenu(Index, DetectedTypeName)</strong>
</a>
</dt>
<dd>
<p>Menu of a DetectedItem using a given numeric index.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> Index </em></code>: </p>
</li>
<li>
<p><code><em> DetectedTypeName </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
@ -4389,6 +4689,32 @@ Beware that when the amount of units detected is large, the DetectedItems list w
<p><em><a href="##(DETECTION_UNITS)">#DETECTION_UNITS</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DETECTION_UNITS).DetectedItemMenu" >
<strong>DETECTION_UNITS:DetectedItemMenu(Index)</strong>
</a>
</dt>
<dd>
<p>Menu of a DetectedItem using a given numeric index.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">

View File

@ -1622,7 +1622,7 @@ A string defining the start state.</p>
<dl class="function">
<dt>
<em>#string</em>
<em></em>
<a id="#(FSM)._StartState" >
<strong>FSM._StartState</strong>
</a>
@ -1921,6 +1921,7 @@ A string defining the start state.</p>
<dl class="function">
<dt>
<em></em>
<a id="#(FSM).current" >
<strong>FSM.current</strong>
</a>

View File

@ -167,7 +167,7 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).GetMenu">MISSION:GetMenu(TaskGroup)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).GetMenu">MISSION:GetMenu()</a></td>
<td class="summary">
<p>Gets the mission menu for the coalition.</p>
</td>
@ -200,6 +200,12 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
<td class="name" nowrap="nowrap"><a href="##(MISSION).GetTasks">MISSION:GetTasks()</a></td>
<td class="summary">
<p>Get all the TASKs from the Mission.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).GetTasksRemaining">MISSION:GetTasksRemaining()</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -209,39 +215,51 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsCompleted">MISSION:IsCompleted()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsCOMPLETED">MISSION:IsCOMPLETED()</a></td>
<td class="summary">
<p>Is the <a href="Mission.html">Mission</a> <strong>Completed</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>COMPLETED</strong>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsFailed">MISSION:IsFailed()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsENGAGED">MISSION:IsENGAGED()</a></td>
<td class="summary">
<p>Is the <a href="Mission.html">Mission</a> <strong>Failed</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>ENGAGED</strong>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsHold">MISSION:IsHold()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsFAILED">MISSION:IsFAILED()</a></td>
<td class="summary">
<p>Is the <a href="Mission.html">Mission</a> <strong>Hold</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>FAILED</strong>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsIdle">MISSION:IsIdle()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsHOLD">MISSION:IsHOLD()</a></td>
<td class="summary">
<p>Is the <a href="Mission.html">Mission</a> <strong>Idle</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>HOLD</strong>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsOngoing">MISSION:IsOngoing()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).IsIDLE">MISSION:IsIDLE()</a></td>
<td class="summary">
<p>Is the <a href="Mission.html">Mission</a> <strong>Ongoing</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>IDLE</strong>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).JoinUnit">MISSION:JoinUnit(PlayerUnit, PlayerGroup)</a></td>
<td class="summary">
<p>Add a Unit to join the Mission.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).MenuReportOverview">MISSION:MenuReportOverview(TaskStatus, ReportGroup)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).MenuReportSummary">MISSION:MenuReportSummary(ReportGroup)</a></td>
<td class="summary">
</td>
</tr>
<tr>
@ -323,51 +341,51 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterCompleted">MISSION:OnEnterCompleted(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterCOMPLETED">MISSION:OnEnterCOMPLETED(From, Event, To)</a></td>
<td class="summary">
<p>OnEnter Transition Handler for State Completed.</p>
<p>OnEnter Transition Handler for State COMPLETED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterFailed">MISSION:OnEnterFailed(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterENGAGED">MISSION:OnEnterENGAGED(From, Event, To)</a></td>
<td class="summary">
<p>OnEnter Transition Handler for State Failed.</p>
<p>OnEnter Transition Handler for State ENGAGED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterIdle">MISSION:OnEnterIdle(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterFAILED">MISSION:OnEnterFAILED(From, Event, To)</a></td>
<td class="summary">
<p>OnEnter Transition Handler for State Idle.</p>
<p>OnEnter Transition Handler for State FAILED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterOngoing">MISSION:OnEnterOngoing(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnEnterIDLE">MISSION:OnEnterIDLE(From, Event, To)</a></td>
<td class="summary">
<p>OnEnter Transition Handler for State Ongoing.</p>
<p>OnEnter Transition Handler for State IDLE.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveCompleted">MISSION:OnLeaveCompleted(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveCOMPLETED">MISSION:OnLeaveCOMPLETED(From, Event, To)</a></td>
<td class="summary">
<p>OnLeave Transition Handler for State Completed.</p>
<p>OnLeave Transition Handler for State COMPLETED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveFailed">MISSION:OnLeaveFailed(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveENGAGED">MISSION:OnLeaveENGAGED(From, Event, To)</a></td>
<td class="summary">
<p>OnLeave Transition Handler for State Failed.</p>
<p>OnLeave Transition Handler for State ENGAGED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveIdle">MISSION:OnLeaveIdle(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveFAILED">MISSION:OnLeaveFAILED(From, Event, To)</a></td>
<td class="summary">
<p>OnLeave Transition Handler for State Idle.</p>
<p>OnLeave Transition Handler for State FAILED.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveOngoing">MISSION:OnLeaveOngoing(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).OnLeaveIDLE">MISSION:OnLeaveIDLE(From, Event, To)</a></td>
<td class="summary">
<p>OnLeave Transition Handler for State Ongoing.</p>
<p>OnLeave Transition Handler for State IDLE.</p>
</td>
</tr>
<tr>
@ -395,7 +413,7 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).ReportOverview">MISSION:ReportOverview()</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).ReportOverview">MISSION:ReportOverview(TaskStatus)</a></td>
<td class="summary">
<p>Create a overview report of the Mission (multiple lines).</p>
</td>
@ -467,7 +485,7 @@ A <a href="CLIENT.html">CLIENT</a> needs to be registered within the <a href="MI
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSION).onenterCompleted">MISSION:onenterCompleted(From, Event, To)</a></td>
<td class="name" nowrap="nowrap"><a href="##(MISSION).onenterCOMPLETED">MISSION:onenterCOMPLETED(From, Event, To)</a></td>
<td class="summary">
</td>
@ -697,21 +715,13 @@ true if Unit is part of a Task in the Mission.</p>
<dt>
<a id="#(MISSION).GetMenu" >
<strong>MISSION:GetMenu(TaskGroup)</strong>
<strong>MISSION:GetMenu()</strong>
</a>
</dt>
<dd>
<p>Gets the mission menu for the coalition.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> TaskGroup </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Core.Menu.html##(MENU_COALITION)">Core.Menu#MENU_COALITION</a>:</em>
@ -851,6 +861,24 @@ Returns nil if no task was found.</p>
Tasks = Mission:GetTasks()
env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" )</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSION).GetTasksRemaining" >
<strong>MISSION:GetTasksRemaining()</strong>
</a>
</dt>
<dd>
<h3>Return value</h3>
<p><em>#number:</em></p>
</dd>
</dl>
<dl class="function">
@ -893,13 +921,13 @@ true if the Mission has a Group.</p>
<dl class="function">
<dt>
<a id="#(MISSION).IsCompleted" >
<strong>MISSION:IsCompleted()</strong>
<a id="#(MISSION).IsCOMPLETED" >
<strong>MISSION:IsCOMPLETED()</strong>
</a>
</dt>
<dd>
<p>Is the <a href="Mission.html">Mission</a> <strong>Completed</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>COMPLETED</strong>.</p>
<h3>Return value</h3>
@ -911,13 +939,13 @@ true if the Mission has a Group.</p>
<dl class="function">
<dt>
<a id="#(MISSION).IsFailed" >
<strong>MISSION:IsFailed()</strong>
<a id="#(MISSION).IsENGAGED" >
<strong>MISSION:IsENGAGED()</strong>
</a>
</dt>
<dd>
<p>Is the <a href="Mission.html">Mission</a> <strong>Failed</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>ENGAGED</strong>.</p>
<h3>Return value</h3>
@ -929,13 +957,13 @@ true if the Mission has a Group.</p>
<dl class="function">
<dt>
<a id="#(MISSION).IsHold" >
<strong>MISSION:IsHold()</strong>
<a id="#(MISSION).IsFAILED" >
<strong>MISSION:IsFAILED()</strong>
</a>
</dt>
<dd>
<p>Is the <a href="Mission.html">Mission</a> <strong>Hold</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>FAILED</strong>.</p>
<h3>Return value</h3>
@ -947,13 +975,13 @@ true if the Mission has a Group.</p>
<dl class="function">
<dt>
<a id="#(MISSION).IsIdle" >
<strong>MISSION:IsIdle()</strong>
<a id="#(MISSION).IsHOLD" >
<strong>MISSION:IsHOLD()</strong>
</a>
</dt>
<dd>
<p>Is the <a href="Mission.html">Mission</a> <strong>Idle</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>HOLD</strong>.</p>
<h3>Return value</h3>
@ -965,13 +993,13 @@ true if the Mission has a Group.</p>
<dl class="function">
<dt>
<a id="#(MISSION).IsOngoing" >
<strong>MISSION:IsOngoing()</strong>
<a id="#(MISSION).IsIDLE" >
<strong>MISSION:IsIDLE()</strong>
</a>
</dt>
<dd>
<p>Is the <a href="Mission.html">Mission</a> <strong>Ongoing</strong>.</p>
<p>Is the <a href="Mission.html">Mission</a> <strong>IDLE</strong>.</p>
<h3>Return value</h3>
@ -1016,6 +1044,54 @@ The GROUP of the player joining the Mission.</p>
<p><em>#boolean:</em>
true if Unit is part of a Task in the Mission.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSION).MenuReportOverview" >
<strong>MISSION:MenuReportOverview(TaskStatus, ReportGroup)</strong>
</a>
</dt>
<dd>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#string TaskStatus </em></code>:
The status</p>
</li>
<li>
<p><code><em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> ReportGroup </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSION).MenuReportSummary" >
<strong>MISSION:MenuReportSummary(ReportGroup)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> ReportGroup </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
@ -1422,13 +1498,13 @@ Return false to cancel Transition.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnEnterCompleted" >
<strong>MISSION:OnEnterCompleted(From, Event, To)</strong>
<a id="#(MISSION).OnEnterCOMPLETED" >
<strong>MISSION:OnEnterCOMPLETED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnEnter Transition Handler for State Completed.</p>
<p>OnEnter Transition Handler for State COMPLETED.</p>
<h3>Parameters</h3>
<ul>
@ -1456,13 +1532,13 @@ The To State string.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnEnterFailed" >
<strong>MISSION:OnEnterFailed(From, Event, To)</strong>
<a id="#(MISSION).OnEnterENGAGED" >
<strong>MISSION:OnEnterENGAGED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnEnter Transition Handler for State Failed.</p>
<p>OnEnter Transition Handler for State ENGAGED.</p>
<h3>Parameters</h3>
<ul>
@ -1490,13 +1566,13 @@ The To State string.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnEnterIdle" >
<strong>MISSION:OnEnterIdle(From, Event, To)</strong>
<a id="#(MISSION).OnEnterFAILED" >
<strong>MISSION:OnEnterFAILED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnEnter Transition Handler for State Idle.</p>
<p>OnEnter Transition Handler for State FAILED.</p>
<h3>Parameters</h3>
<ul>
@ -1524,13 +1600,13 @@ The To State string.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnEnterOngoing" >
<strong>MISSION:OnEnterOngoing(From, Event, To)</strong>
<a id="#(MISSION).OnEnterIDLE" >
<strong>MISSION:OnEnterIDLE(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnEnter Transition Handler for State Ongoing.</p>
<p>OnEnter Transition Handler for State IDLE.</p>
<h3>Parameters</h3>
<ul>
@ -1558,13 +1634,13 @@ The To State string.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnLeaveCompleted" >
<strong>MISSION:OnLeaveCompleted(From, Event, To)</strong>
<a id="#(MISSION).OnLeaveCOMPLETED" >
<strong>MISSION:OnLeaveCOMPLETED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnLeave Transition Handler for State Completed.</p>
<p>OnLeave Transition Handler for State COMPLETED.</p>
<h3>Parameters</h3>
<ul>
@ -1597,13 +1673,13 @@ Return false to cancel Transition.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnLeaveFailed" >
<strong>MISSION:OnLeaveFailed(From, Event, To)</strong>
<a id="#(MISSION).OnLeaveENGAGED" >
<strong>MISSION:OnLeaveENGAGED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnLeave Transition Handler for State Failed.</p>
<p>OnLeave Transition Handler for State ENGAGED.</p>
<h3>Parameters</h3>
<ul>
@ -1636,13 +1712,13 @@ Return false to cancel Transition.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnLeaveIdle" >
<strong>MISSION:OnLeaveIdle(From, Event, To)</strong>
<a id="#(MISSION).OnLeaveFAILED" >
<strong>MISSION:OnLeaveFAILED(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnLeave Transition Handler for State Idle.</p>
<p>OnLeave Transition Handler for State FAILED.</p>
<h3>Parameters</h3>
<ul>
@ -1675,13 +1751,13 @@ Return false to cancel Transition.</p>
<dl class="function">
<dt>
<a id="#(MISSION).OnLeaveOngoing" >
<strong>MISSION:OnLeaveOngoing(From, Event, To)</strong>
<a id="#(MISSION).OnLeaveIDLE" >
<strong>MISSION:OnLeaveIDLE(From, Event, To)</strong>
</a>
</dt>
<dd>
<p>OnLeave Transition Handler for State Ongoing.</p>
<p>OnLeave Transition Handler for State IDLE.</p>
<h3>Parameters</h3>
<ul>
@ -1811,13 +1887,21 @@ self</p>
<dt>
<a id="#(MISSION).ReportOverview" >
<strong>MISSION:ReportOverview()</strong>
<strong>MISSION:ReportOverview(TaskStatus)</strong>
</a>
</dt>
<dd>
<p>Create a overview report of the Mission (multiple lines).</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> TaskStatus </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em></p>
@ -2047,8 +2131,8 @@ The delay in seconds.</p>
<dl class="function">
<dt>
<a id="#(MISSION).onenterCompleted" >
<strong>MISSION:onenterCompleted(From, Event, To)</strong>
<a id="#(MISSION).onenterCOMPLETED" >
<strong>MISSION:onenterCOMPLETED(From, Event, To)</strong>
</a>
</dt>
<dd>

View File

@ -213,7 +213,6 @@ on defined intervals (currently every minute).</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(MOVEMENT).AliveUnits" >
<strong>MOVEMENT.AliveUnits</strong>
</a>
@ -222,9 +221,6 @@ on defined intervals (currently every minute).</p>
<p> Contains the counter how many units are currently alive</p>
</dd>
</dl>
<dl class="function">

View File

@ -157,6 +157,14 @@
<h2>Global(s)</h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="#COORDINATE">COORDINATE</a></td>
<td class="summary">
<h1>COORDINATE class, extends <a href="Point.html##(COORDINATE)">Point#COORDINATE</a></h1>
<p>The COORDINATE class defines a 2D coordinate in the simulator.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="#POINT_VEC2">POINT_VEC2</a></td>
<td class="summary">
@ -174,6 +182,107 @@
</td>
</tr>
</table>
<h2><a id="#(COORDINATE)">Type <code>COORDINATE</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).CoordinateMenu">COORDINATE:CoordinateMenu(RootMenu)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).LL_Accuracy">COORDINATE.LL_Accuracy</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).LL_DMS">COORDINATE.LL_DMS</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).MGRS_Accuracy">COORDINATE.MGRS_Accuracy</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).MenuLL_Accuracy">COORDINATE:MenuLL_Accuracy(LL_Accuracy)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).MenuLL_DMS">COORDINATE:MenuLL_DMS(LL_DMS)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).MenuMGRS_Accuracy">COORDINATE:MenuMGRS_Accuracy(MGRS_Accuracy)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).MenuSystem">COORDINATE:MenuSystem(System)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).New">COORDINATE:New(x, y, LandHeightAdd)</a></td>
<td class="summary">
<p>COORDINATE constructor.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).NewFromVec2">COORDINATE:NewFromVec2(Vec2, LandHeightAdd)</a></td>
<td class="summary">
<p>Create a new COORDINATE object from Vec2 coordinates.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).NewFromVec3">COORDINATE:NewFromVec3(Vec3)</a></td>
<td class="summary">
<p>Create a new COORDINATE object from Vec3 coordinates.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).System">COORDINATE.System</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).SystemMenu">COORDINATE.SystemMenu</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToString">COORDINATE:ToString()</a></td>
<td class="summary">
<p>Provides a coordinate string of the point, based on a coordinate format system:
* Uses default settings in COORDINATE.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToStringLL">COORDINATE:ToStringLL(LL_Accuracy, LL_DMS)</a></td>
<td class="summary">
<p>Provides a Lat Lon string</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToStringMGRS">COORDINATE:ToStringMGRS(MGRS_Accuracy)</a></td>
<td class="summary">
<p>Provides a MGRS string</p>
</td>
</tr>
</table>
<h2><a id="#(POINT_VEC2)">Type <code>POINT_VEC2</code></a></h2>
<table class="function_list">
<tr>
@ -622,12 +731,6 @@
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).ToStringBR">POINT_VEC3:ToStringBR(AngleRadians, Distance)</a></td>
<td class="summary">
<p>Provides a Bearing / Range string</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POINT_VEC3).ToStringLL">POINT_VEC3:ToStringLL(AngleRadians, Distance, acc, DMS)</a></td>
<td class="summary">
<p>Provides a Bearing / Range string</p>
</td>
</tr>
<tr>
@ -702,6 +805,51 @@
<dl class="function">
<dt>
<em><a href="##(COORDINATE)">#COORDINATE</a></em>
<a id="COORDINATE" >
<strong>COORDINATE</strong>
</a>
</dt>
<dd>
<h1>COORDINATE class, extends <a href="Point.html##(COORDINATE)">Point#COORDINATE</a></h1>
<p>The COORDINATE class defines a 2D coordinate in the simulator.</p>
<p>The height coordinate (if needed) will be the land height + an optional added height specified.
A COORDINATE can be expressed in LL or in MGRS.</p>
<h2>COORDINATE constructor</h2>
<p>A new COORDINATE instance can be created with:</p>
<ul>
<li><a href="Point.html##(COORDINATE).New">Point#COORDINATE.New</a>(): a 2D point, taking an additional height parameter.</li>
<li><a href="Point.html##(COORDINATE).NewFromVec2">Point#COORDINATE.NewFromVec2</a>(): a 2D point created from a <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>.</li>
</ul>
<h2>Manupulate the X, Altitude, Y coordinates of the 2D point</h2>
<p>A COORDINATE class works in 2D space, with an altitude setting. It contains internally an X, Altitude, Y coordinate.
Methods exist to manupulate these coordinates.</p>
<p>The current X, Altitude, Y axis can be retrieved with the methods <a href="##(COORDINATE).GetX">COORDINATE.GetX</a>(), <a href="##(COORDINATE).GetAlt">COORDINATE.GetAlt</a>(), <a href="##(COORDINATE).GetY">COORDINATE.GetY</a>() respectively.
The methods <a href="##(COORDINATE).SetX">COORDINATE.SetX</a>(), <a href="##(COORDINATE).SetAlt">COORDINATE.SetAlt</a>(), <a href="##(COORDINATE).SetY">COORDINATE.SetY</a>() change the respective axis with a new value.
The current Lat(itude), Alt(itude), Lon(gitude) values can also be retrieved with the methods <a href="##(COORDINATE).GetLat">COORDINATE.GetLat</a>(), <a href="##(COORDINATE).GetAlt">COORDINATE.GetAlt</a>(), <a href="##(COORDINATE).GetLon">COORDINATE.GetLon</a>() respectively.
The current axis values can be changed by using the methods <a href="##(COORDINATE).AddX">COORDINATE.AddX</a>(), <a href="##(COORDINATE).AddAlt">COORDINATE.AddAlt</a>(), <a href="##(COORDINATE).AddY">COORDINATE.AddY</a>()
to add or substract a value from the current respective axis value.
Note that the Set and Add methods return the current COORDINATE object, so these manipulation methods can be chained... For example:</p>
<pre><code> local Vec2 = PointVec2:AddX( 100 ):AddY( 2000 ):GetVec2()
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="##(POINT_VEC2)">#POINT_VEC2</a></em>
<a id="POINT_VEC2" >
<strong>POINT_VEC2</strong>
@ -904,6 +1052,378 @@ Note that the Set and Add methods return the current POINT_VEC3 object, so these
</dl>
<h2><a id="#(Point)" >Type <code>Point</code></a></h2>
<h2><a id="#(COORDINATE)" >Type <code>COORDINATE</code></a></h2>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<a id="#(COORDINATE).CoordinateMenu" >
<strong>COORDINATE:CoordinateMenu(RootMenu)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> RootMenu </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
The coordinate Text in the configured coordinate system.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(COORDINATE).LL_Accuracy" >
<strong>COORDINATE.LL_Accuracy</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(COORDINATE).LL_DMS" >
<strong>COORDINATE.LL_DMS</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(COORDINATE).MGRS_Accuracy" >
<strong>COORDINATE.MGRS_Accuracy</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).MenuLL_Accuracy" >
<strong>COORDINATE:MenuLL_Accuracy(LL_Accuracy)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> LL_Accuracy </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).MenuLL_DMS" >
<strong>COORDINATE:MenuLL_DMS(LL_DMS)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> LL_DMS </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).MenuMGRS_Accuracy" >
<strong>COORDINATE:MenuMGRS_Accuracy(MGRS_Accuracy)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> MGRS_Accuracy </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).MenuSystem" >
<strong>COORDINATE:MenuSystem(System)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> System </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).New" >
<strong>COORDINATE:New(x, y, LandHeightAdd)</strong>
</a>
</dt>
<dd>
<p>COORDINATE constructor.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Distance)">Dcs.DCSTypes#Distance</a> x </em></code>:
The x coordinate of the Vec3 point, pointing to the North.</p>
</li>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Distance)">Dcs.DCSTypes#Distance</a> y </em></code>:
The y coordinate of the Vec3 point, pointing to the Right.</p>
</li>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Distance)">Dcs.DCSTypes#Distance</a> LandHeightAdd </em></code>:
(optional) The default height if required to be evaluated will be the land height of the x, y coordinate. You can specify an extra height to be added to the land height.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).NewFromVec2" >
<strong>COORDINATE:NewFromVec2(Vec2, LandHeightAdd)</strong>
</a>
</dt>
<dd>
<p>Create a new COORDINATE object from Vec2 coordinates.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Vec2)">Dcs.DCSTypes#Vec2</a> Vec2 </em></code>:
The Vec2 point.</p>
</li>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Distance)">Dcs.DCSTypes#Distance</a> LandHeightAdd </em></code>:
(optional) The default height if required to be evaluated will be the land height of the x, y coordinate. You can specify an extra height to be added to the land height.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).NewFromVec3" >
<strong>COORDINATE:NewFromVec3(Vec3)</strong>
</a>
</dt>
<dd>
<p>Create a new COORDINATE object from Vec3 coordinates.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Vec3)">Dcs.DCSTypes#Vec3</a> Vec3 </em></code>:
The Vec3 point.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(COORDINATE).System" >
<strong>COORDINATE.System</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).SystemMenu" >
<strong>COORDINATE.SystemMenu</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).ToString" >
<strong>COORDINATE:ToString()</strong>
</a>
</dt>
<dd>
<p>Provides a coordinate string of the point, based on a coordinate format system:
* Uses default settings in COORDINATE.</p>
<ul>
<li>Can be overridden if for a GROUP containing x clients, a menu was selected to override the default.</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
The coordinate Text in the configured coordinate system.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).ToStringLL" >
<strong>COORDINATE:ToStringLL(LL_Accuracy, LL_DMS)</strong>
</a>
</dt>
<dd>
<p>Provides a Lat Lon string</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number LL_Accuracy </em></code>:
The accurancy of significant numbers behind the comma... So Accurancy of 2 is 0.01.</p>
</li>
<li>
<p><code><em>#boolean LL_DMS </em></code>:
true = Degrees, Minutes, Seconds; false = Degrees, Minutes</p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
The LL Text</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(COORDINATE).ToStringMGRS" >
<strong>COORDINATE:ToStringMGRS(MGRS_Accuracy)</strong>
</a>
</dt>
<dd>
<p>Provides a MGRS string</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number MGRS_Accuracy </em></code>:
of the 5 digit code.
Precision depends on the Accuracy choosen:
* 0 = no digits - precision level 100 km
* 1 = 1 digits - precision level 10 km
* 2 = 2 digits - precision level 1 km
* 3 = 3 digits - precision level 100 m
* 4 = 4 digits - precision level 10 m.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
The MGRS Text</p>
</dd>
</dl>
<h2><a id="#(POINT_VEC2)" >Type <code>POINT_VEC2</code></a></h2>
<h3>Field(s)</h3>
<dl class="function">
@ -2664,49 +3184,6 @@ The BR Text</p>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).ToStringLL" >
<strong>POINT_VEC3:ToStringLL(AngleRadians, Distance, acc, DMS)</strong>
</a>
</dt>
<dd>
<p>Provides a Bearing / Range string</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number AngleRadians </em></code>:
The angle in randians</p>
</li>
<li>
<p><code><em>#number Distance </em></code>:
The distance</p>
</li>
<li>
<p><code><em> acc </em></code>: </p>
</li>
<li>
<p><code><em> DMS </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em>#string:</em>
The BR Text</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POINT_VEC3).Translate" >
<strong>POINT_VEC3:Translate(Distance, Angle)</strong>
</a>

View File

@ -163,6 +163,12 @@
<td class="name" nowrap="nowrap"><a href="##(POSITIONABLE).GetBeacon">POSITIONABLE:GetBeacon()</a></td>
<td class="summary">
<p>Create a <a href="Radio.html##(BEACON)">Radio#BEACON</a>, to allow this POSITIONABLE to broadcast beacon signals</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(POSITIONABLE).GetCoordinate">POSITIONABLE:GetCoordinate()</a></td>
<td class="summary">
<p>Returns a COORDINATE object indicating the point in 3D of the POSITIONABLE within the mission.</p>
</td>
</tr>
<tr>
@ -457,6 +463,34 @@ Radio</p>
<dl class="function">
<dt>
<a id="#(POSITIONABLE).GetCoordinate" >
<strong>POSITIONABLE:GetCoordinate()</strong>
</a>
</dt>
<dd>
<p>Returns a COORDINATE object indicating the point in 3D of the POSITIONABLE within the mission.</p>
<h3>Return values</h3>
<ol>
<li>
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em>
The COORDINATE of the POSITIONABLE.</p>
</li>
<li>
<p><em>#nil:</em>
The POSITIONABLE is not existing or alive. </p>
</li>
</ol>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(POSITIONABLE).GetHeading" >
<strong>POSITIONABLE:GetHeading()</strong>
</a>

View File

@ -2527,9 +2527,6 @@ when nothing was spawned.</p>
<p> Overwrite unit names by default with group name.</p>
</dd>
</dl>
<dl class="function">
@ -2544,6 +2541,9 @@ when nothing was spawned.</p>
<p> By default, no InitLimit</p>
</dd>
</dl>
<dl class="function">
@ -2579,7 +2579,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxGroups" >
<strong>SPAWN.SpawnMaxGroups</strong>
</a>
@ -2596,7 +2596,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
</a>
@ -2948,7 +2948,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
<p> Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.</p>
<p> When the first Spawn executes, all the Groups need to be made visible before start.</p>
</dd>
</dl>

View File

@ -424,6 +424,12 @@
<td class="name" nowrap="nowrap"><a href="##(TASK).ReportDetails">TASK:ReportDetails()</a></td>
<td class="summary">
<p>Create a detailed report of the Task.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).ReportOverview">TASK:ReportOverview()</a></td>
<td class="summary">
<p>Create an overiew report of the Task.</p>
</td>
</tr>
<tr>
@ -466,6 +472,12 @@
<td class="name" nowrap="nowrap"><a href="##(TASK).SetID">TASK:SetID(TaskID)</a></td>
<td class="summary">
<p>Sets the ID of the Task</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK).SetInfo">TASK:SetInfo(TaskInfo, TaskInfoText)</a></td>
<td class="summary">
<p>Sets the Information on the Task</p>
</td>
</tr>
<tr>
@ -1859,6 +1871,27 @@ self</p>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(TASK).ReportOverview" >
<strong>TASK:ReportOverview()</strong>
</a>
</dt>
<dd>
<p>Create an overiew report of the Task.</p>
<p>List the Task Name and Status</p>
<h3>Return value</h3>
<p><em>#string:</em></p>
</dd>
</dl>
<dl class="function">
@ -2016,6 +2049,32 @@ self</p>
<dl class="function">
<dt>
<a id="#(TASK).SetInfo" >
<strong>TASK:SetInfo(TaskInfo, TaskInfoText)</strong>
</a>
</dt>
<dd>
<p>Sets the Information on the Task</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#string TaskInfo </em></code>: </p>
</li>
<li>
<p><code><em> TaskInfoText </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(TASK).SetMenu" >
<strong>TASK:SetMenu(MenuTime)</strong>
</a>

View File

@ -182,7 +182,7 @@ Find a summary below describing for which situation a task type is created:</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).EvaluateRemoveTask">TASK_A2G_DISPATCHER:EvaluateRemoveTask(Mission, Task, DetectedItem)</a></td>
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).EvaluateRemoveTask">TASK_A2G_DISPATCHER:EvaluateRemoveTask(Mission, Task, DetectedItemID, DetectedItemChange, DetectedItemChanged)</a></td>
<td class="summary">
<p>Evaluates the removal of the Task from the Mission.</p>
</td>
@ -221,6 +221,12 @@ Find a summary below describing for which situation a task type is created:</p>
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).SetGroup">TASK_A2G_DISPATCHER.SetGroup</a></td>
<td class="summary">
<p>The groups to which the FAC will report to.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).Tasks">TASK_A2G_DISPATCHER.Tasks</a></td>
<td class="summary">
</td>
</tr>
</table>
@ -336,7 +342,7 @@ Find a summary below describing for which situation a task type is created:</p>
<dt>
<a id="#(TASK_A2G_DISPATCHER).EvaluateRemoveTask" >
<strong>TASK_A2G_DISPATCHER:EvaluateRemoveTask(Mission, Task, DetectedItem)</strong>
<strong>TASK_A2G_DISPATCHER:EvaluateRemoveTask(Mission, Task, DetectedItemID, DetectedItemChange, DetectedItemChanged)</strong>
</a>
</dt>
<dd>
@ -360,7 +366,17 @@ Find a summary below describing for which situation a task type is created:</p>
</li>
<li>
<p><code><em><a href="Functional.Detection.html##(DETECTION_AREAS.DetectedItem)">Functional.Detection#DETECTION_AREAS.DetectedItem</a> DetectedItem </em></code>: </p>
<p><code><em>#boolean DetectedItemID </em></code>: </p>
</li>
<li>
<p><code><em>#boolean DetectedItemChange </em></code>: </p>
</li>
<li>
<p><code><em> DetectedItemChanged </em></code>: </p>
</li>
</ul>
@ -548,6 +564,20 @@ Return true if you want the task assigning to continue... false will cancel the
<p>The groups to which the FAC will report to.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(TASK_A2G_DISPATCHER).Tasks" >
<strong>TASK_A2G_DISPATCHER.Tasks</strong>
</a>
</dt>
<dd>
</dd>
</dl>

View File

@ -299,6 +299,12 @@ use negative idp for rounding ahead of decimal place, positive for rounding afte
<td class="name" nowrap="nowrap"><a href="##(UTILS).tostringLL">UTILS.tostringLL(lat, lon, acc, DMS)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(UTILS).tostringMGRS">UTILS.tostringMGRS(MGRS, acc)</a></td>
<td class="summary">
</td>
</tr>
</table>
@ -867,6 +873,35 @@ So:
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(UTILS).tostringMGRS" >
<strong>UTILS.tostringMGRS(MGRS, acc)</strong>
</a>
</dt>
<dd>
<p> acc- the accuracy of each easting/northing. 0, 1, 2, 3, 4, or 5.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> MGRS </em></code>: </p>
</li>
<li>
<p><code><em> acc </em></code>: </p>
</li>
</ul>
</dd>
</dl>
</div>

View File

@ -252,6 +252,12 @@
<td class="name" nowrap="nowrap"><a href="##(ZONE_BASE).GetBoundingSquare">ZONE_BASE:GetBoundingSquare()</a></td>
<td class="summary">
<p>Get the bounding square the zone.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ZONE_BASE).GetCoordinate">ZONE_BASE:GetCoordinate(Height)</a></td>
<td class="summary">
<p>Returns a <a href="Point.html##(COORDINATE)">Point#COORDINATE</a> of the zone.</p>
</td>
</tr>
<tr>
@ -933,6 +939,33 @@ The bounding square.</p>
<dl class="function">
<dt>
<a id="#(ZONE_BASE).GetCoordinate" >
<strong>ZONE_BASE:GetCoordinate(Height)</strong>
</a>
</dt>
<dd>
<p>Returns a <a href="Point.html##(COORDINATE)">Point#COORDINATE</a> of the zone.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Dcs.DCSTypes.html##(Distance)">Dcs.DCSTypes#Distance</a> Height </em></code>:
The height to add to the land height where the center of the zone is located.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em>
The Coordinate of the zone.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ZONE_BASE).GetName" >
<strong>ZONE_BASE:GetName()</strong>
</a>