/* * $RCSfile: ObjectFile.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistribution of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. * * $Revision: 1.6 $ * $Date: 2009/12/21 13:55:05 $ * $State: Exp $ */ package org.mt4j.util.modelImporter.fileObj; import java.io.IOException; import java.io.Reader; import java.io.StreamTokenizer; class ObjectFileParser extends StreamTokenizer { private static final char BACKSLASH = '\\'; /** * setup * * Sets up StreamTokenizer for reading ViewPoint .obj file format. */ void setup() { resetSyntax(); eolIsSignificant(true); lowerCaseMode(true); // All printable ascii characters wordChars('!', '~'); // Comment from ! to end of line commentChar('!'); whitespaceChars(' ', ' '); whitespaceChars('\n', '\n'); whitespaceChars('\r', '\r'); whitespaceChars('\t', '\t'); // These characters returned as tokens ordinaryChar('#'); ordinaryChar('/'); ordinaryChar(BACKSLASH); } // End of setup /** * getToken * * Gets the next token from the stream. Puts one of the four * constants (TT_WORD, TT_NUMBER, TT_EOL, or TT_EOF) or the token value * for single character tokens into ttype. Handles backslash * continuation of lines. */ void getToken(){ int t; boolean done = false; try { do { t = nextToken(); if (t == BACKSLASH) { t = nextToken(); if (ttype != TT_EOL) done = true; } else done = true; } while (!done); } catch (IOException e) { throw new ParsingErrorException( "IO error on line " + lineno() + ": " + e.getMessage()); } } // End of getToken void printToken() { switch (ttype) { case TT_EOL: System.out.println("Token EOL"); break; case TT_EOF: System.out.println("Token EOF"); break; case TT_WORD: System.out.println("Token TT_WORD: " + sval); break; case '/': System.out.println("Token /"); break; case BACKSLASH: System.out.println("Token " + BACKSLASH); break; case '#': System.out.println("Token #"); break; } } // end of printToken /** * skipToNextLine * * Skips all tokens on the rest of this line. Doesn't do anything if * We're already at the end of a line */ void skipToNextLine() throws ParsingErrorException { while (ttype != TT_EOL) { getToken(); } } // end of skipToNextLine /** * getNumber * * Gets a number from the stream. Note that we don't recognize * numbers in the tokenizer automatically because numbers might be in * scientific notation, which isn't processed correctly by * StreamTokenizer. The number is returned in nval. */ void getNumber() throws ParsingErrorException { // int t; try { getToken(); if (ttype != TT_WORD) throw new ParsingErrorException("Expected number on line " + lineno()); nval = (Double.valueOf(sval)).doubleValue(); } catch (NumberFormatException e) { throw new ParsingErrorException(e.getMessage()); } } // end of getNumber // ObjectFileParser constructor ObjectFileParser(Reader r) { super(r); setup(); } // end of ObjectFileParser } // End of file ObjectFileParser.java