UNIT msm.ms.dict USES core.ms.dict ; USES ModelElementsDefinition.ms.dict ; USES ElementsRTTI.ms.dict ; USES GarantMetaModel.ms.dict ; USES IsNil.ms.dict ; USES arrays.ms.dict ; elem_iterator NullList [empty] >>> Result ; // NullList WordAlias ._NullList .NullList elem_iterator SelfList [ Self ] >>> Result ; // SelfList WordAlias ._SelfList .SelfList elem_iterator Inner Cached: ( Self .Children .join> ( Self .Constants ) .join> ( Self .Attributes ) .join> ( Self .Operations ) .join> ( Self .Dependencies ) .join> ( Self .Parameters ) ) >>> Result ; // Inner USES FirstElement.ms.dict ; STRING elem_func UpText Self .NameInModel >>> Result if ( Result .IsNil ) then begin Self .WordName >>> Result end // ( Result .IsNil ) if ( Self .IsUP ) then begin VAR l_Value [ Self DO ] .map> ( IN aValue RULES ( aValue IsObj ) ( aValue .Name ) DEFAULT ( aValue ToPrintable ) ; // RULES ) .FirstElement >>> l_Value [ Result ' = ' l_Value ] strings:Cat >>> Result end // ( Self .IsUP ) ; // UpText STRING elem_func LinkName '' >>> Result VAR l_St Self .Stereotype >>> l_St if ( ( l_St .NotIsNil ) AND ( l_St .NameInModel .NotIsNil ) ) then begin [ '<<' l_St .NameInModel '::' string:Split DROP '>>' ] strings:Cat >>> Result end // ( l_St .NotIsNil ) if ( Self .NameInModel .NotIsNil ) then begin [ Result Self .NameInModel ] ' ' strings:CatSep >>> Result end // ( Self .NameInModel .NotIsNil ) ; // LinkName STRING elem_func StereotypeName Cached: ( VAR l_St Self .Stereotype >>> l_St if ( ( l_St .NotIsNil ) AND ( l_St .NameInModel .NotIsNil ) ) then begin [ '<<' l_St .NameInModel '>>' ] strings:Cat end // ( l_St .NotIsNil ) else begin [ '[[' Self .MDAClassString ']]' ] strings:Cat // '<<default>>' end ) >>> Result ; // StereotypeName STRING elem_func NameNotEmpty Cached: ( Self .NameInModel >>> Result if ( Result .IsNil ) then begin '(unnamed)' >>> Result end // ( Result .IsNil ) Result ) >>> Result ; // NameNotEmpty STRING elem_func NameWithStereo Cached: ( Self .NameNotEmpty >>> Result VAR l_St Self .StereotypeName >>> l_St if ( l_St .NotIsNil ) then begin [ l_St ' ' Result ] strings:Cat >>> Result end // ( l_St .NotIsNil ) Result ) >>> Result ; // NameWithStereo STRING elem_func ValueString '' >>> Result VAR l_Value Self .GetUP 'Value' >>> l_Value if ( l_Value .IsValueValid ) then begin l_Value ToPrintable >>> Result end // ( l_Value .IsValueValid ) ; // ValueString USES CountIt.ms.dict ; ModelElement elem_func FirstOperation Cached: ( Self .Operations .filter> ( .IsLocalMethod ! ) .FirstElement ) >>> Result ; // FirstOperation elem_iterator MethodParameters Cached: ( RULES ( Self .IsMethod ) ( Self .FirstOperation .Parameters ) ( Self .IsFunction ) ( Self .FirstOperation .Parameters ) DEFAULT ( Self .Parameters ) ; // RULES ) >>> Result ; // MethodParameters USES ElemMemberPrim.ms.dict ; ModelElement elem_func MethodTarget Cached: ( RULES ( Self .IsMethod ) ( Self .FirstOperation .Target ) ( Self .IsFunction ) ( Self .FirstOperation .Target ) ( Self .IsViewLink ) RULES ( Self .Target .IsNil ) ( Self .To ) DEFAULT ( Self .Target ) ; // RULES DEFAULT ( Self .Target ) ; // RULES ) >>> Result ; // MethodTarget STRING elem_func ParametersString '' >>> Result VAR l_P VAR l_Open VAR l_Close if ( Self .MDAClass class_Attribute == ) then begin Self .Attributes >>> l_P '[' >>> l_Open ']' >>> l_Close end // ( Self .MDAClass class_Attribute == ) else begin Self .MethodParameters >>> l_P '(' >>> l_Open ')' >>> l_Close end // ( Self .MDAClass class_Attribute == ) if ( l_P .NotEmpty ) then begin [ VAR l_WasParam false >>> l_WasParam l_Open l_P .for> ( IN aParam if l_WasParam then ', ' VAR l_St aParam .Stereotype >>> l_St if ( l_St .NotIsNil ) then begin if ( l_St .NameInModel 'in' != ) then begin l_St .NameInModel ' ' end // ( l_St .NameInModel 'in' != ) end // ( l_St .NotIsNil ) aParam .NameInModel VAR l_T aParam .Target >>> l_T VAR l_N if ( l_T .IsNil ) then begin 'void' >>> l_N end // ( l_T .IsNil ) else begin l_T .NameInModel >>> l_N end // ( l_T .IsNil ) ': ' l_N VAR l_V aParam .ValueString >>> l_V if ( l_V .NotIsNil ) then begin ' = ' l_V end // ( l_V .NotIsNil ) true >>> l_WasParam ) //l_P .for> l_Close ] strings:Cat >>> Result end // l_P .NotEmpty ; // ParametersString STRING elem_func Signature Cached: ( [ Self .NameNotEmpty Self .ParametersString ] strings:Cat >>> Result if ( Self .IsViewLink ) then begin if ( Self .From .NotIsNil ) then begin [ Result ' ' Self .From .NameInModel ] strings:Cat >>> Result end // ( Self .From .NotIsNil ) if ( Self .To .NotIsNil ) then begin [ Result ' -> ' Self .To .NameInModel ] strings:Cat >>> Result end // ( Self .To .NotIsNil ) end // ( Self .IsViewLink ) else begin VAR l_T Self .MethodTarget >>> l_T if ( l_T .NotIsNil ) then begin VAR l_Name l_T .NameInModel >>> l_Name if ( l_Name .IsNil ) then begin 'void' >>> l_Name end // ( l_Name .IsNil ) [ Result ': ' l_Name ] strings:Cat >>> Result end // ( l_T .NotIsNil ) end // ( Self .IsViewLink ) Result ) >>> Result ; // NameNotEmpty STRING elem_func NameWithStereoAndTarget Cached: ( [ Self .StereotypeName Self .Signature ] ' ' strings:CatSep ) >>> Result ; // NameWithStereoAndTarget STRING elem_func NameWithStereoAndTargetAndValue Cached: ( Self .NameWithStereoAndTarget >>> Result VAR l_Value Self .ValueString >>> l_Value if ( l_Value .NotIsNil ) then begin [ Result ' = ' l_Value ] strings:Cat >>> Result end // ( l_Value .NotIsNil ) Result ) >>> Result ; // NameWithStereoAndTargetAndValue STRING elem_func NameWithStereoAndTargetAndValueAndDoc Self .NameWithStereoAndTargetAndValue >>> Result VAR l_D Self .Documentation >>> l_D if ( l_D .NotIsNil ) then begin [ Result #10 ' - ' l_D ] strings:Cat >>> Result end // ( l_D .NotIsNil ) ; // NameWithStereoAndTargetAndValueAndDoc STRING elem_func DocumentationNotEmpty Self .Documentation >>> Result if ( Result .IsNil ) then begin 'Элемент не документирован' >>> Result end // ( Result .IsNil ) ; // DocumentationNotEmpty BOOLEAN elem_func IsFinished Self .GetUP "finished" false ?!= >>> Result ; // IsFinished WordAlias .DefaultShortText .NameWithStereo //WordAlias .DefaultText .Name //WordAlias .DefaultSearchText .Name WordAlias .DefaultSearchText .NameInModel WordAlias .DefaultText .NameWithStereoAndTargetAndValue WordAlias .DefaultFullText .DefaultText WordAlias .DefaultTextAndDoc .NameWithStereoAndTargetAndValueAndDoc USES CompileTimeVar.ms.dict ; USES Log.ms.dict ; BOOLEAN CompileTime-VAR g_NeedTerminate false PROCEDURE TerminateLoadInner true >>> g_NeedTerminate Log: 'Terminate Request' ; // TerminateLoadInner FORWARD .MainDiagram elem_proc LoadChildInfo if ( g_NeedTerminate ! ) then begin Self .Stereotype DROP Self .NameWithStereo DROP Self .DefaultText DROP Self .Parent DROP Self .IsSummoned DROP Self .MainDiagram DROP Self .Depends DROP Self .Inherits DROP Self .Implements DROP //Self .Implemented DROP //Self .Overridden DROP //Self .Dependencies DROP //Self .UpList DROP //Self .DocumentationNotEmpty DROP Self .Inner DROP end // ( g_NeedTerminate ! ) ; // LoadChildInfo elem_proc LoadInnerPrim if ( g_NeedTerminate ! ) then begin Self .LoadChildInfo Self .Inner .for> ( if g_NeedTerminate then begin DROP end // g_NeedTerminate else begin call.me end // g_NeedTerminate ) // Self .Children .for> end // ( g_NeedTerminate ! ) ; // LoadInnerPrim BOOLEAN elem_func LoadLevel true >>> Result if ( g_NeedTerminate ! ) then begin Self .LoadChildInfo /*{ Self .Inner .for> ( if g_NeedTerminate then begin DROP end // g_NeedTerminate else begin .LoadChildInfo end // g_NeedTerminate ) // Self .Children .for>}*/ end // ( g_NeedTerminate ! ) ; // LoadLevel BOOLEAN elem_func LoadInner Log: 'Loading' true >>> Result Self .LoadInnerPrim if g_NeedTerminate then begin Log: 'Terminated' end // g_NeedTerminate else begin Log: 'Loaded' end // g_NeedTerminate ; // LoadInner USES axiom:TColor ; INTEGER elem_func msm:View:ForeColor RULES ( Self .IsProject ) TColor::clGreen ( Self .IsUnit ) TColor::clGreen ( Self .IsExeTarget ) TColor::clGreen ( Self .IsLibrary ) TColor::clBlue ( Self .IsInterfaces ) TColor::clNavy ( Self .IsStereotype st_Facet ) TColor::clNavy ( Self .IsStereotype st_Interface ) TColor::clNavy ( Self .IsMixIn ) TColor::clFuchsia //TColor::clMoneyGreen //TColor::clLime ( Self .IsSimpleClass ) TColor::clGreen ( Self .IsUtilityPack ) TColor::clRed ( Self .IsMixInMirror ) TColor::clAqua ( Self .IsEnum ) TColor::clOlive ( Self .IsTypedef ) TColor::clMedGray DEFAULT TColor::clDefault ; // RULES >>> Result ; // msm:View:ForeColor USES WordsRTTI.ms.dict ; INTEGER elem_func msm:View:BackColor INTEGER elem_func StereotypeBackColor Cached: ( VAR l_Color Self .GetUP "visualization bg color" >>> l_Color RULES ( l_Color IsInt ) l_Color DEFAULT begin Self .StereotypeInModel .GetUP "visualization bg color" >>> l_Color RULES ( l_Color IsInt ) l_Color DEFAULT begin TColor::clDefault >>> l_Color Self .Inherited.Words .for> ( IN anAncestor VAR l_AncestorColor anAncestor call.me >>> l_AncestorColor RULES ( ( l_AncestorColor IsInt ) AND ( l_AncestorColor TColor::clDefault != ) ) ( l_AncestorColor >>> l_Color BREAK-ITERATOR ) ; // RULES ) // Self .Inherited.Words .for> l_Color end // DEFAULT ; // RULES end // DEFAULT ; // RULES ) >>> Result ; // StereotypeBackColor VAR l_Color Self .Stereotype .StereotypeBackColor >>> l_Color RULES ( l_Color IsInt ) RULES ( l_Color TColor::clDefault == ) ( Self .msm:View:ForeColor ) DEFAULT l_Color ; // RULES DEFAULT ( Self .msm:View:ForeColor ) ; // RESULT >>> Result ; // msm:View:BackColor STRING elem_func msm:View:LabelName STRING elem_func StereotypeLabelName Cached: ( VAR l_Label Self .GetUP "personal label" >>> l_Label RULES ( l_Label .NotIsNil ) l_Label DEFAULT begin Self .StereotypeInModel .GetUP "personal label" >>> l_Label RULES ( l_Label .NotIsNil ) l_Label DEFAULT begin '' >>> l_Label Self .Inherited.Words .for> ( IN anAncestor VAR l_AncestorLabel anAncestor call.me >>> l_AncestorLabel RULES ( l_AncestorLabel .NotIsNil ) ( l_AncestorLabel >>> l_Label BREAK-ITERATOR ) ; // RULES ) // Self .Inherited.Words .for> l_Label end // DEFAULT ; // RULES end // DEFAULT ; // RULES ) >>> Result ; // StereotypeLabelName VAR l_Label Self .Stereotype .StereotypeLabelName >>> l_Label RULES ( l_Label .NotIsNil ) l_Label ( Self .IsUseCase ) 'code_use_case' ( Self .MDAClass class_Operation == ) 'code_method' ( Self .MDAClass class_Attribute == ) 'code_attr' ( Self .MDAClass class_Parameter == ) 'code_param' ( Self .MDAClass class_Dependency == ) 'code_mda_dependency' ( Self .MDAClass class_Inherits == ) 'code_mda_dependency' ( Self .MDAClass class_Implements == ) 'code_mda_dependency' ( Self .MDAClass class_Depends == ) 'code_dep' DEFAULT '' ; // RESULT >>> Result ; // msm:View:LabelName STRING elem_func msm:View:ImageFileName Self .msm:View:LabelName >>> Result if ( Result .NotIsNil ) then begin [ 'W:\MDProcess\MDAGenerator\other\images\' Result '.gif' ] strings:Cat >>> Result end // ( Result .NotIsNil ) ; // msm:View:ImageFileName BOOLEAN elem_func IsCategory Self .MDAClass class_Category == >>> Result ; // IsCategory BOOLEAN elem_func IsAttribute Self .MDAClass class_Attribute == >>> Result ; // IsAttribute BOOLEAN elem_func IsAbstract Self .Abstraction at_abstract == >>> Result ; // IsAbstract BOOLEAN elem_func IsFinal Self .Abstraction at_final == >>> Result ; // IsFinal USES axiom:TPenStyle ; INTEGER elem_func msm:View:LinkLineStyle Cached: ( RULES ( Self .IsAttribute ) TPenStyle::psSolid ( Self .MDAClass class_Inherits ?== ) TPenStyle::psSolid ( Self .MDAClass class_Implements ?== ) TPenStyle::psDash ( Self .LinkViewType 'Inherits' ?== ) TPenStyle::psSolid ( Self .LinkViewType 'Implements' ?== ) TPenStyle::psDash DEFAULT TPenStyle::psDash ; // RULES ) >>> Result ; // msm:View:LinkLineStyle INTEGER elem_func msm:View:LinkLineColor Cached: ( RULES ( Self .IsAttribute ) TColor::clBlack ( Self .MDAClass class_Inherits ?== ) TColor::clBlack ( Self .MDAClass class_Implements ?== ) TColor::clBlack ( Self .LinkViewType 'Inherits' ?== ) TColor::clBlack ( Self .LinkViewType 'Implements' ?== ) TColor::clBlack DEFAULT TColor::clDefault ; // RULES ) >>> Result ; // msm:View:LinkLineColor BOOLEAN elem_func msm:View:LinkArrowIsPolygon Cached: ( RULES ( Self .IsAttribute ) false ( Self .MDAClass class_Inherits ?== ) true ( Self .MDAClass class_Implements ?== ) true ( Self .LinkViewType 'Inherits' ?== ) true ( Self .LinkViewType 'Implements' ?== ) true DEFAULT false ; // RULES ) >>> Result ; // msm:View:LinkArrowIsPolygon USES LoadOnDemand.ms.dict ; USES CutSuffix.ms.dict ; USES CutPrefix.ms.dict ; INTEGER elem_func X Self 'X' 0 .ElemMember >>> Result ; // X INTEGER elem_func Y Self 'Y' 0 .ElemMember >>> Result ; // Y INTEGER elem_func Width Self 'Width' 120 .ElemMember >>> Result ; // Width INTEGER elem_func Height Self 'Height' 100 .ElemMember >>> Result ; // Height WordAlias .msm:View:X .X WordAlias .msm:View:Y .Y WordAlias .msm:View:Width .Width WordAlias .msm:View:Height .Height WordAlias .msm:View:From .From WordAlias .msm:View:To .To elem_iterator Diagrams Self 'Diagrams' .ElemList >>> Result ; // Diagrams elem_iterator Views Self 'Views' .ElemList >>> Result ; // Views elem_iterator msm:Diagrams VAR l_Name Self .WordName '_view' .CutSuffix >>> l_Name VAR l_DictName l_Name 'ME_' .CutPrefix >>> l_DictName l_DictName '.ms.diagram.script' Cat >>> l_DictName l_Name '_diagrams' Cat >>> l_Name WL l_Name l_DictName .Diagrams >>> Result ; // msm:Diagrams elem_iterator MainDiagram Self .msm:Diagrams .FirstElement .Views >>> Result ; // MainDiagram BOOLEAN elem_func HasMainDiagram Self .MainDiagram .NotIsNil >>> Result ; // HasMainDiagram USES DictionaryByName.ms.dict ; ModelElement FUNCTION .WordByDictionaryPath IN aPath aPath DictionaryAndMainWordByName >>> Result // - возвращаем слово DROP // - выкидываем словарь ; // .WordByDictionaryPath EXPORTS arrays.ms.dict EXPORTS ElementsRTTI.ms.dict USES CheckValue.ms.dict ; EXPORTS CheckValue.ms.dict EXPORTS GarantMetaModel.ms.dict USES ElemMemberPrim.ms.dict ; EXPORTS ElemMemberPrim.ms.dict
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
четверг, 15 сентября 2016 г.
#1265. Скрипты рисовалки модели
Подписаться на:
Комментарии к сообщению (Atom)
Никому не интересно? а мне таки - да.. интересно...
ОтветитьУдалить