docs
authorMichael Wallner <mike@php.net>
Tue, 25 Jan 2022 10:29:37 +0000 (11:29 +0100)
committerMichael Wallner <mike@php.net>
Tue, 25 Jan 2022 10:29:37 +0000 (11:29 +0100)
25 files changed:
SECURITY.md
docs/.router.php [new file with mode: 0644]
docs/Dockerfile [new file with mode: 0644]
docs/Makefile
docs/docker-compose.yml [new file with mode: 0644]
docs/v0.0/index.html
docs/v0.0/ion.html
docs/v0.0/ion.stub.php [new file with mode: 0644]
docs/v0.0/ion/: Contributing.html [new file with mode: 0644]
docs/v0.0/ion/: Security.html [new file with mode: 0644]
docs/v0.0/ion/Catalog.html
docs/v0.0/ion/Catalog/add.html
docs/v0.0/ion/Decimal.html
docs/v0.0/ion/Exception.html
docs/v0.0/ion/LOB.html
docs/v0.0/ion/Reader.html
docs/v0.0/ion/Serializer.html
docs/v0.0/ion/Symbol.html
docs/v0.0/ion/Timestamp.html
docs/v0.0/ion/Type.html
docs/v0.0/ion/Unserializer.html
docs/v0.0/ion/Writer.html
docs/v0.0/ion/serialize.html
docs/v0.0/ion/unserialize.html
package.xml

index 4ceb40d35dc3e056b4756b84e1af8286d31b8262..5f02e54b11985d0329aa10515bbdf08aa9b116a0 100644 (file)
@@ -5,9 +5,9 @@
 This project is still in its early development stages, so please consider 
 any release not explicitly labeled as stable as experimental.
 
-| Version | Supported          |
-| ------- | ------------------ |
-| 0.x     | :white_check_mark: |
+| Version | Supported |
+| ------- | --------- |
+| 0.x     |        ✓ |
 
 ## Reporting a Vulnerability
 
diff --git a/docs/.router.php b/docs/.router.php
new file mode 100644 (file)
index 0000000..9287598
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+$file = __DIR__ . urldecode($_SERVER["REQUEST_URI"]);
+error_log("uri:$file\n");
+
+if (is_file($file)) {
+       return false;
+}
+
+if (is_dir($file) && file_exists($file."/index.html")) {
+       readfile($file."/index.html");
+} else {
+       $file = rtrim($file, "/").".html";
+       if (file_exists($file)) {
+               readfile($file);
+       } else {
+               return false;
+       }
+}
diff --git a/docs/Dockerfile b/docs/Dockerfile
new file mode 100644 (file)
index 0000000..689b0e5
--- /dev/null
@@ -0,0 +1,27 @@
+FROM php:8.1-cli
+
+RUN apt-get update -qy \
+    && DEBIAN_FRONTEND=noninteractive \
+    apt-get install -qy \
+       build-essential \
+       git \
+       libcurl4-openssl-dev \
+       libicu-dev \
+       libssl-dev \
+       zlib1g-dev \
+    && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /tmp
+
+RUN \
+       curl -sSLO https://getcomposer.org/download/2.2.5/composer.phar &&\
+       curl -sSLO https://replicator.pharext.org/phars/raphf/raphf-2.0.1.ext.phar &&\
+       curl -sSLO https://replicator.pharext.org/phars/pecl_http/pecl_http-4.2.1.ext.phar
+RUN \
+       touch /usr/local/etc/php/conf.d/pecl.ini &&\
+       php raphf-*.ext.phar -vi /usr/local/etc/php/conf.d/pecl.ini &&\
+       php pecl_http-*.ext.phar -vi /usr/local/etc/php/conf.d/pecl.ini
+
+WORKDIR /app
+ENTRYPOINT ["php", "/tmp/composer.phar"]
+
index ddbea7b658fba48e8ea451cbbe0f3d570817d59c..cbfcb36c1660e4677fe6cb2581ed3ab609185535 100644 (file)
@@ -1,27 +1,44 @@
 PHP ?= php
 COMPOSER ?= composer
-TAG := $(shell (git describe --tags --exact-match --match=v[1-9]* || echo v0.0) | cut -d. -f-2 2>/dev/null)
+TAG := $(shell (git describe --tags --exact-match --match=v[1-9]*  2>/dev/null || echo v0.0) | cut -d. -f-2)
+
+# ---
+
+SPECIAL_SRC := src/ion/\\\:\\\ Security.md src/ion/\\\:\\\ Contributing.md src/ion.md
 
 .PHONY: all
 all: latest
 
-.PHONY: clean
-clean:
-       -rm -rf latest src vendor composer.*
+latest: $(TAG)
+       -unlink $@ 2>/dev/null
+       ln -s "$(TAG)/" $@
+       touch $@
+
+$(TAG): markdown | vendor/bin/ref2html
+       mkdir -p $@
+       $(PHP) $| $@ src
+       touch $@
+
+.PHONY: markdown
+markdown: src/ion.stub.php $(SPECIAL_SRC) | vendor/bin/stub2ref
+       $(PHP) $| ion $< src
+
+src src/ion:
+       -mkdir -p $@
+src/ion.stub.php: ../ion.stub.php | src
+       -test -e $@ || ln $^ $@
+src/ion.md: ../README.md | src
+       -test -e $@ || ln $^ $@
+src/ion/\\\:\\\ Security.md: ../SECURITY.md | src/ion
+       -test -e $@ || ln $^ $@
+src/ion/\\\:\\\ Contributing.md: ../CONTRIBUTING.md | src/ion
+       -test -e $@ || ln $^ $@
 
 vendor/%:
        $(COMPOSER) require m6w6/mdref:dev-master
 
-src: ../ion.stub.php | vendor/bin/stub2ref
-       mkdir -p $@ && cd $@ && $(PHP) ../$| ion ../$^
-       touch $@
+.PHONY: clean
+clean:
+       -rm -rf latest src vendor composer.*
 
-$(TAG): src | vendor/bin/ref2html
-       mkdir -p $@
-       $(PHP) $| $@ $^
-       touch $@
 
-latest: $(TAG)
-       -unlink latest 2>/dev/null
-       ln -s "$(TAG)/" latest
-       touch $@
diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml
new file mode 100644 (file)
index 0000000..3a481f0
--- /dev/null
@@ -0,0 +1,9 @@
+version: '3'
+services:
+  composer:
+    container_name: m6w6/ext-ion-docs-composer
+    restart: "no"
+    volumes:
+      - ./:/app
+    build: .
+    user: "1000"
index 1895bff7e1f79e4eddd348f1a3becc23169779d8..424b29ecc4db8ff0cd101b2cb75695b957b4499e 100644 (file)
                <div><p>PHP extension wrapping <a href="https://github.com/amzn/ion-c">amzn/ion-c</a>.
 See the <a href="https://amzn.github.io/ion-docs/">Amazon ION specification</a>.</p>
 </div>
