diff options
Diffstat (limited to 'vendor/wikimedia/wrappedstring')
-rw-r--r-- | vendor/wikimedia/wrappedstring/LICENSE | 19 | ||||
-rw-r--r-- | vendor/wikimedia/wrappedstring/README.md | 24 | ||||
-rw-r--r-- | vendor/wikimedia/wrappedstring/src/WrappedString.php | 110 |
3 files changed, 153 insertions, 0 deletions
diff --git a/vendor/wikimedia/wrappedstring/LICENSE b/vendor/wikimedia/wrappedstring/LICENSE new file mode 100644 index 00000000..5d34a4b3 --- /dev/null +++ b/vendor/wikimedia/wrappedstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Timo Tijhof <krinklemail@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/wikimedia/wrappedstring/README.md b/vendor/wikimedia/wrappedstring/README.md new file mode 100644 index 00000000..5c8b8fb0 --- /dev/null +++ b/vendor/wikimedia/wrappedstring/README.md @@ -0,0 +1,24 @@ +WrappedString +============= + +WrappedString is a small PHP library for compacting redundant string-wrapping +code in text output. The most common use-case is to eliminate redundant runs of +HTML open/close tags and JavaScript boilerplate. + +Here is how you use it: + +<pre lang="php"> +use WrappedString\WrappedString; + +$buffer = array( + new WrappedString( '[foo]', '[', ']' ), + new WrappedString( '[bar]', '[', ']' ), +); +$output = WrappedString::join( "\n", $buffer ); +// Result: '[foobar]' +</pre> + +License +------- + +The project is licensed under the MIT license. diff --git a/vendor/wikimedia/wrappedstring/src/WrappedString.php b/vendor/wikimedia/wrappedstring/src/WrappedString.php new file mode 100644 index 00000000..ed2593de --- /dev/null +++ b/vendor/wikimedia/wrappedstring/src/WrappedString.php @@ -0,0 +1,110 @@ +<?php +/** + * Copyright (c) 2015 Timo Tijhof <krinklemail@gmail.com> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * @file + */ + +namespace WrappedString; + +class WrappedString { + /** @var string */ + protected $value; + + /** @var string */ + protected $prefix; + + /** @var string */ + protected $suffix; + + /** + * @param string $value + * @param string $prefix + * @param string $suffix + */ + public function __construct( $value, $prefix = null, $suffix = null ) { + $this->value = $value; + $this->prefix = $prefix; + $this->suffix = $suffix; + } + + /** + * @param string $content + * @return WrappedString Newly wrapped string + */ + protected function extend( $value ) { + $wrap = clone $this; + $suffixlen = strlen( $this->suffix ); + if ( $suffixlen ) { + $wrap->value = substr( $this->value, 0, -$suffixlen ); + } + $wrap->value .= substr( $value, strlen( $this->prefix ) ); + return $wrap; + } + + /** + * Merge consecutive wrapped strings with the same before/after values. + * + * Does not modify the array or the WrappedString objects. + * + * @param WrappedString[] $wraps + * @return WrappedString[] + */ + protected static function compact( array &$wraps ) { + $consolidated = array(); + $prev = current( $wraps ); + while ( ( $wrap = next( $wraps ) ) !== false ) { + if ( $prev instanceof WrappedString + && $wrap instanceof WrappedString + && $prev->prefix !== null + && $prev->prefix === $wrap->prefix + && $prev->suffix !== null + && $prev->suffix === $wrap->suffix + ) { + $prev = $prev->extend( $wrap->value ); + } else { + $consolidated[] = $prev; + $prev = $wrap; + } + } + // Add last one + $consolidated[] = $prev; + + return $consolidated; + } + + /** + * Join a several wrapped strings with a separator between each. + * + * @param string $sep + * @param WrappedString[] $wraps + * @return string + */ + public static function join( $sep, array $wraps ) { + return implode( $sep, self::compact( $wraps ) ); + } + + /** @return string */ + public function __toString() { + return $this->value; + } +} |