понедельник, 3 августа 2015 г.

Briefly. I made axiomatic description partly on Delphi, partly on scripts

Original in Russian http://programmingmindstream.blogspot.com/2015/07/dephi.html

Follow-up to – Briefly. Wonder of words redefining.

Briefly. I made axiomatic description partly on Delphi, partly on scripts.

I also made binding generated from the model.

It looks as follows:

https://bitbucket.org/lulinalex/mindstream/commits/58dc1f79b8592717091c559c7cf0f8d509dbe97d

vtComboBoxWordsPack.pas:

unit vtComboBoxWordsPack;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Library "ScriptEngine$VT"
// Unit: "vtComboBoxWordsPack.pas"
// Native Delphi interfaces (.pas)
// Generated from UML model, root element: ScriptKeywordsPack::Class Shared Delphi::ScriptEngine$VT::vtComboBoxWords::vtComboBoxWordsPack
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
{$Include ..\ScriptEngine\seDefine.inc}
 
interface
 
{$If not defined(NoScripts)}
uses
  StdCtrls,
  tfwScriptingInterfaces,
  tfwRegisterableWord,
  vtComboTree,
  tfwAxiomaticsResNameGetter
  ;
 
{$IfEnd} //not NoScripts
 
implementation
 
{$If not defined(NoScripts)}
uses
  tfwAxiomaticsResNameGetters,
  vtComboBoxQS,
  l3TreeInterfaces,
  l3Filer,
  l3Types,
  l3Interfaces,
  SysUtils,
  TypInfo,
  tfwTypeRegistrator
  ;
 
type
//#UC START# *D1FD416FEE23ci*
//#UC END# *D1FD416FEE23ci*
 TvtComboBoxWordsPackResNameGetter = {final} class(TtfwAxiomaticsResNameGetter)
  {* Registration of script axiomatic }
 public
 // realized methods
   class function ResName: AnsiString; override;
//#UC START# *D1FD416FEE23publ*
//#UC END# *D1FD416FEE23publ*
 end;//TvtComboBoxWordsPackResNameGetter
 
// start class TvtComboBoxWordsPackResNameGetter
 
class function TvtComboBoxWordsPackResNameGetter.ResName: AnsiString;
 {-}
begin
 Result := 'vtComboBoxWordsPack';
end;//TvtComboBoxWordsPackResNameGetter.ResName
 
 {$R vtComboBoxWordsPack.res vtComboBoxWordsPack.rc}
 
type
 TCustomComboBoxFriend = {abstract} class(TCustomComboBox)
  {* Friend of TCustomComboBox }
 end;//TCustomComboBoxFriend
 
 TkwPopComboBoxDropDown = {final scriptword} class(TtfwRegisterableWord)
  {* word of script pop:ComboBox:DropDown
*Example:*
[code]
 aValue aComboBox pop:ComboBox:DropDown
[code]  }
 private
 // private methods
   procedure DropDown(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox;
    aValue: Boolean);
     {* Implementation of the script word pop:ComboBox:DropDown }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxDropDown
 
// start class TkwPopComboBoxDropDown
 
procedure TkwPopComboBoxDropDown.DropDown(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox;
  aValue: Boolean);
//#UC START# *D4660B294082_B7676CD1AAB3_var*
//#UC END# *D4660B294082_B7676CD1AAB3_var*
begin
//#UC START# *D4660B294082_B7676CD1AAB3_impl*
 aCombobox.DroppedDown := aValue;
//#UC END# *D4660B294082_B7676CD1AAB3_impl*
end;//TkwPopComboBoxDropDown.DropDown
 
procedure TkwPopComboBoxDropDown.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
 l_aValue : Boolean;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aValue := (aCtx.rEngine.PopBool);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aValue: Boolean : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 DropDown(aCtx, l_aComboBox, l_aValue);
end;//TkwPopComboBoxDropDown.DoDoIt
 
class function TkwPopComboBoxDropDown.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:DropDown';
end;//TkwPopComboBoxDropDown.GetWordNameForRegister
 
function TkwPopComboBoxDropDown.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboBoxDropDown.GetResultTypeInfo
 
type
 TkwPopComboBoxGetItemIndex = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboBox:GetItemIndex
*Type of result:* Integer
*Example:*
[code]
INTEGER VAR l_Integer
 aComboBox pop:ComboBox:GetItemIndex >>> l_Integer
[code]  }
 private
 // private methods
   function GetItemIndex(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox): Integer;
     {* Implementation of script word pop:ComboBox:GetItemIndex }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxGetItemIndex
 
// start class TkwPopComboBoxGetItemIndex
 
function TkwPopComboBoxGetItemIndex.GetItemIndex(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox): Integer;
//#UC START# *0DE7BD329B92_731890DC5F90_var*
//#UC END# *0DE7BD329B92_731890DC5F90_var*
begin
//#UC START# *0DE7BD329B92_731890DC5F90_impl*
 Result := aCombobox.ItemIndex;
//#UC END# *0DE7BD329B92_731890DC5F90_impl*
end;//TkwPopComboBoxGetItemIndex.GetItemIndex
 
procedure TkwPopComboBoxGetItemIndex.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 aCtx.rEngine.PushInt((GetItemIndex(aCtx, l_aComboBox)));
end;//TkwPopComboBoxGetItemIndex.DoDoIt
 
class function TkwPopComboBoxGetItemIndex.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:GetItemIndex';
end;//TkwPopComboBoxGetItemIndex.GetWordNameForRegister
 
function TkwPopComboBoxGetItemIndex.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := TypeInfo(Integer);
end;//TkwPopComboBoxGetItemIndex.GetResultTypeInfo
 
type
 TkwPopComboBoxIndexOf = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboBox:IndexOf
* Type of result:* Integer
*Example:*
[code]
INTEGER VAR l_Integer
 aString aComboBox pop:ComboBox:IndexOf >>> l_Integer
[code]  }
 private
 // private methods
   function IndexOf(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox;
    const aString: AnsiString): Integer;
     {* Implementation of the script word pop:ComboBox:IndexOf }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxIndexOf
 
// start class TkwPopComboBoxIndexOf
 
function TkwPopComboBoxIndexOf.IndexOf(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox;
  const aString: AnsiString): Integer;
//#UC START# *56A99D643C95_697C86093610_var*
//#UC END# *56A99D643C95_697C86093610_var*
begin
//#UC START# *56A99D643C95_697C86093610_impl*
 Result := aCombobox.Items.IndexOf(aString);
//#UC END# *56A99D643C95_697C86093610_impl*
end;//TkwPopComboBoxIndexOf.IndexOf
 
procedure TkwPopComboBoxIndexOf.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
 l_aString : AnsiString;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aString := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aString: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 aCtx.rEngine.PushInt((IndexOf(aCtx, l_aComboBox, l_aString)));
end;//TkwPopComboBoxIndexOf.DoDoIt
 
class function TkwPopComboBoxIndexOf.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:IndexOf';
end;//TkwPopComboBoxIndexOf.GetWordNameForRegister
 
function TkwPopComboBoxIndexOf.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := TypeInfo(Integer);
end;//TkwPopComboBoxIndexOf.GetResultTypeInfo
 
type
 TkwPopComboBoxSelectItem = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboBox:SelectItem
*Example:*
[code]
 aString aComboBox pop:ComboBox:SelectItem
[code]  }
 private
 // private methods
   procedure SelectItem(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox;
    const aString: AnsiString);
     {* Implementation of the script word pop:ComboBox:SelectItem }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxSelectItem
 
// start class TkwPopComboBoxSelectItem
 
procedure TkwPopComboBoxSelectItem.SelectItem(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox;
  const aString: AnsiString);
//#UC START# *BC0BF0E96B69_E94AE4FC3D32_var*
//#UC END# *BC0BF0E96B69_E94AE4FC3D32_var*
begin
//#UC START# *BC0BF0E96B69_E94AE4FC3D32_impl*
 TCustomComboBoxFriend(aCombobox).SelectItem(aString);
//#UC END# *BC0BF0E96B69_E94AE4FC3D32_impl*
end;//TkwPopComboBoxSelectItem.SelectItem
 
procedure TkwPopComboBoxSelectItem.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
 l_aString : AnsiString;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aString := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aString: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SelectItem(aCtx, l_aComboBox, l_aString);
end;//TkwPopComboBoxSelectItem.DoDoIt
 
class function TkwPopComboBoxSelectItem.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:SelectItem';
end;//TkwPopComboBoxSelectItem.GetWordNameForRegister
 
function TkwPopComboBoxSelectItem.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboBoxSelectItem.GetResultTypeInfo
 
type
 TkwPopComboBoxSetItemIndex = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboBox:SetItemIndex
*Example:*
[code]
 anIndex aComboBox pop:ComboBox:SetItemIndex
[code]  }
 private
 // private methods
   procedure SetItemIndex(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox;
    anIndex: Integer);
     {* Implementation of the script word pop:ComboBox:SetItemIndex }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxSetItemIndex
 
// start class TkwPopComboBoxSetItemIndex
 
procedure TkwPopComboBoxSetItemIndex.SetItemIndex(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox;
  anIndex: Integer);
//#UC START# *589DC0B1C0D3_DF10F6F55A61_var*
//#UC END# *589DC0B1C0D3_DF10F6F55A61_var*
begin
//#UC START# *589DC0B1C0D3_DF10F6F55A61_impl*
 aCombobox.ItemIndex := anIndex;
 TCustomComboBoxFriend(aCombobox).Select;
//#UC END# *589DC0B1C0D3_DF10F6F55A61_impl*
end;//TkwPopComboBoxSetItemIndex.SetItemIndex
 
