/* Added by Rick Mugridge, Feb 2005, adapted by Dave Woldrich for CeeFIT Apr 2005 */ static int findMatchingEndTag(const STRING& lc, int matchFromHere, const STRING& tag, int offset) { int fromHere = matchFromHere; int count = 1; int startEnd = 0; while (count > 0) { int embeddedTag = lc.IndexOf(STRING("<") + tag, fromHere); int embeddedTagEnd = lc.IndexOf(STRING("</") + tag, fromHere); // Which one is closer? if (embeddedTag < 0 && embeddedTagEnd < 0) throw new PARSEEXCEPTION(STRING("Can't find tag: ") + tag, offset); if (embeddedTag < 0) embeddedTag = INT_MAX; if (embeddedTagEnd < 0) embeddedTagEnd = INT_MAX; if (embeddedTag < embeddedTagEnd) { count++; startEnd = embeddedTag; fromHere = lc.IndexOf(STRING(">"), embeddedTag) + 1; } else if (embeddedTagEnd < embeddedTag) { count--; startEnd = embeddedTagEnd; fromHere = lc.IndexOf(STRING(">"), embeddedTagEnd) + 1; } } return startEnd; }