+                                                                                       <div>
+                                       <p><strong>Download the Stub file:</strong></p>
+                                       <ul style="list-style-type: '&raquo;'">
+                                               <li>
+                                                                                                               <a href="ion.stub.php">ion.stub.php</a><br>
+                                                                                                               <small>
+                                                               Last modified:
+                                                               2022-01-20 17:13:57 UTC                                                 </small>
+                                               </li>
+                                       </ul>
+                               </div>
                                                                
                        <div id="disqus_thread"><button id="disqus_activator">Show <span> </span> Comment(s)</button></div>
                        <script>
index ab01a31f05c40a03434177ca442f92aa140ceff1..810dedcde4baa32f9a14bc0d3dcc8084626f29be 100644 (file)
                                                        
                                                        <ul>
                                                                
+                                                               <li>
+                                                                       &rdsh; <a href="./ion/: Contributing">★ Contributing</a>
+                                                                       
+                                                               </li>
+                                                               
+                                                               <li>
+                                                                       &rdsh; <a href="./ion/: Security">★ Security</a>
+                                                                       
+                                                               </li>
+                                                               
                                                                <li>
                                                                        &rdsh; <a href="./ion/Catalog">Catalog</a>
                                                                        
@@ -296,6 +306,19 @@ instances of the following PHP classes cannot be cloned:</p>
 <li>ion\Unserializer\PHP</li>
 </ul>
 
+       <h2 id="Editor.Stub:">Editor Stub:</h2>
+       <p>This extension provides a stub file four your editor's auto-completion.</p>
+                                       <div>
+                                       <p><strong>Download the Stub file:</strong></p>
+                                       <ul style="list-style-type: '&raquo;'">
+                                               <li>
+                                                                                                               <a href="ion.stub.php">ion.stub.php</a><br>
+                                                                                                               <small>
+                                                               Last modified:
+                                                               2022-01-20 17:13:57 UTC                                                 </small>
+                                               </li>
+                                       </ul>
+                               </div>
 
 
 <h2 id="Functions:">Functions:</h2>
