Class Diagrams - UML

Share your advanced PureBasic knowledge/code with the community.
remi_meier
Enthusiast
Enthusiast
Posts: 468
Joined: Sat Dec 20, 2003 6:19 pm
Location: Switzerland

Class Diagrams - UML

Post by remi_meier »

Code updated for 5.20+

A few helper functions for creating UML class diagrams for DIA. Not a
beautiful, but easy XML writer.
You can get DIA here:
http://dia-installer.de/

It was a side-product, after loading the .DIA file, you have to arrange
the diagrams yourself, but the rest is done. Perhaps somebody can use it.

Code: Select all

EnableExplicit

Global IDCounter

Procedure.s String(s.s)
  ProcedureReturn ReplaceString(s, "\dq", #DQUOTE$)
EndProcedure


Procedure UMLWriteFileStart(File)
  Protected s.s
  
  s = String("<xml>") + #CRLF$
  s + String("<dia>") + #CRLF$
  s + String("  <dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteFileEnd(File)
  Protected s.s
  
  s = String("  </dia>") + #CRLF$
  s + String("</dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteClassStart(File, ClassName.s, Comment.s)
  Protected s.s
  
  s + String("    <dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>#"+ClassName+"#</dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>#"+Comment+"#</dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
  
  IDCounter + 1
  
  ProcedureReturn IDCounter - 1
EndProcedure

Procedure UMLWriteClassEnd(File)
  Protected s.s
  
  s + String("    </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttributesStart(File)
  Protected s.s
  
  s = String("      <dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttributesEnd(File)
  Protected s.s
  
  s = String("      </dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttribute(File, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("        <dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+name+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+type+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+Comment+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  s + String("        </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationsStart(File)
  Protected s.s
  
  s = String("      <dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationsEnd(File)
  Protected s.s
  
  s = String("      </dia>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationStart(File, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("        <dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+name+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+type+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  s + String("          <dia>") + #CRLF$
  s + String("            <dia>#"+Comment+"#</dia>") + #CRLF$
  s + String("          </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationEnd(File)
  Protected s.s
  
  s = String("        </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParametersStart(File)
  Protected s.s
  
  s = String("          <dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParametersEnd(File)
  Protected s.s
  
  s = String("          </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParameter(File, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("            <dia>") + #CRLF$
  s + String("              <dia>") + #CRLF$
  s + String("                <dia>#"+name+"#</dia>") + #CRLF$
  s + String("              </dia>") + #CRLF$
  s + String("              <dia>") + #CRLF$
  s + String("                <dia>#"+type+"#</dia>") + #CRLF$
  s + String("              </dia>") + #CRLF$
  s + String("              <dia>") + #CRLF$
  s + String("                <dia>#"+Comment+"#</dia>") + #CRLF$
  s + String("              </dia>") + #CRLF$
  s + String("            </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteConnection(File, name.s, FromID, ToID)
  Protected s.s
  
  s = String("    <dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>#"+name+"#</dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("      <dia>") + #CRLF$
  s + String("        <dia>") + #CRLF$
  s + String("        <dia>") + #CRLF$
  s + String("      </dia>") + #CRLF$
  s + String("    </dia>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
  
  IDCounter + 1
  ProcedureReturn IDCounter - 1
EndProcedure






; 
; If CreateFile(0, "test.dia")
  ; UMLWriteFileStart(0) ;>
    ; 
    ; UMLWriteClassStart(0, "Klasse1", "Classcomment") ;>
      ; UMLWriteAttributesStart(0) ;>
        ; UMLWriteAttribute(0, "Var1", "long", "Attributecomment")
      ; UMLWriteAttributesEnd(0) ;<UMLWriteOperationsStart>
        ; UMLWriteOperationStart(0, "func1", "long", "Operationcomment") ;>
          ; UMLWriteParametersStart(0) ;>
            ; UMLWriteParameter(0, "param1", "string", "Parametercomment")
          ; UMLWriteParametersEnd(0) ;<
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<UMLWriteClassStart>
      ; 
      ; UMLWriteOperationsStart(0) ;>
        ; UMLWriteOperationStart(0, "func1", "long", "") ;>
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<UMLWriteClassStart>
      ; 
      ; UMLWriteOperationsStart(0) ;>
        ; UMLWriteOperationStart(0, "func1", "long", "") ;>
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<
    ; 
    ; UMLWriteConnection(0, "is", 1, 0)
    ; UMLWriteConnection(0, "is", 1, 2)
    ; UMLWriteConnection(0, "is", 2, 0)
  ; UMLWriteFileEnd(0) ;<
  ; 
  ; 
  ; 
  ; CloseFile(0)
; Else
  ; MessageRequester("Error","Couldn't create file.")
; EndIf
Would that be interesting for jaPBdoc? I don't think so... or what do you think?
Athlon64 3700+, 1024MB Ram, Radeon X1600