/// <summary>
        /// Creates a new CharacterString containing a substring of this one.
        /// </summary>
        /// <param name="startIndex">The zero-based starting character position of the
        /// substring in this instance</param>
        /// <param name="length">The number of characters in the substring.</param>
        /// <returns>A new CharacterString containing the substring.</returns>
        public CharacterString Substring(int startIndex, int length)
        {
            CharacterString substring = new CharacterString();

            substring.AddRange(this.Where((c, index) => (index >= startIndex) && (index < startIndex + length)));

            return(substring);
        }
        /// <summary>
        /// Removes all leading and trailing whitespace from this CharacterString. This
        /// CharacterString is not affected.
        /// </summary>
        /// <returns>The trimmed CharacterString.</returns>
        public CharacterString Trim()
        {
            CharacterString trimmed = new CharacterString(this);

            // trim from the front
            while ((trimmed.Count > 0) && (trimmed[0].IsWhitespace))
            {
                trimmed.RemoveAt(0);
            }

            // trim from the end
            while ((trimmed.Count > 0) && (trimmed[trimmed.Count - 1].IsWhitespace))
            {
                trimmed.RemoveAt(trimmed.Count - 1);
            }

            return(trimmed);
        }
        public void Write(CharacterString text)
        {
            Vec pos = Vec.Zero;

            CheckBounds(pos.X, pos.Y);

            foreach (Character c in text)
            {
                Set(pos, c);
                pos += new Vec(1, 0);

                // don't run past edge
                if (pos.X >= Size.X)
                {
                    break;
                }
            }
        }