From: Michael T H. <mic...@us...> - 2003-12-12 17:52:58
|
Update of /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/script In directory sc8-pr-cvs1:/tmp/cvs-serv6292/src/org/openscience/jmol/viewer/script Modified Files: Compiler.java Eval.java Token.java Log Message: added insertion code support to parser Index: Compiler.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/script/Compiler.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Compiler.java 12 Dec 2003 14:15:42 -0000 1.19 +++ Compiler.java 12 Dec 2003 17:52:55 -0000 1.20 @@ -171,13 +171,13 @@ ltoken.addElement(new Token(Token.decimal, new Float(value))); continue; } - if (lookingAtSequenceCode()) { + if (lookingAtSeqcode()) { int seqNum = Integer.parseInt(script.substring(ichToken, ichToken + cchToken - 1)); char insertionCode = script.charAt(ichToken + cchToken - 1); - int sequence = PdbGroup.getSequence(seqNum, insertionCode); - ltoken.addElement(new Token(Token.sequenceCode, sequence)); + int seqcode = PdbGroup.getSeqcode(seqNum, insertionCode); + ltoken.addElement(new Token(Token.seqcode, seqcode, "seqcode")); continue; } if (lookingAtPositiveInteger() || @@ -185,7 +185,7 @@ lookingAtNegativeInteger())) { int val = Integer.parseInt(script.substring(ichToken, ichToken + cchToken)); - ltoken.addElement(new Token(Token.integer, val)); + ltoken.addElement(new Token(Token.integer, val, "integer")); continue; } } @@ -409,7 +409,7 @@ return cchToken > 1; // decimal point plust at least one digit } - boolean lookingAtSequenceCode() { + boolean lookingAtSeqcode() { int ichT = ichToken; char ch = ' '; while (ichT < cchScript && (ch = script.charAt(ichT)) >= '0' && ch <= '9') @@ -641,7 +641,11 @@ resNamePattern ::= up to 3 alphanumeric chars with * and ? - clauseResNumSpec ::= * | {-} integer { - {-} integer} + clauseResNumSpec ::= * | clauseSequenceRange + + clauseSequenceRange ::= clauseSequenceCode { - clauseSequenceCode } + + clauseSequenceCode ::= seqcode | {-} integer clauseChainSpec ::= {:} * | identifier | integer @@ -743,6 +747,7 @@ return clauseWithin(); case Token.hyphen: // selecting a negative residue spec case Token.integer: + case Token.seqcode: case Token.asterisk: case Token.leftsquare: case Token.identifier: @@ -832,7 +837,8 @@ } if (tok == Token.asterisk || tok == Token.hyphen || - tok == Token.integer) { + tok == Token.integer || + tok == Token.seqcode) { log("I see a residue number"); if (! clauseResNumSpec()) return false; @@ -923,7 +929,7 @@ log("still here looking at:" + strToken); // still might be an identifier ... so be careful - int sequence = -1; + int seqcode = -1; char chain = '?'; if (cchToken > 3) { // let's take a look at the last character @@ -940,7 +946,7 @@ try { int sequenceNum = Integer.parseInt(strResno); log("I parsed sequenceNum=" + sequenceNum); - sequence = PdbGroup.getSequence(sequenceNum, ' '); + seqcode = PdbGroup.getSeqcode(sequenceNum, ' '); } catch (NumberFormatException e) { return generateResidueSpecCode(tokenIdent); } @@ -957,12 +963,12 @@ return generateResidueSpecCode(tokenIdent); } log(" I see a residue name:" + strUpper3 + - " sequence=" + sequence + + " seqcode=" + seqcode + " chain=" + chain); - if (sequence != -1) + if (seqcode != -1) generateResidueSpecCode(new Token(Token.spec_number, - sequence, "spec_number")); + seqcode, "spec_number")); if (chain != '?') generateResidueSpecCode(new Token(Token.spec_chain, chain, "spec_chain")); return true; @@ -974,40 +980,44 @@ tokenNext(); return true; } - boolean negativeInt1 = false; + return clauseSequenceRange(); + } + + boolean clauseSequenceRange() { + if (! clauseSequenceCode()) + return false; if (tokPeek() == Token.hyphen) { tokenNext(); - negativeInt1 = true; + int seqcodeMin = seqcode; + if (! clauseSequenceCode()) + return false; + return generateResidueSpecCode(new Token(Token.spec_number_range, + seqcodeMin, + new Integer(seqcode))); } - Token tokenInt1 = tokenNext(); - if (tokenInt1.tok != Token.integer) - return resnumSpecificationExpected(); - int sequenceNum = negativeInt1 ? -tokenInt1.intValue : tokenInt1.intValue; - log("sequenceNum=" + sequenceNum); - int sequence = PdbGroup.getSequence(sequenceNum, ' '); - if (tokPeek() != Token.hyphen) - return generateResidueSpecCode(new Token(Token.spec_number, - sequence, "spec_number")); - log("seems to be a range"); - tokenNext(); // throw away range hyphen - // now look for negative int hyphen - boolean negativeInt2 = false; - if (tokPeek() == Token.hyphen) { + return generateResidueSpecCode(new Token(Token.spec_number, + seqcode, "seqcode")); + } + + int seqcode; + + boolean clauseSequenceCode() { + boolean negative = false; + int tokPeek = tokPeek(); + if (tokPeek == Token.hyphen) { tokenNext(); - negativeInt2 = true; + negative = true; + tokPeek = tokPeek(); } - Token tokenInt2 = tokenNext(); - if (tokenInt2.tok != Token.integer) - return resnumSpecificationExpected(); - int sequenceNumLast = - (negativeInt2 ? -tokenInt2.intValue : tokenInt2.intValue); - log("sequenceNumLast=" + sequenceNumLast); - - int sequenceLast = PdbGroup.getSequence(sequenceNumLast, ' '); - - return generateResidueSpecCode(new Token(Token.spec_number_range, - sequence, - new Integer(sequenceLast))); + if (tokPeek == Token.seqcode) + seqcode = tokenNext().intValue; + else if (tokPeek == Token.integer) + seqcode = PdbGroup.getSeqcode(tokenNext().intValue, ' '); + else + return false; + if (negative) + seqcode = -seqcode; + return true; } boolean clauseChainSpec() { Index: Eval.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/script/Eval.java,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- Eval.java 12 Dec 2003 12:24:26 -0000 1.56 +++ Eval.java 12 Dec 2003 17:52:55 -0000 1.57 @@ -782,7 +782,7 @@ PdbAtom pdbatom = frame.getAtomAt(i).getPdbAtom(); if (pdbatom == null) continue; - if (number == pdbatom.getSequence()) + if (number == pdbatom.getSeqcode()) bsResno.set(i); } return bsResno; @@ -795,7 +795,7 @@ PdbAtom pdbatom = frame.getAtomAt(i).getPdbAtom(); if (pdbatom == null) continue; - int atomResno = pdbatom.getSequence(); + int atomResno = pdbatom.getSeqcode(); if (atomResno >= resnoMin && atomResno <= resnoLast) bsResidue.set(i); } @@ -976,7 +976,7 @@ int getResno(Atom atom) { PdbAtom pdbatom = atom.getPdbAtom(); - return (pdbatom == null) ? -1 : pdbatom.getSequence(); + return (pdbatom == null) ? -1 : pdbatom.getSeqcode(); } int getTemperature(Atom atom) { Index: Token.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/viewer/script/Token.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- Token.java 12 Dec 2003 14:15:42 -0000 1.24 +++ Token.java 12 Dec 2003 17:52:55 -0000 1.25 @@ -59,7 +59,7 @@ final static int integer = 2; final static int decimal = 3; final static int string = 4; - final static int sequenceCode = 5; + final static int seqcode = 5; final static int unknown = 6; final static int keyword = 7; final static int whitespace = 8; @@ -69,7 +69,7 @@ final static String[] astrType = { "nada", "identifier", "integer", "decimal", "string", - "sequence", "unknown", "keyword" + "seqcode", "unknown", "keyword" }; final static int command = (1 << 8); |