問題
コード生成テンプレートの Enterprise Architect 7.1.834 では、クラスがファイル テンプレートのスコープに属するすべての親パッケージを印刷できますか?
これが必要な理由は、会社のコーディング標準に準拠したマルチ インクルード ガードを生成するためです。
うまくいかないこと
私は両方を試しました:
%list="Namespace__Notes" @separator="-"%
と
%packageName%
両方の出力は最上位の親パッケージ (Package1) のみを出力しますが、私は見たいと思います:
Package1-Package2-Package3
誰かがこれを行う方法を見つけましたか?
Namespace__Notes
Namepace__Notes は Namepace タイプのカスタム テンプレートで、内容は次のとおりです。
%PI=""%
%packageName%
[編集] ダーティ ソリューション
私の現在の(汚い)解決策は、ファイルパスを壊すことです。 何か不足していますか?
コード:
$l_backslash = %REPLACE("\z","z","")%
$filepath = %filePath%
$upper_filepath = %TO_UPPER($filepath)%
$upper_package_as_path = $l_backslash + %TO_UPPER(packageName)% + $l_backslash
$upper_package_base_len = %LENGTH(packageName)%
$package_path_pos = %FIND($upper_filepath,$upper_package_as_path)%
%if $package_path_pos != "-1" and $package_path_pos != "0"%
$upper_filepath = %MID($upper_filepath,$package_path_pos)%
%endIf%
$file_define = "_" + $upper_filepath + "__"
$file_define = %REPLACE($file_define,".","_")%
$file_define = %REPLACE($file_define,$l_backslash,"_")%
$file_define = %REPLACE($file_define,"/","_")%
$body += "/**************************************************************************//**"
$body += "\n * \file " + %fileName%
$body += "\n *"
$body += "\n * \brief " + %elemType% + " " + %className% + " header file"
$body += "\n *"
$body += "\n * \author " + %classAuthor ? value : "<unknown>"%
$body += "\n *"
$body += "\n *****************************************************************************/"
$body += "\n"
$body += "\n#ifndef " + $file_define
$body += "\n#define " + $file_define
$body += "\n"