Skip to content

Commit 2935c77

Browse files
Autogenerate Documentation with Sphinx (#181)
* First try for Sphinx documentation * Add more documentation * Prepare for more documentation-generation * Fixup build
1 parent 4801967 commit 2935c77

9 files changed

+597
-46
lines changed

Build/build.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set startingDir="%CD%"
33
set basepath="%~dp0"
44

55
cd %basepath%\..\Source
6-
set Sources=actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildimplementationcpp.go buildbindingjava.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go
6+
set Sources=actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildimplementationcpp.go buildbindingjava.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go
77

88
set GOOS=windows
99
set GOARCH=amd64

Build/build.sh

100755100644
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ startingpath="$(pwd)"
99
basepath="$(cd "$(dirname "$0")" && pwd)"
1010
cd "$basepath/../Source"
1111

12-
Sources="actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildbindingjava.go buildimplementationcpp.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go"
12+
Sources="actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildbindingjava.go buildimplementationcpp.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go"
1313
export GOARCH="amd64"
1414

1515
echo "Build act.exe"

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,19 @@ Alternatively to 1) build ACT from source ([master](../../tree/master) for a rel
5656
ACT supports generation of bindings or implementation stubs for C++, C, Pascal, Golang, NodeJS and Python3. However, not all features of the IDL are yet supported by the individual binding or implementation language:
5757

5858
#### Feature Matrix: Bindings
59-
| Binding | Status | Operating Systems | class | scalar type | struct | enumeration | string | basicarray | structarray | Callbacks | Error Message Propagation | Injection |
60-
|:---------------:|:----------------------------------------------------------:|:-----------------:|:---------:|:-------------:|:-------------:|:-------------:|:-------------:|:----------:|:-----------:|:---------:|:---------:|:---------:|
61-
| C++ | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
62-
| C++ Dynamic | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
63-
| C | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | - |
64-
| C Dynamic | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | - |
65-
| Pascal | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
66-
| Python3 | ![](Documentation/images/Tick.png) complete (but not very pythonic) | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
67-
| Golang | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
68-
| NodeJS | ![](Documentation/images/O.png) partial support | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | ? | ? | - | + | - |
69-
| C# | ![](Documentation/images/O.png) experimental | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | - | - | - | + | - |
70-
| Java | ![](Documentation/images/Tick.png) experimental | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + |
71-
| PHP | ![](Documentation/images/X.png) not implemented | Win, Linux, MacOS | - | - | - | - | - | - | - | - | - | - |
59+
| Binding | Status | Operating Systems | class | scalar type | struct | enumeration | string | basicarray | structarray | Callbacks | Error Message Propagation | Injection | API Documentation |
60+
|:---------------:|:----------------------------------------------------------:|:-----------------:|:---------:|:-------------:|:-------------:|:-------------:|:-------------:|:----------:|:-----------:|:---------:|:---------:|:---------:|:---------:|
61+
| C++ | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | + |
62+
| C++ Dynamic | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | + |
63+
| C | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | - | - |
64+
| C Dynamic | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | - | - |
65+
| Pascal | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | + |
66+
| Python3 | ![](Documentation/images/Tick.png) complete (but not very pythonic) | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | - |
67+
| Golang | ![](Documentation/images/Tick.png) mature | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | - |
68+
| NodeJS | ![](Documentation/images/O.png) partial support | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | ? | ? | - | + | - | - |
69+
| C# | ![](Documentation/images/O.png) experimental | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | - | - | - | + | - | - |
70+
| Java | ![](Documentation/images/Tick.png) experimental | Win, Linux, MacOS | in,return | in,out,return | in,out,return | in,out,return | in,out,return | in,out | in,out | in | + | + | - |
71+
| PHP | ![](Documentation/images/X.png) not implemented | Win, Linux, MacOS | - | - | - | - | - | - | - | - | - | - | - |
7272

7373
#### Feature Matrix: Implementation Stubs
7474
| Implementation | Status | Operating Systems | class | scalar type | struct | enumeration | string | basicarray | structarray | Callbacks | Journaling | Error Message Propagation | Injection |

Source/automaticcomponenttoolkit.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func createComponent(component ComponentDefinition, outfolderBase string, bindin
6464
outputFolder := path.Join(outfolderBase, component.NameSpace+"_component")
6565
outputFolderBindings := path.Join(outputFolder, "Bindings")
6666
outputFolderExamples := path.Join(outputFolder, "Examples")
67+
outputFolderDocumentation := path.Join(outputFolder, "Documentations")
6768
outputFolderImplementations := path.Join(outputFolder, "Implementations")
6869

6970
if bindingsDirectoryOverride != "" {
@@ -176,6 +177,12 @@ func createComponent(component ComponentDefinition, outfolderBase string, bindin
176177

177178
case "Cpp":
178179
{
180+
outputFolderDocumentationCppImplicit := outputFolderDocumentation + "/Cpp"
181+
err = os.MkdirAll(outputFolderDocumentationCppImplicit, os.ModePerm)
182+
if err != nil {
183+
log.Fatal(err)
184+
}
185+
179186
outputFolderBindingCppImplicit := outputFolderBindings + "/Cpp"
180187
err = os.MkdirAll(outputFolderBindingCppImplicit, os.ModePerm)
181188
if err != nil {
@@ -204,7 +211,7 @@ func createComponent(component ComponentDefinition, outfolderBase string, bindin
204211
}
205212

206213
err = BuildBindingCppImplicit(component, outputFolderBindingCppImplicit, outputFolderExampleCppImplicit,
207-
indentString, binding.ClassIdentifier)
214+
outputFolderDocumentationCppImplicit, indentString, binding.ClassIdentifier)
208215
if err != nil {
209216
return err
210217
}

Source/buildbindingccpp.go

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ func BuildBindingCExplicit(component ComponentDefinition, outputFolder string, o
115115
}
116116

117117
// BuildBindingCppImplicit builds dynamic C++-bindings of a library's API in form of implicitly linked functions handles.
118-
func BuildBindingCppImplicit(component ComponentDefinition, outputFolder string, outputFolderExample string, indentString string, ClassIdentifier string) error {
118+
func BuildBindingCppImplicit(component ComponentDefinition, outputFolder string, outputFolderExample string,
119+
outputFolderDocumentation string, indentString string, ClassIdentifier string) error {
119120
forceRecreation := false
120121
ExplicitLinking := false
121122

@@ -168,9 +169,17 @@ func BuildBindingCppImplicit(component ComponentDefinition, outputFolder string,
168169
log.Printf("Omitting recreation of C++-example CMakeLists-file \"%s\"", CPPCMake)
169170
}
170171
}
172+
173+
err = BuildCCPPDocumentation(component, outputFolderDocumentation, ClassIdentifier)
174+
if err != nil {
175+
return err
176+
}
177+
178+
171179
return nil
172180
}
173181

182+
174183
func buildDynamicCCPPHeader(component ComponentDefinition, w LanguageWriter, NameSpace string, BaseName string,
175184
headerOnly bool, useCPPTypes bool) error {
176185

@@ -523,7 +532,7 @@ func buildDynamicCImplementation(component ComponentDefinition, w LanguageWriter
523532
return nil
524533
}
525534

526-
func writeDynamicCPPMethodDeclaration(method ComponentDefinitionMethod, w LanguageWriter, NameSpace string, ClassIdentifier string, ClassName string) error {
535+
func getDynamicCPPMethodParameters(method ComponentDefinitionMethod, NameSpace string, ClassIdentifier string, ClassName string) (string, string, error) {
527536
parameters := ""
528537
returntype := "void"
529538

@@ -560,12 +569,19 @@ func writeDynamicCPPMethodDeclaration(method ComponentDefinitionMethod, w Langua
560569
case "return":
561570
returntype = getBindingCppParamType(param.ParamType, param.ParamClass, NameSpace, ClassIdentifier, false)
562571
default:
563-
return fmt.Errorf("invalid method parameter passing \"%s\" for %s.%s(%s)", param.ParamPass, ClassName, method.MethodName, param.ParamName)
572+
return "", "", fmt.Errorf("invalid method parameter passing \"%s\" for %s.%s(%s)", param.ParamPass, ClassName, method.MethodName, param.ParamName)
564573
}
565574
}
566575

567-
w.Writeln(" inline %s %s(%s);", returntype, method.MethodName, parameters)
576+
return parameters, returntype, nil
577+
}
568578

579+
func writeDynamicCPPMethodDeclaration(method ComponentDefinitionMethod, w LanguageWriter, NameSpace string, ClassIdentifier string, ClassName string) error {
580+
parameters, returntype, err := getDynamicCPPMethodParameters(method, NameSpace, ClassIdentifier, ClassName)
581+
if (err!= nil) {
582+
return err
583+
}
584+
w.Writeln(" inline %s %s(%s);", returntype, method.MethodName, parameters)
569585
return nil
570586
}
571587

@@ -967,12 +983,12 @@ func writeCPPInputVector(w LanguageWriter, NameSpace string, ClassIdentifier str
967983
w.Writeln(" ")
968984
w.Writeln("public:")
969985
w.Writeln(" ")
970-
w.Writeln(" C%sInputVector( const std::vector<T>& vec)", ClassIdentifier)
986+
w.Writeln(" C%sInputVector(const std::vector<T>& vec)", ClassIdentifier)
971987
w.Writeln(" : m_data( vec.data() ), m_size( vec.size() )")
972988
w.Writeln(" {")
973989
w.Writeln(" }")
974990
w.Writeln(" ")
975-
w.Writeln(" C%sInputVector( const T* in_data, size_t in_size)", ClassIdentifier)
991+
w.Writeln(" C%sInputVector(const T* in_data, size_t in_size)", ClassIdentifier)
976992
w.Writeln(" : m_data( in_data ), m_size(in_size )")
977993
w.Writeln(" {")
978994
w.Writeln(" }")
@@ -1089,6 +1105,20 @@ func getBindingCppVariableName(param ComponentDefinitionParam) string {
10891105
}
10901106

10911107

1108+
func getCPPInheritanceSpecifier(component ComponentDefinition, class ComponentDefinitionClass, cppClassPrefix string, ClassIdentifier string) (string, string) {
1109+
cppParentClassName := ""
1110+
inheritanceSpecifier := ""
1111+
if !component.isBaseClass(class) {
1112+
if class.ParentClass == "" {
1113+
cppParentClassName = cppClassPrefix + ClassIdentifier + component.Global.BaseClassName
1114+
} else {
1115+
cppParentClassName = cppClassPrefix + ClassIdentifier+ class.ParentClass
1116+
}
1117+
inheritanceSpecifier = fmt.Sprintf(": public %s ", cppParentClassName)
1118+
}
1119+
return cppParentClassName, inheritanceSpecifier
1120+
}
1121+
10921122
func buildCppHeader(component ComponentDefinition, w LanguageWriter, NameSpace string, BaseName string, ClassIdentifier string, ExplicitLinking bool) error {
10931123
useCPPTypes := true
10941124

@@ -1389,16 +1419,7 @@ func buildCppHeader(component ComponentDefinition, w LanguageWriter, NameSpace s
13891419
class := component.Classes[i]
13901420
cppClassName := cppClassPrefix + ClassIdentifier + class.ClassName
13911421

1392-
cppParentClassName := ""
1393-
inheritanceSpecifier := ""
1394-
if !component.isBaseClass(class) {
1395-
if class.ParentClass == "" {
1396-
cppParentClassName = cppClassPrefix + ClassIdentifier + component.Global.BaseClassName
1397-
} else {
1398-
cppParentClassName = cppClassPrefix + ClassIdentifier+ class.ParentClass
1399-
}
1400-
inheritanceSpecifier = fmt.Sprintf(": public %s ", cppParentClassName)
1401-
}
1422+
cppParentClassName, inheritanceSpecifier := getCPPInheritanceSpecifier(component, class, cppClassPrefix, ClassIdentifier)
14021423

14031424
w.Writeln(" ")
14041425
w.Writeln("/*************************************************************************************************************************")
@@ -1630,7 +1651,7 @@ func BuildBindingCppExplicit(component ComponentDefinition, outputFolder string,
16301651
}
16311652

16321653

1633-
func buildDynamicCppExample(componentdefinition ComponentDefinition, w LanguageWriter, outputFolder string, ClassIdentifier string, ExplicitLinking bool) error {
1654+
func buildDynamicCppExample(componentdefinition ComponentDefinition, w LanguageWriter, outputFolder string, ClassIdentifier string, ExplicitLinking bool) {
16341655
NameSpace := componentdefinition.NameSpace
16351656
BaseName := componentdefinition.BaseName
16361657

@@ -1679,8 +1700,6 @@ func buildDynamicCppExample(componentdefinition ComponentDefinition, w LanguageW
16791700
w.Writeln(" return 0;")
16801701
w.Writeln("}")
16811702
w.Writeln("")
1682-
1683-
return nil
16841703
}
16851704

16861705
func buildCppDynamicExampleCMake(componentdefinition ComponentDefinition, w LanguageWriter, outputFolder string, outputFolderExample string, ExplicitLinking bool) error {

0 commit comments

Comments
 (0)