procedure TkwPopComboBoxSetItemIndex.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
 l_anIndex : Integer;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError(‘Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_anIndex := (aCtx.rEngine.PopInt);
 except
  on E: Exception do
  begin
   RunnerError(‘Error getting a parameter anIndex: Integer : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SetItemIndex(aCtx, l_aComboBox, l_anIndex);
end;//TkwPopComboBoxSetItemIndex.DoDoIt
 
class function TkwPopComboBoxSetItemIndex.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:SetItemIndex';
end;//TkwPopComboBoxSetItemIndex.GetWordNameForRegister
 
function TkwPopComboBoxSetItemIndex.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboBoxSetItemIndex.GetResultTypeInfo
 
type
 TkwPopComboBoxSaveItems = {final scriptword} class(TtfwRegisterableWord)
  {* Word of script pop:ComboBox:SaveItems
[panel]*Format:* file_name  control pop:ComboBox:SaveItems 
*Description:* Saves all items of the combobox (set by control parameter) to the file (set by parameter file_name) and compares to the template.
*Example:*
[code]
'MyList.cmbx' 'StyleComboBox' byname:control:push pop:ComboBox:SaveItems
[code] 
*Result:* Saves combobox contents 'StyleComboBox' to the file 'MyList.cmbx' and compares to the template.[panel]
*Example:*
[code]
 aFileName aComboBox pop:ComboBox:SaveItems
[code]  }
 private
 // private methods
   procedure SaveItems(const aCtx: TtfwContext;
    aComboBox: TCustomComboBox;
    const aFileName: AnsiString);
     {* Implementation of the script word pop:ComboBox:SaveItems }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboBoxSaveItems
 
// start class TkwPopComboBoxSaveItems
 
procedure TkwPopComboBoxSaveItems.SaveItems(const aCtx: TtfwContext;
  aComboBox: TCustomComboBox;
  const aFileName: AnsiString);
//#UC START# *414096239FD4_F4F78563FAA5_var*
var
 l_S: AnsiString;
 l_Filer : Tl3CustomDosFiler;
 I: Integer;
 l_Count: Integer;
//#UC END# *414096239FD4_F4F78563FAA5_var*
begin
//#UC START# *414096239FD4_F4F78563FAA5_impl*
 l_S := aCtx.rCaller.ResolveOutputFilePath(aFileName);
 l_S := ChangeFileExt(l_S, '.cmbx');
 l_Filer := Tl3CustomDosFiler.Make(l_S, l3_fmWrite, false);
 try
  l_Filer.Open;
  try
   l_Count := aCombobox.Items.Count;
   for I := 0 to l_Count - 1 do
    l_Filer.WriteLn(aCombobox.Items[I]);
  finally
   l_Filer.Close;
  end;
 finally
  FreeAndNil(l_Filer);
 end;//try..finally
//#UC END# *414096239FD4_F4F78563FAA5_impl*
end;//TkwPopComboBoxSaveItems.SaveItems
 
procedure TkwPopComboBoxSaveItems.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboBox : TCustomComboBox;
 l_aFileName : AnsiString;
begin
 try
  l_aComboBox := TCustomComboBox(aCtx.rEngine.PopObjAs(TCustomComboBox));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboBox: TCustomComboBox : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aFileName := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aFileName: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SaveItems(aCtx, l_aComboBox, l_aFileName);
end;//TkwPopComboBoxSaveItems.DoDoIt
 
class function TkwPopComboBoxSaveItems.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboBox:SaveItems';
end;//TkwPopComboBoxSaveItems.GetWordNameForRegister
 
function TkwPopComboBoxSaveItems.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboBoxSaveItems.GetResultTypeInfo
 
type
 TkwPopComboTreeDropDown = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:DropDown
*Example:*
[code]
 aValue aComboTree pop:ComboTree:DropDown
[code]  }
 private
 // private methods
   procedure DropDown(const aCtx: TtfwContext;
    aComboTree: TvtComboTree;
    aValue: Boolean);
     {* Implementation of the script word pop:ComboTree:DropDown }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeDropDown
 
// start class TkwPopComboTreeDropDown
 
procedure TkwPopComboTreeDropDown.DropDown(const aCtx: TtfwContext;
  aComboTree: TvtComboTree;
  aValue: Boolean);
//#UC START# *BB9DD9C656EE_CBB40EABEDB6_var*
//#UC END# *BB9DD9C656EE_CBB40EABEDB6_var*
begin
//#UC START# *BB9DD9C656EE_CBB40EABEDB6_impl*
 aComboTree.Dropped := aValue;
//#UC END# *BB9DD9C656EE_CBB40EABEDB6_impl*
end;//TkwPopComboTreeDropDown.DropDown
 
procedure TkwPopComboTreeDropDown.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
 l_aValue : Boolean;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aValue := (aCtx.rEngine.PopBool);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aValue: Boolean : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 DropDown(aCtx, l_aComboTree, l_aValue);
end;//TkwPopComboTreeDropDown.DoDoIt
 
class function TkwPopComboTreeDropDown.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:DropDown';
end;//TkwPopComboTreeDropDown.GetWordNameForRegister
 
function TkwPopComboTreeDropDown.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboTreeDropDown.GetResultTypeInfo
 
type
 TkwPopComboTreeGetItemIndex = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:GetItemIndex
*Type of result:* Integer
*Example:*
[code]
INTEGER VAR l_Integer
 aComboTree pop:ComboTree:GetItemIndex >>> l_Integer
[code]  }
 private
 // private methods
   function GetItemIndex(const aCtx: TtfwContext;
    aComboTree: TvtComboTree): Integer;
     {* Implementation of the script word pop:ComboTree:GetItemIndex }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeGetItemIndex
 
// start class TkwPopComboTreeGetItemIndex
 
function TkwPopComboTreeGetItemIndex.GetItemIndex(const aCtx: TtfwContext;
  aComboTree: TvtComboTree): Integer;
//#UC START# *1C4FCF6402FE_FDB2008A1DAA_var*
//#UC END# *1C4FCF6402FE_FDB2008A1DAA_var*
begin
//#UC START# *1C4FCF6402FE_FDB2008A1DAA_impl*
 if Assigned(aComboTree.ChoosenValue) then
  Result := aComboTree.FindIndexOf(aComboTree.ChoosenValue)
 else
  Result := aComboTree.ItemIndex;
//#UC END# *1C4FCF6402FE_FDB2008A1DAA_impl*
end;//TkwPopComboTreeGetItemIndex.GetItemIndex
 
procedure TkwPopComboTreeGetItemIndex.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 aCtx.rEngine.PushInt((GetItemIndex(aCtx, l_aComboTree)));
end;//TkwPopComboTreeGetItemIndex.DoDoIt
 
class function TkwPopComboTreeGetItemIndex.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:GetItemIndex';
end;//TkwPopComboTreeGetItemIndex.GetWordNameForRegister
 
function TkwPopComboTreeGetItemIndex.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := TypeInfo(Integer);
end;//TkwPopComboTreeGetItemIndex.GetResultTypeInfo
 
type
 TkwPopComboTreeIndexOf = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:IndexOf
*Type of result:* Integer
*Example:*
[code]
INTEGER VAR l_Integer
 aString aComboTree pop:ComboTree:IndexOf >>> l_Integer
[code]  }
 private
 // private methods
   function IndexOf(const aCtx: TtfwContext;
    aComboTree: TvtComboTree;
    const aString: AnsiString): Integer;
     {* Implementation of the script word pop:ComboTree:IndexOf }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeIndexOf
 
// start class TkwPopComboTreeIndexOf
 
function TkwPopComboTreeIndexOf.IndexOf(const aCtx: TtfwContext;
  aComboTree: TvtComboTree;
  const aString: AnsiString): Integer;
//#UC START# *6E676C6B7B53_C0C842FB1A8C_var*
//#UC END# *6E676C6B7B53_C0C842FB1A8C_var*
begin
//#UC START# *6E676C6B7B53_C0C842FB1A8C_impl*
 Result := aComboTree.Items.IndexOf(aString);
//#UC END# *6E676C6B7B53_C0C842FB1A8C_impl*
end;//TkwPopComboTreeIndexOf.IndexOf
 
procedure TkwPopComboTreeIndexOf.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
 l_aString : AnsiString;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aString := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aString: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 aCtx.rEngine.PushInt((IndexOf(aCtx, l_aComboTree, l_aString)));
end;//TkwPopComboTreeIndexOf.DoDoIt
 
class function TkwPopComboTreeIndexOf.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:IndexOf';
end;//TkwPopComboTreeIndexOf.GetWordNameForRegister
 
function TkwPopComboTreeIndexOf.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := TypeInfo(Integer);
end;//TkwPopComboTreeIndexOf.GetResultTypeInfo
 
type
 TkwPopComboTreeSelectItem = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:SelectItem
*Example:*
[code]
 aString aComboTree pop:ComboTree:SelectItem
[code]  }
 private
 // private methods
   procedure SelectItem(const aCtx: TtfwContext;
    aComboTree: TvtComboTree;
    const aString: AnsiString);
     {* Implementation of the script word pop:ComboTree:SelectItem }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeSelectItem
 
// start class TkwPopComboTreeSelectItem
 
procedure TkwPopComboTreeSelectItem.SelectItem(const aCtx: TtfwContext;
  aComboTree: TvtComboTree;
  const aString: AnsiString);
//#UC START# *8E1C1B564723_B5A21C7BEE37_var*
//#UC END# *8E1C1B564723_B5A21C7BEE37_var*
begin
//#UC START# *8E1C1B564723_B5A21C7BEE37_impl*
 aComboTree.ItemIndex := aComboTree.Items.IndexOf(aString);
//#UC END# *8E1C1B564723_B5A21C7BEE37_impl*
end;//TkwPopComboTreeSelectItem.SelectItem
 
procedure TkwPopComboTreeSelectItem.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
 l_aString : AnsiString;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aString := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aString: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SelectItem(aCtx, l_aComboTree, l_aString);
end;//TkwPopComboTreeSelectItem.DoDoIt
 
class function TkwPopComboTreeSelectItem.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:SelectItem';
end;//TkwPopComboTreeSelectItem.GetWordNameForRegister
 
function TkwPopComboTreeSelectItem.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboTreeSelectItem.GetResultTypeInfo
 
type
 TkwPopComboTreeSetItemIndex = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:SetItemIndex
*Example:*
[code]
 anIndex aComboTree pop:ComboTree:SetItemIndex
[code]  }
 private
 // private methods
   procedure SetItemIndex(const aCtx: TtfwContext;
    aComboTree: TvtComboTree;
    anIndex: Integer);
     {* Implementation of the script word pop:ComboTree:SetItemIndex }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeSetItemIndex
 
// start class TkwPopComboTreeSetItemIndex
 
procedure TkwPopComboTreeSetItemIndex.SetItemIndex(const aCtx: TtfwContext;
  aComboTree: TvtComboTree;
  anIndex: Integer);
//#UC START# *6A72CBA7686D_8C448529271A_var*
var
 l_Node: Il3SimpleNode;
//#UC END# *6A72CBA7686D_8C448529271A_var*
begin
//#UC START# *6A72CBA7686D_8C448529271A_impl*
 if (aComboTree is TvtComboBoxQS) then //561950536
  aComboTree.ItemIndex := anIndex
 else
 begin
  l_Node := aComboTree.Tree.GetNode(anIndex);
  aComboTree.Tree.GotoOnNode(l_Node);
  aComboTree.ShowNode(l_Node, True);
 end;//aComboTree is TvtComboBoxQS
//#UC END# *6A72CBA7686D_8C448529271A_impl*
end;//TkwPopComboTreeSetItemIndex.SetItemIndex
 
procedure TkwPopComboTreeSetItemIndex.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
 l_anIndex : Integer;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_anIndex := (aCtx.rEngine.PopInt);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter anIndex: Integer : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SetItemIndex(aCtx, l_aComboTree, l_anIndex);
end;//TkwPopComboTreeSetItemIndex.DoDoIt
 
class function TkwPopComboTreeSetItemIndex.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:SetItemIndex';
end;//TkwPopComboTreeSetItemIndex.GetWordNameForRegister
 
function TkwPopComboTreeSetItemIndex.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboTreeSetItemIndex.GetResultTypeInfo
 
type
 TkwPopComboTreeSaveItems = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:SaveItems
[panel]*Format:* file_name  control pop:ComboBox:SaveItems 
*Description:* Saves all items of the combobox (set by control parameter) to the file (set by parameter file_name) and compares to the template.
*Example:*
[code]
'MyList.cmbx' 'StyleComboBox' byname:control:push pop:ComboBox:SaveItems
[code] 
*Result:* Saves contents of the combobox 'StyleComboBox' to the file  'MyList.cmbx' and compares to the template.[panel]
*Example:*
[code]
 aFileName aComboTree pop:ComboTree:SaveItems
