From ac2255d24d7dd39ac91fa50d3a7aa71ce0a92188 Mon Sep 17 00:00:00 2001 From: flashwave Date: Tue, 13 Sep 2022 15:13:11 +0200 Subject: [PATCH] Imported into new repository. --- .gitattributes | 5 + .gitignore | 9 + LICENCE | 25 + README.md | 39 + TODO.md | 37 + VERSION | 1 + bench/_init.php | 17 + bench/example.php | 7 + docs/index.rst | 11 + index.php | 24 + phpdoc.xml | 41 ++ phpstan.neon | 6 + phpunit.xml | 27 + src/AString.php | 274 +++++++ src/Autoloader.php | 108 +++ src/Collections/ArrayIterator.php | 37 + src/Collections/IArrayable.php | 10 + src/Colour.php | 17 + src/ColourARGB.php | 26 + src/ColourLegacy.php | 25 + src/ColourRGB.php | 34 + src/Data/BeginTransactionFailedException.php | 11 + src/Data/CommitFailedException.php | 11 + src/Data/ConnectionFailedException.php | 11 + src/Data/DataException.php | 13 + src/Data/DbTools.php | 101 +++ src/Data/DbType.php | 53 ++ src/Data/IDbBackend.php | 35 + src/Data/IDbConnection.php | 49 ++ src/Data/IDbConnectionInfo.php | 13 + src/Data/IDbResult.php | 88 +++ src/Data/IDbStatement.php | 53 ++ src/Data/IDbTransactions.php | 57 ++ src/Data/MariaDB/MariaDBBackend.php | 122 ++++ src/Data/MariaDB/MariaDBCharacterSetInfo.php | 93 +++ src/Data/MariaDB/MariaDBConnection.php | 401 +++++++++++ src/Data/MariaDB/MariaDBConnectionInfo.php | 438 ++++++++++++ src/Data/MariaDB/MariaDBParameter.php | 81 +++ src/Data/MariaDB/MariaDBResult.php | 103 +++ src/Data/MariaDB/MariaDBResultLib.php | 53 ++ src/Data/MariaDB/MariaDBResultNative.php | 40 ++ src/Data/MariaDB/MariaDBStatement.php | 165 +++++ src/Data/MariaDB/MariaDBWarning.php | 95 +++ src/Data/NullDb/NullDbBackend.php | 36 + src/Data/NullDb/NullDbConnection.php | 33 + src/Data/NullDb/NullDbConnectionInfo.php | 13 + src/Data/NullDb/NullDbResult.php | 54 ++ src/Data/NullDb/NullDbStatement.php | 35 + src/Data/QueryExecuteException.php | 11 + src/Data/ReleaseSavePointFailedException.php | 11 + src/Data/RollbackFailedException.php | 11 + src/Data/SQLite/SQLiteBackend.php | 74 ++ src/Data/SQLite/SQLiteConnection.php | 569 +++++++++++++++ src/Data/SQLite/SQLiteConnectionInfo.php | 116 +++ src/Data/SQLite/SQLiteResult.php | 89 +++ src/Data/SQLite/SQLiteStatement.php | 100 +++ src/Data/SavePointFailedException.php | 11 + src/Data/TransactionException.php | 11 + src/DateTime.php | 667 ++++++++++++++++++ src/Environment.php | 340 +++++++++ src/Exceptions.php | 79 +++ src/Http/Content/BencodedContent.php | 48 ++ src/Http/Content/FormContent.php | 54 ++ src/Http/Content/IHttpContent.php | 11 + src/Http/Content/JsonContent.php | 48 ++ src/Http/Content/StreamContent.php | 36 + src/Http/Content/StringContent.php | 36 + src/Http/Headers/AcceptEncodingHeader.php | 71 ++ src/Http/Headers/AcceptHeader.php | 63 ++ src/Http/Headers/AcceptLanguageHeader.php | 72 ++ .../Headers/AcceptTransferEncodingHeader.php | 71 ++ .../AccessControlRequestHeadersHeader.php | 34 + .../AccessControlRequestMethodHeader.php | 28 + src/Http/Headers/AuthorizationHeader.php | 35 + src/Http/Headers/CacheControlHeader.php | 47 ++ src/Http/Headers/ConnectionHeader.php | 35 + src/Http/Headers/ContentEncodingHeader.php | 29 + src/Http/Headers/ContentLanguageHeader.php | 35 + src/Http/Headers/ContentLengthHeader.php | 24 + src/Http/Headers/ContentLocationHeader.php | 24 + src/Http/Headers/ContentRangeHeader.php | 74 ++ src/Http/Headers/ContentTypeHeader.php | 25 + src/Http/Headers/CookieHeader.php | 47 ++ src/Http/Headers/DNTHeader.php | 33 + src/Http/Headers/DateHeader.php | 25 + src/Http/Headers/ExpectHeader.php | 31 + src/Http/Headers/FromHeader.php | 24 + src/Http/Headers/HostHeader.php | 35 + src/Http/Headers/IfMatchHeader.php | 46 ++ src/Http/Headers/IfModifiedSinceHeader.php | 30 + src/Http/Headers/IfNoneMatchHeader.php | 46 ++ src/Http/Headers/IfRangeHeader.php | 58 ++ src/Http/Headers/IfUnmodifiedSinceHeader.php | 30 + src/Http/Headers/KeepAliveHeader.php | 43 ++ src/Http/Headers/LastModifiedHeader.php | 25 + src/Http/Headers/OriginHeader.php | 61 ++ src/Http/Headers/PragmaHeader.php | 24 + src/Http/Headers/ProxyAuthorizationHeader.php | 35 + src/Http/Headers/RangeHeader.php | 61 ++ src/Http/Headers/RefererHeader.php | 24 + src/Http/Headers/SaveDataHeader.php | 24 + src/Http/Headers/TrailerHeader.php | 34 + src/Http/Headers/TransferEncodingHeader.php | 29 + src/Http/Headers/UpgradeHeader.php | 33 + .../Headers/UpgradeInsecureRequestsHeader.php | 24 + src/Http/Headers/UserAgentHeader.php | 29 + src/Http/HttpFx.php | 288 ++++++++ src/Http/HttpHeader.php | 34 + src/Http/HttpHeaders.php | 56 ++ src/Http/HttpHeadersBuilder.php | 40 ++ src/Http/HttpMessage.php | 83 +++ src/Http/HttpMessageBuilder.php | 70 ++ src/Http/HttpRequest.php | 142 ++++ src/Http/HttpRequestBuilder.php | 73 ++ src/Http/HttpResponse.php | 35 + src/Http/HttpResponseBuilder.php | 263 +++++++ src/Http/HttpUploadedFile.php | 188 +++++ src/ICloneable.php | 18 + src/ICloseable.php | 30 + src/IComparable.php | 20 + src/IEquatable.php | 18 + src/IO/FileStream.php | 85 +++ src/IO/GenericStream.php | 133 ++++ src/IO/IOException.php | 10 + src/IO/MemoryStream.php | 18 + src/IO/NetworkStream.php | 63 ++ src/IO/Stream.php | 88 +++ src/IO/TempFileStream.php | 23 + src/IString.php | 188 +++++ src/MediaType.php | 163 +++++ src/Net/DnsEndPoint.php | 60 ++ src/Net/EndPoint.php | 48 ++ src/Net/IPAddress.php | 81 +++ src/Net/IPAddressRange.php | 97 +++ src/Net/IPEndPoint.php | 71 ++ src/Net/UnixEndPoint.php | 43 ++ src/Performance/PerformanceCounter.php | 20 + src/Performance/Stopwatch.php | 72 ++ src/Performance/TimingPoint.php | 49 ++ src/Performance/Timings.php | 55 ++ src/Routing/RouteCallable.php | 72 ++ src/Routing/RouteInfo.php | 125 ++++ .../RouteMethodNotSupportedException.php | 13 + src/Routing/RoutePathNotFoundException.php | 13 + src/Routing/Router.php | 132 ++++ src/Security/CSRFP.php | 104 +++ src/Security/CSRFPIdentity.php | 79 +++ src/Security/CSRFPToken.php | 101 +++ src/Security/HashAlgorithm.php | 67 ++ src/Security/HashAlgorithmInfo.php | 120 ++++ src/Serialisation/Base32Serialiser.php | 62 ++ src/Serialisation/Base62Serialiser.php | 51 ++ src/Serialisation/Base64Serialiser.php | 33 + src/Serialisation/BencodeSerialiser.php | 171 +++++ .../BencodeSerialiserSettings.php | 48 ++ src/Serialisation/IBencodeSerialisable.php | 18 + src/Serialisation/JsonSerialiser.php | 38 + src/Serialisation/JsonSerialiserSettings.php | 116 +++ src/Serialisation/Serialiser.php | 111 +++ src/Serialisation/UriBase64Serialiser.php | 34 + src/StringIterator.php | 81 +++ src/TimeSpan.php | 526 ++++++++++++++ src/TimeZoneInfo.php | 213 ++++++ src/Type.php | 126 ++++ src/Version.php | 239 +++++++ src/WString.php | 382 ++++++++++ src/XArray.php | 489 +++++++++++++ src/XString.php | 58 ++ src/XStringTrait.php | 64 ++ tests/Base32Test.php | 32 + tests/Base62Test.php | 36 + tests/CSRFPTest.php | 79 +++ tests/DateTimeTest.php | 387 ++++++++++ tests/DbToolsTest.php | 128 ++++ tests/EnvironmentTest.php | 52 ++ tests/IPAddressRangeTest.php | 61 ++ tests/IPAddressTest.php | 86 +++ tests/RouterTest.php | 114 +++ tests/StringTest.php | 281 ++++++++ tests/TypeTest.php | 49 ++ tests/VersionTest.php | 77 ++ tests/XArrayTest.php | 147 ++++ tools/fatphpstan.bat | 3 + tools/precommit.bat | 9 + tools/precommit.sh | 9 + tools/update-headers.php | 173 +++++ tools/update-version.php | 10 + 187 files changed, 15021 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 LICENCE create mode 100644 README.md create mode 100644 TODO.md create mode 100644 VERSION create mode 100644 bench/_init.php create mode 100644 bench/example.php create mode 100644 docs/index.rst create mode 100644 index.php create mode 100644 phpdoc.xml create mode 100644 phpstan.neon create mode 100644 phpunit.xml create mode 100644 src/AString.php create mode 100644 src/Autoloader.php create mode 100644 src/Collections/ArrayIterator.php create mode 100644 src/Collections/IArrayable.php create mode 100644 src/Colour.php create mode 100644 src/ColourARGB.php create mode 100644 src/ColourLegacy.php create mode 100644 src/ColourRGB.php create mode 100644 src/Data/BeginTransactionFailedException.php create mode 100644 src/Data/CommitFailedException.php create mode 100644 src/Data/ConnectionFailedException.php create mode 100644 src/Data/DataException.php create mode 100644 src/Data/DbTools.php create mode 100644 src/Data/DbType.php create mode 100644 src/Data/IDbBackend.php create mode 100644 src/Data/IDbConnection.php create mode 100644 src/Data/IDbConnectionInfo.php create mode 100644 src/Data/IDbResult.php create mode 100644 src/Data/IDbStatement.php create mode 100644 src/Data/IDbTransactions.php create mode 100644 src/Data/MariaDB/MariaDBBackend.php create mode 100644 src/Data/MariaDB/MariaDBCharacterSetInfo.php create mode 100644 src/Data/MariaDB/MariaDBConnection.php create mode 100644 src/Data/MariaDB/MariaDBConnectionInfo.php create mode 100644 src/Data/MariaDB/MariaDBParameter.php create mode 100644 src/Data/MariaDB/MariaDBResult.php create mode 100644 src/Data/MariaDB/MariaDBResultLib.php create mode 100644 src/Data/MariaDB/MariaDBResultNative.php create mode 100644 src/Data/MariaDB/MariaDBStatement.php create mode 100644 src/Data/MariaDB/MariaDBWarning.php create mode 100644 src/Data/NullDb/NullDbBackend.php create mode 100644 src/Data/NullDb/NullDbConnection.php create mode 100644 src/Data/NullDb/NullDbConnectionInfo.php create mode 100644 src/Data/NullDb/NullDbResult.php create mode 100644 src/Data/NullDb/NullDbStatement.php create mode 100644 src/Data/QueryExecuteException.php create mode 100644 src/Data/ReleaseSavePointFailedException.php create mode 100644 src/Data/RollbackFailedException.php create mode 100644 src/Data/SQLite/SQLiteBackend.php create mode 100644 src/Data/SQLite/SQLiteConnection.php create mode 100644 src/Data/SQLite/SQLiteConnectionInfo.php create mode 100644 src/Data/SQLite/SQLiteResult.php create mode 100644 src/Data/SQLite/SQLiteStatement.php create mode 100644 src/Data/SavePointFailedException.php create mode 100644 src/Data/TransactionException.php create mode 100644 src/DateTime.php create mode 100644 src/Environment.php create mode 100644 src/Exceptions.php create mode 100644 src/Http/Content/BencodedContent.php create mode 100644 src/Http/Content/FormContent.php create mode 100644 src/Http/Content/IHttpContent.php create mode 100644 src/Http/Content/JsonContent.php create mode 100644 src/Http/Content/StreamContent.php create mode 100644 src/Http/Content/StringContent.php create mode 100644 src/Http/Headers/AcceptEncodingHeader.php create mode 100644 src/Http/Headers/AcceptHeader.php create mode 100644 src/Http/Headers/AcceptLanguageHeader.php create mode 100644 src/Http/Headers/AcceptTransferEncodingHeader.php create mode 100644 src/Http/Headers/AccessControlRequestHeadersHeader.php create mode 100644 src/Http/Headers/AccessControlRequestMethodHeader.php create mode 100644 src/Http/Headers/AuthorizationHeader.php create mode 100644 src/Http/Headers/CacheControlHeader.php create mode 100644 src/Http/Headers/ConnectionHeader.php create mode 100644 src/Http/Headers/ContentEncodingHeader.php create mode 100644 src/Http/Headers/ContentLanguageHeader.php create mode 100644 src/Http/Headers/ContentLengthHeader.php create mode 100644 src/Http/Headers/ContentLocationHeader.php create mode 100644 src/Http/Headers/ContentRangeHeader.php create mode 100644 src/Http/Headers/ContentTypeHeader.php create mode 100644 src/Http/Headers/CookieHeader.php create mode 100644 src/Http/Headers/DNTHeader.php create mode 100644 src/Http/Headers/DateHeader.php create mode 100644 src/Http/Headers/ExpectHeader.php create mode 100644 src/Http/Headers/FromHeader.php create mode 100644 src/Http/Headers/HostHeader.php create mode 100644 src/Http/Headers/IfMatchHeader.php create mode 100644 src/Http/Headers/IfModifiedSinceHeader.php create mode 100644 src/Http/Headers/IfNoneMatchHeader.php create mode 100644 src/Http/Headers/IfRangeHeader.php create mode 100644 src/Http/Headers/IfUnmodifiedSinceHeader.php create mode 100644 src/Http/Headers/KeepAliveHeader.php create mode 100644 src/Http/Headers/LastModifiedHeader.php create mode 100644 src/Http/Headers/OriginHeader.php create mode 100644 src/Http/Headers/PragmaHeader.php create mode 100644 src/Http/Headers/ProxyAuthorizationHeader.php create mode 100644 src/Http/Headers/RangeHeader.php create mode 100644 src/Http/Headers/RefererHeader.php create mode 100644 src/Http/Headers/SaveDataHeader.php create mode 100644 src/Http/Headers/TrailerHeader.php create mode 100644 src/Http/Headers/TransferEncodingHeader.php create mode 100644 src/Http/Headers/UpgradeHeader.php create mode 100644 src/Http/Headers/UpgradeInsecureRequestsHeader.php create mode 100644 src/Http/Headers/UserAgentHeader.php create mode 100644 src/Http/HttpFx.php create mode 100644 src/Http/HttpHeader.php create mode 100644 src/Http/HttpHeaders.php create mode 100644 src/Http/HttpHeadersBuilder.php create mode 100644 src/Http/HttpMessage.php create mode 100644 src/Http/HttpMessageBuilder.php create mode 100644 src/Http/HttpRequest.php create mode 100644 src/Http/HttpRequestBuilder.php create mode 100644 src/Http/HttpResponse.php create mode 100644 src/Http/HttpResponseBuilder.php create mode 100644 src/Http/HttpUploadedFile.php create mode 100644 src/ICloneable.php create mode 100644 src/ICloseable.php create mode 100644 src/IComparable.php create mode 100644 src/IEquatable.php create mode 100644 src/IO/FileStream.php create mode 100644 src/IO/GenericStream.php create mode 100644 src/IO/IOException.php create mode 100644 src/IO/MemoryStream.php create mode 100644 src/IO/NetworkStream.php create mode 100644 src/IO/Stream.php create mode 100644 src/IO/TempFileStream.php create mode 100644 src/IString.php create mode 100644 src/MediaType.php create mode 100644 src/Net/DnsEndPoint.php create mode 100644 src/Net/EndPoint.php create mode 100644 src/Net/IPAddress.php create mode 100644 src/Net/IPAddressRange.php create mode 100644 src/Net/IPEndPoint.php create mode 100644 src/Net/UnixEndPoint.php create mode 100644 src/Performance/PerformanceCounter.php create mode 100644 src/Performance/Stopwatch.php create mode 100644 src/Performance/TimingPoint.php create mode 100644 src/Performance/Timings.php create mode 100644 src/Routing/RouteCallable.php create mode 100644 src/Routing/RouteInfo.php create mode 100644 src/Routing/RouteMethodNotSupportedException.php create mode 100644 src/Routing/RoutePathNotFoundException.php create mode 100644 src/Routing/Router.php create mode 100644 src/Security/CSRFP.php create mode 100644 src/Security/CSRFPIdentity.php create mode 100644 src/Security/CSRFPToken.php create mode 100644 src/Security/HashAlgorithm.php create mode 100644 src/Security/HashAlgorithmInfo.php create mode 100644 src/Serialisation/Base32Serialiser.php create mode 100644 src/Serialisation/Base62Serialiser.php create mode 100644 src/Serialisation/Base64Serialiser.php create mode 100644 src/Serialisation/BencodeSerialiser.php create mode 100644 src/Serialisation/BencodeSerialiserSettings.php create mode 100644 src/Serialisation/IBencodeSerialisable.php create mode 100644 src/Serialisation/JsonSerialiser.php create mode 100644 src/Serialisation/JsonSerialiserSettings.php create mode 100644 src/Serialisation/Serialiser.php create mode 100644 src/Serialisation/UriBase64Serialiser.php create mode 100644 src/StringIterator.php create mode 100644 src/TimeSpan.php create mode 100644 src/TimeZoneInfo.php create mode 100644 src/Type.php create mode 100644 src/Version.php create mode 100644 src/WString.php create mode 100644 src/XArray.php create mode 100644 src/XString.php create mode 100644 src/XStringTrait.php create mode 100644 tests/Base32Test.php create mode 100644 tests/Base62Test.php create mode 100644 tests/CSRFPTest.php create mode 100644 tests/DateTimeTest.php create mode 100644 tests/DbToolsTest.php create mode 100644 tests/EnvironmentTest.php create mode 100644 tests/IPAddressRangeTest.php create mode 100644 tests/IPAddressTest.php create mode 100644 tests/RouterTest.php create mode 100644 tests/StringTest.php create mode 100644 tests/TypeTest.php create mode 100644 tests/VersionTest.php create mode 100644 tests/XArrayTest.php create mode 100644 tools/fatphpstan.bat create mode 100644 tools/precommit.bat create mode 100644 tools/precommit.sh create mode 100644 tools/update-headers.php create mode 100644 tools/update-version.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b6d2ecb --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.sh text eol=lf +*.php text eol=lf +*.bat text eol=crlf +VERSION text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8a26c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +[Tt]humbs.db +[Dd]esktop.ini +.DS_Store +.vscode/ +.vs/ +.idea/ +docs/html/ +.phpdoc* +.phpunit* diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..691d03b --- /dev/null +++ b/LICENCE @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2021-2022, flashwave +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d7a5162 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# Index + +Index is a common library for my PHP projects. + +It provides a number of components that I would otherwise copy between projects (and thus become out-of-sync) as well as a number of quality of life things on top of standard PHP stdlib functionality such as abstractions of arrays and strings as objects inspired by .NET's standard library. + + +## Requirements and Dependencies + +Index currently targets **PHP 8.1**. (also list extensions!!!!!!!!!) + +### `Index\Data\MariaDB` + +Requires the `mysqli` extension. `mysqlnd` is recommended as the underlying driver, but `libmysql` should work without a hitch. This driver also works for MySQL as the dependencies would suggest, but you should consider using MariaDB instead of possible. + +### `Index\Data\SQLite` + +Requires the `sqlite3` extension. + + +## Versioning + +Index versioning will mostly follow the [Semantic Versioning specification v2.0.0](https://semver.org/spec/v2.0.0.html), counting dropped support for a minor PHP version (e.g. 7.1 -> 7.2 or 7.4 -> 8.0) as a reason to increment the major version. +Previous major versions may be supported for a time with backports depending on what projects of mine still target older versions of PHP. + +The version is stored in the root of the repository in a file called `VERSION` and can be read out within Index using `Index\Environment::getIndexVersion()`. + + +## Contribution + +By submitting code for inclusion in the main Index source tree you agree to transfer ownership of the code to the project owner. +The contributor will still be attributed for the contributed code, unless they ask for this attribution to be removed. +This is to avoid intellectual property rights traps and drama that could lead to blackmail situations. +If you do not agree with these terms, you are free to fork off. + + +## Licencing + +Index is available under the BSD 2-Clause License, a full version of which is enclosed in the LICENCE file. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..8d8ffca --- /dev/null +++ b/TODO.md @@ -0,0 +1,37 @@ +# TODO + +## High Prio + + - Create tests for everything testable. + + - Draw out a plan for the templating backend. + - Will probably just construct using the HTML abstraction stuff, would make AJAX'ing page updates trivial also. + - Reinvestigate the semi-isolated PHP script template system I used in some other project, I forgot which. + + - Determine structure for markup parsing abstraction. + - Writing a bbcode and markdown parser outside of Index, will implement a structure when done. + + - Create HTML construction utilities. + + - Create similarly address GD2/Imagick wrappers. + + - Review CSRF code, Something about it has me constantly wondering if its too Complex. + + - Figure out the SQL Query builder. + - Might make sense to just have a predicate builder and selector builder. + + - Create a URL formatter. + + - Add RSS/Atom feed construction utilities. + + - Probably get rid of StringBuilder, PHP strings aren't entirely immutable so that whole issue doesn't even exist. + I have a number of possible fixes in my head for this. The primary reason for A/W/IString was to have a consistent API between + normal strings and mbstrings. I'm not sure yet but part of me wants to keep IString but move a lot of functionality into XString and make that the go-to. WString could remain, maybe in a reduced form? Having the encoding of the string associated with it is very convenient. + +## Low Prio + + - Get guides working on phpdoc. + + - Create phpdoc template. + + - Review all constructors and see which one should be marked @internal. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..f8dfde8 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.2202.281831 diff --git a/bench/_init.php b/bench/_init.php new file mode 100644 index 0000000..630940d --- /dev/null +++ b/bench/_init.php @@ -0,0 +1,17 @@ + 0) + $body(); + + $sw->stop(); + + printf('Took: %Fms %s', $sw->getElapsedTime(), PHP_EOL); + + echo PHP_EOL; +} diff --git a/bench/example.php b/bench/example.php new file mode 100644 index 0000000..360d84e --- /dev/null +++ b/bench/example.php @@ -0,0 +1,7 @@ + + + Index Documentation +