Pharo support for PlantUML.
Note: The GUI part of this project was initially done in Spec 2, which works best in Pharo 8. However, the baseline will load a GUI that works with Pharo 7.
Note 2: Many people have requested support for PlantUML without Moose, so I made a fork. I only tested it in Pharo 9 (PRs are welcome to make it work in Pharo 8):
Note 3: Have a look at https://github.com/kasperosterbye/PlantUMLBridge for a simpler version of the support in this tool.
Metacello new
repository: 'github://fuhrmanator/PlantUMLPharoGizmo/src';
baseline: 'PUGizmo';
load.
Metacello new
repository: 'github://fuhrmanator/PlantUMLPharoGizmo:pharo9/src';
baseline: 'PUGizmo';
load.
One reason to get PlantUML working in Pharo was to use it with Moose, and there is now a Moose browser. Prerequisite: A generated MSE file for the sample project FactoryVariants was already loaded in Moose.
Here's the SVG of the diagram shown in the screenshot above, rendered from the PlantUML source that you can copy from the browser and render at PlantUML.com:
There's a utility method to generate PlantUML source for a Java model (see this example) in Moose.
| classes pUMLSource key serverUrl imageMorph w |
classes := (MooseModel root first allClasses reject:#isStub)
select: [:c | c mooseName beginsWith: 'headfirst::designpatterns::factory::pizzaaf'].
pUMLSource := PUGizmo plantUMLSourceForMooseClasses: classes.
key := pUMLSource plantDeflateAndEncode.
serverUrl := 'http://www.plantuml.com/plantuml/png/', key .
imageMorph := (ZnEasy getPng: serverUrl asUrl) asAlphaImageMorph .
imageMorph layout: #scaledAspect.
w := imageMorph openInWindow.
w center; fitInWorld.
plantUMLSource := '@startuml
skinparam style strictuml
skinparam backgroundcolor transparent
skinparam classbackgroundcolor Yellow/LightYellow
class Banana
note right #red: Ceci n''est pas\nune banane.
@enduml'.
codePart := plantUMLSource plantDeflateAndEncode.
serverUrl := 'https://www.plantuml.com/plantuml/img/', codePart.
(ZnEasy getPng: serverUrl) asMorph openInWindow.
"Get the Source back from a URL"
recoveredSource := serverUrl plantUrlStringToPlantSourceString.
self assert: recoveredSource equals: plantUMLSource.
plantUMLSource := '@startmindmap
* Debian
** Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** LMDE
** SolydXK
** SteamOS
** Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumio
@endmindmap'.
codePart := plantUMLSource plantDeflateAndEncode.
serverUrl := 'https://www.plantuml.com/plantuml/img/', codePart.
(ZnEasy getPng: serverUrl) asMorph openInWindow.