[code]  }
 private
 // private methods
   procedure SaveItems(const aCtx: TtfwContext;
    aComboTree: TvtComboTree;
    const aFileName: AnsiString);
     {* Implementation of the script word pop:ComboTree:SaveItems }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeSaveItems
 
// start class TkwPopComboTreeSaveItems
 
procedure TkwPopComboTreeSaveItems.SaveItems(const aCtx: TtfwContext;
  aComboTree: TvtComboTree;
  const aFileName: AnsiString);
//#UC START# *1F4D33D465E4_957FA5E0E3AB_var*
var
 l_S: AnsiString;
 l_Filer : Tl3CustomDosFiler;
//#UC END# *1F4D33D465E4_957FA5E0E3AB_var*
begin
//#UC START# *1F4D33D465E4_957FA5E0E3AB_impl*
 l_S := aCtx.rCaller.ResolveOutputFilePath(aFileName);
 l_S := ChangeFileExt(l_S, '.cmbx');
 l_Filer := Tl3CustomDosFiler.Make(l_S, l3_fmWrite, false);
 try
  l_Filer.Open;
  try
   l_Filer.WriteLn((aComboTree.Items as Il3Strings).Items.Text);
  finally
   l_Filer.Close;
  end;
 finally
  FreeAndNil(l_Filer);
 end;//try..finally
//#UC END# *1F4D33D465E4_957FA5E0E3AB_impl*
end;//TkwPopComboTreeSaveItems.SaveItems
 
procedure TkwPopComboTreeSaveItems.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
 l_aFileName : AnsiString;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 try
  l_aFileName := (aCtx.rEngine.PopDelphiString);
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter aFileName: AnsiString : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 SaveItems(aCtx, l_aComboTree, l_aFileName);
end;//TkwPopComboTreeSaveItems.DoDoIt
 
class function TkwPopComboTreeSaveItems.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:SaveItems';
end;//TkwPopComboTreeSaveItems.GetWordNameForRegister
 
function TkwPopComboTreeSaveItems.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := @tfw_tiVoid;
end;//TkwPopComboTreeSaveItems.GetResultTypeInfo
{$IfEnd} //not NoScripts
 
initialization
{$If not defined(NoScripts)}
// Registration of script axiomatic
 TvtComboBoxWordsPackResNameGetter.Register;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_DropDown
 TkwPopComboBoxDropDown.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_GetItemIndex
 TkwPopComboBoxGetItemIndex.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_IndexOf
 TkwPopComboBoxIndexOf.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_SelectItem
 TkwPopComboBoxSelectItem.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_SetItemIndex
 TkwPopComboBoxSetItemIndex.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboBox_SaveItems
 TkwPopComboBoxSaveItems.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_DropDown
 TkwPopComboTreeDropDown.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_GetItemIndex
 TkwPopComboTreeGetItemIndex.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_IndexOf
 TkwPopComboTreeIndexOf.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_SelectItem
 TkwPopComboTreeSelectItem.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_SetItemIndex
 TkwPopComboTreeSetItemIndex.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_SaveItems
 TkwPopComboTreeSaveItems.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of TtfwContext type
 TtfwTypeRegistrator.RegisterType(@tfw_tiStruct);
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of TCustomComboBox type
 TtfwTypeRegistrator.RegisterType(TypeInfo(TCustomComboBox));
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of Boolean type
 TtfwTypeRegistrator.RegisterType(TypeInfo(Boolean));
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of Integer type
 TtfwTypeRegistrator.RegisterType(TypeInfo(Integer));
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of String type
 TtfwTypeRegistrator.RegisterType(TypeInfo(AnsiString));
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of TvtComboTree type
 TtfwTypeRegistrator.RegisterType(TypeInfo(TvtComboTree));
{$IfEnd} //not NoScripts
 
end.

vtComboBoxWordsPack.rc: vtComboBoxWordsPack RCDATA LOADONCALL MOVEABLE DISCARDABLE vtComboBoxWordsPack.rc.script vtComboBoxWordsPack.rc.script:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Library "ScriptEngine$VT"
// Unit: "vtComboBoxWordsPack.rc.script"
// Resource script (.rc.script)
// Generated from UML model, root element: ScriptKeywordsPack::Class Shared Delphi::ScriptEngine$VT::vtComboBoxWords::vtComboBoxWordsPack
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
//#UC START# *54EC8C7C011Eimpl*
 
// Decorators of words that work with combo
 
USES
 axiom:ComboBox
 axiom:ComboTree
;
 
REDEFINITION
 : pop:ComboBox:DropDown
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:DropDown )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:DropDown
  
REDEFINITION
 : pop:ComboBox:GetItemIndex
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:GetItemIndex )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:DropDown
  
REDEFINITION
 : pop:ComboBox:IndexOf
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:IndexOf )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:DropDown
  
REDEFINITION
 : pop:ComboBox:SaveItems
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:SaveItems )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:SelectItem
  
REDEFINITION
 : pop:ComboBox:SelectItem
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:SelectItem )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:SelectItem
  
REDEFINITION
 : pop:ComboBox:SetItemIndex
  OBJECT IN aCombo
  if ( aCombo Is class::TvtComboTree ) then
   ( aCombo pop:ComboTree:SetItemIndex )
  else
   ( aCombo inherited )
 ; // pop:ComboBox:SetItemIndex
  
//#UC END# *54EC8C7C011Eimpl*

vtComboBoxWordsPack.res.cmd: ? 1 brcc32 vtComboBoxWordsPack.rc

vtComboTreeWordsPack.pas:

unit vtComboTreeWordsPack;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Library "ScriptEngine$Everest"
// Unit: "vtComboTreeWordsPack.pas"
// Native Delphi interfaces (.pas)
// Generated from UML model, root element: ScriptKeywordsPack::Class Shared Delphi::ScriptEngine$Everest::EditorFromStackKeyWords::vtComboTreeWordsPack
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
{$Include ..\ScriptEngine\seDefine.inc}
 
interface
 
{$If not defined(NoScripts)}
uses
  l3TreeInterfaces,
  tfwScriptingInterfaces,
  tfwRegisterableWord,
  vtComboTree
  ;
 
{$IfEnd} //not NoScripts
 
implementation
 
{$If not defined(NoScripts)}
uses
  TypInfo,
  SysUtils,
  tfwTypeRegistrator
  ;
 
type
 TkwPopComboTreeCurrentNode = {final scriptword} class(TtfwRegisterableWord)
  {* Script word pop:ComboTree:CurrentNode
*Type of result:* Il3SimpleNode
*Example:*
[code]
INTERFACE VAR l_Il3SimpleNode
 aComboTree pop:ComboTree:CurrentNode >>> l_Il3SimpleNode
[code]  }
 private
 // private methods
   function CurrentNode(const aCtx: TtfwContext;
    aComboTree: TvtComboTree): Il3SimpleNode;
     {* Implementation of the script word pop:ComboTree:CurrentNode }
 protected
 // realized methods
   procedure DoDoIt(const aCtx: TtfwContext); override;
 protected
 // overridden protected methods
   class function GetWordNameForRegister: AnsiString; override;
 public
 // overridden public methods
   function GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo; override;
 end;//TkwPopComboTreeCurrentNode
 
// start class TkwPopComboTreeCurrentNode
 
function TkwPopComboTreeCurrentNode.CurrentNode(const aCtx: TtfwContext;
  aComboTree: TvtComboTree): Il3SimpleNode;
//#UC START# *E52B39199FD5_9F9FF0616B3E_var*
//#UC END# *E52B39199FD5_9F9FF0616B3E_var*
begin
//#UC START# *E52B39199FD5_9F9FF0616B3E_impl*
 Result := aComboTree.Tree.GetCurrentNode;
//#UC END# *E52B39199FD5_9F9FF0616B3E_impl*
end;//TkwPopComboTreeCurrentNode.CurrentNode
 
procedure TkwPopComboTreeCurrentNode.DoDoIt(const aCtx: TtfwContext);
 {-}
var
 l_aComboTree : TvtComboTree;
begin
 try
  l_aComboTree := TvtComboTree(aCtx.rEngine.PopObjAs(TvtComboTree));
 except
  on E: Exception do
  begin
   RunnerError('Error getting a parameter ComboTree: TvtComboTree : ' + E.Message, aCtx);
   Exit;
  end;//on E: Exception
 end;//try..except
 aCtx.rEngine.PushIntf((CurrentNode(aCtx, l_aComboTree)));
end;//TkwPopComboTreeCurrentNode.DoDoIt
 
class function TkwPopComboTreeCurrentNode.GetWordNameForRegister: AnsiString;
 {-}
begin
 Result := 'pop:ComboTree:CurrentNode';
end;//TkwPopComboTreeCurrentNode.GetWordNameForRegister
 
function TkwPopComboTreeCurrentNode.GetResultTypeInfo(const aCtx: TtfwContext): PTypeInfo;
 {-}
begin
 Result := TypeInfo(Il3SimpleNode);
end;//TkwPopComboTreeCurrentNode.GetResultTypeInfo
{$IfEnd} //not NoScripts
 
initialization
{$If not defined(NoScripts)}
// Registration of pop_ComboTree_CurrentNode
 TkwPopComboTreeCurrentNode.RegisterInEngine;
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of TtfwContext type
 TtfwTypeRegistrator.RegisterType(@tfw_tiStruct);
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of TvtComboTree type
 TtfwTypeRegistrator.RegisterType(TypeInfo(TvtComboTree));
{$IfEnd} //not NoScripts
{$If not defined(NoScripts)}
// Registration of Il3SimpleNode
 TtfwTypeRegistrator.RegisterType(TypeInfo(Il3SimpleNode));
{$IfEnd} //not NoScripts
 
end.

ScriptKeywordsPack.tpi:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Unit: "w:/MDProcess/DelphiSpecific/DelphiLang/Implementation/ScriptKeywordsPack.tpi"
// Generation of metatemplates
// Generated from UML model, root element: <> MDProcess$ForDelphi::DelphiSpecific::DelphiLang::Implementation::ScriptKeywordsPack
//
// Set of script words
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
: ScriptKeywordsPack::Class
? Set of script words
> ScriptKeyword::Class
 
= UtilityPack::Class
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Parameters of stereotype
// Parameters of visualisation
$ C 147,168,174
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// User properties
 
