ドキュメンテーションシステム KL Doxygen 修飾子¶
Fabric Engine version 2.4.0
Copyright (c) 2010-2017 Fabric Software Inc. All rights reserved.
KL AST への埋め込みドキュメントは以下の doxygen記法によって作成します。 /// あるいは /** で始まり、標準的な doxygen 修飾子といくつかの専用修飾子が使えます。
- \brief : 概要
- \param : パラメータ(一個)の説明
- \category : このメソッド・関数のカテゴリ
- \internal : この関数,メソッド, 型をインターナルなものとしてマークする。インターナルな要素は基本的にドキュメントに表示されません。
- \versionadded : sphinx の versionadded 構文を生成します。
- \note : これに続くテキストから sphinx の注釈構文を作成します。
- \seealso : sphinx の see-also構文を作成します。カンマで分割された値をとります。
- \example, \endexample : KL用例この2つにくるみます。エントリーコードオペレータ(訳注:いわゆる dfgEntry{})を含める必要はありませんし、エクステンション読み込みのために require * 文も自動で追加されるので必要ありません。
- \rst, \endrst : 追加の rst コードをこの2でくるみます。
用例:
require Math;
/// The maximum number of characters for a name.
/// The MyStruct type will obey this length for its name.
/** \example
String s;
if(s.length() > MAX_NAME_LENGTH)
setError("Invalid String Length");
report(MAX_NAME_LENGTH);
\endexample
*/
const Integer MAX_NAME_LENGTH = 256;
/**
Converts radian angles to degree angles.
\param rad The radian value to convert.
\example
report(PI);
report(radToDeg(PI));
\endexample
*/
function Scalar radToDeg(Scalar rad) {
return rad * 180.0 / PI;
}
/** An internal struct, it won't show up in the doc
\internal
*/
struct MyStructWorkData {
Integer numbers[];
};
/** \brief A custom data structure.
The MyStruct datastructure can be used to express a named structure. The name member stores the string data of that name.
*/
struct MyStruct : Vec3
{
/// The name of the struct
String name;
};
/// A constructor taking a preset value for the name.
/// \param name The initial name of the MyStruct
function MyStruct(String name)
{
/// The new value for the name.
this.name = name;
}
/// A comparison op, useful for checking strings
function Boolean == (MyStruct a, String b)
{
return a.name == b;
}
/// An assignment from string
function MyStruct.=(String other)
{
this.name = other;
}
/// A concentation op
function MyStruct + (MyStruct a, MyStruct b)
{
return MyStruct(a.name + '.' + b.name);
}
/// An interface ensuring the protocol required to get and set a MyStruct
interface MyInterface
{
/** \brief A getter for the MyStruct data
\category getter
*/
MyStruct getS();
/// The MyStruct setter
/// \category setter
/// \param s The new value for the MyStruct
/// \example
/// MyInterface i = MyObject();
/// i.setS(MyStruct("test"));
/// report(i);
/// \endexample
setS!(MyStruct s);
};
/// An object implementing the MyInterface interface
object MyObject : MyInterface
{
/// The current version of the MyObject
Integer version;
/**
The (private) MyStruct content.
\internal
*/
MyStruct s;
};
// The documentation of the method will be inherited from the interface
function MyStruct MyObject.getS()
{
return this.s;
}
// The documentation of the method will be inherited from the interface
function MyObject.setS!(MyStruct s)
{
this.s = s;
}
/// A specialized object of MyObject, which returns a MyStruct with the "dummy" content
object MySpecializedObject : MyObject
{
};
/** Overload of the getS method, which always returns "dummy" as the MyStruct's name.
\category getter
\rst
.. note::
This is just an example of how to overload a method.
\endrst
*/
function MyStruct MySpecializedObject.getS()
{
return MyStruct("dummy");
}