void readFace(ObjectFileParser st) throws ParsingErrorException {
	int vertIndex, texIndex = 0, normIndex = 0;
	int count = 0;

	//   There are n vertices on each line.  Each vertex is comprised
	//   of 1-3 numbers separated by slashes ('/').  The slashes may
	//   be omitted if there's only one number.

	st.getToken();

	while (st.ttype != st.TT_EOL) {
	    // First token is always a number (or EOL)
	    st.pushBack();
	    st.getNumber();
	    vertIndex = (int)st.nval - 1;
	    if (vertIndex < 0) vertIndex += coordList.size() + 1;
	    coordIdxList.add(new Integer(vertIndex));

	    // Next token is a slash, a number, or EOL.  Continue on slash
	    st.getToken();
	    if (st.ttype == '/') {

		// If there's a number after the first slash, read it
		st.getToken();
		if (st.ttype == st.TT_WORD) {
		    // It's a number
		    st.pushBack();
		    st.getNumber();
		    texIndex = (int)st.nval - 1;
		    if (texIndex < 0) texIndex += texList.size() + 1;
		    texIdxList.add(new Integer(texIndex));
		    st.getToken();
		}

		// Next token is a slash, a number, or EOL.  Continue on slash
		if (st.ttype == '/') {

		    // There has to be a number after the 2nd slash
		    st.getNumber();
		    normIndex = (int)st.nval - 1;
		    if (normIndex < 0) normIndex += normList.size() + 1;
		    normIdxList.add(new Integer(normIndex));
		    st.getToken();
		}
	    }
	    if ((DEBUG & 32) != 0) {
		System.out.println("  " + vertIndex + '/' + texIndex +
				   '/' + normIndex);
	    }
	    count++;
	}

	Integer faceNum = new Integer(stripCounts.size());
	stripCounts.add(new Integer(count));

	// Add face to current groups
	groups.put(faceNum, curGroup);
	if (curSgroup != null) sGroups.put(faceNum, curSgroup);

	// In case we exited early
	st.skipToNextLine();
    } // End of readFace