-public class GenBankFile extends AlignFile {
- private static final Logger log = Logger.getLogger(GenBankFile.class.getName());
- private GenBankVersion version = new GenBankVersion();
- private GenBankLocus locus = new GenBankLocus();
- private GenBankSource source = new GenBankSource();
- private static final Pattern patLocation = Pattern.compile("(\\d+)\\.\\.(\\d+)");
- private static final Pattern patLocationComp = Pattern.compile("(complement)\\((\\d+)\\.\\.(\\d+)\\)");
- private static final Pattern patLocus = Pattern.compile("^LOCUS +([a-z|A-Z|0-9|_]+) +([0-9]+) bp ( {3}|ss\\-|ds\\-|ms\\-)([a-z|A-Z|-|\\s]+) ([a-z| ]{8}) ([A-Z| ]{3}) ([0-9]+-[A-Z]+-[0-9]+)");
- private static final Pattern patQualifierKey = Pattern.compile("/(.*?)=");
- private static final Pattern patFeatureKey = Pattern.compile("^\\s{5}([A-Za-z0-9\\_\\']+)\\s+");
-
- private String definition;
- private String accession;
- private String keywords;
- private String dblink;
- private String baseCount;
-
- private Vector<GenBankFeature> features;
- private Vector<String> comments;
- //Items under origin
- private Vector<GenBankSequence> sequences;
- private Vector<GenBankReference> references;
-
- private SequenceI genBankSequence;
-
- public GenBankFile() {
- }
-
- public GenBankFile(String inFile, String type) throws IOException {
- super(inFile, type);
- }
-
- public GenBankFile(FileParse source) throws IOException {
- super(source);
- }
-
- public void initData() {
- super.initData();
- features = new Vector<GenBankFeature>();
- comments = new Vector<String>();
- sequences = new Vector<GenBankSequence>();
- references = new Vector<GenBankReference>();
- }
-
- public void parse() throws IOException {
- String line;
- boolean featureMode = false; //FEATURES found
- boolean seqMode = false; //Parsing Sequences from SOURCE
- boolean referenceMode = false; //REFERENCE found
- boolean sourceMode = false; //SOURCE found
- boolean commentMode = false; //COMMENT found
- boolean parsingAuthors = false; //Parsing authors (multiline)
- boolean parsingDefinition = false; //Parsing definition (multiline)
- boolean parsingKeywords = false; //Parsing keywords (multiline)
- boolean parsingDbLink = false; //Parsing DBLINK (multiline)
- boolean parsingTitle = false; //Parsing title (multiline)
- boolean parsingQualifier = false; //Parsing feature qualifier (multine)
- String currentQualifierName = "";
- GenBankReference reference = null;
- GenBankFeature feature = null;
- List<String> sourceLines = new ArrayList<String>();
-
- if (this.isValid()){
-
- while ((line = nextLine()) != null) {
- // We only process lines if they have contents within
- if (line.length() == 0)
- continue;
-
- if (line.startsWith("FEATURES")){
- featureMode = true;
- seqMode = false;
- referenceMode = false;
- sourceMode = false;
- commentMode = false;
- feature = new GenBankFeature();
- source = parseSource(sourceLines);
- }
-
-
- if (seqMode) {
- if (!line.startsWith("//")){
- GenBankSequence seq = processSequenceLine(line);
- sequences.add(seq);
- }
- featureMode = false;
- referenceMode = false;
- sourceMode = false;
- }
-
- if (line.startsWith("ORIGIN")){
- if (feature.getType()!=null)
- features.add(feature);
- featureMode = false;
- referenceMode = false;
- sourceMode = false;
- seqMode = true;
- }
-
- if (featureMode){
- // Process feature line
- if (!line.startsWith("FEATURES") && !line.startsWith("BASE COUNT")){
- //Parse type
- if (!line.trim().startsWith("/")){
- Matcher featuresMatch = patFeatureKey.matcher(line);
- if (featuresMatch.find()){
- if (feature.getType()!=null)
- features.add(feature); //Hay que añadirlo sólo si no se está a mitad de un qualif o una feature
- //It's a feature
- String type = featuresMatch.group(0);
- feature = new GenBankFeature();
- feature.setType(type);
- GenBankLocation loc = parserFeatureLocation(feature, line.replace(type,""));
- feature.setLocation(loc);
- parsingQualifier = false;
- continue;
- }else if (parsingQualifier) { //If not a feature, it's another part of a qualifier
- String qValue = feature.getQualifier(currentQualifierName);
- StringBuffer sb = new StringBuffer().append(qValue).append(ltrim(line));
- feature.updateQualifier(currentQualifierName, sb.toString());
- continue;
- }
- }else{
- //It's the begining of a qualifier line
- Matcher matcher = patQualifierKey.matcher(line);
- if (matcher.find()){
- String qName = matcher.group(1);
- currentQualifierName = qName.replace("/","");
- line = line.replace(qName,"").replace("/", "").replace("=","");
- feature.addQualifier(currentQualifierName, ltrim(line));
- parsingQualifier = true;
- continue;
- }
- }
- }
- }
- // Process REFERENCE line
- if (line.startsWith("REFERENCE")) {
- if (!referenceMode){
- //This is line is the REFERENCE line
- referenceMode = true;
- featureMode = false;
- sourceMode = false;
- seqMode = false;
- }else{
- //We were at referenceMode, then add current reference to the list and create a new one
- references.add(reference);
- }
- reference = new GenBankReference();
- String desc = processReferenceLine(line,"REFERENCE");
- int[] ranges = parseReferenceDescriptor(desc);
- reference.setDescriptor(desc);
- reference.setOrder(ranges[0]);
- reference.setBegin(ranges[1]);
- reference.setEnd(ranges[2]);
- parsingAuthors = false;
- parsingTitle = false;
- continue;
- }
-
- if (line.startsWith(" AUTHORS")){
- if (referenceMode){
- reference.setAuthors(processReferenceLine(line,"AUTHORS"));
- parsingAuthors = true;
- parsingTitle = false;
- }
- continue;
- }
- if (line.startsWith(" TITLE")){
- if (referenceMode){
- reference.setTitle(processReferenceLine(line,"TITLE"));
- parsingAuthors = false;
- parsingTitle = true;
- }
- continue;
- }
- if (line.startsWith(" JOURNAL")){
- if (referenceMode){
- reference.setJournal(processReferenceLine(line,"JOURNAL"));
- parsingTitle = false;
- parsingAuthors = false;
- }
- continue;
- }
- if (line.startsWith(" PUBMED")){
- if (referenceMode){
- reference.setPubmed(processReferenceLine(line,"PUBMED"));
- parsingTitle = false;
- parsingAuthors = false;
- }
- continue;
- }
-
- if (line.startsWith(" MEDLINE")){
- if (referenceMode){
- reference.setMedline(processReferenceLine(line,"MEDLINE"));
- parsingTitle = false;
- parsingAuthors = false;
- }
- continue;
- }
- if (line.startsWith(" REMARK")){
- if (referenceMode){
- reference.setRemark(processReferenceLine(line,"REMARK"));
- parsingTitle = false;
- parsingAuthors = false;
- }
- continue;
- }
- if (line.startsWith(" CONSRTM")){
- if (referenceMode){
- reference.setConsortia(processReferenceLine(line,"CONSRTM"));
- parsingTitle = false;
- parsingAuthors = false;
- }
- continue;
- }
-
-
- if (line.startsWith("SOURCE")) {
- parsingKeywords = false;
- sourceMode = true;
- commentMode = false;
- if (sourceMode){
- sourceLines.add(line);
- }
- continue;
- }
- if (line.indexOf("ORGANISM")!=-1) {
- if (sourceMode){
- sourceLines.add(line);
- continue;
- }
- }
-
- if (line.startsWith("COMMENT")){
- if (reference!=null)
- references.add(reference);
- commentMode = true;
- sourceMode = false;
- referenceMode = false;
- sourceMode = false;
- seqMode = false;
- comments.add(processCommentLine(line));
- continue;
- }
- // Process LOCUS line
- if (line.startsWith("LOCUS")) {
- locus = parseLocus(line);
- continue;
- }
- // Process BASE COUNT line
- if (line.startsWith("BASE COUNT")) {
- baseCount = processHeaderLine(line,"BASE COUNT");
- featureMode = false;
- continue;
- }
- // Process DEFINITION line
- if (line.startsWith("DEFINITION")) {
- definition = processHeaderLine(line,"DEFINITION");
- parsingDefinition = true;
- continue;
- }
- // Process ACCESSION line
- if (line.startsWith("ACCESSION")) {
- accession = processHeaderLine(line,"ACCESSION");
- parsingDefinition = false;
- continue;
- }
- // Process VERSION line
- if (line.startsWith("VERSION")) {
- version = parseVersion(line);
- //headers.put("VERSION", processHeaderLine(line,"VERSION"));
- continue;
- }
- // Process DBLINK line
- if (line.startsWith("DBLINK")) {
- dblink = processHeaderLine(line,"DBLINK");
- parsingDbLink = true;
- continue;
- }
- // Process KEYWORDS line
- if (line.startsWith("KEYWORDS")) {
- keywords = processHeaderLine(line,"KEYWORDS");
- parsingKeywords = true;
- parsingDbLink = false;
- continue;
- }
- if (sourceMode){
- sourceLines.add(line);
- continue;
- }
- if (parsingDefinition){
- StringBuffer sb = new StringBuffer().append(definition).append(line);
- definition = sb.toString();
- continue;
- }
- if (referenceMode && parsingAuthors){
- if (reference!=null){
- StringBuffer authors = new StringBuffer().append(reference.getAuthors()).append(line);
- reference.setAuthors(authors.toString());
- }
- continue;
- }
- if (referenceMode && parsingTitle){
- if (reference!=null){
- StringBuffer title = new StringBuffer().append(reference.getTitle()).append(line);
- reference.setTitle(title.toString());
- }
- continue;
- }
- if (parsingKeywords){
- StringBuffer sb = new StringBuffer().append(keywords).append(line);
- keywords = sb.toString();
- continue;
- }
- if (parsingDbLink){
- StringBuffer sb = new StringBuffer().append(dblink).append(line);
- dblink = sb.toString();
- continue;
- }
- if (commentMode){
- comments.add(line);
- }
- }
- setEntries();
- }else{
- //File is not valid
- throw new IOException("GenBankFile is not valid.");
- }
- }
-
- protected void setEntries(){
- StringBuffer result = new StringBuffer();
- //Mapping GenBank info into Jalview data model
- genBankSequence = new Sequence(accession,DnaUtils.getNucleotidesFromSequenceVector(sequences));
- //Mapping DBRefEntry
- DBRefEntry dbRef = new DBRefEntry();
- dbRef.setSource(DBRefSource.GENBANK);
- dbRef.setVersion(version == null ? "" : version.toString());
- dbRef.setAccessionId(accession);
- // add map to indicate the sequence is a valid coordinate frame for the dbref
- dbRef.setMap(new Mapping(null, new int[]
- { 1, genBankSequence.getLength() }, new int[]
- { 1, genBankSequence.getLength() }, 1, 1));
- genBankSequence.addDBRef(dbRef);
-
- //add header info as non-positional features
- //add LOCUS
- SequenceFeature locusF = new SequenceFeature("LOCUS", (locus == null ? "" : locus.toString()), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(locusF);
- //add DEFNITION
- SequenceFeature defF = new SequenceFeature("DEFINITION", definition, null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(defF);
- //add ACCESSION
- SequenceFeature accessionF = new SequenceFeature("ACCESSION", accession, null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(accessionF);
- //add VERSION
- SequenceFeature versionF = new SequenceFeature("VERSION", (version == null ? "" : version.toString()), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(versionF);
- //add DBLINK
- SequenceFeature dblinkF = new SequenceFeature("DBLINK", (dblink == null ? "" : dblink.toString()), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(dblinkF);
- //add KEYWORDS
- SequenceFeature keywordsF = new SequenceFeature("KEYWORDS", keywords, null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(keywordsF);
- //add SOURCE
- SequenceFeature sourceF = new SequenceFeature("SOURCE", (source == null ? "" : source.toString()), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(sourceF);
- //add BASE COUNT
- SequenceFeature baseCountF = new SequenceFeature("BASE COUNT", (baseCount == null ? "" : baseCount.toString()), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(baseCountF);
-
- // add literature and database cross references in the file
- for (GenBankReference gbRef:references){
- //They are non-positional features
- SequenceFeature refFeature = new SequenceFeature("REFERENCE", gbRef.toString(),null,gbRef.getBegin(),gbRef.getEnd(),DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(refFeature);
- }
- //add COMMENTS
- if (comments.size()>0){
- StringBuffer sb = new StringBuffer();
- for (String comment: comments){
- sb.append(comment).append(newline);
- }
- SequenceFeature commentF = new SequenceFeature("COMMENT", sb.toString(), null, 1, genBankSequence.getLength(), DBRefSource.GENBANK);
- genBankSequence.addSequenceFeature(commentF);
- }
- //Mapping FEATURES
- for (GenBankFeature feature:features){
- if (feature.getType()!=null){
- SequenceFeature sf = new SequenceFeature();
- sf.setType(feature.getType());
- sf.setDescription(feature.getType());
-
- sf.setBegin(feature.getLocation()==null ? 0 : feature.getLocation().getMinor());
- sf.setEnd(feature.getLocation()==null ? 0 : feature.getLocation().getMajor());
- Enumeration<String> names = feature.getQualifiersNames();
- while (names.hasMoreElements()){
- String qName = names.nextElement();
- String qValue = feature.getQualifier(qName);
- sf.setValue(qName, qValue);
- }
- genBankSequence.addSequenceFeature(sf);
- }
- }
- SequenceI[] parsedSeqs = new SequenceI[1];
- parsedSeqs[0] = genBankSequence;
- this.setSeqs(parsedSeqs);
- }
- private GenBankVersion parseVersion(String line) {
- //VERSION U00096.2 GI:48994873
- if (line.trim().equalsIgnoreCase("VERSION")){
- return null;
- }else{
- GenBankVersion ver = new GenBankVersion();
- String v = line.substring(11, line.indexOf(" ", 12)).trim();
- ver.setVersion(v);
- int posGI = line.indexOf("GI:", 11 + v.length());
- if (posGI > -1) {
- ver.setGI(line.substring(posGI));
- }
- return ver;
- }
+public class GenBankFile extends AlignFile
+{
+ private static final Logger log = Logger.getLogger(GenBankFile.class
+ .getName());
+
+ private GenBankVersion version = new GenBankVersion();
+
+ private GenBankLocus locus = new GenBankLocus();
+
+ private GenBankSource source = new GenBankSource();
+
+ private static final Pattern patLocation = Pattern
+ .compile("(\\d+)\\.\\.(\\d+)");
+
+ private static final Pattern patLocationComp = Pattern
+ .compile("(complement)\\((\\d+)\\.\\.(\\d+)\\)");
+
+ private static final Pattern patLocus = Pattern
+ .compile("^LOCUS +([a-z|A-Z|0-9|_]+) +([0-9]+) bp ( {3}|ss\\-|ds\\-|ms\\-)([a-z|A-Z|-|\\s]+) ([a-z| ]{8}) ([A-Z| ]{3}) ([0-9]+-[A-Z]+-[0-9]+)");
+
+ private static final Pattern patQualifierKey = Pattern.compile("/(.*?)=");
+
+ private static final Pattern patFeatureKey = Pattern
+ .compile("^\\s{5}([A-Za-z0-9\\_\\']+)\\s+");
+
+ private String definition;
+
+ private String accession;
+
+ private String keywords;
+
+ private String dblink;
+
+ private String baseCount;
+
+ private Vector<GenBankFeature> features;
+
+ private Vector<String> comments;
+
+ // Items under origin
+ private Vector<GenBankSequence> sequences;
+
+ private Vector<GenBankReference> references;
+
+ private SequenceI genBankSequence;
+
+ public GenBankFile()
+ {
+ }
+
+ public GenBankFile(String inFile, String type) throws IOException
+ {
+ super(inFile, type);
+ }
+
+ public GenBankFile(FileParse source) throws IOException
+ {
+ super(source);
+ }
+
+ public void initData()
+ {
+ super.initData();
+ features = new Vector<GenBankFeature>();
+ comments = new Vector<String>();
+ sequences = new Vector<GenBankSequence>();
+ references = new Vector<GenBankReference>();
+ }
+
+ public void parse() throws IOException
+ {
+ String line;
+ boolean featureMode = false; // FEATURES found
+ boolean seqMode = false; // Parsing Sequences from SOURCE
+ boolean referenceMode = false; // REFERENCE found
+ boolean sourceMode = false; // SOURCE found
+ boolean commentMode = false; // COMMENT found
+ boolean parsingAuthors = false; // Parsing authors (multiline)
+ boolean parsingDefinition = false; // Parsing definition (multiline)
+ boolean parsingKeywords = false; // Parsing keywords (multiline)
+ boolean parsingDbLink = false; // Parsing DBLINK (multiline)
+ boolean parsingTitle = false; // Parsing title (multiline)
+ boolean parsingQualifier = false; // Parsing feature qualifier (multine)
+ String currentQualifierName = "";
+ GenBankReference reference = null;
+ GenBankFeature feature = null;
+ List<String> sourceLines = new ArrayList<String>();
+
+ if (this.isValid())
+ {
+
+ while ((line = nextLine()) != null)
+ {
+ // We only process lines if they have contents within
+ if (line.length() == 0)
+ continue;
+
+ if (line.startsWith("FEATURES"))
+ {
+ featureMode = true;
+ seqMode = false;
+ referenceMode = false;
+ sourceMode = false;
+ commentMode = false;
+ feature = new GenBankFeature();
+ source = parseSource(sourceLines);
+ }
+
+ if (seqMode)
+ {
+ if (!line.startsWith("//"))
+ {
+ GenBankSequence seq = processSequenceLine(line);
+ sequences.add(seq);
+ }
+ featureMode = false;
+ referenceMode = false;
+ sourceMode = false;
+ }
+
+ if (line.startsWith("ORIGIN"))
+ {
+ if (feature.getType() != null)
+ features.add(feature);
+ featureMode = false;
+ referenceMode = false;
+ sourceMode = false;
+ seqMode = true;
+ }
+
+ if (featureMode)
+ {
+ // Process feature line
+ if (!line.startsWith("FEATURES")
+ && !line.startsWith("BASE COUNT"))
+ {
+ // Parse type
+ if (!line.trim().startsWith("/"))
+ {
+ Matcher featuresMatch = patFeatureKey.matcher(line);
+ if (featuresMatch.find())
+ {
+ if (feature.getType() != null)
+ features.add(feature); // Hay que a�adirlo s�lo si no se est�
+ // a mitad de un qualif o una feature
+ // It's a feature
+ String type = featuresMatch.group(0);
+ feature = new GenBankFeature();
+ feature.setType(type);
+ GenBankLocation loc = parserFeatureLocation(feature,
+ line.replace(type, ""));
+ feature.setLocation(loc);
+ parsingQualifier = false;
+ continue;
+ }
+ else if (parsingQualifier)
+ { // If not a feature, it's another part of a qualifier
+ String qValue = feature.getQualifier(currentQualifierName);
+ StringBuffer sb = new StringBuffer().append(qValue).append(
+ ltrim(line));
+ feature.updateQualifier(currentQualifierName, sb.toString());
+ continue;
+ }
+ }
+ else
+ {
+ // It's the begining of a qualifier line
+ Matcher matcher = patQualifierKey.matcher(line);
+ if (matcher.find())
+ {
+ String qName = matcher.group(1);
+ currentQualifierName = qName.replace("/", "");
+ line = line.replace(qName, "").replace("/", "")
+ .replace("=", "");
+ feature.addQualifier(currentQualifierName, ltrim(line));
+ parsingQualifier = true;
+ continue;
+ }
+ }
+ }
+ }
+ // Process REFERENCE line
+ if (line.startsWith("REFERENCE"))
+ {
+ if (!referenceMode)
+ {
+ // This is line is the REFERENCE line
+ referenceMode = true;
+ featureMode = false;
+ sourceMode = false;
+ seqMode = false;
+ }
+ else
+ {
+ // We were at referenceMode, then add current reference to the list
+ // and create a new one
+ references.add(reference);
+ }
+ reference = new GenBankReference();
+ String desc = processReferenceLine(line, "REFERENCE");
+ int[] ranges = parseReferenceDescriptor(desc);
+ reference.setDescriptor(desc);
+ reference.setOrder(ranges[0]);
+ reference.setBegin(ranges[1]);
+ reference.setEnd(ranges[2]);
+ parsingAuthors = false;
+ parsingTitle = false;
+ continue;
+ }
+
+ if (line.startsWith(" AUTHORS"))
+ {
+ if (referenceMode)
+ {
+ reference.setAuthors(processReferenceLine(line, "AUTHORS"));
+ parsingAuthors = true;
+ parsingTitle = false;
+ }
+ continue;
+ }
+ if (line.startsWith(" TITLE"))
+ {
+ if (referenceMode)
+ {
+ reference.setTitle(processReferenceLine(line, "TITLE"));
+ parsingAuthors = false;
+ parsingTitle = true;
+ }
+ continue;
+ }
+ if (line.startsWith(" JOURNAL"))
+ {
+ if (referenceMode)
+ {
+ reference.setJournal(processReferenceLine(line, "JOURNAL"));
+ parsingTitle = false;
+ parsingAuthors = false;
+ }
+ continue;
+ }
+ if (line.startsWith(" PUBMED"))
+ {
+ if (referenceMode)
+ {
+ reference.setPubmed(processReferenceLine(line, "PUBMED"));
+ parsingTitle = false;
+ parsingAuthors = false;
+ }
+ continue;
+ }
+
+ if (line.startsWith(" MEDLINE"))
+ {
+ if (referenceMode)
+ {
+ reference.setMedline(processReferenceLine(line, "MEDLINE"));
+ parsingTitle = false;
+ parsingAuthors = false;
+ }
+ continue;
+ }
+ if (line.startsWith(" REMARK"))
+ {
+ if (referenceMode)
+ {
+ reference.setRemark(processReferenceLine(line, "REMARK"));
+ parsingTitle = false;
+ parsingAuthors = false;
+ }
+ continue;
+ }
+ if (line.startsWith(" CONSRTM"))
+ {
+ if (referenceMode)
+ {
+ reference.setConsortia(processReferenceLine(line, "CONSRTM"));
+ parsingTitle = false;
+ parsingAuthors = false;
+ }
+ continue;
+ }
+
+ if (line.startsWith("SOURCE"))
+ {
+ parsingKeywords = false;
+ sourceMode = true;
+ commentMode = false;
+ if (sourceMode)
+ {
+ sourceLines.add(line);
+ }
+ continue;
+ }
+ if (line.indexOf("ORGANISM") != -1)
+ {
+ if (sourceMode)
+ {
+ sourceLines.add(line);
+ continue;
+ }
+ }
+
+ if (line.startsWith("COMMENT"))
+ {
+ if (reference != null)
+ references.add(reference);
+ commentMode = true;
+ sourceMode = false;
+ referenceMode = false;
+ sourceMode = false;
+ seqMode = false;
+ comments.add(processCommentLine(line));
+ continue;
+ }
+ // Process LOCUS line
+ if (line.startsWith("LOCUS"))
+ {
+ locus = parseLocus(line);
+ continue;
+ }
+ // Process BASE COUNT line
+ if (line.startsWith("BASE COUNT"))
+ {
+ baseCount = processHeaderLine(line, "BASE COUNT");
+ featureMode = false;
+ continue;
+ }
+ // Process DEFINITION line
+ if (line.startsWith("DEFINITION"))
+ {
+ definition = processHeaderLine(line, "DEFINITION");
+ parsingDefinition = true;
+ continue;
+ }
+ // Process ACCESSION line
+ if (line.startsWith("ACCESSION"))
+ {
+ accession = processHeaderLine(line, "ACCESSION");
+ parsingDefinition = false;
+ continue;
+ }
+ // Process VERSION line
+ if (line.startsWith("VERSION"))
+ {
+ version = parseVersion(line);
+ // headers.put("VERSION", processHeaderLine(line,"VERSION"));
+ continue;
+ }
+ // Process DBLINK line
+ if (line.startsWith("DBLINK"))
+ {
+ dblink = processHeaderLine(line, "DBLINK");
+ parsingDbLink = true;
+ continue;
+ }
+ // Process KEYWORDS line
+ if (line.startsWith("KEYWORDS"))
+ {
+ keywords = processHeaderLine(line, "KEYWORDS");
+ parsingKeywords = true;
+ parsingDbLink = false;
+ continue;
+ }
+ if (sourceMode)
+ {
+ sourceLines.add(line);
+ continue;
+ }
+ if (parsingDefinition)
+ {
+ StringBuffer sb = new StringBuffer().append(definition).append(
+ line);
+ definition = sb.toString();
+ continue;
+ }
+ if (referenceMode && parsingAuthors)
+ {
+ if (reference != null)
+ {
+ StringBuffer authors = new StringBuffer().append(
+ reference.getAuthors()).append(line);
+ reference.setAuthors(authors.toString());
+ }
+ continue;
+ }
+ if (referenceMode && parsingTitle)
+ {
+ if (reference != null)
+ {
+ StringBuffer title = new StringBuffer().append(
+ reference.getTitle()).append(line);
+ reference.setTitle(title.toString());
+ }
+ continue;
+ }
+ if (parsingKeywords)
+ {
+ StringBuffer sb = new StringBuffer().append(keywords)
+ .append(line);
+ keywords = sb.toString();
+ continue;
+ }
+ if (parsingDbLink)
+ {
+ StringBuffer sb = new StringBuffer().append(dblink).append(line);
+ dblink = sb.toString();
+ continue;
+ }
+ if (commentMode)
+ {
+ comments.add(line);
+ }
+ }
+ setEntries();