X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ec11a06458a608a95c1253fdffe96a65bcdd54a..7ac05a91abea459438b8ea62074108d3daf39568:/src/common/wxexpr.cpp diff --git a/src/common/wxexpr.cpp b/src/common/wxexpr.cpp index 0b5a9caa49..6f67df37a2 100644 --- a/src/common/wxexpr.cpp +++ b/src/common/wxexpr.cpp @@ -20,18 +20,11 @@ #pragma hdrstop #endif -#if wxUSE_IOSTREAMH - #include -#else - #include -#endif - #include #include #include #include "wx/utils.h" - #include "wx/expr.h" #include "wx/wxexpr.h" @@ -40,6 +33,77 @@ extern "C" void LexFromFile(FILE *fd); extern "C" void LexFromString(char *buf); + +/* Rename all YACC/LEX stuff or we'll conflict with other + * applications + */ + +#define yyback PROIO_yyback +#define yylook PROIO_yylook +#define yywrap PROIO_yywrap +#define yyoutput PROIO_yyoutput +#define yylex PROIO_yylex +#define yyerror PROIO_yyerror +#define yyleng PROIO_yyleng +#define yytext PROIO_yytext +#define yymorfg PROIO_yymorfg +#define yylineno PROIO_yylineno +#define yytchar PROIO_yytchar +#define yyin PROIO_yyin +#define yyout PROIO_yyout +#define yysvf PROIO_yysvf +#define yyestate PROIO_yyestate +#define yysvec PROIO_yysvec +#define yybgin PROIO_yybgin +#define yyprevious PROIO_yyprevious +#define yylhs PROIO_yylhs +#define yylen PROIO_yylen +#define yydefred PROIO_yydefred +#define yydgoto PROIO_yydgoto +#define yysindex PROIO_yysindex +#define yyrindex PROIO_yyrindex +#define yygindex PROIO_yygindex +#define yytable PROIO_yytable +#define yycheck PROIO_yycheck +#define yyname PROIO_yyname +#define yyrule PROIO_yyrule +#define yydebug PROIO_yydebug +#define yynerrs PROIO_yynerrs +#define yyerrflag PROIO_yyerrflag +#define yychar PROIO_yychar +#define yyvsp PROIO_yyvsp +#define yyssp PROIO_yyssp +#define yyval PROIO_yyval +#define yylval PROIO_yylval +#define yyss PROIO_yyss +#define yyvs PROIO_yyvs +#define yyparse PROIO_yyparse + +/* +++steve162e: more defines necessary */ +#define yy_init_buffer PROIO_yy_init_buffer +#define yy_create_buffer PROIO_yy_create_buffer +#define yy_load_buffer_state PROIO_yy_load_buffer_state +#define yyrestart PROIO_yyrestart +#define yy_switch_to_buffer PROIO_yy_switch_to_buffer +#define yy_delete_buffer PROIO_yy_delete_buffer +/* ---steve162e */ + +/* WG 1/96: still more for flex 2.5 */ +#define yy_scan_buffer PROIO_scan_buffer +#define yy_scan_string PROIO_scan_string +#define yy_scan_bytes PROIO_scan_bytes +#define yy_flex_debug PROIO_flex_debug +#define yy_flush_buffer PROIO_flush_buffer +#if !defined(__VISAGECPP__) +/* multiply defined??? */ +#define yyleng PROIO_yyleng +#define yytext PROIO_yytext +#endif + +extern "C" WXDLLEXPORT_DATA(FILE*) yyin; +extern "C" WXDLLEXPORT int yyparse(void); + + wxExprDatabase *thewxExprDatabase = NULL; wxExprErrorHandler currentwxExprErrorHandler; @@ -282,12 +346,12 @@ wxExpr *wxExpr::AttributeValue(const wxString& word) const // Use only for a cla wxString wxExpr::Functor(void) const // Use only for a clause { if ((type != wxExprList) || !value.first) - return wxString(_T("")); + return wxString(wxT("")); if (value.first->type == wxExprWord) return wxString(value.first->value.word); else - return wxString(_T("")); + return wxString(wxT("")); } bool wxExpr::IsFunctor(const wxString& f) const // Use only for a clause @@ -397,7 +461,7 @@ void wxExpr::AddAttributeValue(const wxString& attribute, wxExpr *val) // DeleteAttributeValue(attribute); wxExpr *patt = new wxExpr(wxExprWord, attribute); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -421,7 +485,7 @@ void wxExpr::AddAttributeValue(const wxString& attribute, long val) wxExpr *patt = new wxExpr(wxExprWord, attribute); wxExpr *pval = new wxExpr(val); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -443,7 +507,7 @@ void wxExpr::AddAttributeValue(const wxString& attribute, double val) // DeleteAttributeValue(attribute); wxExpr *patt = new wxExpr(wxExprWord, attribute); wxExpr *pval = new wxExpr(val); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -466,7 +530,7 @@ void wxExpr::AddAttributeValueString(const wxString& attribute, const wxString& wxExpr *patt = new wxExpr(wxExprWord, attribute); wxExpr *pval = new wxExpr(wxExprString, val); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -489,7 +553,7 @@ void wxExpr::AddAttributeValueWord(const wxString& attribute, const wxString& va wxExpr *patt = new wxExpr(wxExprWord, attribute); wxExpr *pval = new wxExpr(wxExprWord, val); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -514,7 +578,7 @@ void wxExpr::AddAttributeValue(const wxString& attribute, wxList *val) wxExpr *patt = new wxExpr(wxExprWord, attribute); wxExpr *pval = new wxExpr(val); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr = new wxExpr(wxExprList); @@ -550,7 +614,7 @@ void wxExpr::AddAttributeValueStringList(const wxString& attribute, wxList *stri // Now make an (=, Att, Value) triple wxExpr *patt = new wxExpr(wxExprWord, attribute); - wxExpr *pequals = new wxExpr(wxExprWord, _T("=")); + wxExpr *pequals = new wxExpr(wxExprWord, wxT("=")); wxExpr *listExpr2 = new wxExpr(wxExprList); @@ -671,7 +735,7 @@ void wxExpr::AssignAttributeValue(wxChar *att, wxChar **var) const } } -void wxExpr::WriteClause(ostream& stream) // Write this expression as a top-level clause +void wxExpr::WriteClause(FILE* stream) // Write this expression as a top-level clause { if (type != wxExprList) return; @@ -680,23 +744,24 @@ void wxExpr::WriteClause(ostream& stream) // Write this expression as a top-lev if (node) { node->WriteExpr(stream); - stream << "("; + fprintf( stream, "(" ); node = node->next; bool first = TRUE; while (node) { if (!first) - stream << " "; + fprintf( stream, " " ); node->WriteExpr(stream); node = node->next; - if (node) stream << ",\n"; + if (node) + fprintf( stream, ",\n" ); first = FALSE; } - stream << ").\n\n"; + fprintf( stream, ").\n\n" ); } } -void wxExpr::WriteExpr(ostream& stream) // Write as any other subexpression +void wxExpr::WriteExpr(FILE* stream) // Write as any other subexpression { // This seems to get round an optimizer bug when // using Watcom C++ 10a in WIN32 compilation mode. @@ -713,49 +778,44 @@ void wxExpr::WriteExpr(ostream& stream) // Write as any other subexpression { case wxExprInteger: { - stream << value.integer; + fprintf( stream, "%ld", value.integer ); break; } case wxExprReal: { double f = value.real; -/* Now the parser can cope with this. - // Prevent printing in 'e' notation. Any better way? - if (fabs(f) < 0.00001) - f = 0.0; -*/ - char buf[40]; - sprintf(buf, "%.6g", f); - stream << buf; + fprintf( stream, "%.6g", f); break; } case wxExprString: { - stream << "\""; - int i; - wxWX2MBbuf val = wxConv_libc.cWX2MB(value.string); - int len = strlen(val); + fprintf( stream, "\"" ); + size_t i; + const wxWX2MBbuf val = wxConvLibc.cWX2MB(value.string); + size_t len = strlen(val); for (i = 0; i < len; i++) { char ch = val[i]; if (ch == '"' || ch == '\\') - stream << "\\"; - stream << ch; + fprintf( stream, "\\" ); + char tmp[2]; + tmp[0] = ch; + tmp[1] = 0; + fprintf( stream, tmp ); } - - stream << "\""; + fprintf( stream, "\"" ); break; } case wxExprWord: { bool quote_it = FALSE; - wxWX2MBbuf val = wxConv_libc.cWX2MB(value.word); - int len = strlen(val); - if ((len == 0) || (len > 0 && (val[0] > 64 && val[0] < 91))) + const wxWX2MBbuf val = wxConvLibc.cWX2MB(value.word); + size_t len = strlen(val); + if ((len == 0) || (len > 0 && (val[(size_t) 0] > 64 && val[(size_t) 0] < 91))) quote_it = TRUE; else { - int i; + size_t i; for (i = 0; i < len; i++) if ((!isalpha(val[i])) && (!isdigit(val[i])) && (val[i] != '_')) @@ -763,41 +823,42 @@ void wxExpr::WriteExpr(ostream& stream) // Write as any other subexpression } if (quote_it) - stream << "'"; + fprintf( stream ,"'" ); - stream << val; + fprintf( stream, val ); if (quote_it) - stream << "'"; + fprintf( stream, "'" ); break; } case wxExprList: { if (!value.first) - stream << "[]"; + fprintf( stream, "[]" ); else { wxExpr *expr = value.first; - if ((expr->Type() == wxExprWord) && (wxStrcmp(expr->WordValue(), _T("=")) == 0)) + if ((expr->Type() == wxExprWord) && (wxStrcmp(expr->WordValue(), wxT("=")) == 0)) { wxExpr *arg1 = expr->next; wxExpr *arg2 = arg1->next; arg1->WriteExpr(stream); - stream << " = "; + fprintf( stream, " = " ); arg2->WriteExpr(stream); } else { - stream << "["; + fprintf( stream, "[" ); while (expr) { expr->WriteExpr(stream); expr = expr->next; - if (expr) stream << ", "; + if (expr) + fprintf( stream, ", " ); } - stream << "]"; + fprintf( stream, "]" ); } } break; @@ -806,56 +867,11 @@ void wxExpr::WriteExpr(ostream& stream) // Write as any other subexpression } } -void wxExpr::WriteLispExpr(ostream& stream) -{ - switch (type) - { - case wxExprInteger: - { - stream << value.integer; - break; - } - case wxExprReal: - { - stream << value.real; - break; - } - case wxExprString: - { - stream << "\"" << value.string << "\""; - break; - } - case wxExprWord: - { - stream << value.word; - break; - } - case wxExprList: - { - wxExpr *expr = value.first; - - stream << "("; - while (expr) - { - expr->WriteLispExpr(stream); - expr = expr->next; - if (expr) stream << " "; - } - - stream << ")"; - break; - } - case wxExprNull: break; - } -} - /* * wxExpr 'database' (list of expressions) */ -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxExprDatabase, wxList) -#endif wxExprDatabase::wxExprDatabase(wxExprErrorHandler handler) { @@ -1047,7 +1063,7 @@ bool wxExprDatabase::Read(const wxString& filename) { noErrors = 0; - FILE *f = fopen(filename.fn_str(), "r"); + FILE *f = wxFopen(filename, _T("r")); if (f) { thewxExprDatabase = this; @@ -1070,8 +1086,8 @@ bool wxExprDatabase::ReadFromString(const wxString& buffer) noErrors = 0; thewxExprDatabase = this; - wxWX2MBbuf buf = buffer.mb_str(); - LexFromString(MBSTRINGCAST buf); + const wxWX2MBbuf buf = buffer.mb_str(); + LexFromString(wxMBSTRINGCAST buf); yyparse(); wxExprCleanUp(); return (noErrors == 0); @@ -1079,13 +1095,17 @@ bool wxExprDatabase::ReadFromString(const wxString& buffer) bool wxExprDatabase::Write(const wxString& fileName) { - ofstream str(MBSTRINGCAST fileName.mb_str()); - if (str.bad()) + FILE *stream = wxFopen( fileName, _T("w+")); + + if (!stream) return FALSE; - return Write(str); + + bool success = Write(stream); + fclose(stream); + return success; } -bool wxExprDatabase::Write(ostream& stream) +bool wxExprDatabase::Write(FILE *stream) { noErrors = 0; wxNode *node = First(); @@ -1098,19 +1118,6 @@ bool wxExprDatabase::Write(ostream& stream) return (noErrors == 0); } -void wxExprDatabase::WriteLisp(ostream& stream) -{ - noErrors = 0; - wxNode *node = First(); - while (node) - { - wxExpr *expr = (wxExpr *)node->Data(); - expr->WriteLispExpr(stream); - stream << "\n\n"; - node = node->Next(); - } -} - void add_expr(wxExpr * expr) { thewxExprDatabase->Append(expr); @@ -1194,32 +1201,32 @@ char *wxmake_word(char *str) char *wxmake_string(char *str) { wxChar *s, *t; - int len, i; - wxMB2WXbuf sbuf = wxConv_libc.cMB2WX(str); + size_t len, i; + const wxMB2WXbuf sbuf = wxConvLibc.cMB2WX(str); - str++; /* skip leading quote */ +// str++; /* skip leading quote */ len = wxStrlen(sbuf) - 1; /* ignore trailing quote */ s = new wxChar[len + 1]; t = s; - for(i=0; i