p no_pop:tribool=undefined ? 
p no class name:tribool=undefined ? 
p needs script:tribool=undefined ? Script binding needed
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// functions of stereotype
 
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S#[inherited][{"%S{no_pop}"!="%S{!no_pop}"}%f_up_prefix(%S) *no_pop* = *%S{no_pop}*
 ][{"%S{no class name}"!="%S{!no class name}"}%f_up_prefix(%S) *no class name* = *%S{no class name}*
 ][{"%S{needs script}"!="%S{!needs script}"}%f_up_prefix(%S) *needs script* = *%S{needs script}* - Script binding needed
 ]
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// overriding of base Delphi stereotype interfaces and implementation::MDAGenerator
%f _DoSpell
//#UC START# *4B2A19E3038Bfor4F2C15C90252*
// %S%f_set_implement_select_type(include)\
 
 [{%S{needs script}=true}\
 %S%f_add_class(%SU_ResNameGetter,SimpleClass,T%f_pas_UnitName(%S)ResNameGetter,Class_Inst)\
 %{Class_Inst}%f_set_documentation(Registration of script axiomatic)\
 %{Class_Inst}%f_set_abstraction_type(final)\
 %{Class_Inst}%f_set_visibility_type(PrivateAccess)\
 [{"%{TtfwAxiomaticsResNameGetter}N"=""}%f_find_element(TtfwAxiomaticsResNameGetter,TtfwAxiomaticsResNameGetter)]\
 %f_addG(%{Class_Inst},%{TtfwAxiomaticsResNameGetter})\
 %{Class_Inst}%f_set_up(need UC,true)\
 
 %{Class_Inst}%f_set_uc_content(intf.pas,impl,\
  \{$R %f_pas_UnitName(%S).res %f_pas_UnitName(%S).rc\}\
 )\
 
 %{Class_Inst}%f_add_operation(%{Class_Inst}U_Reg,ini,RegAxiom (),Reg_Instance)\
 %{Reg_Instance}%f_set_documentation(Registration of script axiomatic)\
 %{Reg_Instance}%f_set_abstraction_type(final)\
 %{Reg_Instance}%f_set_visibility_type(PrivateAccess)\
 
 %{Reg_Instance}%f_set_uc_content(intf.pas,,\
  %f_pas_TypeName(%{Class_Inst}).Register;\
 )\
 
 [{"%{TtfwAxiomaticsResNameGetter.ResName}N"=""}%f_find_element(55B7A3AF0359,TtfwAxiomaticsResNameGetter.ResName)]\
 
 %{TtfwAxiomaticsResNameGetter.ResName}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwAxiomaticsResNameGetter.ResName},%{Class_Inst})_var,\
  {-}\
 )\
 
 %{TtfwAxiomaticsResNameGetter.ResName}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwAxiomaticsResNameGetter.ResName},%{Class_Inst})_impl,\
  Result := '%f_pas_UnitName(%S)';\
 )\
 
 ]\
 
 %f_clear_list(PROPS)\
 
 <{}{%CS=property|%CS=readonly}\
 %f_add_to_list(PROPS,C)\
 >\
 
 %{PROPS}<{}{}{%C}\
 
 %1%f_add_operation(%1U_%CU_get,keyword,[{%CS!=readonly}Get]%CN (): %C%TU,Op_Instance)\
 %{Op_Instance}%f_set_up(NameForScript,%C{NameForScript})\
 
 %f_TuneGS(%{Op_Instance},%C)\
 %{Op_Instance}%f_set_up(is_setter,false)\
 
 [{%CS!=readonly}\
 %1%f_add_operation(%1U_%CU_set,keyword,Set%CN (aValue : %C%TU),Op_Instance)\
 %f_TuneGS(%{Op_Instance},%C)\
 %{Op_Instance}%f_set_up(is_setter,true)\
 ]\
 
 >\
 
 %f_clear_list(PROPS)\
 
 %f_SpellFriends(%S)\
 
 %f_clear_list(PARAMS)\
 
 <{}{%t_isAcceptableForScripts(%G)=true}\
 %f_SpellWordsForParent(%S,%G,"true")\
 >\
 
 <{}{%t_isAcceptableForScripts(%R)=true}\
 %f_SpellWordsForParent(%S,%R,"false")\
 >\
 
 %f_clear_list(KEYS)\
 
 %S<{}{%C#f_IsGlobalKeyword()=true}\
 %f_add_to_list(KEYS,C)\
 >\
 
 %f_set_var(GEN,"")\
 %{KEYS}<{}{}{%C}\
 %f_SpellWordByOp(%1,%C)\
 >\
 
 %f_clear_list(KEYS)\
 
 [{%f_is_empty(PARAMS)=false}\
 
 [{"%{TtfwTypeRegistrator}N"=""}%f_find_element(TtfwTypeRegistrator,TtfwTypeRegistrator)]\
 %f_addCDep(%S,%{TtfwTypeRegistrator})\
 
 %{PARAMS}<{}{}{%C}\
 
 %1%f_add_operation(%1U_%CU_RegType,ini,Reg_%CN (),Reg_Instance)\
 %{Reg_Instance}%f_set_documentation(Registration of %CN type)\
 %{Reg_Instance}%f_set_abstraction_type(final)\
 %{Reg_Instance}%f_set_visibility_type(PrivateAccess)\
 
// %f_warning(%CN)\
 
 %{Reg_Instance}%f_set_uc_content(intf.pas,,\
  TtfwTypeRegistrator.RegisterType(%t_TypeInfo(%C));\
 )\
 >\
 ]\
 
 %f_clear_list(PARAMS)\
 
 %S%[inherited]
 
f _TuneGS
 %S%f_set_documentation(%1D)\
 %S%f_set_up(prop_stereo,%1S)\
 %S%f_set_up(prop_name,%1N)\
 %S%f_set_up(mapped,%1{mapped})\
 %S%f_set_up(is immediate,%1{is immediate})\
 %S%f_set_up(ifdef,%1{ifdef})\
 %S%f_set_up(ifndef,%1{ifndef})
 
f _SpellWordsForParent
 [{%2N=true}\
 %f_addCDep(%S,%1,"injects")\
// - injection
// [{%t_simple_class(%1)=true&%S{noRegistrator}!=true}\
// %S%f_add_class(%SU_%1U_Reg,SimpleClass,%f_pas_TypeName(%1)RegistratorFor%f_N(%S),Reg_Inst)\
// %f_addG(%{Reg_Inst},%1)\
// %{Reg_Inst}%f_set_documentation(Registrator for %f_pas_TypeName(%1))\
// %{Reg_Inst}%f_set_abstraction_type(abstract)\
// %{Reg_Inst}%f_set_visibility_type(PrivateAccess)\
// %{Reg_Inst}%f_set_up(register in scripts,true)\
// %{Reg_Inst}%f_set_up(is_friend,true)\
// %{Reg_Inst}%f_set_implement_select_type(include)\
// ]\
// - registrator
 ]\
 
 %f_clear_list(KEYS)\
 
 %S<{}{%C#f_IsKeyword()=true}\
 %f_add_to_list(KEYS,C)\
 >\
 
 %f_set_var(GEN,1)\
 %{KEYS}<{}{}{%C}\
 %f_SpellWordByOp(%1,%C)\
 >\
 
 %f_clear_list(KEYS)
 
f _AddParamToRegister
 [{%SN!=void}\
// %f_warning(%SN)\
 [{%f_exists_in_list(PARAMS,S)!=true}\
 %f_add_to_list(PARAMS,S)\
 ]\
 ]
 
f _SpellWordByOp
 %S%f_add_class(%SU_%{GEN}U_%1U_Word,ScriptKeyword,\
 [{"%{GEN}N"!=""}\
 [{%S{no_pop}!=true&%1#f_IsCreator()!=true}pop_]\
 [{%S{no class name}!=true&%t_SelfName(%{GEN})!=SV}%t_SelfName(%{GEN})_]\
 ]\
 %1N,\
 Class_Inst)\
 
 %{Class_Inst}%f_set_up(is immediate,%1{is immediate})\
 %{Class_Inst}%f_set_up(ifdef,%1{ifdef})\
 %{Class_Inst}%f_set_up(ifndef,%1{ifndef})\
 
 [{%1#f_IsVarWorker()=true}\
 [{%1#f_IsWordWorker()=true}{\
 [{"%{TtfwVarWorker}N"=""}%f_find_element(TtfwVarWorker,TtfwVarWorker)]\
 %f_addG(%{Class_Inst},%{TtfwVarWorker})\
 }\
 [{"%{TtfwWordWorkerEx}N"=""}%f_find_element(TtfwWordWorkerEx,TtfwWordWorkerEx)]\
 %f_addG(%{Class_Inst},%{TtfwWordWorkerEx})\
 ]\
 ]\
 
 [{"%1{NameForScript}"=""}{\
 %{Class_Inst}%f_set_up(NameForScript,%1{NameForScript})\
 }\
 %{Class_Inst}%f_set_up(NameForScript,%f_str_replace(%{Class_Inst}N,_,:))\
 ]\
 
 %{Class_Inst}%f_set_documentation(Word of script %f_loc_GetNameForScript(%{Class_Inst})[\n\{panel\}%1D\{panel\}]
 
 %f_set_var(RES,"")\
 [{%1%TN!=void}%f_set_var(RES,1%T)]\
 [{%1#f_IsCreator()=true&"%{GEN}N"!=""}%f_set_var(RES,{GEN})]\
 
 [{"%{RES}N"!=""}*Type of result:* %{RES}N\n]\
 *Example:*
 \{code\}
 %1<{}{%CS=out}{%C}[%t_EngineType(%C%T) ]VAR l_%CN\n>\
 [{"%{RES}N"!=""}[%t_EngineType(%{RES}) ]VAR l_%{RES}N\n]\
 
  %1<{}{%CS!=out}{%Cr}%CN >[{%1#f_IsCreator()!=true&"%{GEN}N"!=""}a%t_SelfName(%{GEN}) ]%f_loc_GetNameForScript(%{Class_Inst})\
 
 [{%1#f_IsVarWorker()=true}\
  [{%1#f_IsWordWorker()=true}{aVar}aWord]\
 ]\
 
 %1<{}{%CS=out}{%C} \>\>\> l_%CN>\
 [{"%{RES}N"!=""} \>\>\> l_%{RES}N]\
 \n\
 \{code\} \
 )\
 %{Class_Inst}%f_set_abstraction_type(final)\
 %{Class_Inst}%f_set_visibility_type(PrivateAccess)\
 
 [{"%{TtfwContext}N"=""}%f_find_element(TtfwContext,TtfwContext)]\
 
 %{Class_Inst}%f_make_accessable(%{TtfwContext}U)\
 %f_addCDep(%{Class_Inst},%{TtfwContext})\
 
 [{%1{SupressNextImmediate}!=None&"%1{SupressNextImmediate}"!=""}\
 [{"%{TtfwCompilingWord.SupressNextImmediate}N"=""}%f_find_element(4F3AB3B101FC,TtfwCompilingWord.SupressNextImmediate)]\
 %{Class_Inst}%f_add_override(%{TtfwCompilingWord.SupressNextImmediate}U)\
 
 %{TtfwCompilingWord.SupressNextImmediate}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwCompilingWord.SupressNextImmediate},%{Class_Inst})_var,\
  {-}\
 )\
 
 %{TtfwCompilingWord.SupressNextImmediate}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwCompilingWord.SupressNextImmediate},%{Class_Inst})_impl,\
  Result := tfw_sni%1{SupressNextImmediate};\
 )\
 
 ]\
 
 [{"%{TTypeInfo}N"=""}%f_find_element(4767748503B5,TTypeInfo)]\
 %f_addCDep(%{Class_Inst},%{TTypeInfo})\
 
 [{"%{TtfwWord.GetResultTypeInfo}N"=""}%f_find_element(551544E2001A,TtfwWord.GetResultTypeInfo)]\
 %{Class_Inst}%f_add_override(%{TtfwWord.GetResultTypeInfo}U)\
 
 %{TtfwWord.GetResultTypeInfo}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwWord.GetResultTypeInfo},%{Class_Inst})_var,\
  {-}\
 )\
 
 %{TtfwWord.GetResultTypeInfo}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{TtfwWord.GetResultTypeInfo},%{Class_Inst})_impl,\
 [{%1#f_IsCreator()=true&"%{GEN}N"!=""}{\
  Result := %t_TypeInfo(%1%T);\
 }\
  Result := %t_TypeInfo(%{GEN});\
 ]\
 )\
 
 %f_set_var(Op_Instance,"")\
 
 %f_set_var(NeedOp,"false")\
 
 [{%1{mapped}=true}\
 %f_set_var(NeedOp,"true")\
 ]\
 
 [{"%{GEN}N"!=""}\
 %f_set_var(NeedOp,"true")\
 ]\
 
 [{%1#f_IsVarWorker()=true}\
 %f_set_var(NeedOp,"true")\
 ]\
 
 [{%1<{}{}{%CC}>!=0}\
 %f_set_var(NeedOp,"true")\
 ]\
 
 [{%1%TN!=void}\
 %f_set_var(NeedOp,"true")\
 ]\
 
 [{%{NeedOp}N=true}\
 %{Class_Inst}%f_add_operation(%{Class_Inst}U_%1U_op,,\
 %f_N(%1) (\
 aCtx: %{TtfwContext}U\
 [{%1#f_IsVarWorker()=true}\
 [{"%{TtfwWord}N"=""}%f_find_element(TtfwWord,TtfwWord)]\
 , [{%1#f_IsWordWorker()=true}{aVar}aWord]: %{TtfwWord}U \
 ]\
 [{%1#f_IsCreator()!=true&"%{GEN}N"!=""}, \
 a%t_SelfName(%{GEN}): %{GEN}U \
 ]\
 %1<{}{}{%C},%CS %CN:%C%TU>)\
 [{%1#f_IsCreator()=true&"%{GEN}N"!=""}{\
 [{%1%TN!=void} : %1%TU]\
 }\
  : %{GEN}U\
 ]\
 ,Op_Instance)\
 
 %{Op_Instance}%f_set_documentation(Implementation of the script word %f_loc_GetNameForScript(%{Class_Inst}))\
 %{Op_Instance}%f_set_abstraction_type(final)\
 %{Op_Instance}%f_set_visibility_type(PrivateAccess)\
 
 %{Op_Instance}<{}{}{%C}%f_AddParamToRegister(%C%T)>\
 %f_AddParamToRegister(%{Op_Instance}%T)\
 
 ]\
 
 [{%1#f_IsVarWorker()=true}{\
 [{"%{TtfwWord.DoDoIt}N"=""}%f_find_element(4DAEEDE10285,TtfwWord.DoDoIt)]\
 %f_set_var(MyDo,{TtfwWord.DoDoIt})\
 }\
 [{"%{TtfwVarWorker.DoRun}N"=""}%f_find_element(5512949D0048,TtfwVarWorker.DoRun)]\
 %f_set_var(MyDo,{TtfwVarWorker.DoRun})\
 ]\
 
 [{"%{SysUtils}N"=""}%f_find_element(47877EB202FB,SysUtils)]\
 
 %{Class_Inst}%f_make_accessable(%{SysUtils}U)\
 %f_addCDep(%{Class_Inst},%{SysUtils})\
 
 %{Class_Inst}%f_add_override(%{MyDo}U)\
 
 [{%{NeedOp}N=true}{\
 }\
 %{MyDo}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{MyDo},%{Class_Inst})_var,\
  {-}\
 [{%{Op_Instance}<{}{}{+%CC}>!=0}\
 \n\
 var\
 %{Op_Instance}<{}{}{+%C}\n l_%CN : %f_pas_TypeName(%C%T);>\
 ]\
 )\
 
 %{MyDo}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{MyDo},%{Class_Inst})_impl,\
 %{Op_Instance}<{}{}{+%C}\
 [{%CS!=out}\
  try
   l_%CN := \
 %t_CastSig(%C%T)\
 (aCtx.rEngine.%t_PopSig(%C%T));
  except
   on E: Exception do
   begin
    RunnerError('Error getting a parameter %CN: %f_pas_TypeName(%C%T) : ' + E.Message, aCtx);
    Exit;
   end;//on E: Exception
  end;//try..except
 ]\
 >\
  \
 [{%{Op_Instance}%TN!=void}\
 aCtx.rEngine.%t_PushSig(%{Op_Instance}%T)\
 (%t_UnCastSig(%{Op_Instance}%T)(\
 ]\
 %f_to_borland(%{Op_Instance}N)(aCtx%{Op_Instance}<{}{}{+%C}, l_%CN>)\
 [{%{Op_Instance}%TN!=void}\
 ))\
 ]\
 ;\
 %{Op_Instance}<{}{}{%Cr}\
// %f_warning(%CS %CN)\
 [{%CS=out}\
 \n aCtx.rEngine.%t_PushSig(%C%T)(l_%CN);\
 ]\
 >\
 )\
 
 [{%1{mapped}=true}\
 
 %{Op_Instance}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{Op_Instance},%{Class_Inst})_var,\
  {-}\
 )\
 
 %{Op_Instance}%f_set_uc_content(intf.pas,_%f_pas_MethodOwnerID(%{Op_Instance},%{Class_Inst})_impl,\
  [{%{Op_Instance}%TN!=void}Result := ]\
 a%t_SelfName(%{GEN}).\
 [{}{%{Op_Instance}N}%1{prop_name}]\
 [{%1{is_setter}=true}{\
 [{%1<{}{}{C%C}>!=0}\
 (%1<{, }{}%CN>)\
 ]\
 }\
  := aValue\
 ]\
 ;\
 )\
 ]\
 ]
 
