generate #line references to source .xrc files in wxrc --gettext (patch #1803492 by Heikki Linnakangas)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48995 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-09-30 11:11:51 +00:00
parent 6e26d6b78c
commit 21b2dde583
2 changed files with 47 additions and 12 deletions

View File

@@ -154,6 +154,8 @@ All:
wxLogInterposerTemp was added. wxLogInterposerTemp was added.
- Added support for broadcasting to UDP sockets (Andrew Vincent). - Added support for broadcasting to UDP sockets (Andrew Vincent).
- Documentation now includes the wx library in which each class is defined. - Documentation now includes the wx library in which each class is defined.
- wxrc --gettext now generates references to source .xrc files (Heikki
Linnakangas).
All (Unix): All (Unix):

View File

@@ -30,6 +30,7 @@
#include "wx/utils.h" #include "wx/utils.h"
#include "wx/hashset.h" #include "wx/hashset.h"
#include "wx/mimetype.h" #include "wx/mimetype.h"
#include "wx/vector.h"
WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, StringSet); WX_DECLARE_HASH_SET(wxString, wxStringHash, wxStringEqual, StringSet);
@@ -201,6 +202,22 @@ public:
WX_DECLARE_OBJARRAY(XRCWndClassData,ArrayOfXRCWndClassData); WX_DECLARE_OBJARRAY(XRCWndClassData,ArrayOfXRCWndClassData);
WX_DEFINE_OBJARRAY(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<ExtractedString> ExtractedStrings;
class XmlResApp : public wxAppConsole class XmlResApp : public wxAppConsole
{ {
@@ -222,8 +239,8 @@ private:
void MakePackagePython(const wxArrayString& flist); void MakePackagePython(const wxArrayString& flist);
void OutputGettext(); void OutputGettext();
wxArrayString FindStrings(); ExtractedStrings FindStrings();
wxArrayString FindStrings(wxXmlNode *node); ExtractedStrings FindStrings(const wxString& filename, wxXmlNode *node);
bool flagVerbose, flagCPP, flagPython, flagGettext; bool flagVerbose, flagCPP, flagPython, flagGettext;
wxString parOutput, parFuncname, parOutputPath; wxString parOutput, parFuncname, parOutputPath;
@@ -809,7 +826,7 @@ void XmlResApp::MakePackagePython(const wxArrayString& flist)
void XmlResApp::OutputGettext() void XmlResApp::OutputGettext()
{ {
wxArrayString str = FindStrings(); ExtractedStrings str = FindStrings();
wxFFile fout; wxFFile fout;
if (parOutput.empty()) if (parOutput.empty())
@@ -817,17 +834,23 @@ void XmlResApp::OutputGettext()
else else
fout.Open(parOutput, wxT("wt")); fout.Open(parOutput, wxT("wt"));
for (size_t i = 0; i < str.GetCount(); i++) for (ExtractedStrings::const_iterator i = str.begin(); i != str.end(); ++i)
fout.Write("_(\"" + str[i] + "\");\n"); {
wxString s;
s.Printf("#line %d \"%s\"\n", i->lineNo, i->filename);
fout.Write(s);
fout.Write("_(\"" + i->str + "\");\n");
}
if (!parOutput) fout.Detach(); 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++) for (size_t i = 0; i < parFiles.GetCount(); i++)
{ {
@@ -841,7 +864,8 @@ wxArrayString XmlResApp::FindStrings()
retCode = 1; retCode = 1;
continue; continue;
} }
a2 = FindStrings(doc.GetRoot()); a2 = FindStrings(parFiles[i], doc.GetRoot());
WX_APPEND_ARRAY(arr, a2); WX_APPEND_ARRAY(arr, a2);
} }
@@ -888,9 +912,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; wxXmlNode *n = node;
if (n == NULL) return arr; if (n == NULL) return arr;
@@ -919,14 +944,22 @@ wxArrayString XmlResApp::FindStrings(wxXmlNode *node)
if (!flagGettext || if (!flagGettext ||
node->GetAttribute(_T("translate"), _T("1")) != _T("0")) node->GetAttribute(_T("translate"), _T("1")) != _T("0"))
{ {
arr.Add(ConvertText(n->GetContent())); arr.push_back
(
ExtractedString
(
ConvertText(n->GetContent()),
filename,
n->GetLineNumber()
)
);
} }
} }
// subnodes: // subnodes:
if (n->GetType() == wxXML_ELEMENT_NODE) if (n->GetType() == wxXML_ELEMENT_NODE)
{ {
wxArrayString a2 = FindStrings(n); ExtractedStrings a2 = FindStrings(filename, n);
WX_APPEND_ARRAY(arr, a2); WX_APPEND_ARRAY(arr, a2);
} }