public function init($formatStr, $removeLeadSpace = true)
	{
		//	Convert new spec types to proper format string with proper added charactera.
		$this->_formatStr = preg_replace(
			array(
				self::SPEC_FIND . '[aA]/u',
				self::SPEC_FIND . 'H/u',
				self::SPEC_FIND . '[qQ]/u',
				self::SPEC_FIND . 'S/u',
				self::SPEC_FIND . '[tT]/u'
			),
			array(
				'\'$1s\'',
				'$1s',
				'"$1s"',
				'$1s',
				'`$1s`'
			),
			$formatStr
		);

		//	removes initial tabs or spaces from line
		if ( $removeLeadSpace ) {
			$this->_formatStr = preg_replace('/^\s+/um', '', $this->_formatStr);
		}

		//	create an array of specification letters
		$specs = array();
		$specCount = preg_match_all(self::FILTERS, $formatStr, $specs);

		//	remove escaping pointer to numbered specifiers
		//	we're assuming they're used from some place earlier
		$numSpec = array();
		for ( $l = $specCount - 1; $l >= 0; --$l ) {
			if ( false !== strpos($specs[0][$l], '$') ) {
				$numSpec[] = $specs[0][$l];
				unset($specs[0][$l], $specs[1][$l]);
				--$specCount;
			}
		}
		$specs[0] = array_values($specs[0]);
		$specs[1] = array_values($specs[1]);

		//	Save the indexes of the specs to escape.
		//	Members might not be at sequential indexes.
		$this->_specsToEsc = array();
		$this->_specsToHex = array();
		for ($i = 0; $i < $specCount; ++$i) {
			switch ( $specs[1][$i] ) {
				case 'A':
				case 'Q':
				case 'S':
				case 'T':
				$this->_specsToEsc[] = $i;
				break;

				case 'H':
				$this->_specsToHex[] = $i;
				break;
			}
		}

		//	Add values from referenced specs.
		foreach ($numSpec as $ns) {
			if ( preg_match('/A|Q|S|T/u', $ns) ) {
				$ref = preg_replace('/^\D*(\d+)\D*$/u', '$1', $ns) - 1;
				if ( !in_array($ref, $this->_specsToEsc) ) {
					$this->_specsToEsc[] = $ref;
				}
				if ( !in_array($ref, $this->_specsToHex) ) {
					$this->_specsToHex[] = $ref;
				}
			}
		}

		return $this;	//	allows for chaining
	}