* details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with these librararies and programs; if not, write
+ * License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
#include <string.h>
-#include <strstream.h>
+#include <sstream>
+using namespace std;
#include "TextParser.hh"
#define True 1
#endif
-char *
+const char *
StringParser::brute_force(const char* text_in, int n_of_pats,
const char* patterns, int sensitive)
{
else if (patterns == NULL || *patterns == '\0')
return NULL;
- if (! n_of_pats > 0)
+ if (! (n_of_pats > 0))
return NULL;
char** pat_tbl = new char*[n_of_pats + 1];
char** pat_tbl_end = pat_tbl + n_of_pats;
- int npat;
+ int npat, len;
for (npat = 0; *patterns && n_of_pats > 0; npat++, n_of_pats--) {
- char* del = strchr(patterns, '\n');
+ char* del = (char *)strchr(patterns, '\n');
if (del != NULL) { // more pattern specified
- pat_tbl[npat] = new char[del - patterns + 1];
- strncpy(pat_tbl[npat], patterns, del - patterns);
- pat_tbl[npat][del - patterns] = '\0';
+ len = del - patterns;
+ pat_tbl[npat] = new char[len + 1];
+ *((char *) memcpy(pat_tbl[npat], patterns, len) + len) = '\0';
patterns = del + 1;
}
else {
- pat_tbl[npat] = new char[strlen(patterns) + 1];
- strcpy(pat_tbl[npat], patterns);
+ int len = strlen(patterns);
+ pat_tbl[npat] = new char[len + 1];
+ *((char *) memcpy(pat_tbl[npat], patterns, len) + len) = '\0';
patterns += strlen(patterns);
assert( *patterns == '\0' );
}
// remove null and too long patterns
int i;
for (i = 0 ; pat_tbl[i]; i++) {
- if (*(pat_tbl[i]) == '\0' || text_len < strlen(pat_tbl[i])) {
+ if (*(pat_tbl[i]) == '\0' || text_len < (int) strlen(pat_tbl[i])) {
delete[] pat_tbl[i];
pat_tbl[i] = NULL;
npat--;
#endif
char* caped_text = NULL;
+ string capstr;
if (sensitive == False) { // case-insensitive search
unsigned char *p;
*p = *p - 0x20;
}
}
- ostrstream capitalized;
+ ostringstream capitalized;
for (p = (unsigned char*)text_in; *p; p++) {
if (*p < 0x7B && *p > 0x60) // a ... z
capitalized << (char)(*p - 0x20); // capitalize
else
capitalized << *p;
}
- text_in = caped_text = capitalized.str();
- *(char*)(text_in + capitalized.pcount()) = '\0';
+ capstr = capitalized.str();
+ text_in = caped_text = (char *)capstr.c_str();
}
- ostrstream text_run;
+ ostringstream text_run;
for (int index = 0; index < text_len;) {
unsigned int candidate = (1 << npat) - 1;
for (i = 0; i < npat; i++)
free (pat_tbl[i]);
- free (pat_tbl);
+ delete[] pat_tbl;
if (caped_text)
delete[] caped_text;
- char* ret_text = text_run.str();
+ static string trunstr = text_run.str();
- if (ret_text == NULL)
- return NULL;
- else if (*ret_text == '\0') {
- delete[] ret_text;
- return NULL;
- }
- else
- return ret_text;
+ if (!trunstr.size())
+ return NULL;
+ return trunstr.c_str();
}
-char *
+const char *
StringParser::project_textrun(const char* org_textrun)
{
if (org_textrun == NULL || *org_textrun == '\0')
return NULL;
- istrstream textrun(org_textrun);
+ istringstream textrun(org_textrun);
char line[128];
textrun.get(line, 128, '\n');
return NULL;
}
- ostrstream ret_text;
+ ostringstream ret_text;
while (textrun.get(line, 128, '\n')) {
if (textrun.get() != '\n') {
ret_text << off << '\t' << len << '\n' << '\0';
- return ret_text.str();
+ static string rettstr = ret_text.str();
+ return rettstr.c_str();
}
-char *
+const char *
StringParser::hilite(const char* text, int n, const char* pats)
{
- char* textrun = brute_force(text, n, pats);
+ const char* textrun = brute_force(text, n, pats);
if (textrun == NULL)
return NULL;
- char* prjed_textrun = project_textrun(textrun);
- delete[] textrun;
-
- return prjed_textrun;
+ return project_textrun(textrun);
}