t _TypeInfo
@ %SU
c {}
r {%SN=void}: {@tfw_tiVoid}
r {%f_pas_TypeName(%S)=Tl3PCharLen}: {@tfw_tiWString}
r {%t_isString(%S)=true}: {@tfw_tiString}
r {%t_isStruct(%S)=true}: {@tfw_tiStruct}
r {%t_isClassRef(%S)=true}: {@tfw_tiClassRef}
r {""=""}: {TypeInfo(%f_pas_TypeName(%S))}
 
t _SelfNamePrim
@ %SU
c {}
r {%t_interface(%S)=true}: {%f_cut_prefix(%f_pas_TypeName(%S),I)}
r {%S#f_IsStaticObject()=true}: {%f_cut_prefix(%f_pas_TypeName(%S),T)}
r {%t_simple_class(%S)=true}: {%f_cut_prefix(%f_pas_TypeName(%S),T)}
r {""=""}: {%f_pas_TypeName(%S)}
 
t _SelfNameEx
@ %SU
c {}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),9)=nevCustom}: {%f_cut_prefix(%t_SelfNamePrim(%S),nevCustom)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),8)=evCustom}: {%f_cut_prefix(%t_SelfNamePrim(%S),evCustom)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),3)=nsc}: {%f_cut_prefix(%t_SelfNamePrim(%S),nsc)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),3)=tfw}: {%f_cut_prefix(%t_SelfNamePrim(%S),tfw)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=kw}: {%f_cut_prefix(%t_SelfNamePrim(%S),kw)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),3)=nev}: {%f_cut_prefix(%t_SelfNamePrim(%S),nev)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=vg}: {%f_cut_prefix(%t_SelfNamePrim(%S),vg)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=vt}: {%f_cut_prefix(%t_SelfNamePrim(%S),vt)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=k2}: {%f_cut_prefix(%t_SelfNamePrim(%S),k2)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=ns}: {%f_cut_prefix(%t_SelfNamePrim(%S),ns)}
r {%f_substr_from_begin(%t_SelfNamePrim(%S),2)=l3}: {%f_cut_prefix(%t_SelfNamePrim(%S),l3)}
r {""=""}: {%t_SelfNamePrim(%S)}
 
t _SelfName
@ %SU
c {}
r {%t_SelfNameEx(%S)=StackValue}: {SV}
r {%t_SelfNameEx(%S)=FontInfo}: {Font}
r {%t_SelfNameEx(%S)=ValueList}: {Array}
r {%t_SelfNameEx(%S)=FileName}: {File}
r {%t_SelfNameEx(%S)=SimpleTree}: {Tree}
r {%t_SelfNameEx(%S)=SimpleNode}: {Node}
r {%t_SelfNameEx(%S)=vcmEntityForm}: {Form}
r {%t_SelfNameEx(%S)=WinControl}: {Control}
r {%t_SelfNameEx(%S)=ElCustomPageControl}: {PageControl}
r {%t_SelfNameEx(%S)=ShockwaveFlashEx}: {Flash}
r {%t_SelfNameEx(%S)=TasksPanelView}: {TaskPanel}
r {%t_SelfNameEx(%S)=CustomToolbarButton97}: {TB97Button}
r {%t_SelfNameEx(%S)=ToolbarButton97}: {TB97Button}
r {%t_SelfNameEx(%S)=CustomOutliner}: {Tree}
r {%t_SelfNameEx(%S)=Outliner}: {Tree}
r {%t_SelfNameEx(%S)=CString}: {String}
r {%f_substr_from_begin(%t_SelfNameEx(%S),9)=Customize}: {%t_SelfNameEx(%S)}
r {""=""}: {%f_cut_prefix(%t_SelfNameEx(%S),Custom)}
 
t _isEnum
@ %SU
c {}
r {%SS=Enum}: {true}
r {%SS=Typedef}: {%t_isEnum(%G)}
r {""=""}: {false}
 
t _isClassRef
@ %SU
c {}
r {%f_pas_TypeName(%S)=TClass}: {true}
r {%SS=Typedef&%S{isClassRef}=true}: {true}
r {%SS=Typedef}: {%t_isClassRef(%G)}
r {""=""}: {false}
 
t _isString
@ %SU
c {}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim|%f_pas_TypeName(%S)=Tl3PCharLen}: {true}
r {%f_pas_TypeName(%S)=Il3CString}: {true}
r {%SS=Typedef}: {%t_isString(%G)}
r {""=""}: {false}
 
t _isAcceptableForScripts
@ %SU
c {}
r {%f_pas_TypeName(%S)=TClass}: {true}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {true}
r {%f_pas_TypeName(%S)=ItfwValueList}: {true}
r {%f_pas_TypeName(%S)=ItfwFile}: {true}
r {%SS=Typedef&%S{isClassRef}=true}: {true}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim|%f_pas_TypeName(%S)=Tl3PCharLen}: {true}
r {%f_pas_TypeName(%S)=Il3CString}: {true}
r {%t_simple_class(%S)=true}: {true}
r {%t_interface(%S)=true}: {true}
r {%f_pas_TypeName(%S)=String}: {true}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {true}
r {%f_pas_TypeName(%S)=TPoint}: {true}
r {%f_pas_TypeName(%S)=WideString}: {true}
r {%f_pas_TypeName(%S)=AnsiString}: {true}
r {%f_pas_TypeName(%S)=Integer}: {true}
r {%f_pas_TypeName(%S)=TColor}: {true}
r {%f_pas_TypeName(%S)=Cardinal}: {true}
r {%t_isEnum(%S)=true}: {true}
r {%f_pas_TypeName(%S)=THandle}: {true}
r {%f_pas_TypeName(%S)=Boolean}: {true}
r {%SS=Typedef}: {%t_isAcceptableForScripts(%G)}
r {""=""}: {false}
 
