// // This software is now distributed according to // the Lesser Gnu Public License. Please see // http://www.gnu.org/copyleft/lesser.txt for // the details. // -- Happy Computing! // package com.stevesoft.ewe_pat; import ewe.util.Hashtable; /** Implements the parenthesis pattern subelement.*/ class OrMark extends Or { SubMark sm = new SubMark(); int id; OrMark(int i) { sm.om = this; id = i; } String leftForm() { return "("; } public Pattern getNext() { return sm; } public int matchInternal(int pos,Pthings pt) { sm.next = super.getNext(); if(pt.marks == null) { int n2 = 2 * pt.nMarks+2; pt.marks = new int[n2]; for(int i=0;i<n2;i++) pt.marks[i] = -1; } pt.marks[id] = pos; int ret = super.matchInternal(pos,pt); if(ret < 0) pt.marks[id] = -1; else if(pt.marks[id] > pt.marks[id+pt.nMarks]) { int swap = pt.marks[id]; pt.marks[id] = pt.marks[id+pt.nMarks]+1; pt.marks[id+pt.nMarks] = swap+1; } return ret; } public Pattern clone1(Hashtable h) { OrMark om = new OrMark(id); h.put(om,om); h.put(this,om); for(int i=0;i<v.size();i++) om.v.addElement( ((Pattern)v.elementAt(i)).clone(h) ); return om; } };