diff --git a/docs/v0.0/ion.stub.php b/docs/v0.0/ion.stub.php
new file mode 100644 (file)
index 0000000..15b60d3
--- /dev/null
@@ -0,0 +1,1108 @@
+<?php
+
+/**
+ * Amazon ION serialization format.
+ *
+ * @link https://github.com/awesomized/ext-ion
+ *
+ * @see https://github.com/amzn/ion-c amzn/ion-c
+ * @see https://amzn.github.io/ion-docs/ Amazon ION spec
+ *
+ * @generate-class-entries static
+ * @generate-function-entries static
+ */
+
+namespace ion;
+
+/**
+ * Serialize a PHP value as ION data.
+ *
+ * Serializes supported PHP values with the optionally provided \ion\Serializer:
+ *  * NULL
+ *  * bool
+ *  * int
+ *  * float
+ *  * string
+ *  * references
+ *  * arrays
+ *  * objects (incl. \Serializable, and classes implementing magic and custom __serialize)
+ *
+ * @param mixed $data PHP value(s).
+ * @param Serializer|null $serializer Custom serializer.
+ * @return string serialized ION data
+ * @throws ion\Exception
+ */
+function serialize(mixed $data, ?Serializer $serializer = null) : string {}
+
+/**
+ * Unserialize ION data (stream) as PHP value(s).
+ *
+ * @param string|resource $data Serialized ION data, either as string buffer or stream,.
+ * @return mixed unserialized PHP values
+ * @throws ion\Exception
+ */
+function unserialize($data, ?Unserializer $unserializer = null) : mixed {}
+
+/**
+ * Serializer interface, used to customize ion\serialize()'s behavior.
+ */
+interface Serializer {
+    public function serialize(mixed $data) : string;
+}
+
+/**
+ * Unserializer interface, used to customize ion\unserialize()'s behavior.
+ */
+interface Unserializer {
+    /** @param string|resource $data */
+    public function unserialize($data) : mixed;
+}
+
+/**
+ * Base exception for the ION extension.
+ */
+class Exception extends \Exception {
+}
+
+/**
+ * ION data type.
+ *
+ * The following special PHP classes are provided for some data types:
+ * * ion\Decimal
+ * * ion\Timestamp
+ * * ion\Symbol
+ * * ion\Lob
+ */
+enum Type : int {
+    case Null       = 0x000;
+    case Bool       = 0x100;
+    case Int        = 0x200;
+    case Float      = 0x400;
+    case Decimal    = 0x500;
+    case Timestamp  = 0x600;
+    case Symbol     = 0x700;
+    case String     = 0x800;
+    case CLob       = 0x900;
+    case BLob       = 0xa00;
+    case List       = 0xb00;
+    case SExp       = 0xc00;
+    case Struct     = 0xd00;
+    case Datagram   = 0xf00;
+
+    case EOF        =-0x100;
+    case NONE       =-0x200;
+}
+
+/**
+ * @see https://amzn.github.io/ion-docs/docs/spec.html#symbol ION spec's symbol definition
+ * @see https://amzn.github.io/ion-docs/guides/symbols-guide.html ION spec's symbol guide
+ */
+class Symbol {
+    /**
+     * Create an ION symbol.
+     */
+    public function __construct(
+        /**
+         * The symbol's text representation.
+         */
+        public readonly ?string $value = null,
+        /**
+         * The symbols ID, referencing its location within a shared symbol table.
+         */
+        public readonly int $sid = -1,
+        /**
+         * The import location referencing a shared symbol table.
+         */
+        public readonly ?Symbol\ImportLocation $importLocation = null,
+    ) {}
+
+    /**
+     * Compare two symbols for equality.
+     *
+     * Two symbols are considered equal, if either:
+     * * both are the same object or NULL
+     * * both values are NULL (unknown text), and both $importLocations match
+     * * both values match, regardless of $sid and $importLocation
+     *
+     * @param Symbol $symbol
+     * @return bool whether the two Symbols equal
+     */
+    public function equals(Symbol $symbol): bool {}
+    public function __toString() : string {}
+    /** @alias ion\Symbol::__toString */
+    public function toString() : string {}
+}
+
+/**
+ * The Catalog holds a collection of ion\Symbol\Table instances queried from ion\Reader and ion\Writer instances.
+ *
+ * @see https://amzn.github.io/ion-docs/docs/symbols.html#the-catalog the ION spec's symbol guide chapter on catalog.
+ */
+class Catalog implements \Countable {
+    /** Internal cache. */
+    private array $symbolTables = [];
+
+    /** Create a new Catalog. */
+    public function __construct() {}
+
+    /** Count how many symbol tables the catalog holds. */
+    public function count() : int {}
+
+    /**
+     * Add a shared symbol table to the catalog.
+     *
+     * @param Symbol\Table $table The new table to add.
+     */
+    public function add(Symbol\Table $table) : void {}
+
+    /**
+     * Remove a shared symbol table from the catalog.
+     *
+     * @param Symbol\Table|string $table The symbol table to renmove.
+     * @return bool Success.
+     */
+    public function remove(Symbol\Table|string $table) : bool {}
+
+    /**
+     * Find a shared symbol table within the catalog.
+     *
+     * @param string $name The name of the symbol table.
+     * @param int $version The version the symbol table should match.
+     * @return Symbol\Table|null The symbol table found, if any.
+     */
+    public function find(string $name, int $version = 0) : ?Symbol\Table {}
+
+    /**
+     * Find a "best match" for a shared symbol table within the catalog.
+     *
+     * @param string $name The name of the symbol table,
+     * @param int $version The minimum version of the symbol table.
+     * @return Symbol\Table|null The symbol table found, if any.
+     */
+    public function findBest(string $name, int $version = 0) : ?Symbol\Table {}
+}
+
+/**
+ * A large object.
+ *
+ * @see ion\Type
+ * @see https://amzn.github.io/ion-docs/docs/spec.html#blob the ION spec's BLob definition
+ * @see https://amzn.github.io/ion-docs/docs/spec.html#clob the ION sepc's CLob definition
+ */
+class LOB {
+    /**
+     * Create an ION large object.
+     */
+    public function __construct(
+        /**
+         * The value of the large object.
+         */
+        public readonly string $value,
+        /**
+         * The type (CLob/BLob).
+         */
+        public readonly Type $type = Type::CLob,
+    ) {}
+}
+
+/**
+ * An arbitrary precision fixed point decimal.
+ *
+ * @see ion\Decimal\Context
+ * @see https://amzn.github.io/ion-docs/docs/decimal.html the ION spec's decimal docs
+ */
+class Decimal {
+    /**
+     * Create a new fixed point decimal.
+     */
+    public function __construct(
+        /**
+         * The decimal number.
+         */
+        public readonly string|int $number,
+        /**
+         * The decimal context.
+         */
+        public readonly ?Decimal\Context $context = null,
+    ) {}
+
+    /**
+     * Check two decimals for equality.
+     *
+     * @param Decimal $decimal The decimal to compare to.
+     * @return bool Whether both decimals equal.
+     */
+    public function equals(Decimal $decimal) : bool {}
+
+    /**
+     * Check whether the decimal is actually a big integer.
+     * @return bool Whether the decimal is actually an integer.
+     */
+    public function isInt() : bool {}
+
+    public function __toString() : string {}
+    /**
+     * Get the string representation of the decimal.
+     * @alias ion\Decimal::__toString
+     */
+    public function toString() : string {}
+
+    /**
+     * Get the integer represention of the decimal.
+     * @throws \ion\Exception If the decimal is actually not an integer.
+     */
+    public function toInt() : int {}
+}
+
+/**
+ * An ION Timestamp.
+ * @see https://amzn.github.io/ion-docs/docs/spec.html#timestamp the ION sepc's timestamp definintion
+ * @see https://php.net/date PHP's date documentation
+ */
+class Timestamp extends \DateTime {
+    /**
+     * The timestamp's precision. See ion\Timestamp\Precision.
+     */
+    public readonly int $precision;
+    /**
+     * The timestamp's format. See ion\Timestamp\Format.
+     */
+    public readonly string $format;
+
+    /**
+     * Create a new ION timestamp.
+     *
+     * @param Timestamp\Precision|int $precision The timestamp's precision.
+     * @param Timestamp\Format|string|null $format The timestamp's format.
+     * @param string|null $datetime The timestamp's value.
+     * @param \DateTimeZone|null $timezone The timestamp's timezone.
+     */
+    public function __construct(
+        Timestamp\Precision|int $precision,
+        Timestamp\Format|string|null $format = null,
+        ?string $datetime = null,
+        ?\DateTimeZone $timezone = null,
+    ) {}
+
+    public function __toString() : string {}
+}
+
+/**
+ * ION reader API.
+ */
+interface Reader extends \RecursiveIterator {
+    public function getType() : Type;
+    public function hasAnnotations() : bool;
+    public function hasAnnotation(string $annotation) : bool;
+    public function isNull() : bool;
+    public function isInStruct() : bool;
+    public function getFieldName() : string;
+    public function getFieldNameSymbol() : Symbol;
+    public function getAnnotations() : array;
+    public function getAnnotationSymbols() : array;
+    public function countAnnotations() : int;
+    public function getAnnotation(int $index) : string;
+    public function getAnnotationSymbol(int $index) : Symbol;
+
+    public function readNull() : Type;
+    public function readBool() : bool;
+    public function readInt() : int|string;
+    public function readFloat() : float;
+    public function readDecimal() : Decimal;
+    public function readTimestamp() : Timestamp;
+    public function readSymbol() : Symbol;
+    public function readString() : string;
+    /** @param ref $string */
+    public function readStringPart(&$string, int $length = 0x1000) : bool;
+    public function readLob() : string;
+    /** @param ref $string */
+    public function readLobPart(&$string, int $length = 0x1000) : bool;
+
+    public function getPosition() : int;
+    public function getDepth() : int;
+
+    public function seek(int $offset, int $length = -1) : void;
+    /*
+    public function getSymbolTable() : SymbolTable;
+    public function setSymbolTable(SymbolTable $table) : void;
+    */
+    public function getValueOffset() : int;
+    public function getValueLength() : int;
+}
+
+/**
+ * ION writer API.
+ */
+interface Writer {
+    public function writeNull() : void;
+    public function writeTypedNull(Type $type) : void;
+    public function writeBool(bool $value) : void;
+    public function writeInt(int|string $value) : void;
+    public function writeFloat(float $value) : void;
+    public function writeDecimal(Decimal|string $value) : void;
+    public function writeTimestamp(Timestamp|string $value) : void;
+    public function writeSymbol(Symbol|string $value) : void;
+    public function writeString(string $value) : void;
+    public function writeCLob(string $value) : void;
+    public function writeBLob(string $value) : void;
+
+    public function startLob(Type $type) : void;
+    public function appendLob(string $data) : void;
+    public function finishLob() : void;
+
+    public function startContainer(Type $type) : void;
+    public function finishContainer() : void;
+
+    public function writeFieldName(string $name) : void;
+
+    public function writeAnnotation(Symbol|string ...$annotation) : void;
+
+    public function getDepth() : int;
+    public function flush() : int;
+    public function finish() : int;
+
+    // public function writeOne(Reader $reader) : void;
+    // public function writeAll(Reader $reader) : void;
+
+    // public function getCatalog() : Catalog;
+    // public function setCatalog(Catalog $catalog) : void;
+
+    // public function getSymbolTable() : Symbol\Table;
+    // puvlic function setSymbolTable(Symbol\Table $table) : void;
+}
+
+namespace ion\Symbol;
+
+/**
+ * The import location (referring to a shared table= of a symbol.
+ */
+class ImportLocation {
+    /**
+     * Create a new import location.
+     */
+    public function __construct(
+        /**
+         * The name of the shared symbol table.
+         */
+        public readonly string $name,
+        /**
+         * The location (sid) of the symbol within the table.
+         */
+        public readonly int $location,
+    ) {}
+}
+
+/**
+ * Base interface of built-in shared symbol tables.
+ */
+interface Enum {
+    /**
+     * @return \ion\Symbol Instance of the symbol.
+     */
+    public function toSymbol() : \ion\Symbol;
+
+    /**
+     * @return int The symbol id.
+     */
+    public function toSID() : int;
+
+    /**
+     * @return string The symbol's textual representation.
+     */
+    public function toString() : string;
+}
+
+/**
+ * Base interface of an ION symbol table.
+ */
+interface Table {
+    /**
+     * Get the maximum symbol ID within the symbol table.
+     * @return int The maximum symbol ID.
+     */
+    public function getMaxId() : int;
+
+    /**
+     * Add a symbol to the table.
+     *
+     * @param \ion\Symbol|string $symbol The symbol (value) to add.
+     * @return int The symbol ID.
+     */
+    public function add(\ion\Symbol|string $symbol) : int;
+
+    /**
+     * Find a symbol within the symbol table, including imports.
+     *
+     * @param string|int $id The ID or text of the symbol to find.
+     * @return \ion\Symbol|null The symbol found, if any.
+     */
+    public function find(string|int $id) : ?\ion\Symbol;
+
+    /**
+     * Find a symbol within **only this** symbol table, ignoring imports.
+     *
+     * @param string|int $id The ID or text of the symbol to find.
+     * @return \ion\Symbol|null The symbol found, if any.
+     */
+    public function findLocal(string|int $id) : ?\ion\Symbol;
+}
+
+namespace ion\Symbol\Table;
+
+/**
+ * Get the built-in PHP shared symbol table.
+ *
+ * @see \ion\Symbol\Table\PHP
+ * @return \ion\Symbol\Table The builtin PHP shared symbol table.
+ */
+function PHP() : \ion\Symbol\Table {}
+
+/**
+ * Get the built-in ION system shared symbol table.
+ *
+ * @see \ion\Symbol\Table\System
+ * @return \ion\Symbol\Table The builtin ION system shared symbol table.
+ */
+function System() : \ion\Symbol\Table {}
+
+/**
+ * The built-in ION system symbols.
+ */
+enum System : string implements \ion\Symbol\Enum {
+    case Ion                = '$ion';
+    case Ivm_1_0            = '$ion_1_0';
+    case IonSymbolTable     = '$ion_symbol_table';
+    case Name               = 'name';
+    case Version            = 'version';
+    case Imports            = 'imports';
+    case Symbols            = 'symbols';
+    case MaxId              = 'max_id';
+    case SharedSymbolTable  = '$ion_shared_symbol_table';
+
+    /** @alias ion\Symbol\Enum::toSymbol */
+    public function toSymbol() : \ion\Symbol {}
+    /** @alias ion\Symbol\Enum::toSID */
+    public function toSID() : int {}
+    /** @alias ion\Symbol\Enum::toString */
+    public function toString() : string {}
+}
+
+/**
+ * The built-in PHP symbols.
+ */
+enum PHP : string implements \ion\Symbol\Enum {
+    case PHP            = 'PHP';
+    case Reference      = 'R';
+    case Backref        = 'r';
+    case Property       = 'p';
+    case Object         = 'o';
+    case ClassObject    = 'c';
+    case MagicObject    = 'O';
+    case CustomObject   = 'C';
+    case Enum           = 'E';
+    case Serializable   = 'S';
+
+    /** @alias ion\Symbol\Enum::toSymbol */
+    public function toSymbol() : \ion\Symbol {}
+    /** @alias ion\Symbol\Enum::toSID */
+    public function toSID() : int {}
+    /** @alias ion\Symbol\Enum::toString */
+    public function toString() : string {}
+}
+
+/**
+ * A local symbol table.
+ *
+ * @see https://amzn.github.io/ion-docs/guides/symbols-guide.html the ION spec's symbol guide
+ * @see https://amzn.github.io/ion-docs/guides/cookbook.html#using-a-local-symbol-table the ION doc's cookbook
+ */
+class Local implements \ion\Symbol\Table {
+    /** Internal cache. */
+    private array $imports = [];
+    /** Internal cache. */
+    private array $symbols = [];
+
+    /**
+     * Create a local symbol table.
+     */
+    public function __construct() {}
+
+    /**
+     * Import a symbol table.
+     *
+     * @param \ion\Symbol\Table $table The symbol table to import.
+     * @return void
+     */
+    public function import(\ion\Symbol\Table $table) : void {}
+
+    /** @alias ion\Symbol\Table::getMaxId */
+    public function getMaxId() : int {}
+
+    /** @alias ion\Symbol\Table::add */
+    public function add(\ion\Symbol|string $symbol) : int {}
+    /** @alias ion\Symbol\Table::find */
+    public function find(string|int $id) : ?\ion\Symbol {}
+    /** @alias ion\Symbol\Table::findLocal */
+    public function findLocal(string|int $id) : ?\ion\Symbol {}
+}
+
+/**
+ * A shared symbol table.
+ *
+ * @see https://amzn.github.io/ion-docs/guides/symbols-guide.html the ION spec's symbol guide
+ * @see https://amzn.github.io/ion-docs/guides/cookbook.html#using-a-shared-symbol-table the ION doc's cookbook
+ */
+class Shared implements \ion\Symbol\Table {
+    /**
+     * Create a shared symbol table.
+     */
+    public function __construct(
+        /**
+         * The name of the shared symbol table.
+         */
+        public readonly string $name,
+        /**
+         * The version of the shared symbol table.
+         */
+        public readonly int $version = 1,
+        /**
+         * Predefined list of symbols as array of strings.
+         */
+        ?array $symbols = null,
+    ) {}
+
+    /** Internal cache. */
+    private array $symbols = [];
+
+    /** @alias ion\Symbol\Table::getMaxId */
+    public function getMaxId() : int {}
+
+    /** @alias ion\Symbol\Table::add */
+    public function add(\ion\Symbol|string $symbol) : int {}
+    /** @alias ion\Symbol\Table::find */
+    public function find(string|int $id) : ?\ion\Symbol {}
+    /** @alias ion\Symbol\Table::findLocal */
+    public function findLocal(string|int $id) : ?\ion\Symbol {}
+}
+
+namespace ion\Decimal;
+
+/**
+ * An ion\Decimal's context.
+ */
+class Context {
+    /**
+     * Create a new decimal context.
+     */
+    public function __construct(
+        /**
+         * Maximum digits.
+         */
+        public readonly int $digits,
+        /**
+         * Maximum exponent.
+         */
+        public readonly int $eMax,
+        /**
+         * Minimum exponent.
+         */
+        public readonly int $eMin,
+        /**
+         * Rounding mode.
+         */
+        public readonly Context\Rounding|int $round,
+        /**
+         * Whether to clamp.
+         */
+        public readonly bool $clamp,
+    ) {}
+
+    /**
+     * Create a context suitable for 32bit decimals.
+     */
+    public static function Dec32() : Context {}
+
+    /**
+     * Create a context suitable for 64bit decimals.
+     */
+    public static function Dec64() : Context {}
+
+    /**
+     * Create a context suitable for 128bit decimals.
+     */
+    public static function Dec128() : Context {}
+
+    /**
+     * Create a context with maximum settings.
+     * @param Context\Rounding|int $round Rounding mode.
+     */
+    public static function DecMax(Context\Rounding|int $round = Context\Rounding::HalfEven) : Context {}
+}
+
+namespace ion\Decimal\Context;
+
+/**
+ * Rounding mode.
+ */
+enum Rounding : int {
+    case Ceiling    = 0;
+    case Up         = 1;
+    case HalfUp     = 2;
+    case HalfEven   = 3;
+    case HalfDown   = 4;
+    case Down       = 5;
+    case Floor      = 6;
+    case Down05Up   = 7;
+}
+
+namespace ion\Timestamp;
+
+/**
+ * Timestamp precision.
+ */
+enum Precision : int {
+    case Year           = 0x1;
+    case Month          = 0x1|0x2;
+    case Day            = 0x1|0x2|0x4;
+    case Min            = 0x1|0x2|0x4|0x10;
+    case Sec            = 0x1|0x2|0x4|0x10|0x20;
+    case Frac           = 0x1|0x2|0x4|0x10|0x20|0x40;
+    case MinTZ          = 0x1|0x2|0x4|0x10|0x80;
+    case SecTZ          = 0x1|0x2|0x4|0x10|0x20|0x80;
+    case FracTZ         = 0x1|0x2|0x4|0x10|0x20|0x40|0x80;
+}
+
+/**
+ * Timestamp format.
+ */
+enum Format : string {
+    case Year           = "Y\T";
+    case Month          = "Y-m\T";
+    case Day            = "Y-m-d\T";
+    case Min            = "Y-m-d\TH:i";
+    case Sec            = "Y-m-d\TH:i:s";
+    case Frac           = "Y-m-d\TH:i:s.v";
+    case MinTZ          = "Y-m-d\TH:iP";
+    case SecTZ          = "Y-m-d\TH:i:sP";
+    case FracTZ         = "Y-m-d\TH:i:s.vP";
+}
+
+namespace ion\Reader;
+
+/**
+ * Reader options.
+ */
+class Options {
+    public function __construct(
+        /**
+         * ION catalog to use for symbol lookup.
+         */
+        public readonly ?\ion\Catalog $catalog = null,
+        /**
+         * Decimal context to use.
+         */
+        public readonly ?\ion\Decimal\Context $decimalContext = null,
+        /**
+         * Callback as function(\ion\Reader):void called upon local symbol table context change.
+         */
+        public readonly ?\Closure $onContextChange = null,
+        /**
+         * Whether to return otherwise hidden system values.
+         */
+        public readonly bool $returnSystemValues = false,
+        /**
+         * The maximum depth of nested containers.
+         */
+        public readonly int $maxContainerDepth = 10,
+        /**
+         * The maximum number of annotations allowed on a single value.
+         */
+        public readonly int $maxAnnotations = 10,
+        /**
+         * The maximum number of bytes of all annotations on a single value.
+         */
+        public readonly int $annotationBufferSize = 0x4000,
+        /**
+         * The maximum number of bytes of a symbol/value/chunk.
+         */
+        public readonly int $tempBufferSize = 0x4000,
+        /**
+         * Whether to skip UTF-8 validation.
+         */
+        public readonly bool $skipCharacterValidation = false,
+    ) {}
+}
+
+/**
+ * Base implementation of ION readers.
+ */
+abstract class Reader implements \ion\Reader {
+    /**
+     * Reader options.
+     */
+    public readonly ?Options $options;
+
+    public function hasChildren() : bool {}
+    public function getChildren() : \ion\Reader {}
+
+    public function rewind() : void {}
+    public function next() : void {}
+    public function valid() : bool {}
+    public function key() : mixed {}
+    public function current() : mixed {}
+
+    public function getType() : \ion\Type {}
+    public function hasAnnotations() : bool {}
+    public function hasAnnotation(string $annotation) : bool {}
+    public function isNull() : bool {}
+    public function isInStruct() : bool {}
+    public function getFieldName() : string {}
+    public function getFieldNameSymbol() : \ion\Symbol {}
+    public function getAnnotations() : array {}
+    public function getAnnotationSymbols() : array {}
+    public function countAnnotations() : int {}
+    public function getAnnotation(int $index) : string {}
+    public function getAnnotationSymbol(int $index) : \ion\Symbol {}
+
+    public function readNull() : \ion\Type {}
+    public function readBool() : bool {}
+    public function readInt() : int|string {}
+    public function readFloat() : float {}
+    public function readDecimal() : \ion\Decimal {}
+    public function readTimestamp() : \ion\Timestamp {}
+    public function readSymbol() : \ion\Symbol {}
+    public function readString() : string {}
+    /** @param ref $string */
+    public function readStringPart(&$string, int $length = 0x1000) : bool {}
+    public function readLob() : string {}
+    /** @param ref $string */
+    public function readLobPart(&$string, int $length = 0x1000) : bool {}
+
+    public function getPosition() : int {}
+    public function getDepth() : int{}
+
+    public function seek(int $offset, int $length = -1) : void {}
+    /*
+    public function getSymbolTable() : SymbolTable {}
+    public function setSymbolTable(SymbolTable $table) : void {}
+    */
+    public function getValueOffset() : int {}
+    public function getValueLength() : int {}
+}
+
+/**
+ * ION string buffer reader API.
+ */
+interface Buffer extends \ion\Reader {
+    /**
+     * Get the buffer read from.
+     *
+     * @return string The buffer read from.
+     */
+    public function getBuffer() : string;
+}
+
+/**
+ * ION stream reader API.
+ */
+interface Stream extends \ion\Reader {
+    /**
+     * Get the stream read from.
+     *
+     * @return resource The stream read from.
+     */
+    public function getStream();
+
+    /**
+     * Reset the stream read from.
+     *
+     * @param resource $stream The new stream to from.
+     */
+    public function resetStream($stream) : void;
+
+    /**
+     * Reset the stream read from, limiting length to read.
+     *
+     * @param resource $stream The stream to read from.
+     * @param int $length The maximum length to read from $stream.
+     */
+    public function resetStreamWithLength($stream, int $length) : void;
+}
+
+namespace ion\Reader\Buffer;
+
+/**
+ * ION string buffer reader.
+ */
+class Reader extends \ion\Reader\Reader implements \ion\Reader\Buffer {
+    /**
+     * Create a new string buffer reader.
+     *
+     * @param string $buffer The buffer to read from.
+     * @param \ion\Reader\Options|null $options Reader options.
+     */
+    public function __construct(
+        string $buffer,
+        ?\ion\Reader\Options $options = null,
+    ) {}
+
+    public function getBuffer() : string {}
+}
+
+namespace ion\Reader\Stream;
+
+/**
+ * ION stream reader.
+ */
+class Reader extends \ion\Reader\Reader implements \ion\Reader\Stream {
+    /**
+     * Create a new stream reader.
+     *
+     * @param resource $stream The stream to read from.
+     * @param \ion\Reader\Options|null $options Reader options.
+     */
+    public function __construct(
+        $stream,
+        ?\ion\Reader\Options $options = null,
+    ) {}
+
+    /**
+     * Get the stream read from.
+     *
+     * @return resource The stream read from.
+     */
+    public function getStream() {}
+
+    /** @param resource $stream */
+    public function resetStream($stream) : void {}
+    /** @param resource $stream */
+    public function resetStreamWithLength($stream, int $length) : void {}
+}
+
+namespace ion\Writer;
+
+/**
+ * ION writer options.
+ */
+class Options {
+    /**
+     * Create custom ION writer options.
+     */
+    public function __construct(
+        /**
+         * ION catalog to use for symbol lookup.
+         */
+        public readonly ?\ion\Catalog $catalog = null,
+        /**
+         * Decimal context to use.
+         */
+        public readonly ?\ion\Decimal\Context $decimalContext = null,
+        /**
+         * Whether to output binary ION.
+         */
+        public readonly bool $outputBinary = false,
+        /**
+         * Whether to write doubles which fit in 32 bits as floats.
+         */
+        public readonly bool $compactFloats = false,
+        /**
+         * Whether to slash-escape all non ASCII bytes.
+         */
+        public readonly bool $escapeNonAscii = false,
+        /**
+         * Whether to produce pretty-printed output.
+         */
+        public readonly bool $prettyPrint = false,
+        /**
+         * Whether to indent with tabs, when pretty-printing.
+         */
+        public readonly bool $indentTabs = true,
+        /**
+         * The number of spaces to use for indentation instead of tabs, when pretty-printing.
+         */
+        public readonly int $indentSize = 2,
+        /**
+         * Whether to immediately flush every value written.
+         */
+        public readonly bool $flushEveryValue = false,
+        /**
+         * Maximum depth of nested containers.
+         */
+        public readonly int $maxContainerDepth = 10,
+        /**
+         * The maximum number of annotations allowed on a single value.
+         */
+        public readonly int $maxAnnotations = 10,
+        /**
+         * Temporary buffer size.
+         */
+        public readonly int $tempBufferSize = 0x4000,
+    ) {}
+}
+
+/**
+ * Base implementation of common functionality of ION writers.
+ */
+abstract class Writer implements \ion\Writer {
+    public function writeNull() : void {}
+    public function writeTypedNull(\ion\Type $type) : void {}
+    public function writeBool(bool $value) : void {}
+    public function writeInt(int|string $value) : void {}
+    public function writeFloat(float $value) : void {}
+    public function writeDecimal(\ion\Decimal|string $value) : void {}
+    public function writeTimestamp(\ion\Timestamp|string $value) : void {}
+    public function writeSymbol(\ion\Symbol|string $value) : void {}
+    public function writeString(string $value) : void {}
+    public function writeCLob(string $value) : void {}
+    public function writeBLob(string $value) : void {}
+
+    public function startLob(\ion\Type $type) : void {}
+    public function appendLob(string $data) : void {}
+    public function finishLob() : void {}
+
+    public function startContainer(\ion\Type $type) : void {}
+    public function finishContainer() : void {}
+
+    public function writeFieldName(string $name) : void {}
+
+    public function writeAnnotation(\ion\Symbol|string ...$annotation) : void {}
+
+    public function getDepth() : int {}
+    public function flush() : int {}
+    public function finish() : int {}
+
+    // public function writeOne(\ion\Reader $reader) : void {}
+    // public function writeAll(\ion\Reader $reader) : void {}
+}
+
+/**
+ * ION buffer writer API.
+ */
+interface Buffer extends \ion\Writer {
+    /**
+     * Get the buffer written to.
+     *
+     * @reeturn string The buffer written so far.
+     */
+    public function getBuffer() : string;
+
+    /**
+     * Reset the buffer written to.
+     */
+    public function resetBuffer() : void;
+}
+
+/**
+ * ION stream writer API.
+ */
+interface Stream extends \ion\Writer {
+    /**
+     * Get the stream being written to.
+     * @return resource
+     */
+    public function getStream();
+}
+
+namespace ion\Writer\Buffer;
+
+/**
+ * IO buffer writer.
+ */
+class Writer extends \ion\Writer\Writer implements \ion\Writer\Buffer {
+    /**
+     * Create a new buffer writer.
+     *
+     * @param \ion\Writer\Options|null $options Writer options.
+     */
+    public function __construct(
+        ?\ion\Writer\Options $options = null,
+    ) {}
+
+    public function getBuffer() : string {}
+    public function resetBuffer() : void {}
+}
+
+namespace ion\Writer\Stream;
+
+/**
+ * ION stream writer.
+ */
+class Writer extends \ion\Writer\Writer implements \ion\Writer\Stream {
+    /**
+     * Create a new stream writer.
+     *
+     * @param resource $stream The stream to write to.
+     * @param \ion\Writer\Options|null $options Writer options.
+     */
+    public function __construct(
+        $stream,
+        ?\ion\Writer\Options $options = null,
+    ) {}
+    /**
+     * @return resource
+     */
+    public function getStream() {}
+}
+
+namespace ion\Serializer;
+
+/**
+ * Specialization of the serializer for PHP.
+ */
+class PHP implements \ion\Serializer {
+    /**
+     * Create a new PHP ION serializer.
+     */
+    public function __construct(
+        /**
+         * Writer options.
+         */
+        public readonly ?\ion\Writer\Options $writerOptions = null,
+        /**
+         * Whether to write the top level array as multiple ION sequences.
+         */
+        public readonly bool $multiSequence = false,
+        /**
+         * Whether to call magic __serialize() methods on objects to serialize.
+         */
+        public readonly bool $callMagicSerialize = true,
+        /**
+         * Whether and which custom serialize method to call on objects to serialize.
+         */
+        public readonly ?string $callCustomSerialize = null,
+    ) {}
+
+    public function serialize(mixed $data) : string {}
+}
+
+namespace ion\Unserializer;
+
+/**
+ * Specialization of the unserializer for PHP.
+ */
+class PHP implements \ion\Unserializer {
+    /**
+     * Create a new ION PHP unserializer.
+     */
+    public function __construct(
+        /**
+         * Reader options.
+         */
+        public readonly ?\ion\Reader\Options $readerOptions = null,
+        /**
+         * Whether to continue reading multiple ION sequences after the first one.
+         */
+        public readonly bool $multiSequence = false,
+        /**
+         * Whether to call magic __unserialize() methods on objects to unserialize.
+         */
+        public readonly bool $callMagicUnserialize = true,
+        /**
+         * Whether and which custom unserialize method to call on objects to unserialize.
+         */
+        public readonly ?string $callCustomUnserialize = null,
+    ){}
+
+    /** @param string|resource $data */
+    public function unserialize($data) : mixed {}
+}
diff --git a/docs/v0.0/ion/: Contributing.html b/docs/v0.0/ion/: Contributing.html
new file mode 100644 (file)
index 0000000..8bf285c
--- /dev/null
@@ -0,0 +1,140 @@
+<!doctype html>
+<html>
+       <head>
+               <meta charset="utf-8">
+               <title>
+                                                       ★ Contributing -
+                                               mdref
+               </title>
+               <meta name="viewport" content="width=1200, initial-scale=0.5">
+                                       <base href="/v0.0/">
+                       <meta http-equiv="Content-Location" content="/v0.0/ion/: Contributing">
+                       <link rel="stylesheet" href="index.css">
+               
+               <link href="https://fonts.googleapis.com/css?family=Inconsolata&amp;subset=latin-ext" rel="stylesheet">
+               <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+               <link rel="shortcut icon" href="/v0.0/favicon.ico">
+       </head>
+       <body>
+               <div class="page">
+               
+<div class="sidebar">
+       
+       <div class="edit">
+               <a href="./ion/: Contributing">Edit</a>
+       </div>
+       
+       
+       <ul>
+               <li>&lsh; <a href="./">Home</a>
+                       
+                       <ul>
+                               <li>
+                                                                                       
+                                       &uarr; <a href="./ion">
+                                                       ion
+                                               </a>
+                                               <ul>
+                                                       <li>
+                                                                                       
+                                                       &circlearrowright; <strong><a href="./ion/: Contributing">★ Contributing</a></strong>
+
+                                                       
+                                                                                                                                                                                                                                                               
+                                               </ul>
+                                                                                                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Exception">Exception</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/LOB">LOB</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Reader">Reader</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Serializer">Serializer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Symbol">Symbol</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Timestamp">Timestamp</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Type">Type</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Unserializer">Unserializer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Writer">Writer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/serialize">serialize</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/unserialize">unserialize</a></li>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                               </li>
+                       </ul>
+                       
+               </li>
+       </ul>
+</div>
+                                       
+<h1>Contributor Code of Conduct</h1>
+<p>As contributors and maintainers of this project, and in the interest of
+fostering an open and welcoming community, we pledge to respect all people who
+contribute through reporting issues, posting feature requests, updating
+documentation, submitting pull requests or patches, and other activities.</p>
+<p>We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.</p>
+<p>Examples of unacceptable behavior by participants include:</p>
+<ul>
+<li>The use of sexualized language or imagery</li>
+<li>Personal attacks</li>
+<li>Trolling or insulting/derogatory comments</li>
+<li>Public or private harassment</li>
+<li>Publishing other's private information, such as physical or electronic
+addresses, without explicit permission</li>
+<li>Other unethical or unprofessional conduct.</li>
+</ul>
+<p>Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct. By adopting this Code of Conduct, project
+maintainers commit themselves to fairly and consistently applying these
+principles to every aspect of managing this project. Project maintainers who do
+not follow or enforce the Code of Conduct may be permanently removed from the
+project team.</p>
+<p>This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.</p>
+<p>Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by opening an issue or contacting one or more of the project maintainers.</p>
+<p>This Code of Conduct is adapted from the
+<a href="http://contributor-covenant.org">Contributor Covenant</a>, version 1.2.0,
+available at <a href="http://contributor-covenant.org/version/1/2/0/">http://contributor-covenant.org/version/1/2/0/</a>.</p>
+
+
+
+               
+                       <div id="disqus_thread"><button id="disqus_activator">Show <span> </span> Comment(s)</button></div>
+                       <script>
+                               var disqus_shortname = 'mdref';
+                               var disqus_identifier = 'ion/: Contributing';
+                       </script>
+
+                       <footer>
+                               
+<ul>
+       <li><a href="https://github.com/m6w6/mdref">mdref-v2.0
+</a></li>
+       <li><a href="LICENSE">&copy; 2013-2022          All rights reserved.</a></li>
+       <li>
+</li>
+</ul>
+
+                       </footer>
+               
+                       <script src="index.js"></script>
+               
+               </div>
+       </body>
+</html>
diff --git a/docs/v0.0/ion/: Security.html b/docs/v0.0/ion/: Security.html
new file mode 100644 (file)
index 0000000..d34ab95
--- /dev/null
@@ -0,0 +1,135 @@
+<!doctype html>
+<html>
+       <head>
+               <meta charset="utf-8">
+               <title>
+                                                       ★ Security -
+                                               mdref
+               </title>
+               <meta name="viewport" content="width=1200, initial-scale=0.5">
+                                       <base href="/v0.0/">
+                       <meta http-equiv="Content-Location" content="/v0.0/ion/: Security">
+                       <link rel="stylesheet" href="index.css">
+               
+               <link href="https://fonts.googleapis.com/css?family=Inconsolata&amp;subset=latin-ext" rel="stylesheet">
+               <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
+               <link rel="shortcut icon" href="/v0.0/favicon.ico">
+       </head>
+       <body>
+               <div class="page">
+               
+<div class="sidebar">
+       
+       <div class="edit">
+               <a href="./ion/: Security">Edit</a>
+       </div>
+       
+       
+       <ul>
+               <li>&lsh; <a href="./">Home</a>
+                       
+                       <ul>
+                               <li>
+                                                                                       
+                                       &uarr; <a href="./ion">
+                                                       ion
+                                               </a>
+                                               <ul>
+                                                       <li>
+                                                                                       
+                                                       &circlearrowright; <strong><a href="./ion/: Security">★ Security</a></strong>
+
+                                                       
+                                                                                                                                                                                                                                                               
+                                               </ul>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Exception">Exception</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/LOB">LOB</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Reader">Reader</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Serializer">Serializer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Symbol">Symbol</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Timestamp">Timestamp</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Type">Type</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Unserializer">Unserializer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/Writer">Writer</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/serialize">serialize</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/unserialize">unserialize</a></li>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
+                               </li>
+                       </ul>
+                       
+               </li>
+       </ul>
+</div>
+                                       
+<h1>Security Policy</h1>
+<h2>Supported Versions<a id="Supported.Versions" href="#Supported.Versions" class="permalink" aria-hidden="true" title="">#</a></h2>
+<p>This project is still in its early development stages, so please consider
+any release not explicitly labeled as stable as experimental.</p>
+<table>
+<thead>
+<tr>
+<th>Version</th>
+<th>Supported</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>0.x</td>
+<td>✓</td>
+</tr>
+</tbody>
+</table>
+<h2>Reporting a Vulnerability<a id="Reporting.a.Vulnerability" href="#Reporting.a.Vulnerability" class="permalink" aria-hidden="true" title="">#</a></h2>
+<p>If you find a security vulnerability, please refrain from creating a
+public issue on Github, but rather contact me directly at <a href="mailto:mike@php.net">mike@php.net</a>
+or <a href="https://m6w6.name/#contact">another suitable private contact method</a>.</p>
+<p>Any past vulnerabilities should be found in release changelogs after they
+have been fixed.</p>
+<p>This is free and open source software provided under the the terms of
+the 2-Clause-BSD-License, see the <a href="./LICENSE">LICENSE</a> file.
+Thus, honor and goodwill is all being offered for reporting
+-- or even fixing -- any vulnerability.</p>
+
+
+
+               
+                       <div id="disqus_thread"><button id="disqus_activator">Show <span> </span> Comment(s)</button></div>
+                       <script>
+                               var disqus_shortname = 'mdref';
+                               var disqus_identifier = 'ion/: Security';
+                       </script>
+
+                       <footer>
+                               
+<ul>
+       <li><a href="https://github.com/m6w6/mdref">mdref-v2.0
+</a></li>
+       <li><a href="LICENSE">&copy; 2013-2022          All rights reserved.</a></li>
+       <li>
+</li>
+</ul>
+
+                       </footer>
+               
+                       <script src="index.js"></script>
+               
+               </div>
+       </body>
+</html>
index 5135e9b8c9faf6487b5618bd756efc59691bebdf..0514467a4d727721e1914944c63d115959517be2 100644 (file)
                                                        
                                                                                                                                                                                                                                                                
                                                </ul>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
                                                                                                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
                                                                                                                                                        
