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:
@@ -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):
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user