aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/xml/lib/ContextStackTrait.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/xml/lib/ContextStackTrait.php')
-rw-r--r--vendor/sabre/xml/lib/ContextStackTrait.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/vendor/sabre/xml/lib/ContextStackTrait.php b/vendor/sabre/xml/lib/ContextStackTrait.php
new file mode 100644
index 000000000..ee3a3baca
--- /dev/null
+++ b/vendor/sabre/xml/lib/ContextStackTrait.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Sabre\Xml;
+
+/**
+ * Context Stack
+ *
+ * The Context maintains information about a document during either reading or
+ * writing.
+ *
+ * During this process, it may be neccesary to override this context
+ * information.
+ *
+ * This trait allows easy access to the context, and allows the end-user to
+ * override its settings for document fragments, and easily restore it again
+ * later.
+ *
+ * @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/).
+ * @author Evert Pot (http://evertpot.com/)
+ * @license http://sabre.io/license/ Modified BSD License
+ */
+trait ContextStackTrait {
+
+ /**
+ * This is the element map. It contains a list of XML elements (in clark
+ * notation) as keys and PHP class names as values.
+ *
+ * The PHP class names must implement Sabre\Xml\Element.
+ *
+ * Values may also be a callable. In that case the function will be called
+ * directly.
+ *
+ * @var array
+ */
+ public $elementMap = [];
+
+ /**
+ * A contextUri pointing to the document being parsed / written.
+ * This uri may be used to resolve relative urls that may appear in the
+ * document.
+ *
+ * The reader and writer don't use this property, but as it's an extremely
+ * common use-case for parsing XML documents, it's added here as a
+ * convenience.
+ *
+ * @var string
+ */
+ public $contextUri;
+
+ /**
+ * This is a list of namespaces that you want to give default prefixes.
+ *
+ * You must make sure you create this entire list before starting to write.
+ * They should be registered on the root element.
+ *
+ * @var array
+ */
+ public $namespaceMap = [];
+
+ /**
+ * This is a list of custom serializers for specific classes.
+ *
+ * The writer may use this if you attempt to serialize an object with a
+ * class that does not implement XmlSerializable.
+ *
+ * Instead it will look at this classmap to see if there is a custom
+ * serializer here. This is useful if you don't want your value objects
+ * to be responsible for serializing themselves.
+ *
+ * The keys in this classmap need to be fully qualified PHP class names,
+ * the values must be callbacks. The callbacks take two arguments. The
+ * writer class, and the value that must be written.
+ *
+ * function (Writer $writer, object $value)
+ *
+ * @var array
+ */
+ public $classMap = [];
+
+ /**
+ * Backups of previous contexts.
+ *
+ * @var array
+ */
+ protected $contextStack = [];
+
+ /**
+ * Create a new "context".
+ *
+ * This allows you to safely modify the elementMap, contextUri or
+ * namespaceMap. After you're done, you can restore the old data again
+ * with popContext.
+ *
+ * @return null
+ */
+ function pushContext() {
+
+ $this->contextStack[] = [
+ $this->elementMap,
+ $this->contextUri,
+ $this->namespaceMap,
+ $this->classMap
+ ];
+
+ }
+
+ /**
+ * Restore the previous "context".
+ *
+ * @return null
+ */
+ function popContext() {
+
+ list(
+ $this->elementMap,
+ $this->contextUri,
+ $this->namespaceMap,
+ $this->classMap
+ ) = array_pop($this->contextStack);
+
+ }
+
+}