diff --git a/.gitignore b/.gitignore
index dab32401..f85302e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,15 @@
-.DS_Store
-languages.dat
+.rosetta/
lib_dojo/
lib_highlight/
-*.tar.gz
+output/
vendor/
-composer.lock
-test/**/*.js
+
+.DS_Store
.php_cs.cache
.php-cs-fixer.cache
+*.tar.gz
+composer.lock
+languages.dat
+test/**/*.js
+
+!translator/composer.lock
diff --git a/demo/compare.php b/demo/compare.php
index 991198ee..c6b614c4 100644
--- a/demo/compare.php
+++ b/demo/compare.php
@@ -83,7 +83,7 @@ function getLanguageDemo($lang)
highlight.php vs highlight.js Comparison
-
+
+
+
diff --git a/test/Highlight/markup/xml/unquoted-attributes.expect.txt b/test/Highlight/markup/xml/unquoted-attributes.expect.txt
index 621a51f6..98d69e8a 100644
--- a/test/Highlight/markup/xml/unquoted-attributes.expect.txt
+++ b/test/Highlight/markup/xml/unquoted-attributes.expect.txt
@@ -1,9 +1,9 @@
-<img src="/pics/foo.jpg">
-<img src='/pics/foo.jpg'>
+<img src="/pics/foo.jpg">
+<img src='/pics/foo.jpg'>
<img src=/pics/foo.jpg>
<img src=/pics/>
<img src=/pics />
-<img alt=''/>
+<img alt=''/>
<img alt/>
-<img alt=''>
+<img alt=''>
<img alt>
diff --git a/test/Highlight/markup/xquery/computed_inbuilt.expect.txt b/test/Highlight/markup/xquery/computed_inbuilt.expect.txt
index a902c95d..a6633178 100644
--- a/test/Highlight/markup/xquery/computed_inbuilt.expect.txt
+++ b/test/Highlight/markup/xquery/computed_inbuilt.expect.txt
@@ -1,9 +1,9 @@
-xquery version "3.1";
+xquery version "3.1";
let $root := element {fn:node-name($e)}
{$e/@*, 2 * fn:data($e)}
for $node in root($root)
return
- element root { root ($node)/text(), attribute root {'root'},
-element not-root{attribute type{"root"}, root($root)}
+ element root { root ($node)/text(), attribute root {'root'},
+element not-root{attribute type{"root"}, root($root)}
}
diff --git a/test/Highlight/markup/xquery/direct_method.expect.txt b/test/Highlight/markup/xquery/direct_method.expect.txt
index 34b756fd..7aa6503e 100644
--- a/test/Highlight/markup/xquery/direct_method.expect.txt
+++ b/test/Highlight/markup/xquery/direct_method.expect.txt
@@ -1,12 +1,12 @@
-xquery version "3.1";
-let $var := <root n="x1">"rooting" out 1 or 2 root causes</root>
+xquery version "3.1";
+let $var := <root n="x1">"rooting" out 1 or 2 root causes</root>
return
- <result name="test">
- disable highlight for a name such as root {
+ <result name="test">
+ disable highlight for a name such as root {
for $name in $var
return
$name as xs:string
- }
+ }
return to unhighlighted order of things.
- <test type="{$name}">"rooting" out root causes</test>
+ <test type="{$name}">"rooting" out root causes</test>
</result>
diff --git a/test/Highlight/markup/xquery/function_body.expect.txt b/test/Highlight/markup/xquery/function_body.expect.txt
index a8eb56b6..c929d936 100644
--- a/test/Highlight/markup/xquery/function_body.expect.txt
+++ b/test/Highlight/markup/xquery/function_body.expect.txt
@@ -2,10 +2,10 @@
for $n in $node
return
element div { switch($n)
- case 'abc' return 'OK'
+ case 'abc' return 'OK'
default return 2
}
};
for $x in 1 to 3
return
- local:test(<test>abc</test>)
+ local:test(<test>abc</test>)
diff --git a/test/Highlight/markup/xquery/prolog_declarations.expect.txt b/test/Highlight/markup/xquery/prolog_declarations.expect.txt
index 08f101c7..b98cd127 100644
--- a/test/Highlight/markup/xquery/prolog_declarations.expect.txt
+++ b/test/Highlight/markup/xquery/prolog_declarations.expect.txt
@@ -1,22 +1,22 @@
-xquery version "3.1";
+xquery version "3.1";
-module namespace app="http://none";
+module namespace app="http://none";
-import module namespace config="http://config" at "config.xqm";
+import module namespace config="http://config" at "config.xqm";
declare copy-namespaces no-preserve, inherit;
declare %private variable $app:maxItems := 12;
-declare context item := doc("catalog.xml");
+declare context item := doc("catalog.xml");
declare %templates:wrap-all function app:helloworld($node as node(), $model as map(*), $name as xs:string?) {
if ($name) then
- <p>Hello {$name}!</p>
+ <p>Hello {$name}!</p>
else
()
};
diff --git a/test/Highlight/markup/yaml/inline.expect.txt b/test/Highlight/markup/yaml/inline.expect.txt
new file mode 100644
index 00000000..d12626f0
--- /dev/null
+++ b/test/Highlight/markup/yaml/inline.expect.txt
@@ -0,0 +1,3 @@
+foo: [bar, bar2, [1, 2], 3]
+foo: {bar: [1, 2], baz: {inside: 3}}
+foo: ba{}r,ba[]z
diff --git a/test/Highlight/markup/yaml/inline.txt b/test/Highlight/markup/yaml/inline.txt
new file mode 100644
index 00000000..8dfa15b2
--- /dev/null
+++ b/test/Highlight/markup/yaml/inline.txt
@@ -0,0 +1,3 @@
+foo: [bar, bar2, [1, 2], 3]
+foo: {bar: [1, 2], baz: {inside: 3}}
+foo: ba{}r,ba[]z
diff --git a/test/Highlight/markup/yaml/keys.expect.txt b/test/Highlight/markup/yaml/keys.expect.txt
index e5fb704e..4d996f58 100644
--- a/test/Highlight/markup/yaml/keys.expect.txt
+++ b/test/Highlight/markup/yaml/keys.expect.txt
@@ -7,11 +7,11 @@
some key:
another key: value
-"some key":
- "another key": value
+"some key":
+ "another key": value
-'some key':
- 'another key': value
+'some key':
+ 'another key': value
some-key:
another-key: value
diff --git a/test/Highlight/markup/yaml/numbers.expect.txt b/test/Highlight/markup/yaml/numbers.expect.txt
index 969ba530..2454a1fc 100644
--- a/test/Highlight/markup/yaml/numbers.expect.txt
+++ b/test/Highlight/markup/yaml/numbers.expect.txt
@@ -3,3 +3,8 @@
hex: 0x999fff
numkey999: 1234
exp: -2.3e-5
+canonical: 2001-12-15T02:59:43.1Z
+iso8601: 2001-12-14t21:59:43.10-05:00
+space: 2001-12-14 21:59:43.10 -5
+nozone: 2001-12-15 2:59:43.10
+date: 2002-12-14
diff --git a/test/Highlight/markup/yaml/numbers.txt b/test/Highlight/markup/yaml/numbers.txt
index 7b6c10e2..7d39a8ea 100644
--- a/test/Highlight/markup/yaml/numbers.txt
+++ b/test/Highlight/markup/yaml/numbers.txt
@@ -3,3 +3,8 @@ not_hex: 999fff
hex: 0x999fff
numkey999: 1234
exp: -2.3e-5
+canonical: 2001-12-15T02:59:43.1Z
+iso8601: 2001-12-14t21:59:43.10-05:00
+space: 2001-12-14 21:59:43.10 -5
+nozone: 2001-12-15 2:59:43.10
+date: 2002-12-14
diff --git a/test/Highlight/markup/yaml/string.expect.txt b/test/Highlight/markup/yaml/string.expect.txt
index 4980e5c9..84899f23 100644
--- a/test/Highlight/markup/yaml/string.expect.txt
+++ b/test/Highlight/markup/yaml/string.expect.txt
@@ -1,6 +1,6 @@
key: value
-key: 'some value'
-key: "some value"
+key: 'some value'
+key: "some value"
key: |
multi-string
value
diff --git a/test/Highlight/markup/yaml/tag.expect.txt b/test/Highlight/markup/yaml/tag.expect.txt
index dbc5645d..d777a9b7 100644
--- a/test/Highlight/markup/yaml/tag.expect.txt
+++ b/test/Highlight/markup/yaml/tag.expect.txt
@@ -1,4 +1,12 @@
key: !!builtintagname test
key: !localtagname test
-key: "!notatag"
-key: '!!notatageither'
+key: "!notatag"
+key: '!!notatageither'
+key: !!python/dict test
+key: !!python/name:module.name test
+key: !foo2.bar test
+key: !(foo.bar?):tag test
+key: !named!tag test
+
+--- !<tag:clarkevans.com,2002:invoice>
+invoice: 34843
diff --git a/test/Highlight/markup/yaml/tag.txt b/test/Highlight/markup/yaml/tag.txt
index 35f36154..20ee84a7 100644
--- a/test/Highlight/markup/yaml/tag.txt
+++ b/test/Highlight/markup/yaml/tag.txt
@@ -2,3 +2,11 @@ key: !!builtintagname test
key: !localtagname test
key: "!notatag"
key: '!!notatageither'
+key: !!python/dict test
+key: !!python/name:module.name test
+key: !foo2.bar test
+key: !(foo.bar?):tag test
+key: !named!tag test
+
+--- !
+invoice: 34843
diff --git a/test/Highlight/markup/zephir/default.expect.txt b/test/Highlight/markup/zephir/default.expect.txt
new file mode 100644
index 00000000..afd8b2e3
--- /dev/null
+++ b/test/Highlight/markup/zephir/default.expect.txt
@@ -0,0 +1,55 @@
+function testBefore(<Test> a, var b = 5, int c = 10)
+{
+ a->method1();
+
+ return b + c;
+}
+
+namespace Test;
+
+use RuntimeException as RE;
+
+
+class Test extends CustomClass implements TestInterface
+{
+ const C1 = null;
+
+
+ const className = __CLASS__;
+
+ public function method1()
+ {
+ int a = 1, b = 2;
+ return a + b;
+ }
+
+
+ public fn method2() -> <Test>
+ {
+ call_user_func(function() { echo "hello"; });
+
+
+ [1, 2, 3, 4, 5]->walk(
+ function(int! x) {
+ return x * x;
+ }
+ );
+
+ [1, 2, 3, 4, 5]->walk(
+ function(_, int key) { echo key; }
+ );
+
+ array input = [1, 2, 3, 4, 5];
+
+ input->walk(
+ function(_, int key) { echo key; }
+ );
+
+
+ input->map(x => x * x);
+
+ return this;
+ }
+}
diff --git a/test/Highlight/markup/zephir/default.txt b/test/Highlight/markup/zephir/default.txt
new file mode 100644
index 00000000..8142e7f1
--- /dev/null
+++ b/test/Highlight/markup/zephir/default.txt
@@ -0,0 +1,55 @@
+function testBefore( a, var b = 5, int c = 10)
+{
+ a->method1();
+
+ return b + c;
+}
+
+namespace Test;
+
+use RuntimeException as RE;
+
+/**
+ * Example comment
+ */
+class Test extends CustomClass implements TestInterface
+{
+ const C1 = null;
+
+ // Magic constant: http://php.net/manual/ru/language.constants.predefined.php
+ const className = __CLASS__;
+
+ public function method1()
+ {
+ int a = 1, b = 2;
+ return a + b;
+ }
+
+ // See fn is allowed like shortcut
+ public fn method2() ->
+ {
+ call_user_func(function() { echo "hello"; });
+
+
+ [1, 2, 3, 4, 5]->walk(
+ function(int! x) {
+ return x * x;
+ }
+ );
+
+ [1, 2, 3, 4, 5]->walk(
+ function(_, int key) { echo key; }
+ );
+
+ array input = [1, 2, 3, 4, 5];
+
+ input->walk(
+ function(_, int key) { echo key; }
+ );
+
+
+ input->map(x => x * x);
+
+ return this;
+ }
+}
diff --git a/translator/composer.json b/translator/composer.json
new file mode 100644
index 00000000..62c7875f
--- /dev/null
+++ b/translator/composer.json
@@ -0,0 +1,17 @@
+{
+ "require": {
+ "php": ">=8.1",
+ "allejo/rosetta-php-script": "^0.0.0",
+ "nikic/php-parser": "^4.14"
+ },
+ "autoload": {
+ "psr-4": {
+ "Highlight\\Translator\\": "src/"
+ }
+ },
+ "scripts": {
+ "translate": [
+ "rosetta translate -c rosetta-config.php lib_highlight/build/lib/languages/ output/"
+ ]
+ }
+}
diff --git a/translator/composer.lock b/translator/composer.lock
new file mode 100644
index 00000000..6ff69012
--- /dev/null
+++ b/translator/composer.lock
@@ -0,0 +1,1364 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "038886feefb0bdca9397444803e0995d",
+ "packages": [
+ {
+ "name": "allejo/rosetta-php-script",
+ "version": "0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/allejo/Rosetta-PhpScript.git",
+ "reference": "b91bedd05d0185192698c13eb4880c8787aba40d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/allejo/Rosetta-PhpScript/releases/download/v0.0.0/rosetta-phpscript-v0.0.0.zip",
+ "reference": "v0.0.0"
+ },
+ "require": {
+ "nikic/php-parser": "^4.13",
+ "php": ">=8.1",
+ "symfony/console": "^5.4",
+ "symfony/event-dispatcher": "^5.4",
+ "symfony/finder": "^5.4",
+ "symfony/process": "^5.4"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.5",
+ "phpunit/phpunit": "^9.5.20",
+ "roave/security-advisories": "dev-latest"
+ },
+ "bin": [
+ "bin/rosetta"
+ ],
+ "type": "application",
+ "autoload": {
+ "psr-4": {
+ "allejo\\Rosetta\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vladimir \"allejo\" Jimenez",
+ "email": "me@allejo.io"
+ }
+ ],
+ "description": "A library for translating JavaScript into PHP",
+ "support": {
+ "issues": "https://github.com/allejo/Rosetta-PhpScript/issues",
+ "source": "https://github.com/allejo/Rosetta-PhpScript/tree/v0.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.buymeacoffee.com/allejo",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/allejo",
+ "type": "github"
+ },
+ {
+ "url": "https://ko-fi.com/allejo",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2023-05-16T05:10:00+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.15.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290",
+ "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4"
+ },
+ "time": "2023-03-05T19:49:14+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.23",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "90f21e27d0d88ce38720556dd164d4a1e4c3934c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/90f21e27d0d88ce38720556dd164d4a1e4c3934c",
+ "reference": "90f21e27d0d88ce38720556dd164d4a1e4c3934c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/string": "^5.1|^6.0"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+ "symfony/lock": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.23"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-04-24T18:47:29+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
+ "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-01T10:25:55+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v5.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1df20e45d56da29a4b1d8259dd6e950acbf1b13f",
+ "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/event-dispatcher-contracts": "^2|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.22"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-17T11:31:58+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd",
+ "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/event-dispatcher": "^1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-01T10:32:47+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.21",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/078e9a5e1871fcfe6a5ce421b539344c21afef19",
+ "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.21"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-02-16T09:33:00+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
+ "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.4.23",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "4b842fc4b61609e0a155a114082bd94e31e98287"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/4b842fc4b61609e0a155a114082bd94e31e98287",
+ "reference": "4b842fc4b61609e0a155a114082bd94e31e98287",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v5.4.23"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-04-18T13:50:24+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "a8c9cedf55f314f3a186041d19537303766df09a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a",
+ "reference": "a8c9cedf55f314f3a186041d19537303766df09a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "psr/container": "^2.0"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-01T10:32:47+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v6.2.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef",
+ "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.0"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^5.4|^6.0",
+ "symfony/http-client": "^5.4|^6.0",
+ "symfony/intl": "^6.2",
+ "symfony/translation-contracts": "^2.0|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v6.2.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-20T16:06:02+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.1"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.3.0"
+}
diff --git a/tools/get_styles_colors.php b/translator/get_styles_colors.php
similarity index 100%
rename from tools/get_styles_colors.php
rename to translator/get_styles_colors.php
diff --git a/translator/prepare-hljs.sh b/translator/prepare-hljs.sh
new file mode 100755
index 00000000..8e0264b0
--- /dev/null
+++ b/translator/prepare-hljs.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+HLJS_V="11.8.0"
+HLJS_DL="https://api.github.com/repos/highlightjs/highlight.js/tarball/$HLJS_V"
+
+rm -rf lib_highlight/ lib_highlight.tar.gz ../src/Highlight/styles/ 2> /dev/null
+mkdir lib_highlight/ ../src/Highlight/styles/
+
+curl -L $HLJS_DL --output "lib_highlight.tar.gz"
+tar xzf lib_highlight.tar.gz -C lib_highlight --strip-components 1
+
+# Build a full browser build and copy it over to our demo
+cd lib_highlight/
+npm install
+node tools/build -t browser
+cp build/highlight.min.js ../../demo/
+
+# Build highlight.js
+node tools/build.js -t node
+
+# Clean up after ourselves
+cd ..
+rm lib_highlight.tar.gz
+
+# Copy styles from highlight.js to our own styles directory
+rm -r ../src/Highlight/styles/ 2> /dev/null
+mkdir -p ../src/Highlight/styles/
+cp -a lib_highlight/src/styles/ ../src/Highlight/styles/
+php get_styles_colors.php
+
+# Copy unit tests
+rm -r ../test/Highlight/detect/ 2> /dev/null
+rm -r ../test/Highlight/markup/ 2> /dev/null
+
+mkdir -p ../test/Highlight/{detect,markup}/
+cp -a lib_highlight/test/detect/ ../test/Highlight/detect/
+cp -a lib_highlight/test/markup/ ../test/Highlight/markup/
+
+rm ../test/Highlight/{detect,markup}/index.js 2> /dev/null
+
+# Translate Language Definitions
+rm -rf vendor/
+composer install
+composer translate
+rm output/*.js.php
+cp output/* ../src/Highlight/languages/
diff --git a/translator/rosetta-config.php b/translator/rosetta-config.php
new file mode 100644
index 00000000..7e5ed27b
--- /dev/null
+++ b/translator/rosetta-config.php
@@ -0,0 +1,11 @@
+registerTransformer(RegExpLiteral::class);
+
+return $transformer;
diff --git a/translator/src/Transformer/Constructs/RegExpLiteral.php b/translator/src/Transformer/Constructs/RegExpLiteral.php
new file mode 100644
index 00000000..df5fc6d1
--- /dev/null
+++ b/translator/src/Transformer/Constructs/RegExpLiteral.php
@@ -0,0 +1,32 @@
+
+ */
+class RegExpLiteral implements PhpConstructInterface
+{
+ public static function getConstructName(): string
+ {
+ return 'RegExpLiteral';
+ }
+
+ /**
+ * @param BabelRegExpLiteral $babelConstruct
+ */
+ public static function fromBabel($babelConstruct, Transformer $transformer): New_
+ {
+ $reSrc = sprintf('/%s/%s', preg_quote($babelConstruct->pattern, '/'), $babelConstruct->flags);
+
+ return new New_(new Name(RegEx::class), array(new String_($reSrc)));
+ }
+}