// Path: src/bibtex/dom/BibtexString.java
// public class BibtexString extends BibtexAbstractValue {
// 
// 	//	content does not include the quotes or curly braces around the string!
// 	private String content;
// 
// 	/**
// 	 * content includes the quotes or curly braces around the string!
// 	 * 
// 	 * @param content
// 	 */
// 	BibtexString(BibtexFile file, String content) {
// 		super(file);
// 		this.content = content;
// 	}
// 
// 	/**
// 	 * content includes the quotes or curly braces around the string!
// 	 * 
// 	 * @return String
// 	 */
// 	public String getContent() {
// 		return content;
// 	}
// 
// 	/**
// 	 * Sets the content.
// 	 * @param content The content to set
// 	 */
// 	public void setContent(String content) {
// 	    
// 	    assert content!=null: "content parameter may not be null.";
// 	    
// 		this.content = content;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see bibtex.dom.BibtexNode#printBibtex(java.io.PrintWriter)
// 	 */
// 	public void printBibtex(PrintWriter writer) {
// 	    
// 	    assert writer!=null: "writer parameter may not be null.";
// 	    
// 		// is this really a number?
// 		try {
// 			Integer.parseInt(content);
// 			writer.print(content);
// 		} catch (NumberFormatException nfe) {
// 			writer.print('{');
// //			for (int begin = 0; begin < content.length();) {
// //				int end = content.indexOf('\n', begin);
// //				if (end < 0) {
// //					if (begin > 0)
// //						writer.print(content.substring(begin, content.length()));
// //					else
// //						writer.print(content);
// //
// //					break;
// //				}
// //				writer.println(content.substring(begin, end));
// //				writer.print("\t\t");
// //				begin = end + 1;
// //			}
// 			writer.print(content);
// 			writer.print('}');
// 		}
// 	}
// 
// }


import java.util.LinkedList;
import java.util.List;
import bibtex.dom.*;
import bibtex.dom.BibtexString;
/*
 * Created on Mar 27, 2003
 *
 * @author henkel@cs.colorado.edu
 * 
 */
package bibtex.expansions;



/**
 * @author henkel
 */
final class BibtexPersonListParser {

    static final class StringIterator {

        private final char[] chars;

        private int pos;

        StringIterator(String string) {
            chars = string.toCharArray();
            pos = 0;
        }

        char next() {
            return chars[pos++];
        }

        char current() {
            return chars[pos];
        }

        void step() {
            pos++;
        }

        void skipWhiteSpace() {
            while (pos < chars.length && Character.isWhitespace(chars[pos]))
                pos++;
        }

        boolean hasNext() {
            return pos + 1 < chars.length;
        }
    }

// Path: src/bibtex/dom/BibtexString.java
// public class BibtexString extends BibtexAbstractValue {
// 
// 	//	content does not include the quotes or curly braces around the string!
// 	private String content;
// 
// 	/**
// 	 * content includes the quotes or curly braces around the string!
// 	 * 
// 	 * @param content
// 	 */
// 	BibtexString(BibtexFile file, String content) {
// 		super(file);
// 		this.content = content;
// 	}
// 
// 	/**
// 	 * content includes the quotes or curly braces around the string!
// 	 * 
// 	 * @return String
// 	 */
// 	public String getContent() {
// 		return content;
// 	}
// 
// 	/**
// 	 * Sets the content.
// 	 * @param content The content to set
// 	 */
// 	public void setContent(String content) {
// 	    
// 	    assert content!=null: "content parameter may not be null.";
// 	    
// 		this.content = content;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see bibtex.dom.BibtexNode#printBibtex(java.io.PrintWriter)
// 	 */
// 	public void printBibtex(PrintWriter writer) {
// 	    
// 	    assert writer!=null: "writer parameter may not be null.";
// 	    
// 		// is this really a number?
// 		try {
// 			Integer.parseInt(content);
// 			writer.print(content);
// 		} catch (NumberFormatException nfe) {
// 			writer.print('{');
// //			for (int begin = 0; begin < content.length();) {
// //				int end = content.indexOf('\n', begin);
// //				if (end < 0) {
// //					if (begin > 0)
// //						writer.print(content.substring(begin, content.length()));
// //					else
// //						writer.print(content);
// //
// //					break;
// //				}
// //				writer.println(content.substring(begin, end));
// //				writer.print("\t\t");
// //				begin = end + 1;
// //			}
// 			writer.print(content);
// 			writer.print('}');
// 		}
// 	}
// 
// }


// Path: src/bibtex/expansions/BibtexPersonListParser.java
import java.util.LinkedList;
import java.util.List;
import bibtex.dom.*;
import bibtex.dom.BibtexString;

/*
 * Created on Mar 27, 2003
 *
 * @author henkel@cs.colorado.edu
 * 
 */
package bibtex.expansions;



/**
 * @author henkel
 */
final class BibtexPersonListParser {

    static final class StringIterator {

        private final char[] chars;

        private int pos;

        StringIterator(String string) {
            chars = string.toCharArray();
            pos = 0;
        }

        char next() {
            return chars[pos++];
        }

        char current() {
            return chars[pos];
        }

        void step() {
            pos++;
        }

        void skipWhiteSpace() {
            while (pos < chars.length && Character.isWhitespace(chars[pos]))
                pos++;
        }

        boolean hasNext() {
            return pos + 1 < chars.length;
        }
    }

    public static BibtexPersonList parse(BibtexString personList,String entryKey) throws PersonListParserException {