index 71434afaa79e2cf54719f6008542ab800a96b44b..c521e50add077fe209322082bf2e184ce549be35 100644 (file)
 <li>ion\Symbol\Table $table<br />
 The new table to add.</li>
 </ul>
-<h2>Returns:<a id="Returns:" href="#Returns:" class="permalink" aria-hidden="true" title="">#</a></h2>
-<ul>
-<li>void,</li>
-</ul>
 
 
 
index 98b80fcdd0dfa3db473d3e7519ce976217ba7e29..ff4534373c80db79990e34139b82568aa1e1e822 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Exception">Exception</a></li>
index bf97b1a615d7986e0421830e991301f44df2d538..c7a36850f0eff0f75a8a2edc329aec4848d952da 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index bc07f4bc8e849206bdb5c2c1b9ca61618f55a3ee..cf489a29e6389089a0c69f88650ab94cb6c93b38 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 8dbe242ba3624cf8a461c12038f5c2b14125f756..f7d037cd9bf9d59707c8f0782b97b80a2178654c 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index e22108c716a8d17be74743ad53b178e5965ff82c..7d0aa5d89a2ce0dcd43955d2136317f79753e763 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 23dc76190622eca9e43b15509ac28f7665512f2a..18bfc3c9ff94ba6bea135f0cc2c62692c7d04cb4 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index c8b42792bce6c90eec1fe661df8ba96cbeca2a2a..821eb02c9ec614e3bb0f6e88758fb18d552e455a 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 9351ae368f51044fa8b6915d12ce2917c0edfeed..5867acf9a10d7228e353d65498187fb7d8621524 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 21542350666e8222dd9e291b84cb122c210e38aa..4e62282e2ac0c0b10e81f79e0df4262861ad8ff7 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 148914a82cc7feda9a7ed97d0f7cecce10d83d63..20d882eb2e7cd0e325dbd049b294b1efc4a265a5 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 265ce7d13f08140ba146c4bf8043ca5121d4acdf..3f272eb96c8943f5326d2756e838c599b995b620 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index 83d3856ebf5f28c619a34cc994ce0ab4445f2911..746ef29d15af910d41ea3b6e7fb451ff3276346e 100644 (file)
                                                                                                                                                                                                                                                                
                                                </ul>
                                                                                                                                                        
+                                               <li>&ldsh; <a href="./ion/: Contributing">★ Contributing</a></li>
+                                                                                                                                                       
+                                               <li>&ldsh; <a href="./ion/: Security">★ Security</a></li>
+                                                                                                                                                       
                                                <li>&ldsh; <a href="./ion/Catalog">Catalog</a></li>
                                                                                                                                                        
                                                <li>&ldsh; <a href="./ion/Decimal">Decimal</a></li>
index ce04908350f466d6a9d5c64d1703a0ff9967f9e5..cdae013e27711c0e2797255e98cd7350f5e2bd64 100644 (file)
@@ -40,6 +40,7 @@ https://awesomized.github.io/ext-ion/
    <file role="doc" name="CREDITS"/>
    <file role="doc" name="LICENSE"/>
    <file role="doc" name="README.md"/>
+   <file role="doc" name="SECURITY.md"/>
    <dir name="docs">
     <file role="doc" name=".nojekyll"/>
     <file role="doc" name="index.html"/>