Merge remote-tracking branch 'upstream/master' into cheneer

This commit is contained in:
Benjamin Davies 2023-11-16 10:05:21 +13:00
commit fb9fd7e13e
No known key found for this signature in database
GPG Key ID: 9FFDE0674336C460
326 changed files with 5021 additions and 5292 deletions

View File

@ -125,28 +125,20 @@
}
},
"node_modules/@babel/generator": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
"integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true,
"dependencies": {
"@babel/types": "^7.15.6",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/generator/node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
@ -165,39 +157,35 @@
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
"integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
"node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
"dependencies": {
"@babel/helper-get-function-arity": "^7.15.4",
"@babel/template": "^7.15.4",
"@babel/types": "^7.15.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-get-function-arity": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
"integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
"node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.15.4"
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
"integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"dependencies": {
"@babel/types": "^7.15.4"
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@ -246,15 +234,6 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
"integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
@ -304,21 +283,30 @@
}
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
"integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"dependencies": {
"@babel/types": "^7.15.4"
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
"integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@ -348,13 +336,13 @@
}
},
"node_modules/@babel/highlight": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@ -362,9 +350,9 @@
}
},
"node_modules/@babel/parser": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
"integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@ -536,44 +524,46 @@
}
},
"node_modules/@babel/template": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
"integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
"version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
"@babel/parser": "^7.15.4",
"@babel/types": "^7.15.4"
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template/node_modules/@babel/code-frame": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.14.5"
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
"integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
"version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.15.4",
"@babel/helper-function-name": "^7.15.4",
"@babel/helper-hoist-variables": "^7.15.4",
"@babel/helper-split-export-declaration": "^7.15.4",
"@babel/parser": "^7.15.4",
"@babel/types": "^7.15.4",
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@ -582,39 +572,32 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/code-frame": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"dependencies": {
"@babel/highlight": "^7.14.5"
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
"version": "7.15.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
"integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.14.9",
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
"integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
@ -1414,6 +1397,54 @@
"node": ">=8"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
@ -7279,6 +7310,12 @@
"node": ">=6"
}
},
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
"dev": true
},
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@ -7315,6 +7352,12 @@
"node": ">=0.10.0"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"dev": true
},
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@ -7880,14 +7923,15 @@
}
},
"node_modules/tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
"integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dev": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.1.2"
"universalify": "^0.2.0",
"url-parse": "^1.5.3"
},
"engines": {
"node": ">=6"
@ -8093,9 +8137,9 @@
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true,
"engines": {
"node": ">= 4.0.0"
@ -8110,6 +8154,16 @@
"punycode": "^2.1.0"
}
},
"node_modules/url-parse": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
"dev": true,
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
@ -8483,22 +8537,15 @@
}
},
"@babel/generator": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
"integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
"integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true,
"requires": {
"@babel/types": "^7.15.6",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
}
},
"@babel/helper-compilation-targets": {
@ -8513,33 +8560,29 @@
"semver": "^6.3.0"
}
},
"@babel/helper-function-name": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
"integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.15.4",
"@babel/template": "^7.15.4",
"@babel/types": "^7.15.4"
}
"@babel/helper-environment-visitor": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true
},
"@babel/helper-get-function-arity": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
"integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
"@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"requires": {
"@babel/types": "^7.15.4"
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
}
},
"@babel/helper-hoist-variables": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
"integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"requires": {
"@babel/types": "^7.15.4"
"@babel/types": "^7.22.5"
}
},
"@babel/helper-member-expression-to-functions": {
@ -8574,14 +8617,6 @@
"@babel/template": "^7.15.4",
"@babel/traverse": "^7.15.4",
"@babel/types": "^7.15.6"
},
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
"integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true
}
}
},
"@babel/helper-optimise-call-expression": {
@ -8621,18 +8656,24 @@
}
},
"@babel/helper-split-export-declaration": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
"integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
"@babel/types": "^7.15.4"
"@babel/types": "^7.22.5"
}
},
"@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true
},
"@babel/helper-validator-identifier": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
"integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/helper-validator-option": {
@ -8653,20 +8694,20 @@
}
},
"@babel/highlight": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
"integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.14.5",
"chalk": "^2.0.0",
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
"integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
"integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@ -8787,71 +8828,67 @@
}
},
"@babel/template": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
"integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
"version": "7.22.15",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
"@babel/parser": "^7.15.4",
"@babel/types": "^7.15.4"
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
},
"dependencies": {
"@babel/code-frame": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"requires": {
"@babel/highlight": "^7.14.5"
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
}
}
}
},
"@babel/traverse": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
"integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
"version": "7.23.2",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
"integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.14.5",
"@babel/generator": "^7.15.4",
"@babel/helper-function-name": "^7.15.4",
"@babel/helper-hoist-variables": "^7.15.4",
"@babel/helper-split-export-declaration": "^7.15.4",
"@babel/parser": "^7.15.4",
"@babel/types": "^7.15.4",
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
"version": "7.15.8",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
"integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"requires": {
"@babel/highlight": "^7.14.5"
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
}
}
}
},
"@babel/types": {
"version": "7.15.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
"integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
"integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.14.9",
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
"integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
"dev": true
}
}
},
"@bcoe/v8-coverage": {
@ -9465,6 +9502,45 @@
}
}
},
"@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"@jridgewell/trace-mapping": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"@nodelib/fs.scandir": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
@ -13821,6 +13897,12 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
"dev": true
},
"react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@ -13845,6 +13927,12 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"dev": true
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@ -14271,14 +14359,15 @@
}
},
"tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
"integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
"dev": true,
"requires": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.1.2"
"universalify": "^0.2.0",
"url-parse": "^1.5.3"
}
},
"tr46": {
@ -14414,9 +14503,9 @@
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"dev": true
},
"uri-js": {
@ -14428,6 +14517,16 @@
"punycode": "^2.1.0"
}
},
"url-parse": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
"dev": true,
"requires": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",

7
.github/labeler.yml vendored
View File

@ -21,10 +21,15 @@
- 'src/**/*'
- 'stdlib/**/*'
- 'svg/**/*'
- 'test/**/*'
- 'themes/**/*'
- 'manifest.txt'
'm:test':
- 'test/**/*'
'm:license':
- '**/*license.txt'
'm:docker':
- Dockerfile

View File

@ -36,6 +36,9 @@ cp "plantuml-lgpl/build/libs/plantuml-lgpl-${RELEASE_VERSION}-sources.jar" "gith
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}.jar" "github_release/plantuml-mit-SNAPSHOT.jar"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-javadoc.jar" "github_release/plantuml-mit-SNAPSHOT-javadoc.jar"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-sources.jar" "github_release/plantuml-mit-SNAPSHOT-sources.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}.jar" "github_release/plantuml-gplv2-SNAPSHOT.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar" "github_release/plantuml-gplv2-SNAPSHOT-javadoc.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-sources.jar" "github_release/plantuml-gplv2-SNAPSHOT-sources.jar"
if [[ -e "build/publications/maven/module.json.asc" ]]; then
# signatures are optional so that forked repos can release snapshots without needing a gpg signing key
@ -60,6 +63,9 @@ if [[ -e "build/publications/maven/module.json.asc" ]]; then
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}.jar.asc" "github_release/plantuml-mit-SNAPSHOT.jar.asc"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-javadoc.jar.asc" "github_release/plantuml-mit-SNAPSHOT-javadoc.jar.asc"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-sources.jar.asc" "github_release/plantuml-mit-SNAPSHOT-sources.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}.jar.asc" "github_release/plantuml-gplv2-SNAPSHOT.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar.asc" "github_release/plantuml-gplv2-SNAPSHOT-javadoc.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-sources.jar.asc" "github_release/plantuml-gplv2-SNAPSHOT-sources.jar.asc"
fi
echo -n "${DATE_TIME_UTC}" > "github_release/plantuml-SNAPSHOT.timestamp"

View File

@ -29,6 +29,9 @@ cp "plantuml-lgpl/build/libs/plantuml-lgpl-${RELEASE_VERSION}-sources.jar" "gith
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}.jar" "github_release/plantuml-mit-${RELEASE_VERSION}.jar"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-javadoc.jar" "github_release/plantuml-mit-${RELEASE_VERSION}-javadoc.jar"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-sources.jar" "github_release/plantuml-mit-${RELEASE_VERSION}-sources.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}.jar" "github_release/plantuml-gplv2-${RELEASE_VERSION}.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar" "github_release/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-sources.jar" "github_release/plantuml-gplv2-${RELEASE_VERSION}-sources.jar"
if [[ -e "build/publications/maven/module.json.asc" ]]; then
# signatures are optional so that forked repos can release snapshots without needing a gpg signing key
@ -52,6 +55,9 @@ if [[ -e "build/publications/maven/module.json.asc" ]]; then
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}.jar.asc" "github_release/plantuml-mit-${RELEASE_VERSION}.jar.asc"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-javadoc.jar.asc" "github_release/plantuml-mit-${RELEASE_VERSION}-javadoc.jar.asc"
cp "plantuml-mit/build/libs/plantuml-mit-${RELEASE_VERSION}-sources.jar.asc" "github_release/plantuml-mit-${RELEASE_VERSION}-sources.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}.jar.asc" "github_release/plantuml-gplv2-${RELEASE_VERSION}.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar.asc" "github_release/plantuml-gplv2-${RELEASE_VERSION}-javadoc.jar.asc"
cp "plantuml-gplv2/build/libs/plantuml-gplv2-${RELEASE_VERSION}-sources.jar.asc" "github_release/plantuml-gplv2-${RELEASE_VERSION}-sources.jar.asc"
fi
gh release create \

View File

@ -26,11 +26,12 @@ jobs:
do_release: ${{ steps.config.outputs.do_release }}
do_snapshot_release: ${{ steps.config.outputs.do_snapshot_release }}
pom_version: ${{ steps.config.outputs.pom_version }}
do_javadoc: ${{ steps.config.outputs.do_javadoc }}
do_test_linux: ${{ steps.config.outputs.do_test_linux }}
do_test_windows: ${{ steps.config.outputs.do_test_windows }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Configure workflow
id: config
@ -53,7 +54,6 @@ jobs:
# Do a release when a git tag starting with 'v' has been created by a suitable user.
# (We match against github.repository_owner as a kludge so that forked repos can release themselves when testing the workflow)
if [[ "${GITHUB_EVENT_NAME}" == "create" && "${REF_TYPE}" == "tag" && "${REF}" == v* && \
( "${ACTOR}" == "arnaudroques" || "${ACTOR}" == "${GITHUB_REPOSITORY_OWNER}" ) \
]]; then
@ -61,6 +61,8 @@ jobs:
echo "do_release=true" >> $GITHUB_OUTPUT
echo "pom_version=${REF#v}"
echo "pom_version=${REF#v}" >> $GITHUB_OUTPUT # pom_version is the tag without the 'v' prefix
echo "do_javadoc=true" >> $GITHUB_OUTPUT
echo "This run will update the Javadoc"
elif [[ "${GITHUB_EVENT_NAME}" =~ push|workflow_dispatch && "${REF}" == "refs/heads/master" && "${ACTOR}" == "arnaudroques" ]]; then
echo "::notice title=::This run will release a snapshot"
@ -68,9 +70,13 @@ jobs:
V=$(perl -ne 'if (/return (\d{6,7});/) {$v=$1} if (/final int beta = (\d+);/) {$b=$1} END{print(substr($v, 0, 1),".", substr($v, 1, 4),"."); if ($b) {print(int(substr($v+1, 5)), "beta", $b);} else {print(int(substr($v, 5)))}}' src/net/sourceforge/plantuml/version/Version.java)
echo "pom_version=$V-SNAPSHOT"
echo "pom_version=$V-SNAPSHOT" >> $GITHUB_OUTPUT # pom_version is taken from Version.java
echo "do_javadoc=true" >> $GITHUB_OUTPUT
echo "This run will update the Javadoc"
else
echo "This run will NOT make a release"
echo "do_javadoc=false" >> $GITHUB_OUTPUT
echo "This run will NOT update the Javadoc"
fi
echo "do_test_linux=true" >> $GITHUB_OUTPUT
echo "do_test_windows=false" >> $GITHUB_OUTPUT
@ -89,7 +95,7 @@ jobs:
steps:
- name: Checkout the repository
if: needs.workflow_config.outputs.do_test_linux == 'true'
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up java
if: needs.workflow_config.outputs.do_test_linux == 'true'
@ -116,43 +122,6 @@ jobs:
name: ${{ github.run_number }}-${{ matrix.os }}-java-${{ matrix.java_version }}-test-reports
path: build/reports/tests/
test_windows:
needs: workflow_config
strategy:
fail-fast: false
matrix:
java_version: [ 8 ]
os: [ windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout the repository
if: needs.workflow_config.outputs.do_test_windows == 'true'
uses: actions/checkout@v3
- name: Set up java
if: needs.workflow_config.outputs.do_test_windows == 'true'
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: temurin
cache: gradle
# Compile / Test / Package are separate steps so the reason for any failure is more obvious in GitHub UI
- name: Compile
if: needs.workflow_config.outputs.do_test_windows == 'true'
run: gradle -q compileJava --no-daemon
- name: Test
if: needs.workflow_config.outputs.do_test_windows == 'true'
run: gradle test --no-daemon -i
- name: Upload test reports
uses: actions/upload-artifact@v3
if: needs.workflow_config.outputs.do_test_windows == 'true'
with:
# Using github.run_number here to reduce confusion when downloading & comparing from several builds
name: ${{ github.run_number }}-${{ matrix.os }}-java-${{ matrix.java_version }}-test-reports
path: build/reports/tests/
build_artifacts:
needs: [ workflow_config ]
@ -161,7 +130,7 @@ jobs:
release_version: ${{ steps.version.outputs.release_version }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up java
uses: actions/setup-java@v3
with:
@ -197,6 +166,7 @@ jobs:
ls -l plantuml-epl/build/libs
ls -l plantuml-lgpl/build/libs
ls -l plantuml-mit/build/libs
ls -l plantuml-gplv2/build/libs
- name: Get release version
id: version
run: |
@ -212,9 +182,34 @@ jobs:
plantuml-epl/build/libs
plantuml-lgpl/build/libs
plantuml-mit/build/libs
plantuml-gplv2/build/libs
key: "libs-${{ github.run_id }}"
enableCrossOsArchive: true
deploy_javadoc:
needs: [ build_artifacts, test_linux ]
if: needs.workflow_config.outputs.do_javadoc == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Set up java
uses: actions/setup-java@v3
with:
java-version: 17
distribution: temurin
- name: Build Javadoc
run: gradle javadoc
- name: Deploy Javadoc to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build/docs/javadoc
upload:
if: |
needs.workflow_config.outputs.do_release == 'true' ||
@ -223,7 +218,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up java
uses: actions/setup-java@v3
@ -243,6 +238,7 @@ jobs:
plantuml-epl/build/libs
plantuml-lgpl/build/libs
plantuml-mit/build/libs
plantuml-gplv2/build/libs
key: "libs-${{ github.run_id }}"
fail-on-cache-miss: true
enableCrossOsArchive: true
@ -260,6 +256,7 @@ jobs:
plantuml-epl/build/libs
plantuml-lgpl/build/libs
plantuml-mit/build/libs
plantuml-gplv2/build/libs
- name: Create snapshot
if: needs.workflow_config.outputs.do_snapshot_release == 'true'
@ -296,19 +293,19 @@ jobs:
gradle --debug publish
push_to_docker_registry:
needs: [ workflow_config, upload, test_linux, test_windows ]
needs: [ workflow_config, upload, test_linux ]
if: needs.workflow_config.outputs.do_release == 'true'
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
@ -321,18 +318,18 @@ jobs:
type=semver,pattern={{major}}
type=sha
- name: Log into Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to GitHub Docker Registry
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build/push container image
uses: docker/build-push-action@v4
uses: docker/build-push-action@v5
with:
context: .
push: true

View File

@ -24,8 +24,8 @@ jobs:
repo: context.repo.repo,
body: welcomeMessage
})
- uses: peter-evans/close-issue@v2
- uses: actions/add-to-project@v0.4.1
- uses: peter-evans/close-issue@v3
- uses: actions/add-to-project@v0.5.0
with:
project-url: https://github.com/orgs/plantuml/projects/4
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}