t _CastSig
@ %SU
c {}
r {%f_pas_TypeName(%S)=TClass}: {}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {}
r {%f_pas_TypeName(%S)=ItfwValueList}: {}
r {%f_pas_TypeName(%S)=ItfwFile}: {}
r {%SS=Typedef&%S{isClassRef}=true}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=Tl3PCharLen}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim}: {}
r {%f_pas_TypeName(%S)=Il3CString}: {}
r {%t_simple_class(%S)=true}: {%f_pas_TypeName(%S)}
r {%t_interface(%S)=true}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=String}: {}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {}
r {%f_pas_TypeName(%S)=TPoint}: {}
r {%f_pas_TypeName(%S)=WideString}: {}
r {%f_pas_TypeName(%S)=AnsiString}: {}
r {%f_pas_TypeName(%S)=Integer}: {}
r {%f_pas_TypeName(%S)=TColor}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=Cardinal}: {%f_pas_TypeName(%S)}
r {%t_isEnum(%S)=true}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=THandle}: {%f_pas_TypeName(%S)}
r {%f_pas_TypeName(%S)=Boolean}: {}
r {%SS=Typedef}: {%f_pas_TypeName(%S)}
r {""=""}: {"We don’t know to give a value of %f_pas_TypeName(%S) type"}
 
t _EngineType
@ %SU
c {}
r {%SN=void}: {VOID}
r {%f_pas_TypeName(%S)=TClass}: {CLASS}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {}
r {%f_pas_TypeName(%S)=ItfwValueList}: {ARRAY}
r {%f_pas_TypeName(%S)=ItfwFile}: {FILE}
r {%SS=Typedef&%S{isClassRef}=true}: {CLASS}
r {%f_pas_TypeName(%S)=Tl3PCharLen}: {W-STRING}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim}: {STRING}
r {%f_pas_TypeName(%S)=Il3CString}: {STRING}
r {%t_simple_class(%S)=true}: {OBJECT}
r {%t_interface(%S)=true}: {INTERFACE}
r {%f_pas_TypeName(%S)=String}: {STRING}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {CHAR}
r {%f_pas_TypeName(%S)=TPoint}: {}
r {%f_pas_TypeName(%S)=WideString}: {STRING}
r {%f_pas_TypeName(%S)=AnsiString}: {STRING}
r {%f_pas_TypeName(%S)=Integer}: {INTEGER}
r {%f_pas_TypeName(%S)=TColor}: {INTEGER}
r {%f_pas_TypeName(%S)=Cardinal}: {CARDINAL}
r {%t_isEnum(%S)=true}: {INTEGER}
r {%f_pas_TypeName(%S)=THandle}: {CARDINAL}
r {%f_pas_TypeName(%S)=Boolean}: {BOOLEAN}
r {%SS=Typedef}: {%t_EngineType(%G)}
r {""=""}: {}
 
t _UnCastSig
@ %SU
c {}
r {%SN=void}: {}
r {%f_pas_TypeName(%S)=TClass}: {}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {}
r {%f_pas_TypeName(%S)=ItfwValueList}: {}
r {%f_pas_TypeName(%S)=ItfwFile}: {}
r {%SS=Typedef&%S{isClassRef}=true}: {}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim|%f_pas_TypeName(%S)=Tl3PCharLen}: {}
r {%f_pas_TypeName(%S)=Il3CString}: {}
r {%t_simple_class(%S)=true}: {}
r {%t_interface(%S)=true}: {}
r {%f_pas_TypeName(%S)=String}: {}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {}
r {%f_pas_TypeName(%S)=TPoint}: {}
r {%f_pas_TypeName(%S)=WideString}: {}
r {%f_pas_TypeName(%S)=AnsiString}: {}
r {%f_pas_TypeName(%S)=Integer}: {}
r {%f_pas_TypeName(%S)=TColor}: {Integer}
r {%f_pas_TypeName(%S)=Cardinal}: {Integer}
r {%t_isEnum(%S)=true}: {Ord}
r {%f_pas_TypeName(%S)=THandle}: {Integer}
r {%f_pas_TypeName(%S)=Boolean}: {}
r {%SS=Typedef}: {%t_UnCastSig(%G)}
r {""=""}: {" We don’t know to give a value of %f_pas_TypeName(%S) type"}
 
t _PopSig
@ %SU
c {}
r {%f_pas_TypeName(%S)=TClass}: {PopClass}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {Pop}
r {%f_pas_TypeName(%S)=ItfwValueList}: {PopList}
r {%f_pas_TypeName(%S)=ItfwFile}: {PopFile}
r {%SS=Typedef&%S{isClassRef}=true}: {PopClassAs(%f_pas_TypeName(%S))}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim|%f_pas_TypeName(%S)=Tl3PCharLen}: {PopWStr}
r {%f_pas_TypeName(%S)=Il3CString}: {PopString}
r {%t_simple_class(%S)=true}: {PopObjAs(%f_pas_TypeName(%S))}
r {%t_interface(%S)=true}: {PopIntf(%f_pas_TypeName(%S))}
r {%f_pas_TypeName(%S)=String}: {PopDelphiString}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {PopChar}
r {%f_pas_TypeName(%S)=TPoint}: {PopPoint}
r {%f_pas_TypeName(%S)=WideString}: {PopWideString}
r {%f_pas_TypeName(%S)=AnsiString}: {PopDelphiString}
r {%f_pas_TypeName(%S)=Integer}: {PopInt}
r {%f_pas_TypeName(%S)=TColor}: {PopInt}
r {%f_pas_TypeName(%S)=Cardinal}: {PopInt}
r {%t_isEnum(%S)=true}: {PopInt}
r {%f_pas_TypeName(%S)=THandle}: {PopInt}
r {%f_pas_TypeName(%S)=Boolean}: {PopBool}
r {%SS=Typedef}: {%t_PopSig(%G)}
r {""=""}: {"We do not know how to remove from stack : %f_pas_TypeName(%S)"}
 
t _PushSig
@ %SU
c {}
r {%f_pas_TypeName(%S)=TClass}: {PushClass}
r {%f_pas_TypeName(%S)=TtfwStackValue}: {Push}
r {%f_pas_TypeName(%S)=ItfwValueList}: {PushList}
r {%f_pas_TypeName(%S)=ItfwFile}: {PushFile}
r {%SS=Typedef&%S{isClassRef}=true}: {PushClass}
r {%f_pas_TypeName(%S)=Tl3PCharLen}: {PushWStr}
r {%f_pas_TypeName(%S)=Tl3WString|%f_pas_TypeName(%S)=Tl3PCharLenPrim}: {PushString}
r {%f_pas_TypeName(%S)=Il3CString}: {PushString}
r {%t_simple_class(%S)=true}: {PushObj}
r {%t_interface(%S)=true}: {PushIntf}
r {%f_pas_TypeName(%S)=String}: {PushString}
r {%f_pas_TypeName(%S)=Char|%f_pas_TypeName(%S)=AnsiChar}: {PushChar}
r {%f_pas_TypeName(%S)=TPoint}: {PushPoint}
r {%f_pas_TypeName(%S)=WideString}: {PushWideString}
r {%f_pas_TypeName(%S)=AnsiString}: {PushString}
r {%f_pas_TypeName(%S)=Integer}: {PushInt}
r {%f_pas_TypeName(%S)=TColor}: {PushInt}
r {%f_pas_TypeName(%S)=Cardinal}: {PushInt}
r {%t_isEnum(%S)=true}: {PushInt}
r {%f_pas_TypeName(%S)=THandle}: {PushInt}
r {%f_pas_TypeName(%S)=Boolean}: {PushBool}
r {%SS=Typedef}: {%t_PushSig(%G)}
r {""=""}: {"We do not know how to pop : %f_pas_TypeName(%S)"}
//#UC END# *4B2A19E3038Bfor4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation ::MDAGenerator
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor4F2C15C90252*
//#UC END# *49F5795900ECfor4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator
// Second interface section of stereotype. For example, implementation of classes’ properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for4F2C15C90252*
//#UC END# *477398E501C0for4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator
// Third section of interface. For example, implementation of classes’ properties.
+ intf3.pas
R  
//#UC START# *4774D2A20372for4F2C15C90252*
//#UC END# *4774D2A20372for4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for4F2C15C90252*
O [{%S{needs script}=true}%f_pas_UnitName(%S).rc]
 [{"%SO"!=""}\
 %f_pas_UnitName(%S) RCDATA LOADONCALL MOVEABLE DISCARDABLE %f_pas_UnitName(%S).rc.script\
 %f_end_new_file(%S)\
 ]
//#UC END# *55B8D28B0157for4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator 
// Resource scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for4F2C15C90252*
O [{%S{needs script}=true}%f_pas_UnitName(%S).rc.script]
 [{"%SO"!=""}\
 %f_header(%S)
  
 %U[{impl}\n]\n
 %f_end_new_file(%S)\
 ]
//#UC END# *55B8D2F80145for4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for4F2C15C90252*
O [{%S{needs script}=true}%f_pas_UnitName(%S).res.cmd]
 [{"%SO"!=""}\
 brcc32 %f_pas_UnitName(%S).rc\
 %f_end_new_file(%S)\
 ]
//#UC END# *55B8DD9C0301for4F2C15C90252*
 
// implementation of abstract Delphi stereotype interfaces and implementation::MDAGenerator 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for4F2C15C90252*
//#UC END# *4DE79AFC0030for4F2C15C90252*
 
// implementation of abstract stereotype Java::MDAGenerator
// generator for implementation of interface factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor4F2C15C90252*
//#UC END# *470321C1038Afor4F2C15C90252*
 
// implementation of abstract stereotype Documentation::MDAGenerator
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor4F2C15C90252*
//#UC END# *4E65F581015Afor4F2C15C90252*
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Nested stereotypes
 
: ScriptKeywordsPack::Class::injects::ClassDependency
? Dependency injection
= Delphi interfaces and implementation::MDAGenerator
 
// Generators
// generator for implementation of interfaces factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor54D4A61F00BA*
//#UC END# *470321C1038Afor54D4A61F00BA*
 
// Second interface section of stereotype. For example, implementation of classes’ properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for54D4A61F00BA*
//#UC END# *477398E501C0for54D4A61F00BA*
 
// Third section of interface. For example, properties field.
+ intf3.pas
R  
//#UC START# *4774D2A20372for54D4A61F00BA*
//#UC END# *4774D2A20372for54D4A61F00BA*
 
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor54D4A61F00BA*
//#UC END# *49F5795900ECfor54D4A61F00BA*
 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for54D4A61F00BA*
//#UC END# *4DE79AFC0030for54D4A61F00BA*
 
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor54D4A61F00BA*
//#UC END# *4E65F581015Afor54D4A61F00BA*
 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for54D4A61F00BA*
//#UC END# *55B8D28B0157for54D4A61F00BA*
 
// Resources scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for54D4A61F00BA*
//#UC END# *55B8D2F80145for54D4A61F00BA*
 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for54D4A61F00BA*
//#UC END# *55B8DD9C0301for54D4A61F00BA*
 
// Model generation in MDKnow
+ wiki
//#UC START# *46E6D4BB0339for54D4A61F00BA*
//#UC END# *46E6D4BB0339for54D4A61F00BA*
 
// Native Delphi interfaces (.pas)
+ intf.pas
R  
//#UC START# *470F1571031Cfor54D4A61F00BA*
//#UC END# *470F1571031Cfor54D4A61F00BA*
 
// Implementation on Delphi(.pas)
+ impl.pas
R  
//#UC START# *470F15B800CBfor54D4A61F00BA*
//#UC END# *470F15B800CBfor54D4A61F00BA*
 
