Initial port of the Name::Component, Name, Interest, Data, Signature, and Face classes
diff --git a/name.rst b/name.rst
new file mode 100644
index 0000000..20e1543
--- /dev/null
+++ b/name.rst
@@ -0,0 +1,444 @@
+.. _Name.Component:
+
+Name.Component Class
+====================
+
+A Name.Component is holds a read-only name component value
+
+:[C++]:
+
+    Namespace: ``ndn``
+
+Name.Component Constructor
+--------------------------
+
+Create a new Name.Component, copying the optional value.
+
+
+:[C++]:
+
+.. code-block:: c++
+
+    ndn::Name::Component(
+        [const std::vector<uint8_t>& value]
+    );
+
+:Parameters:
+
+    - ``value``
+	(optional) The content byte array to copy.
+
+Name.Component.toEscapedString Method
+-------------------------------------
+
+Convert this component value by escaping characters according to the NDN URI Scheme.
+
+:[C++]:
+
+.. code-block:: c++
+
+    std::string toEscapedString() const ();
+
+:Returns:
+
+    The escaped string.
+
+.. _Name:
+
+Name Class
+==========
+
+A Name holds an array of Name.Component and represents an NDN name.
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Name Constructor (array of components)
+--------------------------------------
+
+Create a new Name with the optional components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name(
+	[const std::vector<Name::Component>& components]
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Name = function Name (
+        [components   // Array<Uint8Array>]    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self
+	[, components // Array<string>]
+    )
+    
+:Parameters:
+
+    - ``components``
+	(optional) The array of name components.
+
+Name Constructor (from URI)
+---------------------------
+
+Parse the uri according to the NDN URI Scheme and create the Name with the components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name(
+	const char* uri
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Name = function Name (
+	uri // string
+    )
+
+:Parameters:
+
+    - ``uri``
+	The URI in NDN URI Scheme.
+
+Name.toUri Method
+-----------------
+
+Return the escaped name string according to the NDN URI Scheme.
+
+:[C++]:
+
+.. code-block:: c++
+
+    std::string toUri() const ();
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns string
+    Name.prototype.toUri = function();
+
+:Returns:
+
+The escaped name string according to the NDN URI Scheme.
+
+Name.size Method
+----------------
+
+Get the number of components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    size_t getComponentCount() const;
+
+:Returns:
+
+    The number of components.
+
+Name.get Method
+---------------
+
+Get a Name Component by index number.
+
+:[C++]:
+
+.. code-block:: c++
+
+    const Component& getComponent(
+        size_t i
+    ) const;
+
+:Parameters:
+
+    - ``i``
+	The index of the component to get, starting from 0.
+
+:Returns:
+
+    The Name.Component.
+
+Name.getPrefix Method
+---------------------
+
+Get a new Name with the first nComponents components of this Name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name getPrefix(
+        size_t nComponents
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns Name
+    Name.prototype.getPrefix = function(
+        nComponents  // Number
+    );
+
+:Parameters:
+
+    - nComponents
+	The number of prefix components. If larger than the number of components in this name, return a copy of this Name.
+
+:Returns:
+
+    A new Name.
+
+Name.getSubName Method
+----------------------
+
+Get a new name, constructed as a subset of components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name getSubName(
+        size_t iStartComponent
+	[, size_t nComponents]
+    ) const;
+
+:Parameters:
+
+    - ``iStartComponent``
+	The index if the first component to get.
+
+    - ``nComponents``
+	(optional) The number of components starting at iStartComponent. If omitted, return components until the end of the name.
+
+:Returns:
+
+    A new Name.
+
+Name.match Method
+-----------------
+
+Check if the N components of this name are the same as the first N components of the given name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    bool match(
+	const Name& name
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns boolean
+    Name.prototype.match = function(
+        name  // Name
+    );
+
+:Parameters:
+
+    - ``name``
+	The Name to check.
+
+    - ``nComponents``
+	The number of components starting at iStartComponent. If omitted, return components until the end of the name.
+
+:Returns:
+
+    true if this matches the given name, otherwise false.  This always returns true if this name is empty.
+
+Name.append Method (copy byte array)
+------------------------------------
+
+Append a new component, copying from byte array.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const std::vector<uint8_t>& value
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.append = function(
+        value  // Array<number>|ArrayBuffer|Uint8Array
+    )
+
+:Parameters:
+
+    - ``value``
+	The component byte array to copy.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Blob)
+------------------------------
+
+Append a new component, taking another pointer to the byte array in the Blob.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Blob& value
+    );
+
+:Parameters:
+
+    - ``value``
+	The Blob with the pointer to the byte array.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Component)
+-----------------------------------
+
+Append the component to this name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Name::Component& value
+    );
+
+:Parameters:
+
+    - ``value``
+	The Name.Component to append.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Name)
+------------------------------
+
+Append the components of the given name to this name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Name& name
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.append = function(
+        value  // Name
+    )
+
+:Parameters:
+
+    - ``name``
+	The Name with components to append.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.appendSegment Method
+-------------------------
+
+Append a component with the encoded segment number.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& appendSegment(
+        uint64_t segment
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.appendSegment = function(
+	segment  // Number
+    )
+
+:Parameters:
+
+    - ``segment``
+	The integer segment number to be encoded.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.appendVersion Method
+-------------------------
+
+Append a component with the encoded version number. Note that this encodes the exact value of version without converting from a time representation.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& appendVersion(
+	uint64_t version
+    );
+
+:Parameters:
+
+    - ``version``
+	The version number to be encoded.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Other Name getter and setter methods
+------------------------------------
+
+.. code-block:: javascript
+
+    // Returns a new Name
+    Name.prototype.cut = function(
+	minusComponents  // number
+    )
+    
+    // Returns number
+    Name.prototype.indexOfFileName = function()
+    
+    // Returns Boolean
+    Name.prototype.equalsName = function(
+	name            // Name
+    )