void FunctionZoneParser::classParse(vector<foundInfo> & foundInfos, vector< pair<int, int> > &scannedZones, const std::vector< std::pair<int, int> > & commentZones, size_t begin, size_t end, ScintillaEditView **ppEditView, generic_string classStructName) { if (begin >= end) return; int flags = SCFIND_REGEXP | SCFIND_POSIX | SCFIND_REGEXP_DOTMATCHESNL; (*ppEditView)->execute(SCI_SETSEARCHFLAGS, flags); int targetStart = (*ppEditView)->searchInTarget(_rangeExpr.c_str(), _rangeExpr.length(), begin, end); int targetEnd = 0; while (targetStart != -1 && targetStart != -2) { targetEnd = int((*ppEditView)->execute(SCI_GETTARGETEND)); // Get class name int foundPos = 0; generic_string classStructName = parseSubLevel(targetStart, targetEnd, _classNameExprArray, foundPos, ppEditView); if (_openSymbole != TEXT("") && _closeSymbole != TEXT("")) { targetEnd = getBodyClosePos(targetEnd, _openSymbole.c_str(), _closeSymbole.c_str(), ppEditView); } if (targetEnd > int(end)) //we found a result but outside our range, therefore do not process it { break; } scannedZones.push_back(pair<int, int>(targetStart, targetEnd)); int foundTextLen = targetEnd - targetStart; if (targetStart + foundTextLen == int(end)) break; // Begin to search all method inside //vector< generic_string > emptyArray; if (!isInZones(targetStart, commentZones)) { funcParse(foundInfos, targetStart, targetEnd, ppEditView, classStructName); } begin = targetStart + (targetEnd - targetStart); targetStart = (*ppEditView)->searchInTarget(_rangeExpr.c_str(), _rangeExpr.length(), begin, end); } }
// This method will void FunctionListPanel::parse2(std::vector<foundInfo> & foundInfos, size_t begin, size_t end, const TCHAR *block, std::vector< generic_string > blockNameToSearch, const TCHAR *bodyOpenSymbol, const TCHAR *bodyCloseSymbol, const TCHAR *function, std::vector< generic_string > functionToSearch) { if (begin >= end) return; int flags = SCFIND_REGEXP | SCFIND_POSIX; (*_ppEditView)->execute(SCI_SETSEARCHFLAGS, flags); int targetStart = (*_ppEditView)->searchInTarget(block, lstrlen(block), begin, end); int targetEnd = 0; //foundInfos.clear(); while (targetStart != -1 && targetStart != -2) { targetEnd = int((*_ppEditView)->execute(SCI_GETTARGETEND)); // Get class name int foundPos = 0; generic_string classStructName = parseSubLevel(targetStart, targetEnd, blockNameToSearch, foundPos); if (lstrcmp(bodyOpenSymbol, TEXT("")) != 0 && lstrcmp(bodyCloseSymbol, TEXT("")) != 0) { targetEnd = getBodyClosePos(targetEnd, bodyOpenSymbol, bodyCloseSymbol); } if (targetEnd > int(end)) //we found a result but outside our range, therefore do not process it { break; } int foundTextLen = targetEnd - targetStart; if (targetStart + foundTextLen == int(end)) break; // Begin to search all method inside vector< generic_string > emptyArray; parse(foundInfos, targetStart, targetEnd, function, functionToSearch, emptyArray, classStructName); begin = targetStart + (targetEnd - targetStart); targetStart = (*_ppEditView)->searchInTarget(block, lstrlen(block), begin, end); } }