X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/505710ca37aa323c286b1def350ee3e5d7887e5d..bbc3925a8a46e8c80b22277f5571dfb2465aca25:/contrib/src/applet/prepinclude.cpp?ds=sidebyside diff --git a/contrib/src/applet/prepinclude.cpp b/contrib/src/applet/prepinclude.cpp index b9678148a7..bf03a84ef8 100644 --- a/contrib/src/applet/prepinclude.cpp +++ b/contrib/src/applet/prepinclude.cpp @@ -27,18 +27,52 @@ * ****************************************************************************/ -// For compilers that support precompilation -#include "wx/wxprec.h" -//#include "wx/file.h" -#include "wx/filesys.h" // Include private headers #include "wx/applet/prepinclude.h" +#include "wx/applet/echovar.h" + +// wxWindows +#include "wx/filesys.h" +#include "wx/msgdlg.h" + +/*----------------------------- Implementation ----------------------------*/ #define RECURSE_LIMIT 50 -/*---------------------------- Global variables ---------------------------*/ +/**************************************************************************** +PARAMETERS: +text - text to process for echo variables -/*----------------------------- Implementation ----------------------------*/ +RETURNS: +The string containing the processed filename + +REMARKS: +This routine searches through the text of the filename for variables contained +in % percent signs +****************************************************************************/ +wxString ParseFilename( + wxString &text) +{ + int f = 0; + int e; + while ((f = text.find('%', f)) != wxString::npos) { + f++; + e = text.find('%', f); +#ifdef CHECKED + if (e == wxString::npos) { + wxMessageBox(wxString("wxHTML #include error: % signs should bracket variable names in file attribute. To use a percent sign in a filename write double percents (%%)."), "Error" ,wxICON_ERROR); + return text; + } +#endif + if (e == f) + text.replace(f-1, 2, "%"); + else { + wxString varname = text.Mid(f, (e-f)); + text.replace(f-1, (e-f)+2, wxEchoVariable::GetValue(varname)); + } + } + return text; +} /**************************************************************************** PARAMETERS: @@ -58,10 +92,6 @@ wxString wxIncludePrep::Process( { int i; char ft[] = "<!--#include virtual="; - - wxFileSystem *fs = new wxFileSystem; - fs->ChangePathTo(DOC_ROOT, true); - int openedcount = 0; // make a copy so we can replace text as we go without affecting the original @@ -92,11 +122,12 @@ wxString wxIncludePrep::Process( // remove the #include tag output.Remove(i, n+21+3); - wxFSFile * file = fs->OpenFile(DOC_ROOT + fname); - + wxFSFile * file; + file = m_FS->OpenFile(ParseFilename(fname)); + if (!file) { #ifdef CHECKED - wxMessageBox(wxString("wxHTML #include error: File not Found ") + DOC_ROOT + fname + wxString("."),"Error",wxICON_ERROR); + wxMessageBox(wxString("wxHTML #include error: File not Found ") + fname + wxString("."),"Error",wxICON_ERROR); #endif delete file; continue; @@ -113,19 +144,16 @@ wxString wxIncludePrep::Process( } while (c == 256); output = (output.Mid(0,i) + tmp + output.Mid(i)); - - #ifdef CHECKED +#ifdef CHECKED if (openedcount > RECURSE_LIMIT) { wxMessageBox(wxString("wxHTML #include error: More than RECURSE_LIMIT files have been #included you may have a file that is directly or indirectly including itself, causing an endless loop"), "Error" ,wxICON_ERROR); break; } - #endif - +#endif openedcount++; delete file; } - delete fs; return output; } @@ -138,9 +166,8 @@ This function sets the directory to get included HTML files from. The default value is the current directory. Directorys may be given as a relative path. ****************************************************************************/ void wxIncludePrep::ChangeDirectory( - const wxString &dir) + wxFileSystem *fs) { - - DOC_ROOT = dir; + m_FS = fs; }