summaryrefslogtreecommitdiff
path: root/vendor/wikimedia/wrappedstring
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/wikimedia/wrappedstring')
-rw-r--r--vendor/wikimedia/wrappedstring/LICENSE19
-rw-r--r--vendor/wikimedia/wrappedstring/README.md24
-rw-r--r--vendor/wikimedia/wrappedstring/src/WrappedString.php110
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;
+ }
+}