// Stereotype function
%f _st_space_key
 SHD
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// implementation of abstract stereotype Documentation::MDAGenerator
// check for restraints on the element
%t _constraint
//#UC START# *4704C0E30186for54D4A61F00BA*
c          {}
r {""=""}: {}
//#UC END# *4704C0E30186for54D4A61F00BA*
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displays item description (operation, attribute) on wiki
%f _wiki_child_kind
//#UC START# *4705CBD6003Efor54D4A61F00BA*
//#UC END# *4705CBD6003Efor54D4A61F00BA*
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displays the description of auto-generated methods to wiki
%f _wiki_up_add_gen
//#UC START# *470484D50138for54D4A61F00BA*
//#UC END# *470484D50138for54D4A61F00BA*
 
: ScriptKeywordsPack::Class::keyword::Operation
? Word of script
= UtilityPack::Class::Operation
 
// Parameters of stereotype
v -
/ - types of visibility
a f
/ - type of abstraction
T 
/ - can have no “purpose” (type/result)
 
// User properties
p NameForScript:s ? 
p is immediate:tribool=undefined ? 
p mapped:tribool=undefined ? 
 
// Generators
// Model generation in MDKnow
+ wiki
//#UC START# *46E6D4BB0339for54F734BC0087*
//#UC END# *46E6D4BB0339for54F734BC0087*
 
// generator of implementation of interfaces factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor54F734BC0087*
//#UC END# *470321C1038Afor54F734BC0087*
 
// Second interface section of stereotype. For example, implementation of classes’ properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for54F734BC0087*
//#UC END# *477398E501C0for54F734BC0087*
 
// Third section of interface. For example, properties field.
+ intf3.pas
R  
//#UC START# *4774D2A20372for54F734BC0087*
//#UC END# *4774D2A20372for54F734BC0087*
 
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor54F734BC0087*
//#UC END# *49F5795900ECfor54F734BC0087*
 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for54F734BC0087*
//#UC END# *4DE79AFC0030for54F734BC0087*
 
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor54F734BC0087*
//#UC END# *4E65F581015Afor54F734BC0087*
 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for54F734BC0087*
//#UC END# *55B8D28B0157for54F734BC0087*
 
// Resource scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for54F734BC0087*
//#UC END# *55B8D2F80145for54F734BC0087*
 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for54F734BC0087*
//#UC END# *55B8DD9C0301for54F734BC0087*
 
// Native Delphi interfaces (.pas)
+ intf.pas
R  
//#UC START# *470F1571031Cfor54F734BC0087*
//#UC END# *470F1571031Cfor54F734BC0087*
 
// Implementation on Delphi(.pas)
+ impl.pas
R  
//#UC START# *470F15B800CBfor54F734BC0087*
//#UC END# *470F15B800CBfor54F734BC0087*
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S#[inherited][{"%S{mapped}"!="%S{!mapped}"}%f_up_prefix(%S) *mapped* = *%S{mapped}*
 ][{"%S{NameForScript}"!="%S{!NameForScript}"}%f_up_prefix(%S) *NameForScript* = *%S{NameForScript}*
 ][{"%S{is immediate}"!="%S{!is immediate}"}%f_up_prefix(%S) *is immediate* = *%S{is immediate}*
 ]
 
%f _IsKeyword
// returnable result: boolean
//#UC START# *5510356E00AEfor54F734BC0087*
 true
//#UC END# *5510356E00AEfor54F734BC0087*
 
%f _NoForward
// returnable result: boolean
//#UC START# *55115A470301for54F734BC0087*
 true
//#UC END# *55115A470301for54F734BC0087*
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displaying of description of auto-generated methods on wiki
%f _wiki_up_add_gen
//#UC START# *470484D50138for54F734BC0087*
//#UC END# *470484D50138for54F734BC0087*
 
: ScriptKeywordsPack::Class::property::Attribute
= UtilityPack::Class::Attribute
 
// Stereotype parameter
v -
/ - type of visibility
a f
/ - type of abstraction
 
// User properties
p NameForScript:s ? 
p mapped:tribool=undefined ? 
 
// Generators
// Model generation in MDKnow
+ wiki
//#UC START# *46E6D4BB0339for54F861670034*
//#UC END# *46E6D4BB0339for54F861670034*
 
// generator of inline implementation files on C++ (.i.h)
+ i.h
//#UC START# *47022CCF00EAfor54F861670034*
//#UC END# *47022CCF00EAfor54F861670034*
 
// generator for implementation of interfaces factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor54F861670034*
//#UC END# *470321C1038Afor54F861670034*
 
// Second interface section of stereotype. For example, implementation of classes’ properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for54F861670034*
//#UC END# *477398E501C0for54F861670034*
 
// Third section of interface. For example, properties field.
+ intf3.pas
R  
//#UC START# *4774D2A20372for54F861670034*
//#UC END# *4774D2A20372for54F861670034*
 
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor54F861670034*
//#UC END# *49F5795900ECfor54F861670034*
 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for54F861670034*
//#UC END# *4DE79AFC0030for54F861670034*
 
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor54F861670034*
//#UC END# *4E65F581015Afor54F861670034*
 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for54F861670034*
//#UC END# *55B8D28B0157for54F861670034*
 
// Resource scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for54F861670034*
//#UC END# *55B8D2F80145for54F861670034*
 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for54F861670034*
//#UC END# *55B8DD9C0301for54F861670034*
 
// Native Delphi interfaces (.pas)
+ intf.pas
R  
//#UC START# *470F1571031Cfor54F861670034*
//#UC END# *470F1571031Cfor54F861670034*
 
// Implementation on Delphi(.pas)
+ impl.pas
R  
//#UC START# *470F15B800CBfor54F861670034*
//#UC END# *470F15B800CBfor54F861670034*
 
// Stereotype functions
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S#[inherited][{"%S{mapped}"!="%S{!mapped}"}%f_up_prefix(%S) *mapped* = *%S{mapped}*
 ][{"%S{NameForScript}"!="%S{!NameForScript}"}%f_up_prefix(%S) *NameForScript* = *%S{NameForScript}*
 ]
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// implementation of abstract stereotype Documentation::MDAGenerator
// check for restraints on the element
%t _constraint
//#UC START# *4704C0E30186for54F861670034*
c          {}
r {""=""}: {}
//#UC END# *4704C0E30186for54F861670034*
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displays the description of auto-generated methods to wiki
%f _wiki_up_add_gen
//#UC START# *470484D50138for54F861670034*
//#UC END# *470484D50138for54F861670034*
 
: ScriptKeywordsPack::Class::readonly::Attribute
= ScriptKeywordsPack::Class::property::Attribute
 
// Stereotype function
%f _st_space_key
 SHD
 
 
: ScriptKeywordsPack::Class::friend::ClassDependency
= ClassBase::Class::friend::ClassDependency
 
// Generators
// Model generation in MDKnow
+ wiki
//#UC START# *46E6D4BB0339for54FECA940175*
//#UC END# *46E6D4BB0339for54FECA940175*
 
// generator of header files on C++ (.h)
+ h
//#UC START# *47022C88029Ffor54FECA940175*
//#UC END# *47022C88029Ffor54FECA940175*
 
// generator of implementation files on C++ (.cpp)
+ cpp
//#UC START# *47022CB8034Bfor54FECA940175*
//#UC END# *47022CB8034Bfor54FECA940175*
 
// generator of inline implementation files C++ (.i.h)
+ i.h
//#UC START# *47022CCF00EAfor54FECA940175*
//#UC END# *47022CCF00EAfor54FECA940175*
 
// generator of classes, interfaces on java (.java)
+ java
//#UC START# *470321950119for54FECA940175*
//#UC END# *470321950119for54FECA940175*
 
// generator for implementation of interface factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor54FECA940175*
//#UC END# *470321C1038Afor54FECA940175*
 
// Native Delphi interfaces (.pas)
+ intf.pas
R  
//#UC START# *470F1571031Cfor54FECA940175*
//#UC END# *470F1571031Cfor54FECA940175*
 
// Implementation on Delphi(.pas)
+ impl.pas
R  
//#UC START# *470F15B800CBfor54FECA940175*
//#UC END# *470F15B800CBfor54FECA940175*
 
// Second interface section of stereotype. For example, implementation of class properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for54FECA940175*
//#UC END# *477398E501C0for54FECA940175*
 
// Third section of interface. For example, implementation of classes' properties.
+ intf3.pas
R  
//#UC START# *4774D2A20372for54FECA940175*
//#UC END# *4774D2A20372for54FECA940175*
 
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor54FECA940175*
//#UC END# *49F5795900ECfor54FECA940175*
 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for54FECA940175*
//#UC END# *4DE79AFC0030for54FECA940175*
 
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor54FECA940175*
//#UC END# *4E65F581015Afor54FECA940175*
 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for54FECA940175*
//#UC END# *55B8D28B0157for54FECA940175*
 
// Resource scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for54FECA940175*
//#UC END# *55B8D2F80145for54FECA940175*
 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for54FECA940175*
//#UC END# *55B8DD9C0301for54FECA940175*
 
// Stereotype function
%f _st_space_key
 SHD
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// implementation of abstract stereotype Documentation::MDAGenerator
// check for restraints on the element
%t _constraint
//#UC START# *4704C0E30186for54FECA940175*
c          {}
r {""=""}: {}
//#UC END# *4704C0E30186for54FECA940175*
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displays the description of auto-generated methods input to wiki
%f _wiki_up_add_gen
//#UC START# *470484D50138for54FECA940175*
//#UC END# *470484D50138for54FECA940175*
 
: ScriptKeywordsPack::Class::creator::Operation
= ScriptKeywordsPack::Class::keyword::Operation
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _IsCreator
// returned result: boolean
//#UC START# *5510359500FCfor5510358803BD*
 true
//#UC END# *5510359500FCfor5510358803BD*
 
: ScriptKeywordsPack::Class::globalkeyword::Operation
? Global script word
= UtilityPack::Class::Operation
 
// User properties
p NameForScript:s ? 
p is immediate:tribool=undefined ? 
 
// Generators
// Model generation in MDKnow
+ wiki
//#UC START# *46E6D4BB0339for55115A7D0330*
//#UC END# *46E6D4BB0339for55115A7D0330*
 
// generator for implementation of interface factories on java (.java)
+ fctr.java
//#UC START# *470321C1038Afor55115A7D0330*
//#UC END# *470321C1038Afor55115A7D0330*
 
// Second interface section of stereotype. For example, implementation of class properties.
+ intf2.pas
R  
//#UC START# *477398E501C0for55115A7D0330*
//#UC END# *477398E501C0for55115A7D0330*
 
// Third section of interface. For example, properties field.
+ intf3.pas
R  
//#UC START# *4774D2A20372for55115A7D0330*
//#UC END# *4774D2A20372for55115A7D0330*
 
// Generator of forms files (.dfm)
+ dfm
R  
//#UC START# *49F5795900ECfor55115A7D0330*
//#UC END# *49F5795900ECfor55115A7D0330*
 
// Scripts of TC (.sd)
+ sd
R  
//#UC START# *4DE79AFC0030for55115A7D0330*
//#UC END# *4DE79AFC0030for55115A7D0330*
 
