From 07d23f6bec3ff7fbeb24e71fe0fe0b48d426530a Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 7 Dec 2023 22:03:11 +0300 Subject: [PATCH 1/2] refactor: remove unused --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 031f9cf..f3fe1a6 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "license": "MIT", "homepage": "https://bitbucket.org/online-mentor/multi-stub#readme", "dependencies": { - "@types/express": "^4.17.21", "bcrypt": "^5.1.0", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", From 2d414c86b441157cff311f9f698f2eaa33ccf334 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 7 Dec 2023 22:56:11 +0300 Subject: [PATCH 2/2] ref: backend --- .../epja-2023-2/pen-plotter/.gitignore | 3 - .../routers/epja-2023-2/pen-plotter/index.js | 29 +- .../routers/epja-2023-2/pen-plotter/paths.js | 5 +- .../profiles/Zeyad Alagamy/ampersand/0.svg | 1 + .../profiles/Zeyad Alagamy/asterisk/0.svg | 1 + .../profiles/Zeyad Alagamy/caret/0.svg | 1 + .../profiles/Zeyad Alagamy/colon/0.svg | 1 + .../profiles/Zeyad Alagamy/comma/0.svg | 1 + .../profiles/Zeyad Alagamy/dollar/0.svg | 1 + .../profiles/Zeyad Alagamy/doubleQuote/0.svg | 1 + .../profiles/Zeyad Alagamy/eight/0.svg | 1 + .../profiles/Zeyad Alagamy/equal/0.svg | 1 + .../Zeyad Alagamy/exclamationMark/0.svg | 1 + .../profiles/Zeyad Alagamy/five/0.svg | 1 + .../profiles/Zeyad Alagamy/four/0.svg | 1 + .../profiles/Zeyad Alagamy/graveAccent/0.svg | 1 + .../profiles/Zeyad Alagamy/greaterThan/0.svg | 1 + .../profiles/Zeyad Alagamy/hash/0.svg | 1 + .../profiles/Zeyad Alagamy/hyphen/0.svg | 1 + .../Zeyad Alagamy/leftCurlyBrace/0.svg | 1 + .../Zeyad Alagamy/leftParenthesis/0.svg | 1 + .../Zeyad Alagamy/leftSquareBracket/0.svg | 1 + .../profiles/Zeyad Alagamy/lessThan/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-a/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-b/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-c/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-d/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-d/1.svg | 1 + .../profiles/Zeyad Alagamy/lower-e/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-f/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-g/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-h/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-i/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-j/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-k/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-l/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-m/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-n/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-o/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-p/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-q/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-r/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-s/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-t/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-u/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-v/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-w/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-x/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-y/0.svg | 1 + .../profiles/Zeyad Alagamy/lower-z/0.svg | 1 + .../profiles/Zeyad Alagamy/nine/0.svg | 1 + .../profiles/Zeyad Alagamy/one/0.svg | 1 + .../profiles/Zeyad Alagamy/percent/0.svg | 1 + .../profiles/Zeyad Alagamy/period/0.svg | 1 + .../profiles/Zeyad Alagamy/pipe/0.svg | 1 + .../profiles/Zeyad Alagamy/plus/0.svg | 1 + .../profiles/Zeyad Alagamy/questionMark/0.svg | 1 + .../Zeyad Alagamy/rightCurlyBrace/0.svg | 1 + .../Zeyad Alagamy/rightParenthesis/0.svg | 1 + .../Zeyad Alagamy/rightSquareBracket/0.svg | 1 + .../profiles/Zeyad Alagamy/seven/0.svg | 1 + .../profiles/Zeyad Alagamy/singleQuote/0.svg | 1 + .../profiles/Zeyad Alagamy/six/0.svg | 1 + .../profiles/Zeyad Alagamy/slash/0.svg | 1 + .../profiles/Zeyad Alagamy/three/0.svg | 1 + .../profiles/Zeyad Alagamy/tilde/0.svg | 1 + .../profiles/Zeyad Alagamy/two/0.svg | 1 + .../profiles/Zeyad Alagamy/underscore/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-;/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-A/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-B/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-C/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-D/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-E/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-F/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-G/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-H/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-I/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-J/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-K/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-L/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-M/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-N/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-O/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-P/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-Q/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-R/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-S/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-T/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-U/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-V/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-W/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-X/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-Y/0.svg | 1 + .../profiles/Zeyad Alagamy/upper-Z/0.svg | 1 + .../profiles/Zeyad Alagamy/zero/0.svg | 1 + .../pen-plotter/routes/sub-routes/svg.js | 40 +- .../pen-plotter/static/generated.svg | 1 + .../epja-2023-2/pen-plotter/static/p.svg | 1 + .../epja-2023-2/pen-plotter/utilities/svg.js | 382 ++++++++++++++---- 100 files changed, 459 insertions(+), 95 deletions(-) delete mode 100644 server/routers/epja-2023-2/pen-plotter/.gitignore create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/ampersand/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/asterisk/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/caret/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/colon/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/comma/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/dollar/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/doubleQuote/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/eight/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/equal/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/exclamationMark/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/five/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/four/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/graveAccent/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/greaterThan/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hash/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hyphen/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftCurlyBrace/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftParenthesis/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftSquareBracket/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lessThan/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-a/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-b/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-c/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/1.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-e/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-f/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-g/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-h/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-i/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-j/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-k/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-l/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-m/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-n/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-o/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-p/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-q/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-r/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-s/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-t/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-u/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-v/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-w/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-x/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-y/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-z/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/nine/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/one/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/percent/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/period/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/pipe/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/plus/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/questionMark/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightCurlyBrace/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightParenthesis/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightSquareBracket/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/seven/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/singleQuote/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/six/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/slash/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/three/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/tilde/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/two/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/underscore/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-;/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-A/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-B/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-C/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-D/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-E/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-F/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-G/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-H/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-I/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-J/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-K/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-L/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-M/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-N/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-O/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-P/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Q/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-R/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-S/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-T/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-U/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-V/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-W/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-X/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Y/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Z/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/zero/0.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/static/generated.svg create mode 100644 server/routers/epja-2023-2/pen-plotter/static/p.svg diff --git a/server/routers/epja-2023-2/pen-plotter/.gitignore b/server/routers/epja-2023-2/pen-plotter/.gitignore deleted file mode 100644 index 6405610..0000000 --- a/server/routers/epja-2023-2/pen-plotter/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist/ -static/ -profiles/ diff --git a/server/routers/epja-2023-2/pen-plotter/index.js b/server/routers/epja-2023-2/pen-plotter/index.js index 4528f8d..818d4cd 100644 --- a/server/routers/epja-2023-2/pen-plotter/index.js +++ b/server/routers/epja-2023-2/pen-plotter/index.js @@ -2,31 +2,24 @@ const express = require('express') const router = express.Router() const fs = require("fs"); const path = require("path"); +const { BASE_PATH } = require("./paths"); + +router.use("/profiles", express.static(path.join(BASE_PATH, "/profiles"))); +router.use("/static", express.static(path.join(BASE_PATH, "/static"))); + +router.use('/api', require('./routes/api').default) -const BASE_PATH = __dirname; -const STATIC_PATH = `${BASE_PATH}/static`; -// Serve static files -router.use(express.static(path.join(__dirname, './assets/'))) // Add the required directories router.use((req, res, next) => { - const directories = ['/static', '/profiles'] + const directories = ["/static", "/profiles"]; directories.forEach((dir) => { if (!fs.existsSync(BASE_PATH + dir)) { - fs.mkdirSync(BASE_PATH + dir) + fs.mkdirSync(BASE_PATH + dir); } - }) - next() -}) -// Serve Static generated SVGs -router.get('/static/:name', async (req, res, next) => { - const fileName = req.params.name - const filePath = `${STATIC_PATH}/${fileName}` + }); + next(); +}); - const file = await fs.readFileSync(filePath) - res.setHeader('Content-Type', 'image/svg+xml') - res.send(file) -}) -router.use('/api', require('./routes/api').default) router.get('/info', (req, res) => { res.send('Pen-Plotter backend') diff --git a/server/routers/epja-2023-2/pen-plotter/paths.js b/server/routers/epja-2023-2/pen-plotter/paths.js index 799383d..0d3b9c1 100644 --- a/server/routers/epja-2023-2/pen-plotter/paths.js +++ b/server/routers/epja-2023-2/pen-plotter/paths.js @@ -1,9 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.STATIC_PATH = exports.PROFILES_PATH = exports.BASE_PATH = void 0; +const path = require("path"); const BASE_PATH = __dirname; exports.BASE_PATH = BASE_PATH; -const PROFILES_PATH = `${BASE_PATH}/profiles`; +const PROFILES_PATH = path.join(BASE_PATH, "profiles"); exports.PROFILES_PATH = PROFILES_PATH; -const STATIC_PATH = `${BASE_PATH}/static`; +const STATIC_PATH = path.join(BASE_PATH, "static"); exports.STATIC_PATH = STATIC_PATH; diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/ampersand/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/ampersand/0.svg new file mode 100644 index 0000000..804af1d --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/ampersand/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/asterisk/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/asterisk/0.svg new file mode 100644 index 0000000..1aef4e4 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/asterisk/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/caret/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/caret/0.svg new file mode 100644 index 0000000..01984e5 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/caret/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/colon/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/colon/0.svg new file mode 100644 index 0000000..0e76298 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/colon/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/comma/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/comma/0.svg new file mode 100644 index 0000000..8f46883 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/comma/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/dollar/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/dollar/0.svg new file mode 100644 index 0000000..3bbf368 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/dollar/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/doubleQuote/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/doubleQuote/0.svg new file mode 100644 index 0000000..c09abe7 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/doubleQuote/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/eight/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/eight/0.svg new file mode 100644 index 0000000..c196887 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/eight/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/equal/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/equal/0.svg new file mode 100644 index 0000000..812a156 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/equal/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/exclamationMark/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/exclamationMark/0.svg new file mode 100644 index 0000000..307caf3 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/exclamationMark/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/five/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/five/0.svg new file mode 100644 index 0000000..f93f5db --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/five/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/four/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/four/0.svg new file mode 100644 index 0000000..6d79760 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/four/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/graveAccent/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/graveAccent/0.svg new file mode 100644 index 0000000..18c3447 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/graveAccent/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/greaterThan/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/greaterThan/0.svg new file mode 100644 index 0000000..bc2db06 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/greaterThan/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hash/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hash/0.svg new file mode 100644 index 0000000..0044678 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hash/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hyphen/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hyphen/0.svg new file mode 100644 index 0000000..de344ba --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/hyphen/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftCurlyBrace/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftCurlyBrace/0.svg new file mode 100644 index 0000000..2f48812 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftCurlyBrace/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftParenthesis/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftParenthesis/0.svg new file mode 100644 index 0000000..23ee9b9 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftParenthesis/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftSquareBracket/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftSquareBracket/0.svg new file mode 100644 index 0000000..83ab730 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/leftSquareBracket/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lessThan/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lessThan/0.svg new file mode 100644 index 0000000..3675acd --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lessThan/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-a/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-a/0.svg new file mode 100644 index 0000000..52bd2d4 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-a/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-b/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-b/0.svg new file mode 100644 index 0000000..bca9d42 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-b/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-c/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-c/0.svg new file mode 100644 index 0000000..ddc0b32 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-c/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/0.svg new file mode 100644 index 0000000..c3615fd --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/1.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/1.svg new file mode 100644 index 0000000..b9ef998 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-d/1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-e/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-e/0.svg new file mode 100644 index 0000000..6dcc6fa --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-e/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-f/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-f/0.svg new file mode 100644 index 0000000..55ead0e --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-f/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-g/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-g/0.svg new file mode 100644 index 0000000..13dee4b --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-g/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-h/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-h/0.svg new file mode 100644 index 0000000..6284383 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-h/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-i/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-i/0.svg new file mode 100644 index 0000000..08fd2ce --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-i/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-j/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-j/0.svg new file mode 100644 index 0000000..7093bb6 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-j/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-k/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-k/0.svg new file mode 100644 index 0000000..8b2b05d --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-k/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-l/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-l/0.svg new file mode 100644 index 0000000..64abc57 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-l/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-m/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-m/0.svg new file mode 100644 index 0000000..520d936 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-m/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-n/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-n/0.svg new file mode 100644 index 0000000..6b57ac9 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-n/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-o/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-o/0.svg new file mode 100644 index 0000000..0d2eae8 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-o/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-p/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-p/0.svg new file mode 100644 index 0000000..fbdc6ee --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-p/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-q/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-q/0.svg new file mode 100644 index 0000000..164928e --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-q/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-r/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-r/0.svg new file mode 100644 index 0000000..6e9c9c3 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-r/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-s/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-s/0.svg new file mode 100644 index 0000000..80d7f51 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-s/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-t/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-t/0.svg new file mode 100644 index 0000000..9303e66 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-t/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-u/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-u/0.svg new file mode 100644 index 0000000..5d3b8a4 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-u/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-v/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-v/0.svg new file mode 100644 index 0000000..187cb8d --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-v/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-w/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-w/0.svg new file mode 100644 index 0000000..57db542 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-w/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-x/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-x/0.svg new file mode 100644 index 0000000..5a22237 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-x/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-y/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-y/0.svg new file mode 100644 index 0000000..b70c10b --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-y/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-z/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-z/0.svg new file mode 100644 index 0000000..05f80ed --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/lower-z/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/nine/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/nine/0.svg new file mode 100644 index 0000000..2315673 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/nine/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/one/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/one/0.svg new file mode 100644 index 0000000..e15a9dd --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/one/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/percent/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/percent/0.svg new file mode 100644 index 0000000..5ce8000 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/percent/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/period/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/period/0.svg new file mode 100644 index 0000000..ecf9b8d --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/period/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/pipe/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/pipe/0.svg new file mode 100644 index 0000000..41e4d3f --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/pipe/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/plus/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/plus/0.svg new file mode 100644 index 0000000..80ad657 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/plus/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/questionMark/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/questionMark/0.svg new file mode 100644 index 0000000..3fc7f82 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/questionMark/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightCurlyBrace/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightCurlyBrace/0.svg new file mode 100644 index 0000000..6434af1 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightCurlyBrace/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightParenthesis/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightParenthesis/0.svg new file mode 100644 index 0000000..ba83970 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightParenthesis/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightSquareBracket/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightSquareBracket/0.svg new file mode 100644 index 0000000..2f25e2c --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/rightSquareBracket/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/seven/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/seven/0.svg new file mode 100644 index 0000000..72ab9d4 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/seven/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/singleQuote/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/singleQuote/0.svg new file mode 100644 index 0000000..f0a1c45 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/singleQuote/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/six/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/six/0.svg new file mode 100644 index 0000000..74355d5 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/six/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/slash/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/slash/0.svg new file mode 100644 index 0000000..dbc9a8d --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/slash/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/three/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/three/0.svg new file mode 100644 index 0000000..8ccc81b --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/three/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/tilde/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/tilde/0.svg new file mode 100644 index 0000000..7fdbee8 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/tilde/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/two/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/two/0.svg new file mode 100644 index 0000000..fe2d6b1 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/two/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/underscore/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/underscore/0.svg new file mode 100644 index 0000000..bc0d142 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/underscore/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-;/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-;/0.svg new file mode 100644 index 0000000..fa655fd --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-;/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-A/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-A/0.svg new file mode 100644 index 0000000..5e4141f --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-A/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-B/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-B/0.svg new file mode 100644 index 0000000..b2e7163 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-B/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-C/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-C/0.svg new file mode 100644 index 0000000..bede826 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-C/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-D/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-D/0.svg new file mode 100644 index 0000000..a5076d1 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-D/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-E/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-E/0.svg new file mode 100644 index 0000000..194f707 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-E/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-F/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-F/0.svg new file mode 100644 index 0000000..3abb2a0 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-F/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-G/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-G/0.svg new file mode 100644 index 0000000..ebd12da --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-G/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-H/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-H/0.svg new file mode 100644 index 0000000..99500b2 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-H/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-I/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-I/0.svg new file mode 100644 index 0000000..efefca0 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-I/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-J/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-J/0.svg new file mode 100644 index 0000000..1e7994b --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-J/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-K/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-K/0.svg new file mode 100644 index 0000000..603e40a --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-K/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-L/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-L/0.svg new file mode 100644 index 0000000..65bbfe0 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-L/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-M/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-M/0.svg new file mode 100644 index 0000000..8f98888 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-M/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-N/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-N/0.svg new file mode 100644 index 0000000..4c8e23c --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-N/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-O/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-O/0.svg new file mode 100644 index 0000000..ec1bc9f --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-O/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-P/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-P/0.svg new file mode 100644 index 0000000..6f8128b --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-P/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Q/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Q/0.svg new file mode 100644 index 0000000..bc06f08 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Q/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-R/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-R/0.svg new file mode 100644 index 0000000..2318690 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-R/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-S/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-S/0.svg new file mode 100644 index 0000000..f29946e --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-S/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-T/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-T/0.svg new file mode 100644 index 0000000..bd4b6d3 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-T/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-U/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-U/0.svg new file mode 100644 index 0000000..b2214cd --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-U/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-V/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-V/0.svg new file mode 100644 index 0000000..b47b79e --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-V/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-W/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-W/0.svg new file mode 100644 index 0000000..6528a37 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-W/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-X/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-X/0.svg new file mode 100644 index 0000000..e305bd1 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-X/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Y/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Y/0.svg new file mode 100644 index 0000000..66d7982 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Y/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Z/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Z/0.svg new file mode 100644 index 0000000..41f9b9e --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/upper-Z/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/zero/0.svg b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/zero/0.svg new file mode 100644 index 0000000..0743639 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/profiles/Zeyad Alagamy/zero/0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/routes/sub-routes/svg.js b/server/routers/epja-2023-2/pen-plotter/routes/sub-routes/svg.js index 3187d03..b93f086 100644 --- a/server/routers/epja-2023-2/pen-plotter/routes/sub-routes/svg.js +++ b/server/routers/epja-2023-2/pen-plotter/routes/sub-routes/svg.js @@ -34,6 +34,11 @@ router.post("/characters", (req, res, next) => __awaiter(void 0, void 0, void 0, yield (0, svg_1.createCharacterDirectory)(userDir, characterName); // Generate a unique filename for the SVG const svgPath = yield (0, svg_1.generateUniqueSVGPath)(`${userDir}/${characterName}`); + if (svgPath === "ERROR_NO_CHARACTER_DIRECTORY") { + return res + .status(404) + .json({ error: "Character directory does not exist" }); + } // Extract the SVG content from the data URL const svgContent = decodeURIComponent(svg.split(",")[1]); // Write the SVG content to a file @@ -87,9 +92,17 @@ router.post("/handwriting", (req, res, next) => __awaiter(void 0, void 0, void 0 .json({ error: `Missing character/s ${totalMissing.join(",")}` }); } // Generate a larger - const path = yield (0, svg_1.generateSvg)(totalPaths, scaleFactor || 1, defects); + const generatSVGOptions = { + paths: totalPaths, + scaleFactor: scaleFactor !== null && scaleFactor !== void 0 ? scaleFactor : 1, + defects: defects, + }; + const { serverFilePath, totalHeight, totalWidth } = yield (0, svg_1.generateSvg)(generatSVGOptions); // Read the SVG files - return res.json({ svgLink: path }); + return res.json({ + svgLink: serverFilePath, + dim: { width: Math.ceil(totalWidth), height: Math.ceil(totalHeight) }, + }); } catch (err) { console.error(err); @@ -108,4 +121,27 @@ router.post("/print", (req, res) => __awaiter(void 0, void 0, void 0, function* return res.status(500).json({ error: e }); } })); +router.get("/random-glyph/:username/:charName", (req, res) => __awaiter(void 0, void 0, void 0, function* () { + var _b, _c; + let { username, charName } = req.params; + if (!username || !charName) { + return res.status(400).json({ error: "Missing username or char" }); + } + try { + // remove the double quotes form the charName + charName = charName === "dot" ? "." : charName; + const validCharName = (0, svg_1.validateName)(charName); + const fullPath = yield (0, svg_1.getRandomEntityPath)(username, validCharName); + const svgContent = yield (0, svg_1.fetchSVGContent)(fullPath); + const { parent } = yield (0, svg_1.parseSVG)(svgContent); + const width = (_b = parseFloat(parent.getAttribute("width"))) !== null && _b !== void 0 ? _b : 0; + const height = (_c = parseFloat(parent.getAttribute("height"))) !== null && _c !== void 0 ? _c : 0; + const warpedSvg = (0, svg_1.warpSvg)(svgContent, width, height); + res.json(warpedSvg); + } + catch (err) { + console.error(err); + res.status(500).json({ error: "Something went wrong!" }); + } +})); exports.default = router; diff --git a/server/routers/epja-2023-2/pen-plotter/static/generated.svg b/server/routers/epja-2023-2/pen-plotter/static/generated.svg new file mode 100644 index 0000000..99921d4 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/static/generated.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/static/p.svg b/server/routers/epja-2023-2/pen-plotter/static/p.svg new file mode 100644 index 0000000..f384190 --- /dev/null +++ b/server/routers/epja-2023-2/pen-plotter/static/p.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/routers/epja-2023-2/pen-plotter/utilities/svg.js b/server/routers/epja-2023-2/pen-plotter/utilities/svg.js index 7bdc1c2..1585ce1 100644 --- a/server/routers/epja-2023-2/pen-plotter/utilities/svg.js +++ b/server/routers/epja-2023-2/pen-plotter/utilities/svg.js @@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.writeSVGToFile = exports.generateUniqueSVGPath = exports.createCharacterDirectory = exports.validateName = exports.numberOfFiles = exports.svgLinePathNames = exports.generateSvg = exports.printSVG = void 0; +exports.parseSVG = exports.fetchSVGContent = exports.warpSvg = exports.getRandomEntityPath = exports.writeSVGToFile = exports.generateUniqueSVGPath = exports.createCharacterDirectory = exports.validateName = exports.numberOfFiles = exports.svgLinePathNames = exports.generateSvg = exports.printSVG = void 0; const fs_1 = __importDefault(require("fs")); const paths_1 = require("../paths"); const jsdom_1 = __importDefault(require("jsdom")); @@ -103,9 +103,9 @@ const isUpperCase = (char) => { * @param charName - The title of the character. * @returns A promise that resolves to a string representing the path to the random entity or empty. */ -const getRandomEntityPath = (userName, charName) => __awaiter(void 0, void 0, void 0, function* () { +const getRandomEntityPath = (username, charName) => __awaiter(void 0, void 0, void 0, function* () { try { - const basePath = `${paths_1.PROFILES_PATH}/${userName}/${charName}`; + const basePath = `${paths_1.PROFILES_PATH}/${username}/${charName}`; const characters = yield fs_1.default.promises.readdir(basePath); const randomIndex = Math.floor(Math.random() * characters.length); return `${basePath}/${characters[randomIndex]}`; @@ -115,6 +115,7 @@ const getRandomEntityPath = (userName, charName) => __awaiter(void 0, void 0, vo return ""; } }); +exports.getRandomEntityPath = getRandomEntityPath; /** * Checks if a given character path contains any special characters. * Special characters include: questionMark, asterisk, slash, backslash, colon, pipe, lessThan, greaterThan, @@ -149,7 +150,16 @@ const isSpecialChar = (charPath) => { "exclamationMark", "tilde", ]; - const specialLocatedBottom = ["underscore", "comma", "period"]; + const specialLocatedBottom = [ + "underscore", + "questionMark", + "slash", + "backslash", + "pipe", + "exclamationMark", + "comma", + "period", + ]; let isSpecial = false; let position = "bottom"; for (const special of specialLocatedTop) { @@ -179,6 +189,193 @@ const isSpecialChar = (charPath) => { } return { isSpecial, position }; }; +const specialWidthGlyphs = (glyphPath) => { + const symbols = { + colon: { + width: 5, + maxWidth: 7, + height: 15, + maxHeight: 20, + }, + lessThan: { + width: 15, + height: 20, + maxWidth: 25, + maxHeight: 30, + }, + greaterThan: { + width: 15, + height: 20, + maxWidth: 25, + maxHeight: 30, + }, + leftParenthesis: { + width: 8, + height: 20, + maxWidth: 16, + maxHeight: 40, + }, + rightParenthesis: { + width: 8, + height: 20, + maxWidth: 16, + maxHeight: 40, + }, + hyphen: { + width: 10, + height: 2, + maxWidth: 20, + maxHeight: 4, + }, + equal: { + width: 10, + height: 5, + maxWidth: 20, + maxHeight: 10, + }, + plus: { + width: 10, + height: 10, + maxWidth: 20, + maxHeight: 20, + }, + leftCurlyBrace: { + width: 12, + height: 25, + maxWidth: 24, + maxHeight: 50, + }, + rightCurlyBrace: { + width: 12, + height: 25, + maxWidth: 24, + maxHeight: 50, + }, + leftSquareBracket: { + width: 8, + height: 20, + maxWidth: 16, + maxHeight: 40, + }, + rightSquareBracket: { + width: 8, + height: 20, + maxWidth: 16, + maxHeight: 40, + }, + exclamationMark: { + width: 6, + height: 30, + maxWidth: 9, + maxHeight: 30, + }, + tilde: { + width: 20, + height: 8, + maxWidth: 30, + maxHeight: 10, + }, + comma: { + width: 5, + height: 10, + maxWidth: 10, + maxHeight: 20, + }, + dot: { + width: 5, + height: 5, + maxWidth: 10, + maxHeight: 10, + }, + questionMark: { + width: 10, + height: 30, + maxWidth: 20, + maxHeight: 40, + }, + underscore: { + width: 10, + height: 2, + maxWidth: 20, + maxHeight: 4, + }, + pipe: { + width: 5, + height: 30, + maxWidth: 10, + maxHeight: 40, + }, + one: { + width: 5, + height: 30, + maxWidth: 10, + maxHeight: 40, + }, + "lower-m": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-q": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-y": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-g": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-p": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-j": { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }, + "lower-i": { + width: 5, + height: 30, + maxWidth: 10, + maxHeight: 40, + }, + "lower-l": { + width: 10, + height: 40, + maxWidth: 10, + maxHeight: 40, + }, + }; + let isSpecialGlyph = false; + let values = { + width: 20, + height: 30, + maxWidth: 30, + maxHeight: 40, + }; + for (const symbol in symbols) { + if (glyphPath.includes(symbol)) { + isSpecialGlyph = true; + values = symbols[symbol]; + break; + } + } + return { isSpecialGlyph, values }; +}; /** * Determines if the given character path should extend below the baseline. * @param charPath The character path to check. @@ -238,14 +435,13 @@ exports.svgLinePathNames = svgLinePathNames; * @returns An object containing the SVG element and its paths. */ const parseSVG = (svg) => { - const dom = new jsdom_1.default.JSDOM(svg); - const svgElement = dom.window.document.querySelector("svg"); - const svgPaths = svgElement === null || svgElement === void 0 ? void 0 : svgElement.querySelectorAll("path"); + const dom = new jsdom_1.default.JSDOM(svg, { contentType: "image/svg+xml" }); + const svgElement = dom.window.document.querySelector("g"); return { parent: svgElement, - paths: svgPaths, }; }; +exports.parseSVG = parseSVG; /** * Returns a random number between the given minimum and maximum values, with an optional percentage range. * @param min The minimum value for the random number. @@ -256,7 +452,6 @@ const parseSVG = (svg) => { const getRandomNumber = (min, max, percentage = 25, scale = 1) => { const howRandom = Math.round((max - min) * (percentage / 100)); const randomNumber = Math.floor(Math.random() * (howRandom + 1)); - // const randomSign = Math.random() < 0.5 ? -1 : 1; return Math.round(min + randomNumber) * scale; }; // Get standard values for the characters @@ -264,18 +459,19 @@ const getStandardValues = (isSpecial, position) => { // Standard values for the characters const standard = { char_width: 20, + char_height: 30, space_width: 10, special_char_located_top_width: 5, special_char_located_middle_width: 15, special_char_located_top_max_width: 10, special_char_located_middle_max_width: 20, special_char_located_bottom_width: 5, - special_char_located_bottom_max_width: 15, + special_char_located_bottom_max_width: 10, special_char_height_top: 10, special_char_height_middle: 20, special_char_height_bottom: 30, max_char_width: 30, - max_char_height: 30, + max_char_height: 40, }; const standerdWidth = isSpecial ? position === "top" @@ -297,7 +493,7 @@ const getStandardValues = (isSpecial, position) => { : position === "middle" ? standard.special_char_height_middle : standard.special_char_height_bottom - : standard.max_char_height; + : standard.char_height; const standerdMaxHeight = isSpecial ? position === "top" ? standard.special_char_height_top @@ -310,11 +506,25 @@ const getStandardValues = (isSpecial, position) => { // Get Random Defects const getRandomDefects = (defects, scaleFactor, charPath = "") => { const { baseline, kerning, letterSize, lineSpacing, indent } = defects; + const { isSpecialGlyph, values } = specialWidthGlyphs(charPath); + if (isSpecialGlyph) { + const { width, height, maxWidth, maxHeight } = values; + const letterSizeWidthRandom = getRandomNumber(width, maxWidth, letterSize, scaleFactor); + const letterSizeRandomHeight = getRandomNumber(height, maxHeight, letterSize, scaleFactor); + return { + indentRandom: 0, + lineSpacingRandom: 0, + kerningDeffects: 0, + baselineOffset: 0, + letterSizeWidthRandom, + letterSizeRandomHeight, + }; + } const { isSpecial, position } = isSpecialChar(charPath); const { standerdWidth, standerdMaxWidth, standerdHeight, standerdMaxHeight } = getStandardValues(isSpecial, position); const indentRandom = getRandomNumber(0, 80, indent, scaleFactor); const lineSpacingRandom = getRandomNumber(0, 30, lineSpacing, scaleFactor); - const kerningDeffects = getRandomNumber(0, 10, kerning, scaleFactor); + const kerningDeffects = getRandomNumber(5, -5, kerning, scaleFactor); const baselineOffset = getRandomNumber(0, 10, baseline, scaleFactor); const letterSizeWidthRandom = getRandomNumber(standerdWidth, standerdMaxWidth, letterSize, scaleFactor); const letterSizeRandomHeight = getRandomNumber(standerdHeight, standerdMaxHeight, letterSize, scaleFactor); @@ -327,6 +537,10 @@ const getRandomDefects = (defects, scaleFactor, charPath = "") => { letterSizeRandomHeight, }; }; +const fetchSVGContent = (path) => { + return fs_1.default.readFileSync(path, "utf-8"); +}; +exports.fetchSVGContent = fetchSVGContent; /** * Assembles a word by processing each character and generating SVG elements. * @@ -341,7 +555,7 @@ const getRandomDefects = (defects, scaleFactor, charPath = "") => { * @returns {Object} - The assembled word elements, the height of the word, and the updated X offset. */ const assembleWord = ({ word, offsetX, offsetY, scaleFactor, indentRandom, defects, }) => { - const space_width = 10 * scaleFactor; + const space_width = 30; let wordElements = []; let wordHeight = 0; if (word.length === 0) { @@ -351,30 +565,31 @@ const assembleWord = ({ word, offsetX, offsetY, scaleFactor, indentRandom, defec offsetX += indentRandom; for (let j = 0; j < word.length; j++) { const char = word[j]; - const { kerningDeffects, baselineOffset } = getRandomDefects(defects, scaleFactor); + const { kerningDeffects } = getRandomDefects(defects, scaleFactor); const { isSpecial, position } = isSpecialChar(char); const { letterSizeWidthRandom, letterSizeRandomHeight } = getRandomDefects(defects, scaleFactor, char); // You need to load the SVG content from the file - const svgFileContent = fs_1.default.readFileSync(char, "utf-8"); + const svgFileContent = fetchSVGContent(char); // Get the width and height of the SVG and its paths children const { parent } = parseSVG(svgFileContent); const width = parent === null || parent === void 0 ? void 0 : parent.getAttribute("width"); const height = parent === null || parent === void 0 ? void 0 : parent.getAttribute("height"); // Scale down the width to the standerd width while keeping the aspect ratio - const widthScale = letterSizeWidthRandom / Number(width); - const heightScale = letterSizeRandomHeight / Number(height); - const scale = Math.min(widthScale, heightScale); + // const widthScale = letterSizeWidthRandom / Number(width); + // const heightScale = letterSizeRandomHeight / Number(height); // Calculate the scaled width and height - const scaledHeight = Number(height) * scale * scaleFactor; - const scaledWidth = Number(width) * scale * scaleFactor; + // const scale = Math.pow( + // Math.min(widthScale, heightScale), + // 1 / scaleFactor + // ); + const scale = scaleFactor; + const scaledWidth = Number(width) * scale; + const scaledHeight = Number(height) * scale; // Change the width and height of the SVG parent === null || parent === void 0 ? void 0 : parent.setAttribute("width", String(scaledWidth)); parent === null || parent === void 0 ? void 0 : parent.setAttribute("height", String(scaledHeight)); - // Add viewBox attribute to scale the paths inside the SVG - parent === null || parent === void 0 ? void 0 : parent.setAttribute("viewBox", `0 0 ${width} ${height}`); - // Change the position of the SVG - parent === null || parent === void 0 ? void 0 : parent.setAttribute("x", offsetX.toString()); - parent === null || parent === void 0 ? void 0 : parent.setAttribute("y", String(offsetY + baselineOffset)); + // Add translation and scale to the SVG content + parent === null || parent === void 0 ? void 0 : parent.setAttribute("transform", `translate(${offsetX}, ${offsetY}) scale(${scale})`); // Add the SVG content to the SVG content variable offsetX += scaledWidth + kerningDeffects; wordElements.push({ @@ -383,38 +598,8 @@ const assembleWord = ({ word, offsetX, offsetY, scaleFactor, indentRandom, defec position, extendBelowBaseline: extendBelowBaseline(char), }); - wordHeight = Math.max(wordHeight, scaledHeight + baselineOffset); + wordHeight = Math.max(wordHeight, scaledHeight); } - // Align the line elements to the bottom of the line - let extended = false; - wordElements.forEach((e) => { - const { element, isSpecial, position, extendBelowBaseline } = e; - const elementHeight = parseInt(element.getAttribute("height")); - const lineYOffset = wordHeight - elementHeight; - if (isSpecial) { - if (position === "top") { - element.setAttribute("y", String(offsetY)); - } - else if (position === "middle") { - element.setAttribute("y", String(offsetY + lineYOffset / 2)); - } - else { - element.setAttribute("y", String(offsetY + lineYOffset)); - } - } - else { - if (extendBelowBaseline) { - element.setAttribute("y", String(offsetY + lineYOffset + wordHeight / 2)); - extended = true; - } - else { - element.setAttribute("y", String(offsetY + lineYOffset)); - } - } - }); - // Fix the line height - if (extended) - wordHeight += wordHeight / 2; // Add a space between words offsetX += space_width * scaleFactor; } @@ -437,6 +622,12 @@ const assembleLine = ({ defects, scaleFactor, line, offsetY, }) => { let lineHeight = 0; let offsetX = indentRandom; let lineElements = []; + // Detect the empty line + const lineArray = line.flat(); + if (lineArray.length === 0) { + offsetY += 50 * scaleFactor + lineSpacingRandom; + return { lineContent, offsetY, offsetX }; + } for (let i = 0; i < line.length; i++) { const word = line[i]; const { wordElements, wordHeight, offsetX: newOffsetX, } = assembleWord({ @@ -452,14 +643,70 @@ const assembleLine = ({ defects, scaleFactor, line, offsetY, }) => { lineHeight = Math.max(lineHeight, wordHeight); lineElements = lineElements.concat(wordElements); } - // Update the offset - offsetY += lineHeight + lineSpacingRandom; + // Align the line elements to the bottom of the line + const aligned = verticalAlign(lineElements, lineHeight, offsetY, scaleFactor, defects); + [lineElements, lineHeight] = [aligned.lineElements, aligned.lineHeight]; + offsetY += lineHeight || 10 * scaleFactor + lineSpacingRandom; // Append the line elements to the SVG content lineElements.forEach((e) => { lineContent += e.element.outerHTML; }); return { lineContent, offsetY, offsetX }; }; +const verticalAlign = (lineElements, lineHeight, offsetY, scaleFactor, defects) => { + // Align the line elements to the bottom of the line + let extended = false; + const extendValue = 10 * scaleFactor; + lineElements.forEach((e) => { + const { element, isSpecial, position, extendBelowBaseline } = e; + // Match all numbers in style attribute + const style = element.getAttribute("transform"); + const regex = /[-+]?[0-9]*\.?[0-9]+/g; + const { baselineOffset } = getRandomDefects(defects, scaleFactor); + const [x, y, s] = style.match(regex); + const elementHeight = parseInt(element.getAttribute("height")); + const lineYOffset = Math.abs(lineHeight - elementHeight); + const elementOffset = Math.abs(lineHeight - elementHeight); + if (isSpecial) { + if (position === "top") { + element.setAttribute("transform", `translate(${x}, ${offsetY}) scale(${s})`); + } + else if (position === "middle") { + element.setAttribute("transform", `translate(${x}, ${Number(y) + lineYOffset / 2}) scale(${s})`); + } + else { + element.setAttribute("transform", `translate(${x}, ${Number(y) + lineYOffset}) scale(${s})`); + } + } + else { + if (extendBelowBaseline) { + element.setAttribute("transform", `translate(${x}, ${Number(y) + lineYOffset + extendValue}) scale(${s})`); + extended = true; + } + else { + element.setAttribute("transform", `translate(${x}, ${Number(y) + elementOffset + baselineOffset}) scale(${s})`); + } + } + }); + // Fix the line height + if (extended) + lineHeight += extendValue; + // Add line margin + lineHeight += 3 * scaleFactor; + return { lineElements, lineHeight }; +}; +const warpSvg = (svg, width, height) => { + // Create empty SVG document + const dom = new jsdom_1.default.JSDOM(); + const svgWrapper = dom.window.document.createElementNS("http://www.w3.org/2000/svg", "svg"); + // Set the SVG width and height + svgWrapper.setAttribute("width", String(width)); + svgWrapper.setAttribute("height", String(height)); + // Add the SVG content to the SVG document + svgWrapper.innerHTML = svg; + return svgWrapper === null || svgWrapper === void 0 ? void 0 : svgWrapper.outerHTML; +}; +exports.warpSvg = warpSvg; /** * Writes the SVG content to a file and returns the server file path. * @param svgContent - The SVG content to be written to the file. @@ -468,6 +715,7 @@ const assembleLine = ({ defects, scaleFactor, line, offsetY, }) => { const writeSVG = (svgContent, totalHeight, totalWidth) => __awaiter(void 0, void 0, void 0, function* () { // wrap the SVG content in an SVG document const outputFile = `${svgContent}`; // Change this to your desired SVG content + // const outputFile = svgFlatten(svgContent).pathify().value(); // Write the SVG content to a file const svgFilePath = `${paths_1.STATIC_PATH}/generated.svg`; // Change this to your desired file path fs_1.default.writeFileSync(svgFilePath, outputFile); @@ -478,14 +726,8 @@ const writeSVG = (svgContent, totalHeight, totalWidth) => __awaiter(void 0, void const serverFilePath = `${basePath}:${port}/static/generated.svg?v=${Date.now()}`; return serverFilePath; }); -/** - * Generates an SVG file based on the provided paths, scale factor, and defects. - * @param paths - A 3D array of file paths representing the characters to be included in the SVG. - * @param scaleFactor - The scale factor to apply to the SVG. Default is 1. - * @param defects - An object containing defect values for line spacing, kerning, letter size, and baseline offset. - * @returns A Promise that resolves to the file path of the generated SVG. - */ -const generateSvg = (paths, scaleFactor = 1, defects) => __awaiter(void 0, void 0, void 0, function* () { +const generateSvg = (options) => __awaiter(void 0, void 0, void 0, function* () { + const { paths, scaleFactor = 1, defects } = options; let svgContent = ""; let offsetY = 0; let totalHeight = 0; @@ -505,7 +747,7 @@ const generateSvg = (paths, scaleFactor = 1, defects) => __awaiter(void 0, void }); // Write the SVG content to a file const serverFilePath = yield writeSVG(svgContent, totalHeight, totalWidth); - return serverFilePath; + return { serverFilePath, totalWidth, totalHeight }; }); exports.generateSvg = generateSvg; /** @@ -518,7 +760,7 @@ const printSVG = (inputPath) => __awaiter(void 0, void 0, void 0, function* () { // Execute the following command : axicli inputPath usin os.system const { execSync } = require("child_process"); try { - const command = `axicli ${inputPath}`; + const command = `axicli "${inputPath}"`; const result = execSync(command, { encoding: "utf-8" }); // Process the result and return an object return { @@ -546,7 +788,7 @@ exports.createCharacterDirectory = createCharacterDirectory; // Function to generate a unique SVG filename const generateUniqueSVGPath = (characterDir) => __awaiter(void 0, void 0, void 0, function* () { const characterLength = yield numberOfFiles(characterDir); - return `${characterDir}/${characterLength + 1}.svg`; + return `${characterDir}/${characterLength}.svg`; }); exports.generateUniqueSVGPath = generateUniqueSVGPath; // Function to write SVG content to a file