View File

@ -23,7 +23,7 @@ jobs:
runs-on: ${{matrix.os}}
steps:
- name: Checkout the repository
uses: actions/checkout@v3
uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
@ -42,6 +42,7 @@ jobs:
plantuml-epl/build/libs
plantuml-lgpl/build/libs
plantuml-mit/build/libs
plantuml-gplv2/build/libs
key: "libs-${{ github.run_id }}"
fail-on-cache-miss: true
enableCrossOsArchive: true

View File

@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: configure workflow
uses: ./.github/actions/configure-workflow
id: config

143
BUILDING.md Normal file
View File

@ -0,0 +1,143 @@
# 🚧 Building PlantUML
Thank you for your interest in contributing to PlantUML! This guide will help you build the PlantUML project.
PlantUML can be built using either [Gradle](#building-plantuml-with-gradle) or [Ant](#building-plantuml-with-ant-alternative-method). It's recommended to use Gradle as the primary build tool for this project. You will find instructions for both methods, starting with Gradle.
## ☕ Java Compatibility and Development Notes
### PlantUML & Java 8 Compatibility
We understand the ubiquity and prevalence of Java 8 in numerous environments and infrastructures. Thus, **PlantUML remains steadfastly compatible with Java 8**. Despite the versions age and the availability of newer releases, we recognize that a substantial number of users and enterprises still depend on Java 8. Therefore, you can confidently run PlantUML in environments where Java 8 is installed, ensuring accessibility and functionality for a wide array of users.
### Unitary Tests & Dependency Management
PlantUML consistently retains compatibility with Java 8 in its main library, ensuring a broad usability spectrum. However, the perspective slightly shifts when it comes to our development and testing environments, especially concerning dependency management and Java version utilization.
In the unitary testing environment:
- **Additional Dependencies**: To streamline and simplify unitary tests, we are open to incorporating dependencies on other libraries, ensuring that our testing is thorough, simplified, and efficient.
This means:
- **For Users**: PlantUML is crafted to compile and operate flawlessly with Java 8, offering a stable experience without the imperative of upgrading your Java environment.
- **For Contributors/Developers**: When engaging in unitary testing, be mindful that it involves additional dependencies for efficient testing processes. However, rest assured that the main library of PlantUML consciously avoids external dependencies to maintain its lightweight and easy-to-integrate nature, while still ensuring compatibility with Java 8.
### Your Contribution Matters
Whether you're using an old or a new version of Java, your feedback, contributions, and insights are valuable in enhancing PlantUML. We strive to maintain a balance between adopting new technology and ensuring accessibility for all users, and your experiences aid us in striking this balance effectively.
## 🎓 Building PlantUML with Gradle
### Prerequisites
Ensure that you have the following installed on your system:
- [Java Development Kit (JDK)](https://jdk.java.net/) - version 8 or newer
- [Gradle](https://gradle.org/install/) - version 7.0 or newer
- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - to clone the repository and manage the version control
### Getting the Source Code
Clone the PlantUML repository to your local system. You can clone the repository by running the following command in your terminal or command prompt:
```sh
git clone https://github.com/plantuml/plantuml.git
```
Navigate to the project root directory:
```sh
cd plantuml
```
### Building the Project
To build the project, run the following command from the project root directory:
```sh
gradle build
```
This command will build the project and create the necessary output files in the `build` directory.
### Running Tests
To run the tests included with the project, use the following command:
```sh
gradle test
```
### Creating a JAR File
To create a JAR file of the PlantUML project, run the following command:
```sh
gradle jar
```
The JAR file will be created in the `build/libs` directory.
### Contributing
After successfully building the project, you are ready to start contributing to PlantUML! If you have any changes to contribute, please submit a pull request through the [PlantUML GitHub repository](https://github.com/plantuml/plantuml).
### Additional Resources
- [PlantUML Official Website](https://plantuml.com/)
- [Gradle User Guide](https://docs.gradle.org/current/userguide/userguide.html)
- [Java Development Kit (JDK) Documentation](https://docs.oracle.com/javase/11/)
### Getting Help
If you encounter any issues while building the project, feel free to ask for help on the [PlantUML Community Forum](https://forum.plantuml.net/) or open an issue on the [GitHub repository](https://github.com/plantuml/plantuml/issues).
Thank you for contributing to PlantUML!
## 🐜 Building PlantUML with Ant (Alternative Method)
For those who prefer using Ant, or only have access to Ant, we provide a `build.xml` Ant build script as a fallback option to build PlantUML.
### Prerequisites
Ensure that you have the following installed on your system:
- [Java Development Kit (JDK)](https://jdk.java.net/) - version 8 or newer
- [Apache Ant](https://ant.apache.org/bindownload.cgi) - to run the build script
- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - to clone the repository and manage the version control
### Getting the Source Code
Clone the PlantUML repository to your local system. You can clone the repository by running the following command in your terminal or command prompt:
```sh
git clone https://github.com/plantuml/plantuml.git
```
Navigate to the directory containing the `build.xml`:
```sh
cd plantuml
```
### Building the Project
To build the project using Ant, run the following command:
```sh
ant
```
If you have Ant set up correctly and the prerequisites are met, the build process should start, and the project will be built based on the instructions in the `build.xml`.
## 📦 About the `graphviz.dat` file
Within certain PlantUML releases, we've incorporated an embedded, compiled version of GraphViz specifically tailored for Windows. This initiative was taken to streamline the user experience for our Windows users, eliminating the need for them to undertake separate installations or configurations.
This version of GraphViz is a product of the [graphviz-distributions project](https://github.com/plantuml/graphviz-distributions). For efficient distribution, it is compressed using Brotli and subsequently stored within the [graphviz.dat file](https://github.com/plantuml/plantuml/tree/master/src/net/sourceforge/plantuml/windowsdot).
If you're not on a Windows platform (e.g., Linux users), you can safely remove this file. However, for Windows users, removing it implies you'd need to install GraphViz independently.
To streamline our distribution process and given the existing six PlantUML versions resulting from varied licensing, we chose not to double this count to 12 with a dichotomy of versions containing the embedded GraphViz and those without. Instead, all our distributions, barring the LGPL one, come with the embedded GraphViz. For those who prefer a version without the embedded GraphViz, the LGPL distribution would be the go-to choice.

7
CITATION.cff Normal file
View File

@ -0,0 +1,7 @@
cff-version: 1.2.0
authors:
- family-names: "Roques"
given-names: "Arnaud"
- family-names: "PlantUML Contributors"
title: "PlantUML Software"
url: "https://github.com/plantuml/plantuml"

115
README.md
View File

@ -1,5 +1,6 @@
PlantUML
========
# 🌱 PlantUML
Generate UML diagrams from textual descriptions.
[![Discord server](https://img.shields.io/discord/1083727021328306236?color=5865F2&logo=discord&logoColor=white)](https://discord.gg/sXhzexAQGh)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/plantuml?logo=github)](https://github.com/sponsors/plantuml/)
@ -16,49 +17,89 @@ PlantUML
[![Release (latest by date)](https://img.shields.io/github/v/release/plantuml/plantuml)](https://github.com/plantuml/plantuml/releases/latest)
[![Release Date](https://img.shields.io/github/release-date/plantuml/plantuml?color=blue)](https://github.com/plantuml/plantuml/releases/latest)
[![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/plantuml/plantuml/latest)](https://github.com/plantuml/plantuml/commits/)
[![javadoc](https://javadoc.io/badge2/net.sourceforge.plantuml/plantuml-gplv2/javadoc.svg)](https://javadoc.io/doc/net.sourceforge.plantuml/plantuml-gplv2)
[![Pre-release (latest by date)](https://img.shields.io/github/v/release/plantuml/plantuml?color=chocolate&include_prereleases)](https://github.com/plantuml/plantuml/releases/tag/snapshot)
[![Pre-release Date](https://img.shields.io/github/release-date-pre/plantuml/plantuml?color=chocolate)](https://github.com/plantuml/plantuml/releases/tag/snapshot)
[![GitHub last commit](https://img.shields.io/github/last-commit/plantuml/plantuml?color=chocolate)](https://github.com/plantuml/plantuml/commits/)
[![CI](https://github.com/plantuml/plantuml/actions/workflows/ci.yml/badge.svg?color=chocolate)](https://github.com/plantuml/plantuml/actions/workflows/ci.yml)
[![snapshot javadoc](https://img.shields.io/badge/javadoc-snapshot-chocolate.svg?logo=github)](https://plantuml.github.io/plantuml/)
Generate UML diagram from textual description
> [!IMPORTANT]
> [PlantUML is **not** affected by the log4j vulnerability.](https://github.com/plantuml/plantuml/issues/826)
[PlantUML is **not** affected by the log4j vulnerability.](https://github.com/plantuml/plantuml/issues/826)
## About
PlantUML is a component that allows to quickly write:
PlantUML is a component that allows you to create various UML diagrams through simple textual descriptions. From sequence diagrams to deployment diagrams and beyond, PlantUML provides an easy way to create visual representations of complex systems.
* [Sequence diagram](http://plantuml.com/sequence-diagram),
* [Use case diagram](http://plantuml.com/use-case-diagram),
* [Class diagram](http://plantuml.com/class-diagram),
* [Object diagram](http://plantuml.com/object-diagram),
* [Activity diagram](http://plantuml.com/activity-diagram-beta) (here is [the legacy syntax](http://plantuml.com/activity-diagram-legacy)),
* [Component diagram](http://plantuml.com/component-diagram),
* [Deployment diagram](http://plantuml.com/deployment-diagram),
* [State diagram](http://plantuml.com/state-diagram),
* [Timing diagram](http://plantuml.com/timing-diagram).
The following non-UML diagrams are also supported:
* [JSON data](http://plantuml.com/json)
* [YAML data](http://plantuml.com/yaml)
* [Extended Backus-Naur Form (EBNF) diagram](http://plantuml.com/ebnf)
* [Regular Expression (regex) diagram](http://plantuml.com/regex)
* [Network diagram (nwdiag)](http://plantuml.com/nwdiag)
* [Wireframe graphical interface or UI mockups (salt)](http://plantuml.com/salt)
* [Archimate diagram](http://plantuml.com/archimate-diagram)
* [Specification and Description Language (SDL)](http://plantuml.com/activity-diagram-beta#sdl)
* [Ditaa diagram](http://plantuml.com/ditaa)
* [Gantt diagram](http://plantuml.com/gantt-diagram)
* [MindMap diagram](http://plantuml.com/mindmap-diagram)
* [Work Breakdown Structure diagram (WBS)](http://plantuml.com/wbs-diagram)
* [Mathematic with AsciiMath or JLaTeXMath notation](http://plantuml.com/ascii-math)
* [Entity Relationship diagram (IE/ER)](http://plantuml.com/ie-diagram)
### 🗃️ Supported Diagram Types
Furthermore:
* [Hyperlinks and tooltips](http://plantuml.com/link)
* [Creole](http://plantuml.com/creole): rich text, emoticons, unicode, icons
* [OpenIconic icons](http://plantuml.com/openiconic)
* [Sprite icons](http://plantuml.com/sprite)
* [AsciiMath mathematical expressions](http://plantuml.com/ascii-math)
- 🧩 UML Diagrams
- [Sequence diagram](http://plantuml.com/sequence-diagram)
- [Use case diagram](http://plantuml.com/use-case-diagram)
- [Class diagram](http://plantuml.com/class-diagram)
- [Object diagram](http://plantuml.com/object-diagram)
- [Activity diagram](http://plantuml.com/activity-diagram-beta)
- [Legacy syntax](http://plantuml.com/activity-diagram-legacy)
- [Component diagram](http://plantuml.com/component-diagram)
- [Deployment diagram](http://plantuml.com/deployment-diagram)
- [State diagram](http://plantuml.com/state-diagram)
- [Timing diagram](http://plantuml.com/timing-diagram)
- 📈 Non-UML Diagrams
- [JSON data](http://plantuml.com/json)
- [YAML data](http://plantuml.com/yaml)
- [EBNF (Extended Backus-Naur Form)](http://plantuml.com/ebnf)
- [Regex (Regular Expression)](http://plantuml.com/regex)
- [Network diagram (nwdiag)](http://plantuml.com/nwdiag)
- [Salt (Wireframe graphical interface or UI Mockups)](http://plantuml.com/salt)
- [Archimate diagram](http://plantuml.com/archimate-diagram)
- [SDL (Specification and Description Language)](http://plantuml.com/activity-diagram-beta#sdl)
- [Ditaa diagram](http://plantuml.com/ditaa)
- [Gantt diagram](http://plantuml.com/gantt-diagram)
- [MindMap diagram](http://plantuml.com/mindmap-diagram)
- [WBS (Work Breakdown Structure)](http://plantuml.com/wbs-diagram)
- [Mathematical Notations (AsciiMath, JLaTeXMath)](http://plantuml.com/ascii-math)
- [IE/ER (Information Engineering/Entity Relationship)](http://plantuml.com/ie-diagram)
### 📣 Additional Features
- [Hyperlinks and tooltips](http://plantuml.com/link)
- [Rich text (Creole) with emoticons, unicode, and icons](http://plantuml.com/creole)
- [OpenIconic icons](http://plantuml.com/openiconic)
- [Sprite icons](http://plantuml.com/sprite)
### 📖 Learn More
For a more detailed overview, visit [PlantUML Official Website](https://plantuml.com/).
## 🚀 Getting Started
Whether you're looking to use PlantUML as a standalone application or as a component in your own project, getting started is simple. Check out the official [PlantUML setup guide](https://plantuml.com/starting) for instructions on how to set up PlantUML on your system.
## ⚙️ Building from Source
To build PlantUML from source, you'll need to have certain prerequisites installed and follow a series of steps outlined in our build guide. Find detailed instructions in our [BUILDING.md](https://github.com/plantuml/plantuml/blob/master/BUILDING.md) file.
## 🧱 Contributing
PlantUML is an open-source project, and we welcome contributions of all kinds. Whether you're helping us fix bugs, improve the docs, or spread the word, we appreciate your support. See our [contributing guide](CONTRIBUTING.md) for more information on how to get started.
For comprehensive and detailed documentation on using PlantUML, refer to the [official Javadoc, available here](https://plantuml.github.io/plantuml/). Please note that this documentation is a work in progress and may not be complete.
## 🧑‍🤝‍🧑 Support and Community
- [GitHub issues](https://github.com/plantuml/plantuml/issues/)
- [Community Forum](https://forum.plantuml.net/)
## 📃 License
PlantUML is licensed under several licenses; you can choose the one that suits you best:
- [GPL license](https://www.gnu.org/licenses/gpl-3.0.html)
- [LGPL license](https://www.gnu.org/licenses/lgpl-3.0.html)
- [Apache license](https://www.apache.org/licenses/LICENSE-2.0)
- [Eclipse Public license](https://www.eclipse.org/legal/epl-2.0/)
- [MIT license](https://opensource.org/licenses/MIT)
For more information, please refer to the [PlantUML license FAQ](https://plantuml.com/en/faq#ddbc9d04378ee462) to help determine which license is appropriate for your use case.
To know more about PlantUML, please visit https://plantuml.com/

12
attic.md Normal file
View File

@ -0,0 +1,12 @@
# Historical Code Archive
This document catalogs code that was previously part of PlantUML but has since been deprecated and removed due to its lack of use.
It serves as a historical reference to ensure we remember and understand past decisions.
- [logo language](https://github.com/plantuml/plantuml/tree/v1.2023.12/src/net/sourceforge/plantuml/logo)
- [basic language](https://github.com/plantuml/plantuml/tree/v1.2023.12/src/net/sourceforge/plantuml/jasic)
- [mjpeg export](https://github.com/plantuml/plantuml/tree/v1.2023.12/src/net/sourceforge/plantuml/mjpeg)
- [animation](https://github.com/plantuml/plantuml/tree/v1.2023.12/src/net/sourceforge/plantuml/anim)
- [ditherer quantization](https://github.com/plantuml/plantuml/tree/v1.2023.12/src/net/sourceforge/plantuml/quantization)
- [syntax suggestion](https://github.com/plantuml/plantuml/blob/v1.2023.12/src/net/sourceforge/plantuml/syntax/SyntaxChecker.java)
- [a first try of GraphViz abstraction](https://github.com/plantuml/plantuml/blob/v1.2023.12/src/net/sourceforge/plantuml/posimo)

View File

@ -13,6 +13,7 @@ plugins {
java
`maven-publish`
signing
// id("com.adarshr.test-logger") version "3.2.0"
}
group = "net.sourceforge.plantuml"
@ -27,12 +28,22 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("io.github.glytching:junit-extensions:2.6.0")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
if (JavaVersion.current().isJava8) {
testImplementation("org.mockito:mockito-core:4.+")
testImplementation("org.mockito:mockito-junit-jupiter:4.+")
} else {
testImplementation("org.mockito:mockito-core:5.+")
testImplementation("org.mockito:mockito-junit-jupiter:5.+")
}
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
"pdfRuntimeOnly"("org.apache.xmlgraphics:fop:2.8")
"pdfRuntimeOnly"("org.apache.xmlgraphics:batik-all:1.16")
"pdfRuntimeOnly"("org.apache.xmlgraphics:fop:2.9")
"pdfRuntimeOnly"("org.apache.xmlgraphics:batik-all:1.17")
}
repositories {
@ -147,6 +158,10 @@ tasks.withType<Javadoc>().configureEach {
}
tasks.test {
doFirst {
println("Java Home:" + System.getProperty("java.home"));
println("Java Version: " + System.getProperty("java.version"));
}
useJUnitPlatform()
testLogging.showStandardStreams = true
}

137
build.xml Normal file
View File

@ -0,0 +1,137 @@
<!--
========================================================================
PlantUML Build File
========================================================================
Product: PlantUML - A free UML diagram generator
Project Info: https://plantuml.com
Copyright Information:
(C) Copyright 2009-2023, Arnaud Roques
Contributors:
- Original Author: Arnaud Roques
- Script Author: Ilya V. Paramonov
============================== Description ==============================
This build file offers an alternative method to build PlantUML.
While PlantUML is typically built using Gradle, this Ant build script
provides a fallback option for those who prefer or only have access to
Ant.
Usage:
To build using this file, navigate to the directory containing this
build.xml and run "ant" in the command line. For more detailed build
instructions and requirements, refer to:
https://github.com/plantuml/plantuml/blob/master/BUILDING.md
========================================================================
-->
<project name="PlantUML" default="dist" basedir=".">
<description>
PlantUML Build File
</description>
<!-- Compile source code and copy necessary files -->
<target name="compile">
<!-- Prepare the build directory -->
<delete dir="build" />
<mkdir dir="build" />
<!-- Compile Java sources -->
<javac target="1.8" source="1.8" srcdir="src" destdir="build" debug="on" />
<!-- Copy resources. Grouped by type and directory for better clarity -->
<copy todir="build/net/sourceforge/plantuml/version">
<fileset dir="src/net/sourceforge/plantuml/version">
<include name="*.png" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/openiconic/data">
<fileset dir="src/net/sourceforge/plantuml/openiconic/data">
<include name="*.txt" />
<include name="*.svg" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/emoji/data">
<fileset dir="src/net/sourceforge/plantuml/emoji/data">
<include name="*.txt" />
<include name="*.svg" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/fun">
<fileset dir="src/net/sourceforge/plantuml/fun">
<include name="*.png" />
</fileset>
</copy>
<copy todir="build/sprites/archimate">
<fileset dir="src/sprites/archimate">
<include name="*.png" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/dedication">
<fileset dir="src/net/sourceforge/plantuml/dedication">
<include name="*.png" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/math">
<fileset dir="src/net/sourceforge/plantuml/math">
<include name="*.js" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/utils">
<fileset dir="src/net/sourceforge/plantuml/utils">
<include name="*.txt" />
</fileset>
</copy>
<copy todir="build/net/sourceforge/plantuml/windowsdot">
<fileset dir="src/net/sourceforge/plantuml/windowsdot">
<include name="*.dat" />
</fileset>
</copy>
<copy todir="build/stdlib">
<fileset dir="stdlib">
<include name="**/*.repx" />
</fileset>
</copy>
<copy todir="build/skin">
<fileset dir="skin">
<include name="**/*.skin" />
</fileset>
</copy>
<copy todir="build/themes">
<fileset dir="themes">
<include name="**/*.puml" />
</fileset>
</copy>
<copy todir="build/svg">
<fileset dir="svg">
<include name="**/*.js" />
<include name="**/*.css" />
</fileset>
</copy>
</target>
<!-- Create distribution JAR and clean up -->
<target name="dist" depends="compile">
<!-- Prepare the distribution directory -->
<delete dir="dist" />
<mkdir dir="dist" />
<!-- Create JAR with required attributes in the manifest -->
<jar jarfile="plantuml.jar" basedir="build">
<manifest>
<attribute name="Automatic-Module-Name" value="net.sourceforge.plantuml" />
<attribute name="Main-Class" value="net.sourceforge.plantuml.Run" />
<attribute name="Class-Path" value="elk-full.jar avalon-framework-4.2.0.jar batik-all-1.7.jar commons-io-1.3.1.jar commons-logging-1.0.4.jar fop.jar xml-apis-ext-1.3.04.jar xmlgraphics-commons-1.4.jar jlatexmath-minimal-1.0.3.jar jlm_cyrillic.jar jlm_greek.jar vizjs.jar j2v8_win32_x86_64-3.1.6.jar j2v8_linux_x86_64-3.1.6.jar j2v8_macosx_x86_64-3.1.6.jar ditaa0_9.jar" />
</manifest>
</jar>
<!-- Clean up the build and distribution directories -->
<delete dir="build" />
<delete dir="dist" />
</target>
</project>

81
docs/TESTING.md Normal file
View File

@ -0,0 +1,81 @@
# Testing PlantUML
## Prerequisites
See the [Building page](../BUILDING.md) and especilay the paragraph [Building PlantUML with Gradle](../BUILDING.md#building-plantuml-with-gradle).
## Running Tests
### Run all tests, for all licences
To run the tests included with the project, use the following command:
```sh
gradle test
```
### Run a specific test, for only one licence
Comment those lines on [`settings.gradle.kts`](../settings.gradle.kts):
https://github.com/plantuml/plantuml/blob/a327d636a7fcc7f05a88b796a2838da16e2ba3e3/settings.gradle.kts#L12-L16
Then you can run a specific test _(e.g. the `aTestClass` Class)_:
```sh
gradle test --tests aTestClass
```
## Contributing
After successfully building and testing the project, you are ready to start [contributing](../CONTRIBUTING.md) to PlantUML!
If you have any changes to contribute, please submit a pull request through the [PlantUML GitHub repository](https://github.com/plantuml/plantuml).
## Test Directory Architecture
- [test/](../test)
- [com/plantuml/wasm](../test/com/plantuml/wasm)
- [net/sourceforge/plantuml](../test/net/sourceforge/plantuml)
- [nonreg](../test/nonreg)
```mermaid
%%{ init : { "flowchart" : { "curve" : "stepBefore" }}}%%
graph LR
T["test/"]
T -->|"Unit Test\n(of src/com/plantuml/api/cheerpj)"| W["com/plantuml/wasm"]
T -->|"Unit Test\n(of src/net/sourceforge/plantuml)"| U["net/sourceforge/plantuml"]
T -->|"Non-regression Test"| N[nonreg]
```
## Additional Resources
### Gradle
- site: [Gradle](https://gradle.org)
- doc: [Gradle User Guide](https://docs.gradle.org/current/userguide/userguide.html)
- src: [:octocat:Gradle](https://github.com/gradle/gradle)
### Gradle Plugins
- site: [Gradle Plugins Search](https://plugins.gradle.org)
- A "gradle test logger plugin"
- src: [:octocat:radarsh/gradle-test-logger-plugin](https://github.com/radarsh/gradle-test-logger-plugin)
### JUnit
- site: [JUnit5](https://junit.org/junit5/)
- doc: [JUnit User Guide](https://junit.org/junit5/docs/current/user-guide/)
- src: [:octocat:JUnit-team](https://github.com/junit-team)
### JUnit extensions
- doc: [JUnit extensions](https://junit.org/junit5/docs/current/user-guide/#extensions)
- The "Glytching" JUnit extensions
- doc: [Glytching JUnit extensions](https://glytching.github.io/junit-extensions/)
- doc: [`randomBeans` doc](https://glytching.github.io/junit-extensions/randomBeans)
- src: [:octocat:glytching/junit-extensions](https://github.com/glytching/junit-extensions)
### AssertJ
- doc: [AssertJ](https://assertj.github.io/doc/)
- src: [:octocat:AssertJ](https://github.com/assertj/assertj)
### Mockito
- site: [Mockito](https://site.mockito.org)
- doc: [Mockito doc.](https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html)
- src: [:octocat:Mockito](https://github.com/mockito/mockito)

View File

@ -1,4 +1,4 @@
# Warning, "version" should be the same in gradle.properties and Version.java
# Any idea anyone how to magically synchronize those :-) ?
version = 1.2023.11beta2
version = 1.2023.13beta1
org.gradle.workers.max = 3

View File

@ -24,9 +24,9 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
@ -41,7 +41,8 @@ sourceSets {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/generated/sjpp")
srcDirs("build/sources/sjpp/java")
include("**/graphviz.dat")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")

View File

@ -24,9 +24,9 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
@ -41,7 +41,8 @@ sourceSets {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/generated/sjpp")
srcDirs("build/sources/sjpp/java")
include("**/graphviz.dat")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")

View File

@ -24,9 +24,9 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
@ -41,7 +41,8 @@ sourceSets {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/generated/sjpp")
srcDirs("build/sources/sjpp/java")
include("**/graphviz.dat")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")
@ -124,7 +125,6 @@ tasks.named("sourcesJar"){
dependsOn(preprocessLicenceAntTask)
}
publishing {
publications.create<MavenPublication>("maven") {
from(components["java"])

View File

@ -0,0 +1,183 @@
// permits to start the build setting the javac release parameter, no parameter means build for java8:
// gradle clean build -x javaDoc -PjavacRelease=8
// gradle clean build -x javaDoc -PjavacRelease=17
// also supported is to build first, with java17, then switch the java version, and run the test with java8:
// gradle clean build -x javaDoc -x test
// gradle test
val javacRelease = (project.findProperty("javacRelease") ?: "8") as String
plugins {
java
`maven-publish`
signing
}
group = "net.sourceforge.plantuml"
description = "PlantUML"
java {
withSourcesJar()
withJavadocJar()
registerFeature("pdf") {
usingSourceSet(sourceSets["main"])
}
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
repositories {
mavenLocal()
mavenCentral()
}
sourceSets {
main {
java {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/sources/sjpp/java")
include("**/graphviz.dat")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")
}
}
}
tasks.compileJava {
if (JavaVersion.current().isJava8) {
java.targetCompatibility = JavaVersion.VERSION_1_8
} else {
options.release.set(Integer.parseInt(javacRelease))
}
}
tasks.withType<Jar>().configureEach {
manifest {
attributes["Main-Class"] = "net.sourceforge.plantuml.Run"
attributes["Implementation-Version"] = archiveVersion
attributes["Build-Jdk-Spec"] = System.getProperty("java.specification.version")
from("../manifest.txt")
}
from("../skin") { into("skin") }
from("../stdlib") { into("stdlib") }
from("../svg") { into("svg") }
from("../themes") { into("themes") }
// source sets for java and resources are on "src", only put once into the jar
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
tasks.withType<JavaCompile>().configureEach {
options.encoding = "UTF-8"
}
tasks.withType<Javadoc>().configureEach {
options {
this as StandardJavadocDocletOptions
addBooleanOption("Xdoclint:none", true)
addStringOption("Xmaxwarns", "1")
encoding = "UTF-8"
isUse = true
}
}
val syncSources by tasks.registering(Sync::class) {
from(rootProject.layout.projectDirectory.dir("src"))
into(project.layout.buildDirectory.dir("sources/sjpp/java"))
}
val preprocessLicenceAntTask by tasks.registering() {
dependsOn(syncSources)
inputs.dir(project.layout.buildDirectory.dir("sources/sjpp/java"))
outputs.dir(project.layout.buildDirectory.dir("generated/sjpp"))
doLast {
ant.withGroovyBuilder {
"taskdef"(
"name" to "sjpp",
"classname" to "sjpp.SjppAntTask",
"classpath" to rootProject.layout.projectDirectory.files("sjpp.jar").asPath
)
"sjpp"(
"src" to project.layout.buildDirectory.dir("sources/sjpp/java").get().asFile.absolutePath,
"dest" to project.layout.buildDirectory.dir("generated/sjpp").get().asFile.absolutePath,
"define" to "__GPLV2__",
"header" to project.layout.buildDirectory.file("../gplv2-license.txt").get().asFile.absolutePath
)
}
}
}
tasks.processResources{
dependsOn(preprocessLicenceAntTask)
}
tasks.compileJava{
dependsOn(preprocessLicenceAntTask)
}
tasks.named("sourcesJar"){
dependsOn(preprocessLicenceAntTask)
}
publishing {
publications.create<MavenPublication>("maven") {
from(components["java"])
pom {
name.set("PlantUML")
description.set("PlantUML is a component that allows to quickly write diagrams from text.")
groupId = project.group as String
artifactId = project.name
version = project.version as String
url.set("https://plantuml.com/")
licenses {
license {
name.set("GPLv2 License")
url.set("https://www.gnu.org/licenses/old-licenses/gpl-2.0.html")
}
}
developers {
developer {
id.set("arnaud.roques")
name.set("Arnaud Roques")
email.set("plantuml@gmail.com")
}
}
scm {
connection.set("scm:git:git://github.com:plantuml/plantuml.git")
developerConnection.set("scm:git:ssh://git@github.com:plantuml/plantuml.git")
url.set("https://github.com/plantuml/plantuml")
}
}
}
repositories {
maven {
name = "OSSRH"
val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
credentials {
username = System.getenv("OSSRH_USERNAME")
password = System.getenv("OSSRH_PASSWORD")
}
}
}
}
signing {
if (hasProperty("signing.gnupg.keyName") && hasProperty("signing.gnupg.passphrase")) {
useGpgCmd()
} else if (hasProperty("signingKey") && hasProperty("signingPassword")) {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
}
if (hasProperty("signing.gnupg.passphrase") || hasProperty("signingPassword")) {
sign(publishing.publications["maven"])
}
}

View File

@ -0,0 +1,70 @@
/* +=======================================================================
* |
* | PlantUML : a free UML diagram generator
* |
* +=======================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/liberapay (only 1€ per month!)
* https://plantuml.com/paypal
*
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License V2.
*
* THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
* LICENSE ("AGREEMENT"). [GNU General Public License V2]
*
* ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES
* RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
*
* You may obtain a copy of the License at
*
* https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* PlantUML can occasionally display sponsored or advertising messages. Those
* messages are usually generated on welcome or error images and never on
* functional diagrams.
* See https://plantuml.com/professional if you want to remove them
*
* Images (whatever their format : PNG, SVG, EPS...) generated by running PlantUML
* are owned by the author of their corresponding sources code (that is, their
* textual description in PlantUML language). Those images are not covered by
* this GPL v2 license.
*
* The generated images can then be used without any reference to the GPL v2 license.
* It is not even necessary to stipulate that they have been generated with PlantUML,
* although this will be appreciated by the PlantUML team.
*
* There is an exception : if the textual description in PlantUML language is also covered
* by any license, then the generated images are logically covered
* by the very same license.
*
* This is the IGY distribution (Install GraphViz by Yourself).
* You have to install GraphViz and to setup the GRAPHVIZ_DOT environment variable
* (see https://plantuml.com/graphviz-dot )
*
* Icons provided by OpenIconic : https://useiconic.com/open
* Archimate sprites provided by Archi : http://www.archimatetool.com
* Stdlib AWS provided by https://github.com/milo-minderbinder/AWS-PlantUML
* Stdlib Icons provided https://github.com/tupadr3/plantuml-icon-font-sprites
* ASCIIMathML (c) Peter Jipsen http://www.chapman.edu/~jipsen
* ASCIIMathML (c) David Lippman http://www.pierce.ctc.edu/dlippman
* CafeUndZopfli ported by Eugene Klyuchnikov https://github.com/eustas/CafeUndZopfli
* Brotli (c) by the Brotli Authors https://github.com/google/brotli
* Themes (c) by Brett Schwarz https://github.com/bschwarz/puml-themes
* Twemoji (c) by Twitter at https://twemoji.twitter.com/
*
*/

View File

@ -24,9 +24,9 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
@ -41,7 +41,7 @@ sourceSets {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/generated/sjpp")
srcDirs("build/sources/sjpp/java")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")

View File

@ -24,9 +24,9 @@ java {
}
dependencies {
compileOnly("org.apache.ant:ant:1.10.13")
compileOnly("org.apache.ant:ant:1.10.14")
testImplementation("org.assertj:assertj-core:3.24.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")
testImplementation("org.scilab.forge:jlatexmath:1.0.7")
}
@ -41,7 +41,8 @@ sourceSets {
srcDirs("build/generated/sjpp")
}
resources {
srcDirs("build/generated/sjpp")
srcDirs("build/sources/sjpp/java")
include("**/graphviz.dat")
include("**/*.png")
include("**/*.svg")
include("**/*.txt")

View File

@ -14,4 +14,6 @@ include("plantuml-bsd")
include("plantuml-epl")
include("plantuml-lgpl")
include("plantuml-mit")
include("plantuml-gplv2")

View File

@ -248,6 +248,12 @@ stateDiagram {
header {
FontSize 12
}
circle {
start, stop, end {
LineColor #2
BackgroundColor #2
}
}
}
@ -326,18 +332,10 @@ activityDiagram {
LineThickness 1
}
circle {
start {
start, stop, end {
LineColor #2
BackgroundColor #2
}
stop {
LineColor #2
BackgroundColor transparent
}
end {
LineColor #2
BackgroundColor transparent
}
}
activityBar {
BackgroundColor #5
@ -610,18 +608,10 @@ activityDiagram {
LineColor white
}
circle {
start {
start, stop, end {
LineColor #d
BackgroundColor #d
}
stop {
LineColor #d
BackgroundColor transparent
}
end {
LineColor #d
BackgroundColor transparent
}
}
activityBar {
BackgroundColor #a

View File

@ -262,6 +262,12 @@ stateDiagram {
FontStyle plain
}
}
circle {
start, stop, end {
LineColor black
BackgroundColor black
}
}
}
@ -382,18 +388,10 @@ activityDiagram {
FontSize 11
}
circle {
start {
start, stop, end {
LineColor black
BackgroundColor black
}
stop {
LineColor black
BackgroundColor white
}
end {
LineColor black
BackgroundColor white
}
}
activityBar {
Shadowing 3.0

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage PlantUML with the
* <a href="https://labs.leaningtech.com/cheerpj3" target="_top">
* CheerpJ</a> API.
*
*/
package com.plantuml.api.cheerpj;

View File

@ -0,0 +1,16 @@
# Directory Documentation for `cheerpj`
## Description
This package provides classes used to manage [CheerpJ](https://labs.leaningtech.com/cheerpj3) API.
## Reference
- [CheerpJ](https://labs.leaningtech.com/cheerpj3)
## Use by
- :octocat: [plantuml/plantuml-core](https://github.com/plantuml/plantuml-core)
- on [`/plantuml-core/src/main/java`](https://github.com/plantuml/plantuml-core/tree/main/plantuml-core/src/main/java)
- :octocat: [plantuml/plantuml.js](https://github.com/plantuml/plantuml.js)
## Demonstration
- [`plantuml-core/raw.html`](https://plantuml.github.io/plantuml-core/raw.html)
- [`plantuml.js`](https://plantuml.github.io/plantuml.js/)

View File

@ -0,0 +1,12 @@
/**
* This package is part of Smetana:
* the internal port (from <code>C</code> to <code>Java</code>)
* of <a href="https://graphviz.org"target="_top">GraphViz/Dot</a>
* in <a href="https://plantuml.com/smetana02" target="_top">plantuml</a>.
*
* @see h
* @see smetana.core
* @see net.sourceforge.plantuml.sdot
*
*/
package gen.annotation;

12
src/gen/package-info.java Normal file
View File

@ -0,0 +1,12 @@
/**
* This package is part of Smetana:
* the internal port (from <code>C</code> to <code>Java</code>)
* of <a href="https://graphviz.org"target="_top">GraphViz/Dot</a>
* in <a href="https://plantuml.com/smetana02" target="_top">plantuml</a>.
*
* @see h
* @see smetana.core
* @see net.sourceforge.plantuml.sdot
*
*/
package gen;

28
src/gen/readme.md Normal file
View File

@ -0,0 +1,28 @@
# Directory Documentation for `gen`
## Description
This package is part of Smetana: the internal port (from `C` to `Java`) of [GraphViz/Dot](https://graphviz.org) in [plantuml](https://plantuml.com/smetana02).
## Link
- [Smetana](https://plantuml.com/smetana02) and :octocat: [plantuml/smetana](https://github.com/plantuml/smetana)
- [`src/h`](../h)
- [`src/gen`](../gen)
- [`src/smetana/core`](../smetana/core)
## Reference
- [Graphviz](https://graphviz.org)
- [Graphviz DOT Language](https://www.graphviz.org/doc/info/lang.html)
- [Graphviz _(on GitLab)_](https://gitlab.com/graphviz/graphviz/)
- [Graphviz _(on Wikipedia)_](https://en.wikipedia.org/wiki/Graphviz)
## Credit
- :octocat: [plantuml/smetana](https://github.com/plantuml/smetana)
## Internaly use by
- [`plantuml/sdot`](../net/sourceforge/plantuml/sdot)
- [`plantuml/gitlog/SmetanaForGit.java`](../net/sourceforge/plantuml/gitlog/SmetanaForGit.java)
- [`plantuml/jsondiagram/SmetanaForJson.java`](../net/sourceforge/plantuml/jsondiagram/SmetanaForJson.java)
## Misc.
- [Bedřich Smetana _(on Wikipedia)_](https://en.wikipedia.org/wiki/Bed%C5%99ich_Smetana)
- [Smetana _(on Wikipedia)_](https://en.wikipedia.org/wiki/Smetana_(disambiguation))

23
src/h/package-info.java Normal file
View File

@ -0,0 +1,23 @@
/**
* This package is part of Smetana:
* the internal port (from <code>C</code> to <code>Java</code>)
* of <a href="https://graphviz.org"target="_top">GraphViz/Dot</a>
* in <a href="https://plantuml.com/smetana02" target="_top">plantuml</a>.
*
* <p>
* Port of the <code>C header</code> (<code>.h</code>) of Graphviz on Java:
* <ul>
* <li><code>EN</code> for <code>enumeration</code> or <code>enum</code></li>
* <li><code>ST</code> for <code>structure</code></li>
* </ul>
* </p>
*
* @see gen
* @see gen.annotation
* @see gen.lib
* @see gen.plugin.dot_layout
* @see smetana.core
* @see net.sourceforge.plantuml.sdot
*
*/
package h;

32
src/h/readme.md Normal file
View File

@ -0,0 +1,32 @@
# Directory Documentation for `h`
## Description
This package is part of Smetana: the internal port (from `C` to `Java`) of [GraphViz/Dot](https://graphviz.org) in [plantuml](https://plantuml.com/smetana02).
Port of the `C header` (`.h`) of Graphviz on Java:
- `EN` for `enumeration` or `enum`
- `ST` for `structure`
## Link
- [Smetana](https://plantuml.com/smetana02) and :octocat: [plantuml/smetana](https://github.com/plantuml/smetana)
- [`src/h`](../h)
- [`src/gen`](../gen)
- [`src/smetana/core`](../smetana/core)
## Reference
- [Graphviz](https://graphviz.org)
- [Graphviz DOT Language](https://www.graphviz.org/doc/info/lang.html)
- [Graphviz _(on GitLab)_](https://gitlab.com/graphviz/graphviz/)
- [Graphviz _(on Wikipedia)_](https://en.wikipedia.org/wiki/Graphviz)
## Credit
- :octocat: [plantuml/smetana](https://github.com/plantuml/smetana)
## Internaly use by
- [`plantuml/sdot`](../net/sourceforge/plantuml/sdot)
- [`plantuml/gitlog/SmetanaForGit.java`](../net/sourceforge/plantuml/gitlog/SmetanaForGit.java)
- [`plantuml/jsondiagram/SmetanaForJson.java`](../net/sourceforge/plantuml/jsondiagram/SmetanaForJson.java)
## Misc.
- [Bedřich Smetana _(on Wikipedia)_](https://en.wikipedia.org/wiki/Bed%C5%99ich_Smetana)
- [Smetana _(on Wikipedia)_](https://en.wikipedia.org/wiki/Smetana_(disambiguation))

View File

@ -84,10 +84,12 @@ import net.sourceforge.plantuml.security.SecurityUtils;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.skin.VisibilityModifier;
import net.sourceforge.plantuml.statediagram.StateDiagram;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
import net.sourceforge.plantuml.svek.CucaDiagramFileMaker;
import net.sourceforge.plantuml.svek.CucaDiagramFileMakerSvek;
import net.sourceforge.plantuml.text.BackSlash;
import net.sourceforge.plantuml.text.Guillemet;
import net.sourceforge.plantuml.xmi.CucaDiagramXmiMaker;
import net.sourceforge.plantuml.xmlsc.StateDiagramScxmlMaker;
@ -523,6 +525,41 @@ public abstract class CucaDiagram extends UmlDiagram implements GroupHierarchy,
return result;
}
@Override
public List<String> getVisibleStereotypeLabels(Entity entity) {
Stereotype stereotype = entity.getStereotype();
if (stereotype == null) {
return null;
}
List<EntityHideOrShow> commands = new ArrayList<>();
for (EntityHideOrShow hideOrShowEntry : hideOrShows) {
if (hideOrShowEntry.portion == EntityPortion.STEREOTYPE) {
commands.add(hideOrShowEntry);
}
}
List<String> visibleStereotypeLabels = new ArrayList<>();
for (String stereoTypeLabel : entity.getStereotype().getLabels(Guillemet.DOUBLE_COMPARATOR)) {
if (isHiddenStereotypeLabel(stereoTypeLabel, commands)) {
visibleStereotypeLabels.add(stereoTypeLabel);
}
}
return visibleStereotypeLabels;
}
private boolean isHiddenStereotypeLabel(String stereoTypeLabel, List<EntityHideOrShow> commands) {
for (EntityHideOrShow cmd : commands) {
String gender = cmd.gender.getGender();
if (gender != null && gender.equals(stereoTypeLabel)) {
return false;
}
}
return true;
}
public final void hideOrShow(EntityGender gender, EntityPortion portions, boolean show) {
for (EntityPortion portion : portions.asSet())
this.hideOrShows.add(new EntityHideOrShow(gender, portion, show));

View File

@ -37,8 +37,6 @@ package net.atmp;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@ -46,22 +44,16 @@ import java.io.OutputStream;
import java.util.Random;
import java.util.Set;
import javax.swing.ImageIcon;
import com.plantuml.api.cheerpj.WasmLog;
import net.sourceforge.plantuml.AnimatedGifEncoder;
import net.sourceforge.plantuml.AnnotatedBuilder;
import net.sourceforge.plantuml.AnnotatedWorker;
import net.sourceforge.plantuml.EmptyImageBuilder;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.FileUtils;
import net.sourceforge.plantuml.OptionFlags;
import net.sourceforge.plantuml.Scale;
import net.sourceforge.plantuml.TitledDiagram;
import net.sourceforge.plantuml.anim.AffineTransformation;
import net.sourceforge.plantuml.anim.Animation;
import net.sourceforge.plantuml.api.ImageDataComplex;
import net.sourceforge.plantuml.api.ImageDataSimple;
import net.sourceforge.plantuml.braille.UGraphicBraille;
@ -87,14 +79,10 @@ import net.sourceforge.plantuml.klimt.drawing.tikz.UGraphicTikz;
import net.sourceforge.plantuml.klimt.drawing.txt.UGraphicTxt;
import net.sourceforge.plantuml.klimt.drawing.visio.UGraphicVdx;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.URectangle;
import net.sourceforge.plantuml.mjpeg.MJPEGGenerator;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.security.SImageIO;
import net.sourceforge.plantuml.skin.ColorParam;
import net.sourceforge.plantuml.skin.CornerParam;
import net.sourceforge.plantuml.skin.LineParam;
@ -113,9 +101,6 @@ import net.sourceforge.plantuml.url.Url;
public class ImageBuilder {
// ::comment when __CORE__
private Animation animation;
// ::done
private boolean annotations;
private HColor backcolor = getDefaultHBackColor();
@ -223,9 +208,6 @@ public class ImageBuilder {
public ImageBuilder styled(TitledDiagram diagram) {
skinParam = diagram.getSkinParam();
stringBounder = fileFormatOption.getDefaultStringBounder(skinParam);
// ::comment when __CORE__
animation = diagram.getAnimation();
// ::done
annotations = true;
backcolor = diagram.calculateBackColor();
margin = calculateMargin(diagram);
@ -246,21 +228,7 @@ public class ImageBuilder {
udrawable = annotatedWorker.addAdd((TextBlock) udrawable);
}
// ::comment when __CORE__
switch (fileFormatOption.getFileFormat()) {
case MJPEG:
return writeImageMjpeg(os);
case ANIMATED_GIF:
return writeImageAnimatedGif(os);
default:
return writeImageInternal(os, animation);
// ::done
// ::uncomment when __CORE__
// return writeImageInternal(os);
// ::done
// ::comment when __CORE__
}
// ::done
return writeImageInternal(os);
}
public byte[] writeByteArray() throws IOException {
@ -270,34 +238,16 @@ public class ImageBuilder {
}
}
// ::revert when __CORE__
private ImageData writeImageInternal(OutputStream os, Animation animationArg) throws IOException {
// private ImageData writeImageInternal(OutputStream os) throws IOException {
// ::done
private ImageData writeImageInternal(OutputStream os) throws IOException {
XDimension2D dim = getFinalDimension();
double dx = 0;
double dy = 0;
// ::comment when __CORE__
if (animationArg != null) {
final MinMax minmax = animationArg.getMinMax(dim);
animationArg.setDimension(dim);
dim = minmax.getDimension();
dx = -minmax.getMinX();
dy = -minmax.getMinY();
}
// ::done
final Scale scale = titledDiagram == null ? null : titledDiagram.getScale();
final double scaleFactor = (scale == null ? 1 : scale.getScale(dim.getWidth(), dim.getHeight())) * getDpi()
/ 96.0;
if (scaleFactor <= 0)
throw new IllegalStateException("Bad scaleFactor");
WasmLog.log("...image drawing...");
// ::revert when __CORE__
UGraphic ug = createUGraphic(dim, animationArg, dx, dy, scaleFactor,
UGraphic ug = createUGraphic(dim, scaleFactor,
titledDiagram == null ? new Pragma() : titledDiagram.getPragma());
// UGraphic ug = createUGraphic(dim, dx, dy, scaleFactor,
// titledDiagram == null ? new Pragma() : titledDiagram.getPragma());
// ::done
maybeDrawBorder(ug, dim);
if (randomPixel)
drawRandomPoint(ug);
@ -330,9 +280,9 @@ public class ImageBuilder {
if (stroke == null)
return;
final URectangle rectangle = URectangle.build(dim.getWidth() - stroke.getThickness(),
dim.getHeight() - stroke.getThickness())
.rounded(skinParam.getRoundCorner(CornerParam.diagramBorder, null));
final URectangle rectangle = URectangle
.build(dim.getWidth() - stroke.getThickness(), dim.getHeight() - stroke.getThickness())
.rounded(skinParam.getRoundCorner(CornerParam.diagramBorder, null));
ug.apply(color == null ? HColors.BLACK : color).apply(stroke).draw(rectangle);
}
@ -364,83 +314,13 @@ public class ImageBuilder {
return ug;
}
// ::comment when __CORE__
private ImageData writeImageMjpeg(OutputStream os) throws IOException {
final XDimension2D dim = getFinalDimension();
final SFile f = new SFile("c:/tmp.avi");
final int nbframe = 100;
final MJPEGGenerator m = new MJPEGGenerator(f, getAviImage(null).getWidth(null),
getAviImage(null).getHeight(null), 12.0, nbframe);
for (int i = 0; i < nbframe; i++) {
// AffineTransform at = AffineTransform.getRotateInstance(1.0);
AffineTransform at = AffineTransform.getTranslateInstance(dim.getWidth() / 2, dim.getHeight() / 2);
at.rotate(90.0 * Math.PI / 180.0 * i / 100);
at.translate(-dim.getWidth() / 2, -dim.getHeight() / 2);
// final AffineTransform at = AffineTransform.getTranslateInstance(i, 0);
// final ImageIcon ii = new ImageIcon(getAviImage(at));
// m.addImage(ii.getImage());
throw new UnsupportedOperationException();
}
m.finishAVI();
FileUtils.copyToStream(f, os);
return createImageData(dim);
}
private ImageData writeImageAnimatedGif(OutputStream os) throws IOException {
final XDimension2D dim = getFinalDimension();
final MinMax minmax = animation.getMinMax(dim);
final AnimatedGifEncoder e = new AnimatedGifEncoder();
// e.setQuality(1);
e.setRepeat(0);
e.start(os);
// e.setDelay(1000); // 1 frame per sec
// e.setDelay(100); // 10 frame per sec
e.setDelay(60); // 16 frame per sec
// e.setDelay(50); // 20 frame per sec
for (AffineTransformation at : animation.getAll()) {
final ImageIcon ii = new ImageIcon(getAviImage(at));
e.addFrame((BufferedImage) ii.getImage());
}
e.finish();
return createImageData(dim);
}
private Image getAviImage(AffineTransformation affineTransform) throws IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
writeImageInternal(baos, Animation.singleton(affineTransform));
baos.close();
return SImageIO.read(baos.toByteArray());
}
// ::done
// ::revert when __CORE__
private UGraphic createUGraphic(final XDimension2D dim, Animation animationArg, double dx, double dy,
double scaleFactor, Pragma pragma) {
// private UGraphic createUGraphic(final XDimension2D dim, double dx, double dy,
// double scaleFactor, Pragma pragma) {
// ::done
private UGraphic createUGraphic(final XDimension2D dim, double scaleFactor, Pragma pragma) {
final ColorMapper colorMapper = fileFormatOption.getColorMapper();
switch (fileFormatOption.getFileFormat()) {
case PNG:
case RAW:
// ::comment when __CORE__
return createUGraphicPNG(scaleFactor, dim, animationArg, dx, dy, fileFormatOption.getWatermark(),
return createUGraphicPNG(scaleFactor, dim, fileFormatOption.getWatermark(),
fileFormatOption.getFileFormat());
// ::done
// ::uncomment when __CORE__
// return createUGraphicPNG(scaleFactor, dim, dx, dy,
// fileFormatOption.getWatermark(), fileFormatOption.getFileFormat());
// ::done
case SVG:
return createUGraphicSVG(scaleFactor, dim, pragma);
// ::comment when __CORE__
@ -492,14 +372,8 @@ public class ImageBuilder {
}
// ::uncomment when __CORE__
// private UGraphic createUGraphicPNG(double scaleFactor, final XDimension2D
// dim, double dx, double dy, String watermark, FileFormat format) {
// ::done
// ::comment when __CORE__
private UGraphic createUGraphicPNG(double scaleFactor, final XDimension2D dim, Animation affineTransforms,
double dx, double dy, String watermark, FileFormat format) {
// ::done
private UGraphic createUGraphicPNG(double scaleFactor, final XDimension2D dim, String watermark,
FileFormat format) {
Color pngBackColor = new Color(0, 0, 0, 0);
if (this.backcolor instanceof HColorSimple)
@ -513,15 +387,9 @@ public class ImageBuilder {
(int) (dim.getHeight() * scaleFactor), pngBackColor, stringBounder);
final Graphics2D graphics2D = builder.getGraphics2D();
// ::comment when __CORE__
final UGraphicG2d ug = new UGraphicG2d(backcolor, fileFormatOption.getColorMapper(), stringBounder, graphics2D,
scaleFactor, dx, dy, format, affineTransforms == null ? null : affineTransforms.getFirst());
// ::done
// ::uncomment when __CORE__
// final UGraphicG2d ug = new UGraphicG2d(backcolor,
// fileFormatOption.getColorMapper(), stringBounder, graphics2D,
// scaleFactor, dx, dy, format);
// ::done
scaleFactor, format);
ug.setBufferedImage(builder.getBufferedImage());
final BufferedImage im = ug.getBufferedImage();
if (this.backcolor instanceof HColorGradient)

View File

@ -67,6 +67,15 @@ import net.sourceforge.plantuml.utils.BlocLines;
import net.sourceforge.plantuml.version.License;
import net.sourceforge.plantuml.version.Version;
/**
* An abstract class for all diagram classes.
*
* <p>
* Short for "{@link net.sourceforge.plantuml.plasma plasma} system", although
* most newer diagram types do not use entities stored in a plasma.
*
* @see PSystemBuilder
*/
public abstract class AbstractPSystem implements Diagram {
// ::remove file when __HAXE__

View File

@ -76,8 +76,6 @@ public enum FileFormat {
SCXML("application/scxml+xml"), //
GRAPHML("application/graphml+xml"), //
PDF("application/pdf"), //
MJPEG("video/x-msvideo"), //
ANIMATED_GIF("image/gif"), //
HTML("text/html"), //
HTML5("text/html"), //
VDX("application/vnd.visio.xml"), //
@ -112,15 +110,9 @@ public enum FileFormat {
if (name().startsWith("XMI"))
return ".xmi";
if (this == MJPEG)
return ".avi";
if (this == LATEX || this == LATEX_NO_PREAMBLE)
return ".tex";
if (this == ANIMATED_GIF)
return ".gif";
if (this == BRAILLE_PNG)
return ".braille.png";

View File

@ -83,7 +83,7 @@ public class OptionFlags {
static public void setMaxPixel(int max) {
}
static public final boolean USE_HECTOR = false;
// static public final boolean USE_HECTOR = false;
static public boolean ADD_NICE_FOR_DOT = false;
// static public final boolean USE_IF_VERTICAL = true;

View File

@ -71,6 +71,7 @@ import net.sourceforge.plantuml.eggs.PSystemWelcomeFactory;
import net.sourceforge.plantuml.emoji.PSystemListEmojiFactory;
import net.sourceforge.plantuml.error.PSystemError;
import net.sourceforge.plantuml.error.PSystemErrorUtils;
import net.sourceforge.plantuml.error.PSystemUnsupported;
import net.sourceforge.plantuml.filesdiagram.FilesDiagramFactory;
import net.sourceforge.plantuml.flowdiagram.FlowDiagramFactory;
import net.sourceforge.plantuml.font.PSystemListFontsFactory;
@ -109,6 +110,15 @@ import net.sourceforge.plantuml.wbs.WBSDiagramFactory;
import net.sourceforge.plantuml.wire.WireDiagramFactory;
import net.sourceforge.plantuml.yaml.YamlDiagramFactory;
/**
* Builds a diagram from pre-processed PlantUML source.
*
* <p>
* Tries each of the factories (enumerated in the static block below) until one
* succeeds.
*
* @see AbstractPSystem
*/
public class PSystemBuilder {
// ::remove file when __HAXE__
@ -138,6 +148,9 @@ public class PSystemBuilder {
}
final DiagramType diagramType = umlSource.getDiagramType();
if (diagramType == DiagramType.UNKNOWN)
return new PSystemUnsupported(umlSource);
final List<PSystemError> errors = new ArrayList<>();
for (PSystemFactory systemFactory : factories) {
if (diagramType != systemFactory.getDiagramType())
@ -151,6 +164,8 @@ public class PSystemBuilder {
}
errors.add((PSystemError) sys);
}
if (errors.size() == 0)
return new PSystemUnsupported(umlSource);
result = PSystemErrorUtils.merge(errors);
return result;
@ -210,10 +225,12 @@ public class PSystemBuilder {
// ::done
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or __LGPL__
factories.add(new PSystemDitaaFactory());
factories.add(new PSystemJcckitFactory());
factories.add(new PSystemSudokuFactory());
// ::done
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__
factories.add(new PSystemDitaaFactory());
// ::done
// ::comment when __CORE__
factories.add(new PSystemDefinitionFactory());

View File

@ -47,13 +47,14 @@ import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.plantuml.core.Diagram;
import net.sourceforge.plantuml.core.DiagramDescription;
import net.sourceforge.plantuml.error.PSystemError;
import net.sourceforge.plantuml.preproc.Defines;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.url.CMapData;
public class Pipe {
// ::remove file when __CORE__
@ -190,7 +191,12 @@ public class Pipe {
if (state == State.START_MARK_NOT_FOUND && line.startsWith("@start")) {
sb.setLength(0); // discard any previous input
state = State.START_MARK_FOUND;
expectedEnd = "@end" + line.substring(6).split("^[A-Za-z]")[0];
final Matcher m = Pattern.compile("@start([A-Za-z]*)").matcher(line);
if (m.matches())
expectedEnd = "@end" + m.group(1);
else
expectedEnd = "@end";
} else if (state == State.START_MARK_FOUND && line.startsWith(expectedEnd)) {
state = State.COMPLETE;
}

View File

@ -154,7 +154,7 @@ public class SourceStringReader {
public DiagramDescription outputImage(OutputStream os, int numImage, FileFormatOption fileFormatOption)
throws IOException {
if (blocks.size() == 0) {
noStartumlFound(os, fileFormatOption);
noValidStartFound(os, fileFormatOption);
return null;
}
for (BlockUml b : blocks) {
@ -230,8 +230,8 @@ public class SourceStringReader {
}
public ImageData noStartumlFound(OutputStream os, FileFormatOption fileFormatOption) throws IOException {
final TextBlock error = GraphicStrings.createForError(Arrays.asList("No @startuml/@enduml found"),
public ImageData noValidStartFound(OutputStream os, FileFormatOption fileFormatOption) throws IOException {
final TextBlock error = GraphicStrings.createForError(Arrays.asList("No valid @start/@end found, please check the version"),
fileFormatOption.isUseRedForError());
return plainImageBuilder(error, fileFormatOption).write(os);

View File

@ -42,8 +42,6 @@ import java.util.Map;
import net.atmp.ImageBuilder;
import net.sourceforge.plantuml.abel.DisplayPositioned;
import net.sourceforge.plantuml.abel.DisplayPositionned;
import net.sourceforge.plantuml.anim.Animation;
import net.sourceforge.plantuml.anim.AnimationDecoder;
import net.sourceforge.plantuml.api.ApiStable;
import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.core.Diagram;
@ -88,10 +86,6 @@ public abstract class TitledDiagram extends AbstractPSystem implements Diagram,
private final SkinParam skinParam;
// ::comment when __CORE__
private Animation animation;
// ::done
private final Pragma pragma = new Pragma();
public Pragma getPragma() {
@ -218,21 +212,6 @@ public abstract class TitledDiagram extends AbstractPSystem implements Diagram,
return ClockwiseTopRightBottomLeft.same(10);
}
// ::comment when __CORE__
final public void setAnimation(Iterable<CharSequence> animationData) {
// try {
final AnimationDecoder animationDecoder = new AnimationDecoder(animationData);
this.animation = Animation.create(animationDecoder.decode());
// } catch (ScriptException e) {
// Logme.error(e);
// }
}
final public Animation getAnimation() {
return animation;
}
// ::done
@Override
public ImageBuilder createImageBuilder(FileFormatOption fileFormatOption) throws IOException {
return super.createImageBuilder(fileFormatOption).styled(this);

View File

@ -38,10 +38,8 @@ package net.sourceforge.plantuml;
import static net.atmp.ImageBuilder.plainImageBuilder;
import java.awt.Color;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@ -74,10 +72,8 @@ import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.klimt.shape.UDrawable;
import net.sourceforge.plantuml.klimt.shape.UImage;
import net.sourceforge.plantuml.log.Logme;
import net.sourceforge.plantuml.mjpeg.MJPEGGenerator;
import net.sourceforge.plantuml.pdf.PdfConverter;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.security.SImageIO;
import net.sourceforge.plantuml.security.SecurityUtils;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.style.NoStyleAvailableException;
@ -258,27 +254,6 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot
}
// ::comment when __CORE__
private void exportDiagramInternalMjpeg(OutputStream os) throws IOException {
final SFile f = new SFile("c:/test.avi");
final int nb = 150;
final double framerate = 30;
final MJPEGGenerator m = new MJPEGGenerator(f, 640, 480, framerate, nb);
for (int i = 0; i < nb; i++) {
final AffineTransform at = new AffineTransform();
final double coef = (nb - 1 - i) * 1.0 / nb;
at.setToShear(coef, coef);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
// exportDiagramTOxxBEREMOVED(baos, null, 0, new
// FileFormatOption(FileFormat.PNG, at));
baos.close();
final BufferedImage im = SImageIO.read(baos.toByteArray());
m.addImage(im);
}
m.finishAVI();
}
private ImageData exportDiagramInternalPdf(OutputStream os, int index) throws IOException {
final File svg = FileUtils.createTempFileLegacy("pdf", ".svf");
final File pdfFile = FileUtils.createTempFileLegacy("pdf", ".pdf");

View File

@ -37,4 +37,6 @@ package net.sourceforge.plantuml.abel;
public interface EntityGender {
public boolean contains(Entity test);
public String getGender();
}

View File

@ -44,6 +44,11 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return test.getLeafType() == type;
}
@Override
public String getGender() {
return type.name();
}
};
}
@ -52,6 +57,11 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return test.getUid().equals(entity.getUid());
}
@Override
public String getGender() {
return entity.getUid();
}
};
}
@ -61,7 +71,19 @@ public class EntityGenderUtils {
if (test.getStereotype() == null) {
return false;
}
return stereotype.equals(test.getStereotype().getLabel(Guillemet.DOUBLE_COMPARATOR));
for (String label : test.getStereotype().getLabels(Guillemet.DOUBLE_COMPARATOR)) {
if (label.equals(stereotype)) {
return true;
}
}
return false;
}
@Override
public String getGender() {
return stereotype;
}
};
}
@ -80,6 +102,11 @@ public class EntityGenderUtils {
}
return false;
}
@Override
public String getGender() {
return null;
}
};
}
@ -88,6 +115,11 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return g1.contains(test) && g2.contains(test);
}
@Override
public String getGender() {
return null;
}
};
}
@ -96,6 +128,11 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return true;
}
@Override
public String getGender() {
return null;
}
};
}
@ -104,6 +141,11 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return test.getBodier().getMethodsToDisplay().size() == 0;
}
@Override
public String getGender() {
return null;
}
};
}
@ -112,7 +154,26 @@ public class EntityGenderUtils {
public boolean contains(Entity test) {
return test.getBodier().getFieldsToDisplay().size() == 0;
}
@Override
public String getGender() {
return null;
}
};
}
static public EntityGender byClassName(final String className) {
return new EntityGender() {
@Override
public boolean contains(Entity test) {
return className.equals(test.getName());
}
@Override
public String getGender() {
return className;
}
};
}
}

View File

@ -0,0 +1,6 @@
/**
* Provides classes used to manage {@link Entity}.
*
* @see net.sourceforge.plantuml.plasma
*/
package net.sourceforge.plantuml.abel;

View File

@ -0,0 +1,14 @@
# Directory Documentation for `abel`
## Description
This package provides classes used to manage [`Entity`](./Entity.java).
## Link
## Reference
## Credit
## Misc.
- [Abel _(on Wikipedia)_](https://en.wikipedia.org/wiki/Abel_(disambiguation))
- [Niels Henrik Abel](https://en.wikipedia.org/wiki/Niels_Henrik_Abel)

View File

@ -0,0 +1,8 @@
/**
* Provides classes used to generate
* <a href="https://plantuml.com/xearth" target="_top">
* XEarth Image</a>.
*
* @see ext.plantuml.com.ctreber.acearth
*/
package net.sourceforge.plantuml.acearth;

View File

@ -0,0 +1,20 @@
# Directory Documentation for `acearth`
## Description
This package provides classes used to generate [XEarth Image](https://plantuml.com/xearth).
The Java port of `XEarth` used in `PlantUML` is the [`AC.earth` of Christian Treber](../../../../ext/plantuml/com/ctreber/acearth/).
## Link
- [XEarth Image _(on `PlantUML`)_](https://plantuml.com/xearth)
## Reference
- [`xearth` of Kirk Lauritz Johnson](https://hewgill.com/xearth/original/)
- [`xearth` for Windows of Greg Hewgill](https://hewgill.com/xearth/)
## Credit
- [`AC.earth` of Christian Treber](../../../../ext/plantuml/com/ctreber/acearth/)
- [AC Earth _(on Web Archive)_](https://web.archive.org/web/20180428011447/http://www.acproductions.de/acearth)
## Misc.
- [Earth Day _(on Wikipedia)_](https://en.wikipedia.org/wiki/Earth_Day)

View File

@ -0,0 +1,12 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/activity-diagram-legacy" target="_top">
* Activity Diagram (legacy)</a>.
*
* <p>
* For new syntax see {@link net.sourceforge.plantuml.activitydiagram3}
* and
* <a href="https://plantuml.com/activity-diagram-beta" target="_top">
* Activity Diagram (New Syntax)</a>.
*/
package net.sourceforge.plantuml.activitydiagram;

View File

@ -0,0 +1,18 @@
# Directory Documentation for `activitydiagram`
## Description
This package provides classes used to manage [Activity Diagram (legacy)](https://plantuml.com/activity-diagram-legacy).
For new syntax see [`activitydiagram3`](../activitydiagram3)
and [Activity Diagram (New Syntax)](https://plantuml.com/activity-diagram-beta).
## Link
- [Activity Diagram (legacy)](https://plantuml.com/activity-diagram-legacy)
- [Activity Diagram (New Syntax)](https://plantuml.com/activity-diagram-beta)
## Reference
## Credit
## Misc.

View File

@ -388,11 +388,11 @@ public class ActivityDiagram3 extends UmlDiagram {
}
public CommandExecutionResult backward(Display label, BoxStyle boxStyle, LinkRendering incoming1,
LinkRendering incoming2) {
LinkRendering incoming2, Stereotype stereotype) {
manageSwimlaneStrategy();
if (current() instanceof InstructionRepeat) {
final InstructionRepeat instructionRepeat = (InstructionRepeat) current();
instructionRepeat.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle, incoming1, incoming2);
instructionRepeat.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle, incoming1, incoming2, stereotype);
return CommandExecutionResult.ok();
}
if (current() instanceof InstructionWhile) {

View File

@ -57,6 +57,7 @@ import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
import net.sourceforge.plantuml.sequencediagram.NotePosition;
import net.sourceforge.plantuml.sequencediagram.NoteType;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.ISkinParam;
public class InstructionRepeat extends AbstractInstruction implements Instruction {
@ -74,6 +75,7 @@ public class InstructionRepeat extends AbstractInstruction implements Instructio
private Display backward = Display.NULL;
private Stereotype stereotype;
private LinkRendering incoming1 = LinkRendering.none();
private LinkRendering incoming2 = LinkRendering.none();
private List<PositionedNote> backwardNotes = new ArrayList<>();
@ -110,12 +112,13 @@ public class InstructionRepeat extends AbstractInstruction implements Instructio
}
public void setBackward(Display label, Swimlane swimlaneBackward, BoxStyle boxStyle, LinkRendering incoming1,
LinkRendering incoming2) {
LinkRendering incoming2, Stereotype stereotype) {
this.backward = label;
this.swimlaneBackward = swimlaneBackward;
this.boxStyle = boxStyle;
this.incoming1 = incoming1;
this.incoming2 = incoming2;
this.stereotype = stereotype;
}
public boolean hasBackward() {
@ -166,7 +169,7 @@ public class InstructionRepeat extends AbstractInstruction implements Instructio
if (Display.isNull(backward))
return null;
Ftile result = factory.activity(backward, swimlaneBackward, boxStyle, Colors.empty(), null);
Ftile result = factory.activity(backward, swimlaneBackward, boxStyle, Colors.empty(), stereotype);
if (backwardNotes.size() > 0)
result = factory.addNote(result, swimlaneBackward, backwardNotes, VerticalAlignment.CENTER);

View File

@ -50,6 +50,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
import net.sourceforge.plantuml.regex.RegexOptional;
import net.sourceforge.plantuml.regex.RegexOr;
import net.sourceforge.plantuml.regex.RegexResult;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.utils.LineLocation;
public class CommandBackward3 extends SingleLineCommand2<ActivityDiagram3> {
@ -96,12 +97,18 @@ public class CommandBackward3 extends SingleLineCommand2<ActivityDiagram3> {
else
boxStyle = BoxStyle.fromString(styleString);
final String stereo = arg.get("STYLE", 1);
Stereotype stereotype = null;
if (stereo != null)
stereotype = Stereotype.build(stereo);
final Display label = Display.getWithNewlines(arg.get("LABEL", 0));
final LinkRendering in = getBackRendering(diagram, arg, "INCOMING");
final LinkRendering out = getBackRendering(diagram, arg, "OUTCOMING");
return diagram.backward(label, boxStyle, in, out);
return diagram.backward(label, boxStyle, in, out, stereotype);
}
static public LinkRendering getBackRendering(ActivityDiagram3 diagram, RegexResult arg, String name)

View File

@ -47,6 +47,7 @@ import net.sourceforge.plantuml.regex.IRegex;
import net.sourceforge.plantuml.regex.RegexConcat;
import net.sourceforge.plantuml.regex.RegexLeaf;
import net.sourceforge.plantuml.regex.RegexResult;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.utils.BlocLines;
public class CommandBackwardLong3 extends CommandMultilines3<ActivityDiagram3> {
@ -86,6 +87,11 @@ public class CommandBackwardLong3 extends CommandMultilines3<ActivityDiagram3> {
final RegexResult line0 = getStartingPattern().matcher(lines.getFirst().getTrimmed().getString());
final RegexResult lineLast = getPatternEnd2().matcher(lines.getLast().getString());
final String end = lineLast.get("END", 0);
final String stereo = lineLast.get("END", 1);
Stereotype stereotype = null;
if (stereo != null)
stereotype = Stereotype.build(stereo);
final BoxStyle style = BoxStyle.fromString(end);
lines = lines.removeStartingAndEnding(line0.get("DATA", 0), end.length());
@ -93,6 +99,6 @@ public class CommandBackwardLong3 extends CommandMultilines3<ActivityDiagram3> {
final LinkRendering in = LinkRendering.none();
final LinkRendering out = LinkRendering.none();
return diagram.backward(lines.toDisplay(), style, in, out);
return diagram.backward(lines.toDisplay(), style, in, out, stereotype);
}
}

View File

@ -50,7 +50,7 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.FtileAssemblySimple;
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileFactory;
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileBox;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileCircleEnd;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileCircleEndCross;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileCircleSpot;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileCircleStart;
import net.sourceforge.plantuml.activitydiagram3.ftile.vertical.FtileCircleStop;
@ -66,7 +66,6 @@ import net.sourceforge.plantuml.klimt.font.UFont;
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
import net.sourceforge.plantuml.stereo.Stereotype;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.SName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.style.StyleBuilder;
@ -111,17 +110,13 @@ public class VCompactFactory implements FtileFactory {
@Override
public Ftile start(Swimlane swimlane) {
final Style style = getSignatureCircleStart().getMergedStyle(skinParam.getCurrentStyleBuilder());
final HColor color = style.value(PName.LineColor).asColor(skinParam.getIHtmlColorSet());
return new FtileCircleStart(skinParam(), color, swimlane, style);
return new FtileCircleStart(skinParam(), swimlane, style);
}
@Override
public Ftile stop(Swimlane swimlane) {
final Style style = getSignatureCircleStop().getMergedStyle(skinParam.getCurrentStyleBuilder());
final HColor borderColor = style.value(PName.LineColor).asColor(skinParam.getIHtmlColorSet());
final HColor backgroundColor = skinParam.getBackgroundColor();
return new FtileCircleStop(skinParam(), backgroundColor, borderColor, swimlane, style);
return new FtileCircleStop(skinParam(), swimlane, style);
}
@Override
@ -134,10 +129,7 @@ public class VCompactFactory implements FtileFactory {
@Override
public Ftile end(Swimlane swimlane) {
final Style style = getSignatureCircleEnd().getMergedStyle(skinParam.getCurrentStyleBuilder());
final HColor borderColor = style.value(PName.LineColor).asColor(skinParam.getIHtmlColorSet());
final HColor backgroundColor = skinParam.getBackgroundColor();
return new FtileCircleEnd(skinParam(), backgroundColor, borderColor, swimlane, style);
return new FtileCircleEndCross(skinParam(), swimlane, style);
}
@Override

View File

@ -46,6 +46,7 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
import net.sourceforge.plantuml.klimt.UStroke;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.shape.UEllipse;
@ -54,12 +55,12 @@ import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
public class FtileCircleEnd extends AbstractFtile {
public class FtileCircleEndCross extends AbstractFtile {
private static final int SIZE = 20;
private HColor borderColor;
private HColor backColor;
private final HColor lineColor;
private final HColor backColor;
private final Swimlane swimlane;
private double shadowing;
@ -68,14 +69,12 @@ public class FtileCircleEnd extends AbstractFtile {
return Collections.emptyList();
}
public FtileCircleEnd(ISkinParam skinParam, HColor backColor, HColor borderColor, Swimlane swimlane, Style style) {
public FtileCircleEndCross(ISkinParam skinParam, Swimlane swimlane, Style style) {
super(skinParam);
this.borderColor = borderColor;
this.backColor = backColor;
this.swimlane = swimlane;
this.shadowing = style.value(PName.Shadowing).asDouble();
this.backColor = style.value(PName.BackGroundColor).asColor(getIHtmlColorSet());
this.borderColor = style.value(PName.LineColor).asColor(getIHtmlColorSet());
this.lineColor = style.value(PName.LineColor).asColor(getIHtmlColorSet());
}
@ -102,10 +101,11 @@ public class FtileCircleEnd extends AbstractFtile {
final UEllipse circle = UEllipse.build(SIZE, SIZE);
circle.setDeltaShadow(shadowing);
ug = ug.apply(borderColor);
ug = ug.apply(lineColor).apply(HColors.transparent().bg());
final double thickness = 2.5;
ug.apply(backColor.bg()).apply(UStroke.withThickness(1.5)).apply(new UTranslate(xTheoricalPosition, yTheoricalPosition))
.draw(circle);
ug.apply(UStroke.withThickness(1.5)).apply(new UTranslate(xTheoricalPosition, yTheoricalPosition)).draw(circle);
ug = ug.apply(backColor.bg());
final double size2 = (SIZE - thickness) / Math.sqrt(2);
final double delta = (SIZE - size2) / 2;

View File

@ -43,32 +43,22 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.color.Colors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.shape.UEllipse;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.svek.image.CircleStart;
public class FtileCircleStart extends AbstractFtile {
private static final int SIZE = 20;
private HColor backColor;
private HColor borderColor;
private final CircleStart circle;
private final Swimlane swimlane;
private double shadowing;
public FtileCircleStart(ISkinParam skinParam, HColor backColor, Swimlane swimlane, Style style) {
public FtileCircleStart(ISkinParam skinParam, Swimlane swimlane, Style style) {
super(skinParam);
this.swimlane = swimlane;
this.backColor = backColor;
this.borderColor = HColors.none();
this.shadowing = style.value(PName.Shadowing).asDouble();
this.backColor = style.value(PName.BackGroundColor).asColor(getIHtmlColorSet());
this.borderColor = style.value(PName.LineColor).asColor(getIHtmlColorSet());
this.circle = new CircleStart(skinParam, style, Colors.empty());
}
@Override
@ -92,14 +82,13 @@ public class FtileCircleStart extends AbstractFtile {
}
public void drawU(UGraphic ug) {
final UEllipse circle = UEllipse.build(SIZE, SIZE);
circle.setDeltaShadow(shadowing);
ug.apply(borderColor).apply(backColor.bg()).draw(circle);
circle.drawU(ug);
}
@Override
protected FtileGeometry calculateDimensionFtile(StringBounder stringBounder) {
return new FtileGeometry(SIZE, SIZE, SIZE / 2, 0, SIZE);
final double size = circle.calculateDimension(stringBounder).getWidth();
return new FtileGeometry(size, size, size / 2, 0, size);
}
}

View File

@ -43,38 +43,29 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.color.HColor;
import net.sourceforge.plantuml.klimt.color.HColors;
import net.sourceforge.plantuml.klimt.color.Colors;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.shape.UEllipse;
import net.sourceforge.plantuml.style.ISkinParam;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.svek.image.CircleEnd;
public class FtileCircleStop extends AbstractFtile {
private static final int SIZE = 22;
private HColor borderColor;
private HColor backColor;
private final Swimlane swimlane;
private double shadowing;
private final CircleEnd circle;
@Override
public Collection<Ftile> getMyChildren() {
return Collections.emptyList();
}
public FtileCircleStop(ISkinParam skinParam, HColor backColor, HColor borderColor, Swimlane swimlane, Style style) {
public FtileCircleStop(ISkinParam skinParam, Swimlane swimlane, Style style) {
super(skinParam);
this.borderColor = borderColor;
this.backColor = backColor;
this.swimlane = swimlane;
this.shadowing = style.value(PName.Shadowing).asDouble();
this.backColor = style.value(PName.BackGroundColor).asColor(getIHtmlColorSet());
this.borderColor = style.value(PName.LineColor).asColor(getIHtmlColorSet());
this.circle = new CircleEnd(skinParam, style, Colors.empty());
}
@ -94,18 +85,7 @@ public class FtileCircleStop extends AbstractFtile {
}
public void drawU(UGraphic ug) {
final UEllipse circle = UEllipse.build(SIZE, SIZE);
circle.setDeltaShadow(shadowing);
ug.apply(borderColor).apply(backColor.bg()).draw(circle);
final double delta = 5;
final UEllipse circleSmall = UEllipse.build(SIZE - delta * 2, SIZE - delta * 2);
// if (skinParam().shadowing(null)) {
// circleSmall.setDeltaShadow(3);
// }
final HColor middle = HColors.middle(borderColor, backColor);
ug.apply(middle).apply(borderColor.bg()).apply(new UTranslate(delta, delta)).draw(circleSmall);
circle.drawU(ug);
}
@Override

View File

@ -0,0 +1,6 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/activity-diagram-beta" target="_top">
* Activity Diagram (New Syntax)</a>.
*/
package net.sourceforge.plantuml.activitydiagram3;

View File

@ -0,0 +1,13 @@
# Directory Documentation for `activitydiagram3`
## Description
This package provides classes used to manage [Activity Diagram (New Syntax)](https://plantuml.com/activity-diagram-beta).
## Link
- [Activity Diagram (New Syntax)](https://plantuml.com/activity-diagram-beta)
## Reference
## Credit
## Misc.

View File

@ -1,157 +0,0 @@
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.anim;
import java.awt.geom.AffineTransform;
import java.util.Objects;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
public class AffineTransformation {
// ::remove folder when __HAXE__
// ::remove folder when __CORE__
static private final Pattern rotate = Pattern.compile("rotate\\s+(-?\\d+\\.?\\d*)");
static private final Pattern shear = Pattern.compile("shear\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)");
static private final Pattern translate = Pattern.compile("translate\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)");
static private final Pattern scale = Pattern.compile("scale\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)");
static private final Pattern color = Pattern.compile("color\\s+.*");
private final AffineTransform affineTransform;
private XDimension2D dimension;
private AffineTransformation(AffineTransform affineTransform) {
this.affineTransform = Objects.requireNonNull(affineTransform);
}
private AffineTransformation compose(AffineTransformation other) {
final AffineTransform tmp = new AffineTransform(this.affineTransform);
tmp.concatenate(other.affineTransform);
return new AffineTransformation(tmp);
}
public static AffineTransformation from(AffineTransform affineTransform) {
return new AffineTransformation(affineTransform);
}
static AffineTransformation create(String value) {
final StringTokenizer st = new StringTokenizer(value, "|");
AffineTransformation result = null;
while (st.hasMoreTokens()) {
final String s = st.nextToken();
final AffineTransformation tmp = createSimple(s);
if (tmp != null) {
if (result == null) {
result = tmp;
} else {
result = result.compose(tmp);
}
}
}
return result;
}
private static AffineTransformation createSimple(String value) {
Matcher m = rotate.matcher(StringUtils.trin(value));
if (m.find()) {
final double angle = Double.parseDouble(m.group(1));
return new AffineTransformation(AffineTransform.getRotateInstance(angle * Math.PI / 180.0));
}
m = shear.matcher(value);
if (m.find()) {
final double shx = Double.parseDouble(m.group(1));
final double shy = Double.parseDouble(m.group(2));
return new AffineTransformation(AffineTransform.getShearInstance(shx, shy));
}
m = translate.matcher(value);
if (m.find()) {
final double tx = Double.parseDouble(m.group(1));
final double ty = Double.parseDouble(m.group(2));
return new AffineTransformation(AffineTransform.getTranslateInstance(tx, ty));
}
m = scale.matcher(value);
if (m.find()) {
final double scalex = Double.parseDouble(m.group(1));
final double scaley = Double.parseDouble(m.group(2));
return new AffineTransformation(AffineTransform.getScaleInstance(scalex, scaley));
}
m = color.matcher(value);
if (m.find()) {
return new AffineTransformation(new AffineTransform());
}
return null;
}
public final AffineTransform getAffineTransform() {
return getAffineTransform(dimension);
}
private AffineTransform getAffineTransform(XDimension2D dimension) {
if (dimension == null) {
throw new IllegalStateException();
}
final AffineTransform at = AffineTransform.getTranslateInstance(dimension.getWidth() / 2,
dimension.getHeight() / 2);
at.concatenate(affineTransform);
at.translate(-dimension.getWidth() / 2, -dimension.getHeight() / 2);
return at;
}
public void setDimension(XDimension2D dim) {
this.dimension = dim;
}
public MinMax getMinMax(XDimension2D rect) {
MinMax result = MinMax.getEmpty(false);
final AffineTransform tmp = getAffineTransform(rect);
result = result.addPoint(new XPoint2D(0, 0).transform(tmp));
result = result.addPoint(new XPoint2D(0, rect.getHeight()).transform(tmp));
result = result.addPoint(new XPoint2D(rect.getWidth(), 0).transform(tmp));
result = result.addPoint(new XPoint2D(rect.getWidth(), rect.getHeight()).transform(tmp));
return result;
}
}

View File

@ -1,99 +0,0 @@
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.anim;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import net.sourceforge.plantuml.klimt.geom.MinMax;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
public class Animation {
private final List<AffineTransformation> all;
private Animation(List<AffineTransformation> all) {
if (all.size() == 0) {
throw new IllegalArgumentException();
}
this.all = all;
}
public static Animation singleton(AffineTransformation affineTransformation) {
if (affineTransformation == null) {
return null;
}
return new Animation(Collections.singletonList(affineTransformation));
}
public static Animation create(List<String> descriptions) {
final List<AffineTransformation> all = new ArrayList<>();
for (String s : descriptions) {
final AffineTransformation tmp = AffineTransformation.create(s);
if (tmp != null) {
all.add(tmp);
}
}
return new Animation(all);
}
public Collection<AffineTransformation> getAll() {
return Collections.unmodifiableCollection(all);
}
public void setDimension(XDimension2D dim) {
for (AffineTransformation affineTransform : all) {
affineTransform.setDimension(dim);
}
}
public AffineTransformation getFirst() {
return all.get(0);
}
public MinMax getMinMax(XDimension2D dim) {
MinMax result = MinMax.getEmpty(false);
for (AffineTransformation affineTransform : all) {
final MinMax m = affineTransform.getMinMax(dim);
result = result.addMinMax(m);
}
return result;
}
}

View File

@ -1,71 +0,0 @@
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.anim;
public class AnimationScript {
// private final ScriptEngine engine;
public AnimationScript() {
// final ScriptEngineManager manager = new ScriptEngineManager();
// engine = manager.getEngineByName("js");
// ScriptEngineManager manager = new ScriptEngineManager();
// List<ScriptEngineFactory> factories = manager.getEngineFactories();
// for (ScriptEngineFactory factory : factories) {
// System.out.println("Name : " + factory.getEngineName());
// System.out.println("Version : " + factory.getEngineVersion());
// System.out.println("Language name : " + factory.getLanguageName());
// System.out.println("Language version : " + factory.getLanguageVersion());
// System.out.println("Extensions : " + factory.getExtensions());
// System.out.println("Mime types : " + factory.getMimeTypes());
// System.out.println("Names : " + factory.getNames());
//
// }
}
public String eval(String line) {
throw new UnsupportedOperationException();
// final ScriptContext context = engine.getContext();
// final StringWriter sw = new StringWriter();
// context.setWriter(new PrintWriter(sw));
// engine.eval(line, context);
// final String result = sw.toString();
// return result;
}
}

View File

@ -0,0 +1,13 @@
package net.sourceforge.plantuml.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE })
public @interface DeadCode {
String comment() default "";
}

View File

@ -0,0 +1,5 @@
/**
* Provides classes used to manage Java User Annotation on PlantUML.
*
*/
package net.sourceforge.plantuml.annotation;

View File

@ -0,0 +1,6 @@
# Directory Documentation for `annotation`
## Description
This package provides classes used to manage Java User Annotation on PlantUML.
Currently use to identify 'DeadCode' with the `@DeadCode` Annotation.

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/ant-task)" target="_top">
* PlantUML Ant task</a>.
*
*/
package net.sourceforge.plantuml.ant;

View File

@ -0,0 +1,11 @@
# Directory Documentation for `ant`
## Description
This package provides classes used to manage [PlantUML Ant task](https://plantuml.com/ant-task).
## Link
- [PlantUML Ant task](https://plantuml.com/ant-task)
## Reference
- [Apache Ant](https://ant.apache.org)
- [Apache Ant _(on Wikipedia)_](https://en.wikipedia.org/wiki/Apache_Ant)

View File

@ -0,0 +1,28 @@
/**
* Provides classes used to manage the Password-Hashing Function nammed
* <a href="https://github.com/andreas1327250/argon2-java" target="_top">
* Argon2</a>.
*
* <p>
* The code is taken from:
* <ul>
* <li><a href="https://github.com/andreas1327250/argon2-java" target="_top">
* Andreas1327250/Argon2-java</a></li>
* <li><a href="https://github.com/alphazero/Blake2b/" target="_top">
* Alphazero/Blake2b/</a></li>
* </ul>
* </p>
* <p>
* <i>Ref.</i>:
* <ul>
* <li><a href="https://github.com/P-H-C/phc-winner-argon2" target="_top">
* P-H-C/PHC-winner-argon2</a></li>
* <li><a href="https://www.password-hashing.net" target="_top">
* Password Hashing Competition (PHC)</a></li>
* </ul>
* </p>
*
* @see net.sourceforge.plantuml.argon2.blake2
*
*/
package net.sourceforge.plantuml.argon2;

View File

@ -0,0 +1,22 @@
# Directory Documentation for `argon2`
## Description
This package provides classes used to manage the password-hashing function nammed [Argon2](https://github.com/andreas1327250/argon2-java).
## Link
- :octocat: [Andreas1327250/Argon2-java](https://github.com/andreas1327250/argon2-java)
## Reference
- [Argon2 _(on Wikipedia)_](https://en.wikipedia.org/wiki/Argon2)
- [RFC 9106 (Argon2)](https://datatracker.ietf.org/doc/html/rfc9106)
- :octocat: [P-H-C/PHC-winner-argon2](https://github.com/P-H-C/phc-winner-argon2)
- [Password Hashing Competition (PHC)](https://www.password-hashing.net)
- [BLAKE2](https://www.blake2.net)
- [RFC 7693 (BLAKE2)](https://datatracker.ietf.org/doc/html/rfc7693)
## Credit
- :octocat: [Andreas1327250/Argon2-java](https://github.com/andreas1327250/argon2-java)
- :octocat: [Alphazero/Blake2b](https://github.com/alphazero/Blake2b/)
## Misc.

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/ascii-art" target="_top">
* ASCII Art output format</a>.
*
*/
package net.sourceforge.plantuml.asciiart;

View File

@ -0,0 +1,11 @@
# Directory Documentation for `asciiart`
## Description
This package provides classes used to export diagram to an [ASCII Art](https://plantuml.com/ascii-art) output format.
## Link
- [ASCII Art Output Format](https://plantuml.com/ascii-art)
- [ASCII Art _(on Wikipedia)_](https://en.wikipedia.org/wiki/ASCII_art)
## Reference

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="http://alphadoc.plantuml.com/doc/markdown/en/board-diagram" target="_top">
* Board Diagram</a>.
*
*/
package net.sourceforge.plantuml.board;

View File

@ -0,0 +1,11 @@
# Directory Documentation for `board`
## Description
This package provides classes used to manage [PlantUML Board Diagram](http://alphadoc.plantuml.com/doc/markdown/en/board-diagram).
## Link
- [Board Diagram _(on Alpha-doc)_](http://alphadoc.plantuml.com/doc/markdown/en/board-diagram)
## Reference
- [GH-423](https://github.com/plantuml/plantuml/issues/423)

View File

@ -148,7 +148,7 @@ public class BpmElement extends AbstractConnectorPuzzle implements ConnectorPuzz
public TextBlock toTextBlockInternal(ISkinParam skinParam) {
if (type == BpmElementType.START) {
return new FtileCircleStart(skinParam, HColors.BLACK, null, getStyle(skinParam));
return new FtileCircleStart(skinParam, null, getStyle(skinParam));
}
if (type == BpmElementType.MERGE) {
final HColor borderColor = SkinParamUtils.getColor(skinParam, null, ColorParam.activityBorder);

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="http://alphadoc.plantuml.com/doc/markdown/en/bpmn" target="_top">
* BPMN (Business Process Model and Notation) Diagram</a>.
*
*/
package net.sourceforge.plantuml.bpm;

View File

@ -0,0 +1,16 @@
# Directory Documentation for `bpm`
## Description
This package provides classes used to manage [PlantUML BPMN diagram](http://alphadoc.plantuml.com/doc/markdown/en/bpmn).
## Link
- [BPMN Diagram _(on Alpha-doc)_](http://alphadoc.plantuml.com/doc/markdown/en/bpmn)
- [BPMN _(on Wikipedia)_](https://en.wikipedia.org/wiki/Business_Process_Model_and_Notation)
## Reference
- [QA-5647](https://forum.plantuml.net/5647/plans-for-bpmn-support)
## Credit
## Misc.

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/en/command-line#458de91d76a8569c" target="_top">
* Braille output format</a>.
*
*/
package net.sourceforge.plantuml.braille;

View File

@ -0,0 +1,11 @@
# Directory Documentation for `braille`
## Description
This package provides classes used to export diagram to a [Braille](https://plantuml.com/en/command-line#458de91d76a8569c) output format.
## Link
- [PlantUML Braille Output Format](https://plantuml.com/en/command-line#458de91d76a8569c)
## Reference
- [QA-4752](https://forum.plantuml.net/4752/translate-class-diagram-to-braille)

View File

@ -0,0 +1,18 @@
/**
* Provides classes used to manage
* <a href="https://github.com/google/brotli" target="_top">
* Brotli Compression Algorithm</a>.
*
* <p>
* The code is taken from:
* <ul>
* <li><a href="https://github.com/google/brotli" target="_top">
* Google/Brotli</a></li>
* </ul>
* </p>
*
* @see net.sourceforge.plantuml.code.deflate
* @see net.sourceforge.plantuml.zopfli
*
*/
package net.sourceforge.plantuml.brotli;

View File

@ -0,0 +1,18 @@
# Directory Documentation for `brotli`
## Description
This package provides classes used to manage [Brotli Compression Algorithm](https://github.com/google/brotli).
## Link
- :octocat: [Google/Brotli](https://github.com/google/brotli)
## Reference
- [Brotli _(on Wikipedia)_](https://en.wikipedia.org/wiki/Brotli)
- [RFC 7932](https://datatracker.ietf.org/doc/html/rfc7932)
## Credit
- :octocat: [Google/Brotli](https://github.com/google/brotli)
## Misc.
- [Brötchen _(on Wikipedia)_](https://de.wikipedia.org/wiki/Br%C3%B6tchen)
- [Bread roll _(on Wikipedia)_](https://en.wikipedia.org/wiki/Bread_roll)

View File

@ -190,30 +190,36 @@ public class CommandHideShowByGender extends SingleLineCommand2<UmlDiagram> {
} else {
arg1 = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(arg1);
final Quark<Entity> quark = diagram.quarkInContext(true, diagram.cleanId(arg1));
Entity entity = quark.getData();
if (entity == null)
return CommandExecutionResult.error("No such element " + quark.getName());
gender = EntityGenderUtils.byEntityAlone(entity);
}
if (gender != null) {
final boolean empty = arg.get("EMPTY", 0) != null;
final boolean emptyMembers = empty && portion == EntityPortion.MEMBER;
if (empty == true && emptyMembers == false)
gender = EntityGenderUtils.and(gender, emptyByGender(portion));
if (diagram.getCurrentGroup().isRoot() == false)
gender = EntityGenderUtils.and(gender, EntityGenderUtils.byPackage(diagram.getCurrentGroup()));
if (emptyMembers) {
diagram.hideOrShow(EntityGenderUtils.and(gender, emptyByGender(EntityPortion.FIELD)),
EntityPortion.FIELD, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
diagram.hideOrShow(EntityGenderUtils.and(gender, emptyByGender(EntityPortion.METHOD)),
EntityPortion.METHOD, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
if (quark == null) {
// Not sure it could really happens... to be checked
return CommandExecutionResult.error("No such quark " + arg1);
}
if (portion == EntityPortion.METHOD) {
gender = EntityGenderUtils.byClassName(arg1);
} else {
diagram.hideOrShow(gender, portion, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
Entity entity = quark.getData();
if (entity == null)
return CommandExecutionResult.error("No such element " + quark.getName());
gender = EntityGenderUtils.byEntityAlone(entity);
}
}
return CommandExecutionResult.ok();
final boolean empty = arg.get("EMPTY", 0) != null;
final boolean emptyMembers = empty && portion == EntityPortion.MEMBER;
if (empty && !emptyMembers)
gender = EntityGenderUtils.and(gender, emptyByGender(portion));
if (!diagram.getCurrentGroup().isRoot())
gender = EntityGenderUtils.and(gender, EntityGenderUtils.byPackage(diagram.getCurrentGroup()));
if (emptyMembers) {
diagram.hideOrShow(EntityGenderUtils.and(gender, emptyByGender(EntityPortion.FIELD)),
EntityPortion.FIELD, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
diagram.hideOrShow(EntityGenderUtils.and(gender, emptyByGender(EntityPortion.METHOD)),
EntityPortion.METHOD, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
} else {
diagram.hideOrShow(gender, portion, arg.get("COMMAND", 0).equalsIgnoreCase("show"));
}
return CommandExecutionResult.ok();
}
private EntityPortion getEntityPortion(String s) {

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/class-diagram" target="_top">
* Class Diagram</a>.
*
*/
package net.sourceforge.plantuml.classdiagram;

View File

@ -0,0 +1,14 @@
# Directory Documentation for `classdiagram`
## Description
This package provides classes used to manage [PlantUML Class Diagram](https://plantuml.com/class-diagram).
## Link
- [Class Diagram](https://plantuml.com/class-diagram)
## Reference
## Credit
## Misc.

View File

@ -40,6 +40,9 @@ import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import net.sourceforge.plantuml.annotation.DeadCode;
@DeadCode(comment = "try for text diagram compression")
public class Tokens {
// ::remove file when __CORE__

View File

@ -0,0 +1,9 @@
/**
* Provides classes used to manage Coding and Compression.
*
* @see net.sourceforge.plantuml.brotli
* @see net.sourceforge.plantuml.code.deflate
* @see net.sourceforge.plantuml.zopfli
*
*/
package net.sourceforge.plantuml.code;

View File

@ -0,0 +1,19 @@
# Directory Documentation for `code`
## Description
This package provides classes used to manage Coding and Compression.
## Link
- [`brotli`](../brotli/)
- [`code.deflate`](./deflate/)
- [`zopfli`](../zopfli/)
## Reference
- [Simple DEFLATE decompressor](https://www.nayuki.io/page/simple-deflate-decompressor)
- [RFC 1951 (DEFLATE)](https://datatracker.ietf.org/doc/html/rfc1951)
## Credit
- :octocat: [Nayuki/Simple-DEFLATE-decompressor](https://github.com/nayuki/Simple-DEFLATE-decompressor)
## Misc.

View File

@ -1,71 +0,0 @@
/* ========================================================================
* PlantUML : a free UML diagram generator
* ========================================================================
*
* (C) Copyright 2009-2024, Arnaud Roques
*
* Project Info: https://plantuml.com
*
* If you like this project or if you find it useful, you can support us at:
*
* https://plantuml.com/patreon (only 1$ per month!)
* https://plantuml.com/paypal
*
* This file is part of PlantUML.
*
* PlantUML is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PlantUML distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
*
* Original Author: Arnaud Roques
*
*
*/
package net.sourceforge.plantuml.command;
import java.util.Collections;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.regex.IRegex;
import net.sourceforge.plantuml.regex.RegexConcat;
import net.sourceforge.plantuml.regex.RegexLeaf;
import net.sourceforge.plantuml.regex.RegexResult;
import net.sourceforge.plantuml.utils.LineLocation;
public class CommandAffineTransform extends SingleLineCommand2<UmlDiagram> {
public static final CommandAffineTransform ME = new CommandAffineTransform();
private CommandAffineTransform() {
super(getRegexConcat());
}
static IRegex getRegexConcat() {
return RegexConcat.build(CommandAffineTransform.class.getName(), RegexLeaf.start(), //
new RegexLeaf("!transformation"), //
RegexLeaf.spaceOneOrMore(), //
new RegexLeaf("ANIMATION", "([^{}]*)"), RegexLeaf.end()); //
}
@Override
protected CommandExecutionResult executeArg(UmlDiagram diagram, LineLocation location, RegexResult arg) {
final CharSequence value = arg.get("ANIMATION", 0);
// ::comment when __CORE__
diagram.setAnimation(Collections.singletonList(value));
// ::done
return CommandExecutionResult.ok();
}
}

View File

@ -73,8 +73,6 @@ public final class CommonCommands {
cmds.add(CommandScaleMaxWidth.ME);
cmds.add(CommandScaleMaxHeight.ME);
cmds.add(CommandScaleMaxWidthAndHeight.ME);
cmds.add(CommandAffineTransform.ME);
cmds.add(CommandAffineTransformMultiline.ME);
final CommandFactorySprite factorySpriteCommand = new CommandFactorySprite();
cmds.add(factorySpriteCommand.createMultiLine(false));
cmds.add(factorySpriteCommand.createSingleLine());

View File

@ -0,0 +1,9 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/commons" target="_top">
* PlantUML End User Common Commands</a>.
*
* @see net.sourceforge.plantuml.regex
*
*/
package net.sourceforge.plantuml.command;

View File

@ -0,0 +1,14 @@
# Directory Documentation for `command`
## Description
This package provides classes used to manage [PlantUML End User Common Commands](https://plantuml.com/commons).
## Link
- [Common Commands in PlantUML](https://plantuml.com/commons)
## Reference
## Credit
## Misc.

View File

@ -39,7 +39,7 @@ import net.sourceforge.plantuml.utils.StartUtils;
public enum DiagramType {
// ::remove folder when __HAXE__
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, JUNGLE, CUTE, MATH, LATEX, DEFINITION, GANTT, NW,
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, MATH, LATEX, DEFINITION, GANTT, NW,
MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, EBNF, REGEX, FILES, CHEN_EER, UNKNOWN;
static public DiagramType getTypeFromArobaseStart(String s) {
@ -59,11 +59,15 @@ public enum DiagramType {
if (StartUtils.startsWithSymbolAnd("startdot", s))
return DOT;
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or __LGPL__
if (StartUtils.startsWithSymbolAnd("startjcckit", s))
return JCCKIT;
// ::done
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__
if (StartUtils.startsWithSymbolAnd("startditaa", s))
return DITAA;
// ::done
if (StartUtils.startsWithSymbolAnd("startproject", s))
return PROJECT;
@ -77,12 +81,6 @@ public enum DiagramType {
if (StartUtils.startsWithSymbolAnd("startcreole", s))
return CREOLE;
if (StartUtils.startsWithSymbolAnd("starttree", s))
return JUNGLE;
if (StartUtils.startsWithSymbolAnd("startcute", s))
return CUTE;
if (StartUtils.startsWithSymbolAnd("startmath", s))
return MATH;

View File

@ -45,7 +45,6 @@ import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.regex.Matcher2;
import net.sourceforge.plantuml.regex.MyPattern;
import net.sourceforge.plantuml.regex.Pattern2;
import net.sourceforge.plantuml.text.BackSlash;
import net.sourceforge.plantuml.text.StringLocated;
import net.sourceforge.plantuml.utils.LineLocation;
import net.sourceforge.plantuml.utils.StartUtils;

View File

@ -38,7 +38,11 @@ package net.sourceforge.plantuml.cucadiagram;
import net.sourceforge.plantuml.abel.Entity;
import net.sourceforge.plantuml.abel.EntityPortion;
import java.util.List;
public interface PortionShower {
boolean showPortion(EntityPortion portion, Entity entity);
List<String> getVisibleStereotypeLabels(Entity entity);
}

View File

@ -0,0 +1,16 @@
/**
* Provides classes used to manage PlantUML Class-UseCase-Activity (CUCA) Diagram.
*
* <p>
* The PlantUML CUCA Diagrams are:
* <ul>
* <li><a href="https://plantuml.com/class-diagram" target="_top">
* Class Diagram</a>;</li>
* <li><a href="https://plantuml.com/use-case-diagram" target="_top">
* Use Case Diagram</a>;</li>
* <li><a href="https://plantuml.com/activity-diagram-legacy" target="_top">
* Activity Diagram (legacy)</a>.</li>
* </ul>
* </p>
*/
package net.sourceforge.plantuml.cucadiagram;

View File

@ -0,0 +1,8 @@
# Directory Documentation for `cucadiagram`
## Description
This package provides classes used to manage PlantUML Class-UseCase-Activity (CUCA) Diagram:
- [Class Diagram](https://plantuml.com/class-diagram)
- [Use Case Diagram](https://plantuml.com/use-case-diagram)
- [Activity Diagram (legacy)](https://plantuml.com/activity-diagram-legacy)

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/dedication" target="_top">
* Dedication</a>.
*
*/
package net.sourceforge.plantuml.dedication;

View File

@ -0,0 +1,13 @@
# Directory Documentation for `dedication`
## Description
This package provides classes used to manage [PlantUML Dedication](https://plantuml.com/dedication).
## Link
- [Dedication](https://plantuml.com/dedication)
## Reference
## Credit
## Misc.

View File

@ -0,0 +1,7 @@
/**
* Provides classes used to manage
* <a href="https://plantuml.com/en/sources#dd263f8f99d9d776" target="_top">
* Definition Diagram</a>.
*
*/
package net.sourceforge.plantuml.definition;

Some files were not shown because too many files have changed in this diff Show More