// Hack for [$281531116]
+ link_to_requests_hack
//#UC START# *4E65F581015Afor55115A7D0330*
//#UC END# *4E65F581015Afor55115A7D0330*
 
// Resources (.rc)
+ rc.pas
R  
//#UC START# *55B8D28B0157for55115A7D0330*
//#UC END# *55B8D28B0157for55115A7D0330*
 
// Resource scripts (.rc.script)
+ rc.script.pas
R  
//#UC START# *55B8D2F80145for55115A7D0330*
//#UC END# *55B8D2F80145for55115A7D0330*
 
// Resource compiler (.res.cmd)
+ res.cmd.pas
R  
//#UC START# *55B8DD9C0301for55115A7D0330*
//#UC END# *55B8DD9C0301for55115A7D0330*
 
// Native Delphi interfaces (.pas)
+ intf.pas
R  
//#UC START# *470F1571031Cfor55115A7D0330*
//#UC END# *470F1571031Cfor55115A7D0330*
 
// Implementation on Delphi(.pas)
+ impl.pas
R  
//#UC START# *470F15B800CBfor55115A7D0330*
//#UC END# *470F15B800CBfor55115A7D0330*
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S#[inherited][{"%S{NameForScript}"!="%S{!NameForScript}"}%f_up_prefix(%S) *NameForScript* = *%S{NameForScript}*
 ][{"%S{is immediate}"!="%S{!is immediate}"}%f_up_prefix(%S) *is immediate* = *%S{is immediate}*
 ]
 
%f _IsGlobalKeyword
// возвращаемый результат: boolean
//#UC START# *55115AD200D8for55115A7D0330*
 true
//#UC END# *55115AD200D8for55115A7D0330*
 
%f _NoForward
// returned result: boolean
//#UC START# *55115FF8009Efor55115A7D0330*
 true
//#UC END# *55115FF8009Efor55115A7D0330*
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inherited implementation
 
// implementation of abstract stereotype Documentation::MDAGenerator
// displays the description of auto-generated methods input to wiki
%f _wiki_up_add_gen
//#UC START# *470484D50138for55115A7D0330*
//#UC END# *470484D50138for55115A7D0330*
 
: ScriptKeywordsPack::Class::varworker::Operation
= ScriptKeywordsPack::Class::keyword::Operation
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _IsVarWorker
// returned result: boolean
//#UC START# *55128EF4009Cfor55128EAF022E*
 true
//#UC END# *55128EF4009Cfor55128EAF022E*
 
: ScriptKeywordsPack::Class::globalvarworker::Operation
= ScriptKeywordsPack::Class::globalkeyword::Operation
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _IsVarWorker
// returned result: boolean
//#UC START# *55128F060331for55128EDC028D*
 true
//#UC END# *55128F060331for55128EDC028D*
 
: ScriptKeywordsPack::Class::wordworker::Operation
= ScriptKeywordsPack::Class::varworker::Operation
= SupressNextImmediateHolder::Class
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S%[ScriptKeywordsPack::Class::varworker::Operation]f_wiki_up_print()[{"%S{SupressNextImmediate}"!="%S{!SupressNextImmediate}"}%f_up_prefix(%S) *SupressNextImmediate* = *%S{SupressNextImmediate}*
 ]
 
%f _IsWordWorker
// returned result: boolean
//#UC START# *5513DB4402E0for5513DB34012F*
 true
//#UC END# *5513DB4402E0for5513DB34012F*
 
: ScriptKeywordsPack::Class::globalwordworker::Operation
= ScriptKeywordsPack::Class::globalvarworker::Operation
= SupressNextImmediateHolder::Class
 
// Stereotype function
%f _st_space_key
 SHD
 
%f _wiki_up_print
 %S%[ScriptKeywordsPack::Class::globalvarworker::Operation]f_wiki_up_print()[{"%S{SupressNextImmediate}"!="%S{!SupressNextImmediate}"}%f_up_prefix(%S) *SupressNextImmediate* = *%S{SupressNextImmediate}*
 ]
 
%f _IsWordWorker
// returned result: boolean
//#UC START# *5513DB6C026Ffor5513DB5502C7*
 true
//#UC END# *5513DB6C026Ffor5513DB5502C7*
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



Scripts, iterators and exception handling (draft)

Original in Russian: http://programmingmindstream.blogspot.ru/2014/06/blog-post_4070.html

I quote:

"
Aspects of working with objects iterators

To check the functionality of the system while writing a test, one often needs to perform the iteration of all forms or special controls. The aim is to find a particular object or get a possibility to use one expression for all objects found (for example, writing the name and activity state of the object to a template).
A simple iteration based on using the WORDWORKER would be as follows:

 WORDWORKER “Forms iteration”
 WHILE ( … )
 ( …
 OBJECT VAR Form := ( … )
 Form ( WordToWork DO )
 )
 ;


In this example, forms searching is performed on general criteria. Each from is assigned to the variable Form. The expression would be used for every variable to set WordToWork DO. The same can be done using the procedure but WORDWORKER has a distinct advantage: the expression for every form would be set AT THE RIGHT. The code would be almost self-descriptive.
An example of using the word:

 “Forms iteration” ( Actions_for_any_found form )

Using this word we can easily write the tests functionality. For example, we can print out all controls on all forms:

 WORDWORKER “Controls iteration” OBJECT IN Form
 WHILE on_controls Form
 ( …
 ( WordToWork DO )
 )
 ;
 “Forms iteration” (
 “Controls iteration” )

In this case, we should remember that the form is set AT THE LEFT from the second WORDWORKER and the expression for controls printing is set AT THE RIGHT.
Suppose, we need to find a particular control through iteration and go out of the cycles (since there are two of them: forms iteration and controls iteration). A standard construct

 EXIT
 CONTINUE
 BREAK

is not appropriate here, since processing of standard exception is used in every WORDWORKER (as well as in any procedure):

 PROCEDURE “…”
 TRY
 …
 ( RAISE EXIT )
 …
 EXCEPT
 if Exception = EXIT then
 ( )
 else
 RAISE
 END
 ;

At the end of implementation the procedure the EXIT exception is created. When it gets to the block EXCEPT…END, it is processed (the exception is “dampened” or, in other words, popped from the stack). In other cases, if we get another exception (like AV or ASSERT), it is not processed at all and is pushed to the stack. Then, it moves to the top of the stack until it becomes the first (user would see a system error message) or until it gets to the block EXCEPT…END that describes further behavior at getting this exception.
When we try to use EXIT to exit from controls iteration, the current iteration with the current form ceases if the condition is fulfilled:

 “Forms iteration” (
 “Controls iteration” (
 If ( Condition ) than ( EXIT )
 )
 )

To stop the cycles correctly,  ASSERT can be used, though it is not always appropriate.
According to this logic, the exception should be created to stop objects iteration correctly and the exception should be processed in proper time, before it gets to the user.

 CONST cBreak ‘cBreak’
 : “Stop iteration”
 CBreak RAISE
 ;
 WORDWORKER “Perform iteration”
 TRY
 ( WordToWork DO )
 EXCEPT
 if ( CurrentException Exception:Message not  cBreak ) then
 ( RAISE )
 END
 ;

As a result, we get the code:

 “Perform iteration” (
 “Forms iteration” (
 “Controls iteration” (
 If ( Condition ) then ( “Stop the iteration” )
 )
 )
 )

The code would be multi-purpose. It would obviate the old code rewriting or partial duplication, if there is a possibility to check the other conditions similar in logic. The words “Perform iteration”, “Forms iteration” and “Controls iteration” will work either together or separately."


Wide use of interfaces “in general” and InterlockedIncrement/InterlockedDecrement in particular...


Original in Russian: http://18delphi.blogspot.ru/2013/10/interlockedincrementinterlockeddecrement.html

Wide use of interfaces “in general” and InterlockedIncrement/InterlockedDecrement in particular leads to a significant fall in productivity.

If you will – I have some unsuccess stories verified by measurements of AQTime.

By the way, if I were one of “ARC authors” I would take my stories into consideration.

P.S. Once (there were no mixins) we gave in to “mass hysteria of interfaces” and confused “interface compatibility” with “behavioral compatibility”. It resembles dealing with the “C++ templates”, “abstract classes” and “multiple inheritance”. There is a fine line between them. By NO MEANS always we need THE “interface compatibility”, far more often we need the “behavioral compatibility”.

P.P.S. I am amazed at ONLY ONE aspect – maintaining of appropriate productivity in Objective-C on selector (name) calling ALL methods. It EVEN works on MOBILE devices, EVEN with 3g.

Thing is, retain/release/autorelease THERE are so much unlike InterlockedIncrement/Interlockeddecrement. However, it works.

A sort of "hungarian notation". Some more trivial staff

Original in Russian: http://18delphi.blogspot.ru/2013/05/blog-post_6947.html

I write global variables as g_GlobalVar.
Local variables - l_LocalVar or vLocalVar (v – from var(iable)).
Input parameters - a(n)InParam.
Output parameters - theOutParam.
Class members - f_Field.
Local constants - cConst.
Embedded local procedures - lpLocalProc.

As for me it is very useful.

Try it. May be you will like it.

Classes, factories and interfaces

Original in Russian: http://programmingmindstream.blogspot.ru/2015/07/blog-post_62.html


Provided basis for Shooting the breeze. AddRef and Release (in Russian).

Let us have classes CA, CB and CC that implement the interface I and have one superclass.

At a certain point we understand that the objects should be cached.

So, we add factories FA, FB and FC that create and cache objects.

It works fine.

But!

What can we see?

We do not need interface I. We derive abstract class CI from it and inherit it from P.

Classes CA, CB and CC are inherited from CI.

Abstract methods are implemented and common functionality is extracted.

As a result, we dispose of AddRef/Release and indirect costs related and does not affect the logic.

среда, 15 апреля 2015 г.

Offtopic. Briefly. About similarities

I go in for aikido. Simply “because it is graceful”...
Also, because the “heady air” after training creates an illusion of being in the mountains...
In numbers – for 10 years already.

But closely (honestly) – for five years.

To train honestly and closely means to “break and fall”… stand up… “break and fall”… AGAIN stand up… “break and fall”….Feeling no breath… The heart beats off-scale… When the training session is out, you understand – “I did it honestly”… I did not just “come and wave my hands and my arms”...

As in the mountains – I climb on a peak... Feeling no joy and no grief... But mere exhaustion... Understanding – “I’ve made it”… I sit there for a while and have a smoke… and go down…

Suddenly, at a regular training it “stroke” me... (I train in the mornings with my good friend.)

I seem to “know how to do”, but I don’t understand the idea.

I move my arm “here”, my leg “there”, I “stretch” here but “fell short” there… I have to “feel” these things...

In a way, it is similar to programming – when they ask me, “How do you do this?”, “How did you know the error was there?” or “How would you find the error?”...

The answer is ANYHOW...

I just do it “a million times”… Straight and tiresomely…

It is impossible to EXPLAIN…You have to fall – a MILLION times, straight and tiresomely…

And you have to swing your blade a MILLION times… RIGHT.

I swung my blade a MILLION times… WRONG.

NOW I will learn to do it RIGHT.

It is similar to programming.

Wait!... I have not been in the mountains yet… BUT this is a separate story…

P.S. My most “fundamental” developing were made in the mountains… when I was hanging another rope… in isolation from computers…


P.P.S. You always have to imagine that your opponent holds a knife in his hand.