ドキュメンテーションシステム KL Doxygen 修飾子

../_images/FE_logo_345_60.png
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");
}