Convert uses of XKeycodeToKeysym (deprecated) to XkbKeycodeToKeysym
[oweals/cde.git] / cde / programs / dtinfo / dtinfo / src / UAS / DtSR / TextParser.C
index 021b954b8fff709dfdf6238f89fb59ff0118bef3..eca1c9c31d356f16d0a764554f670c93cd8d45df 100644 (file)
@@ -16,7 +16,7 @@
  * 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
  */
@@ -29,7 +29,8 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <strstream.h>
+#include <sstream>
+using namespace std;
 
 #include "TextParser.hh"
 
@@ -40,7 +41,7 @@
 #define True   1
 #endif
 
-char *
+const char *
 StringParser::brute_force(const char* text_in, int n_of_pats,
                                const char* patterns, int sensitive)
 {
@@ -49,24 +50,25 @@ StringParser::brute_force(const char* text_in, int n_of_pats,
     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' );
        }
@@ -87,7 +89,7 @@ StringParser::brute_force(const char* text_in, int n_of_pats,
     // 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--;
@@ -151,6 +153,7 @@ StringParser::brute_force(const char* text_in, int n_of_pats,
 #endif
 
     char* caped_text = NULL;
+    string capstr;
 
     if (sensitive == False) { // case-insensitive search
        unsigned char *p;
@@ -160,18 +163,18 @@ StringParser::brute_force(const char* text_in, int n_of_pats,
                    *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;
@@ -230,31 +233,26 @@ StringParser::brute_force(const char* text_in, int n_of_pats,
 
     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');
@@ -279,7 +277,7 @@ StringParser::project_textrun(const char* org_textrun)
        return NULL;
     }
 
-    ostrstream ret_text;
+    ostringstream ret_text;
 
     while (textrun.get(line, 128, '\n')) {
        if (textrun.get() != '\n') {
@@ -321,21 +319,19 @@ StringParser::project_textrun(const char* org_textrun)
 
     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);
 }