private Element buildPattern(String pattern, String changes) {
	
		Element head = null;
		Element temp = null;
		
		pattern = Transliteration.expandRanges(pattern);
		changes = Transliteration.expandRanges(changes);
		
		final StringCharacterIterator a = new StringCharacterIterator(pattern);
		final StringCharacterIterator b = new StringCharacterIterator(changes);
		
		while(a.current() != CharacterIterator.DONE) // StringCharacterIterator.DONE?!? What kind of high school intern 
		{ // wrote this class...  hello... hasNext() !
			if (temp == null) {
				head = new Element();
				temp = head;
			} else {
				temp.next = new Element();
				temp = temp.next;
			}
			
			if (a.current() == '\\') {
				temp.item = a.next();
				temp.replacement = b.current();
				
				if (a.current() == CharacterIterator.DONE) {
					throw new PatternSyntaxException("attempting to escape end of pattern string", pattern, a.getEndIndex() - 1);
				} else if (Transliteration.AvailableOptions.indexOf(temp.item) == -1) {
					throw new PatternSyntaxException("unrecognized escaped meta-character '" + temp.item + "'", pattern, a.getIndex());
				} else {
					// anything escaped is considered special except for a \, a ., and a -
					temp.isSpecial = a.current() != '\\' && a.current() != '.' && a.current() != '-';
				}
			} else {
				temp.item = a.current();
				temp.replacement = b.current();
				
				temp.isSpecial = a.current() == '.'; // a . is always considered special unless escaped...
			}
			
			a.next();
			b.next();
			
			if (b.current() == CharacterIterator.DONE && (options & Transliteration.OPTION_DELETE) != Transliteration.OPTION_DELETE) {
				b.last();
			}
		}
		
		return head;
	}