X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db51a209d7acfc329e694aedff03e73af2b3969d..0e4d01385428cf570c6df0a8b110ee3cfb3e5156:/utils/wxrc/wxrc.cpp diff --git a/utils/wxrc/wxrc.cpp b/utils/wxrc/wxrc.cpp index 77f869b8d5..0080c4e75f 100644 --- a/utils/wxrc/wxrc.cpp +++ b/utils/wxrc/wxrc.cpp @@ -30,6 +30,7 @@ #include "wx/utils.h" #include "wx/hashset.h" #include "wx/mimetype.h" +#include "wx/vector.h" WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, StringSet); @@ -119,9 +120,10 @@ public: name == _T("notebookpage") || name == _T("separator") || name == _T("sizeritem") || + name == _T("wxMenu") || name == _T("wxMenuBar") || name == _T("wxMenuItem") || - name == _T("wxStaticBoxSizer") ) + name.EndsWith(_T("Sizer")) ) { return false; } @@ -201,6 +203,22 @@ public: WX_DECLARE_OBJARRAY(XRCWndClassData,ArrayOfXRCWndClassData); WX_DEFINE_OBJARRAY(ArrayOfXRCWndClassData) +struct ExtractedString +{ + ExtractedString() : lineNo(-1) {} + ExtractedString(const wxString& str_, + const wxString& filename_, int lineNo_) + : str(str_), filename(filename_), lineNo(lineNo_) + {} + + wxString str; + + wxString filename; + int lineNo; +}; + +typedef wxVector ExtractedStrings; + class XmlResApp : public wxAppConsole { @@ -222,8 +240,8 @@ private: void MakePackagePython(const wxArrayString& flist); void OutputGettext(); - wxArrayString FindStrings(); - wxArrayString FindStrings(wxXmlNode *node); + ExtractedStrings FindStrings(); + ExtractedStrings FindStrings(const wxString& filename, wxXmlNode *node); bool flagVerbose, flagCPP, flagPython, flagGettext; wxString parOutput, parFuncname, parOutputPath; @@ -256,7 +274,7 @@ int XmlResApp::OnRun() wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_OPTION_MANDATORY }, - wxCMD_LINE_DESC_END + wxCMD_LINE_DESC_END }; wxCmdLineParser parser(cmdLineDesc, argc, argv); @@ -399,7 +417,7 @@ wxArrayString XmlResApp::PrepareTempFiles() } wxString name, ext, path; - wxSplitPath(parFiles[i], &path, &name, &ext); + wxFileName::SplitPath(parFiles[i], &path, &name, &ext); FindFilesInXML(doc.GetRoot(), flist, path); if (flagH) @@ -564,7 +582,8 @@ static wxString FileToCppArray(wxString filename, int num) wxASSERT_MSG( offset >= 0 , wxT("Invalid file length") ); const size_t lng = wx_truncate_cast(size_t, offset); - wxASSERT_MSG( lng == offset, wxT("Huge file not supported") ); + wxASSERT_MSG( static_cast(lng) == offset, + wxT("Huge file not supported") ); snum.Printf(_T("%i"), num); output.Printf(_T("static size_t xml_res_size_") + snum + _T(" = %i;\n"), lng); @@ -656,12 +675,17 @@ void XmlResApp::MakePackageCPP(const wxArrayString& flist) wxString ext = wxFileName(flist[i]).GetExt(); if ( ext.Lower() == _T("xrc") ) mime = _T("text/xml"); +#if wxUSE_MIMETYPE else { wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); if ( ft ) + { ft->GetMimeType(&mime); + delete ft; + } } +#endif // wxUSE_MIMETYPE s.Printf(" XRC_ADD_FILE(wxT(\"XRC_resource/" + flist[i] + "\"), xml_res_file_%i, xml_res_size_%i, _T(\"%s\"));\n", @@ -712,7 +736,8 @@ static wxString FileToPythonArray(wxString filename, int num) wxASSERT_MSG( offset >= 0 , wxT("Invalid file length") ); const size_t lng = wx_truncate_cast(size_t, offset); - wxASSERT_MSG( offset == lng, wxT("Huge file not supported") ); + wxASSERT_MSG( static_cast(lng) == offset, + wxT("Huge file not supported") ); snum.Printf(_T("%i"), num); output = " xml_res_file_" + snum + " = '''\\\n"; @@ -809,7 +834,7 @@ void XmlResApp::MakePackagePython(const wxArrayString& flist) void XmlResApp::OutputGettext() { - wxArrayString str = FindStrings(); + ExtractedStrings str = FindStrings(); wxFFile fout; if (parOutput.empty()) @@ -817,17 +842,23 @@ void XmlResApp::OutputGettext() else fout.Open(parOutput, wxT("wt")); - for (size_t i = 0; i < str.GetCount(); i++) - fout.Write("_(\"" + str[i] + "\");\n"); + for (ExtractedStrings::const_iterator i = str.begin(); i != str.end(); ++i) + { + wxString s; + + s.Printf("#line %d \"%s\"\n", i->lineNo, i->filename); + fout.Write(s); + fout.Write("_(\"" + i->str + "\");\n"); + } if (!parOutput) fout.Detach(); } -wxArrayString XmlResApp::FindStrings() +ExtractedStrings XmlResApp::FindStrings() { - wxArrayString arr, a2; + ExtractedStrings arr, a2; for (size_t i = 0; i < parFiles.GetCount(); i++) { @@ -841,7 +872,8 @@ wxArrayString XmlResApp::FindStrings() retCode = 1; continue; } - a2 = FindStrings(doc.GetRoot()); + a2 = FindStrings(parFiles[i], doc.GetRoot()); + WX_APPEND_ARRAY(arr, a2); } @@ -888,9 +920,10 @@ static wxString ConvertText(const wxString& str) } -wxArrayString XmlResApp::FindStrings(wxXmlNode *node) +ExtractedStrings +XmlResApp::FindStrings(const wxString& filename, wxXmlNode *node) { - wxArrayString arr; + ExtractedStrings arr; wxXmlNode *n = node; if (n == NULL) return arr; @@ -919,14 +952,22 @@ wxArrayString XmlResApp::FindStrings(wxXmlNode *node) if (!flagGettext || node->GetAttribute(_T("translate"), _T("1")) != _T("0")) { - arr.Add(ConvertText(n->GetContent())); + arr.push_back + ( + ExtractedString + ( + ConvertText(n->GetContent()), + filename, + n->GetLineNumber() + ) + ); } } // subnodes: if (n->GetType() == wxXML_ELEMENT_NODE) { - wxArrayString a2 = FindStrings(n); + ExtractedStrings a2 = FindStrings(filename, n); WX_APPEND_ARRAY(arr, a2); }