Kaydet (Commit) 8aed53c1 authored tarafından jan Iversen's avatar jan Iversen

genLang .src conversion, first version.

LO uses the .src quite differently, so a new implementation
was made.

The unused old functions are hanging in a #if 0, and will
be removed later.

Change-Id: Ic466a1b97f9f65c9f658612bd2aa325396e929c3
üst 3db082a7
...@@ -28,26 +28,29 @@ extern int srclex(void); ...@@ -28,26 +28,29 @@ extern int srclex(void);
class convert_src : public convert_gen class convert_src : public convert_gen
{ {
public: public:
bool mbExpectValue; // bool mbExpectValue;
convert_src(l10nMem& crMemory); convert_src(l10nMem& crMemory);
~convert_src() override {}; ~convert_src() override {};
void setValue (char *syyText, char *sbuildValue); void setValue(string& syyText);
void setLang (char *syyText, bool bEnUs); bool setLang(string& syyText);
void setId (char *syyText, bool bIde); void setName(string& syyText);
void setText (char *syyText); void setCmd(string& syyText);
void setName (char *syyText); void startBlock();
void setCmd (char *syyText); void stopBlock();
void setMacro (char *syyText);
void setList (char *syyText); // void setId (char *syyText, bool bIde);
void setListItem (char const *syyText, bool bIsStart); // void setText (char *syyText);
void setNL (char *syyText, bool bMacro); // void setMacro (char *syyText);
void startBlock (char *syyText); // void setList (char *syyText);
void stopBlock (char *syyText); // void setListItem (char const *syyText, bool bIsStart);
// void setNL (char *syyText, bool bMacro);
private: private:
vector<string> mcStack; vector<string> mcStack;
void doExecute() override;
#if 0
string msValue; string msValue;
string msName; string msName;
string msTextName; string msTextName;
...@@ -62,9 +65,10 @@ class convert_src : public convert_gen ...@@ -62,9 +65,10 @@ class convert_src : public convert_gen
bool mbInListItem; bool mbInListItem;
int miListCount; int miListCount;
int miMacroLevel; int miMacroLevel;
void doExecute() override;
static void trim(string& sText); static void trim(string& sText);
void buildKey(string& sKey); void buildKey(string& sKey);
void insertLanguagePart(string& sKey, string& sTextType); void insertLanguagePart(string& sKey, string& sTextType);
#endif
}; };
#endif #endif
...@@ -29,7 +29,9 @@ using namespace std; ...@@ -29,7 +29,9 @@ using namespace std;
convert_src::convert_src(l10nMem& crMemory) convert_src::convert_src(l10nMem& crMemory)
: convert_gen(crMemory), : convert_gen(crMemory)
#if 0
,
mbExpectValue(false), mbExpectValue(false),
mbEnUs(false), mbEnUs(false),
mbExpectName(false), mbExpectName(false),
...@@ -38,6 +40,7 @@ convert_src::convert_src(l10nMem& crMemory) ...@@ -38,6 +40,7 @@ convert_src::convert_src(l10nMem& crMemory)
mbValuePresent(false), mbValuePresent(false),
mbInList(false), mbInList(false),
mbInListItem(false) mbInListItem(false)
#endif
{ {
} }
...@@ -50,112 +53,116 @@ void convert_src::doExecute() ...@@ -50,112 +53,116 @@ void convert_src::doExecute()
void convert_src::setValue(char *syyText, char *sbuildValue) void convert_src::setValue(string& syyText)
{ {
copySource(syyText); int stackSize = mcStack.size();
string cleanValue = syyText.substr(1, syyText.size() - 1);
if (mbInList && !mbInListItem) { {
setListItem("", true); cout << "test value\n";
setListItem("", false); for (int i = 0; i < stackSize; i++)
cout << mcStack[i] << "\n";
} }
msValue = sbuildValue; string subid = (stackSize > 3) ? mcStack[2] : mcStack[0];
if (mbInListItem) l10nMem::keyToLower(subid);
msGroup = msValue;
mbValuePresent = true; mcMemory.setSourceKey(miLineNo, msSourceFile, mcStack[1], cleanValue, "", subid, mcStack[stackSize-1], false);
mbExpectValue = false; mcStack.pop_back();
} }
void convert_src::setLang(char *syyText, bool bEnUs) bool convert_src::setLang(string& syyText)
{ {
string useText = copySource(syyText) + " is no en-US language"; if (syyText == "en-US")
return true;
else if (syyText != "x-comment")
l10nMem::showError(syyText + " non legal language");
return false;
}
mbEnUs = bEnUs; void convert_src::setName(string& syyText)
if (!bEnUs && mbExpectValue) {
l10nMem::showError(useText); mcStack.push_back(syyText);
} }
void convert_src::setId(char *syyText, bool bId) void convert_src::setCmd(string& syyText)
{ {
copySource(syyText); mcStack.push_back(syyText);
if (bId || !mcStack.back().size())
mbExpectName = mbAutoPush = true;
} }
void convert_src::setText(char *syyText) void convert_src::startBlock()
{ {
msTextName = copySource(syyText);
mbExpectValue = true;
mbEnUs = false;
trim(msTextName);
} }
void convert_src::setName(char *syyText) void convert_src::stopBlock()
{ {
string useText = copySource(syyText); // check for correct node/prop relations
if (mcStack.size())
trim(useText); mcStack.pop_back();
if (mbExpectName) {
mbExpectName = false;
if (!mbAutoPush) {
if (msName.length())
msGroup = useText;
else
msName = useText;
}
else {
mbAutoPush = false;
if (mcStack.size())
mcStack.pop_back();
mcStack.push_back(useText);
}
}
} }
void convert_src::setCmd(char *syyText) #if 0
void convert_src::setId(char *syyText, bool bId)
{ {
msCmd = copySource(syyText); copySource(syyText);
mbExpectName = true; if (bId || !mcStack.back().size())
mbInList = false; mbExpectName = mbAutoPush = true;
trim(msCmd);
l10nMem::keyToLower(msCmd);
} }
#endif
#if 0
void convert_src::setText(char *syyText)
{
msTextName = copySource(syyText);
mbExpectValue = true;
mbEnUs = false;
trim(msTextName);
}
#endif
#if 0
void convert_src::setMacro(char *syyText) void convert_src::setMacro(char *syyText)
{ {
msCmd = copySource(syyText); msCmd = copySource(syyText);
mbExpectName = mbExpectName =
mbExpectMacro = mbExpectMacro =
mbAutoPush = true; mbAutoPush = true;
miMacroLevel = mcStack.size(); miMacroLevel = mcStack.size();
mcStack.push_back(""); mcStack.push_back("");
trim(msCmd); trim(msCmd);
} }
#endif
#if 0
void convert_src::setList(char *syyText) void convert_src::setList(char *syyText)
{ {
msCmd = copySource(syyText); msCmd = copySource(syyText);
miListCount = 0; miListCount = 0;
mbInList = true; mbInList = true;
trim(msCmd); trim(msCmd);
l10nMem::keyToLower(msCmd); l10nMem::keyToLower(msCmd);
} }
#endif
#if 0
void convert_src::setNL(char *syyText, bool bMacro) void convert_src::setNL(char *syyText, bool bMacro)
{ {
int nL; int nL;
...@@ -168,19 +175,19 @@ void convert_src::setNL(char *syyText, bool bMacro) ...@@ -168,19 +175,19 @@ void convert_src::setNL(char *syyText, bool bMacro)
buildKey(sKey); buildKey(sKey);
for (nL = -1;;) { for (nL = -1;;) {
nL = msValue.find("\\\"", nL+1); nL = msValue.find("\\\"", nL + 1);
if (nL == (int)string::npos) if (nL == (int)string::npos)
break; break;
msValue.erase(nL,1); msValue.erase(nL, 1);
} }
for (nL = -1;;) { for (nL = -1;;) {
nL = msValue.find("\\\\", nL+1); nL = msValue.find("\\\\", nL + 1);
if (nL == (int)string::npos) if (nL == (int)string::npos)
break; break;
msValue.erase(nL,1); msValue.erase(nL, 1);
} }
//FIX sKey += "." + msCmd + "." + msTextName; //FIX sKey += "." + msCmd + "." + msTextName;
if (msValue.size() && msValue != "-") { if (msValue.size() && msValue != "-") {
mcMemory.setSourceKey(miLineNo, msSourceFile, sKey, msValue, "", msCmd, msGroup, mbMergeMode); mcMemory.setSourceKey(miLineNo, msSourceFile, sKey, msValue, "", msCmd, msGroup, mbMergeMode);
if (mbMergeMode) if (mbMergeMode)
...@@ -192,43 +199,21 @@ void convert_src::setNL(char *syyText, bool bMacro) ...@@ -192,43 +199,21 @@ void convert_src::setNL(char *syyText, bool bMacro)
if (!bMacro && mbExpectMacro) { if (!bMacro && mbExpectMacro) {
while ((int)mcStack.size() > miMacroLevel) while ((int)mcStack.size() > miMacroLevel)
mcStack.pop_back(); mcStack.pop_back();
mbEnUs = mbEnUs =
mbExpectMacro = false; mbExpectMacro = false;
} }
mbValuePresent = mbValuePresent =
mbExpectName = mbExpectName =
mbAutoPush = false; mbAutoPush = false;
msValue.clear(); msValue.clear();
msTextName.clear(); msTextName.clear();
} }
#endif
void convert_src::startBlock(char *syyText) #if 0
{
copySource(syyText);
mcStack.push_back(msName);
}
void convert_src::stopBlock(char *syyText)
{
copySource(syyText);
// check for correct node/prop relations
if (mcStack.size())
mcStack.pop_back();
mbInList =
mbEnUs = false;
msName.clear();
}
void convert_src::setListItem(char const *syyText, bool bIsStart) void convert_src::setListItem(char const *syyText, bool bIsStart)
{ {
copySource(syyText); copySource(syyText);
...@@ -266,9 +251,11 @@ void convert_src::setListItem(char const *syyText, bool bIsStart) ...@@ -266,9 +251,11 @@ void convert_src::setListItem(char const *syyText, bool bIsStart)
} }
} }
} }
#endif
#if 0
void convert_src::trim(string& sText) void convert_src::trim(string& sText)
{ {
int nL; int nL;
...@@ -281,9 +268,11 @@ void convert_src::trim(string& sText) ...@@ -281,9 +268,11 @@ void convert_src::trim(string& sText)
if (nL != (int)sText.size()) if (nL != (int)sText.size())
sText.erase(nL); sText.erase(nL);
} }
#endif
#if 0
void convert_src::buildKey(string& sKey) void convert_src::buildKey(string& sKey)
{ {
int nL; int nL;
...@@ -297,9 +286,11 @@ void convert_src::buildKey(string& sKey) ...@@ -297,9 +286,11 @@ void convert_src::buildKey(string& sKey)
// FIX jan // FIX jan
sKey = mcStack[0]; sKey = mcStack[0];
} }
#endif
#if 0
void convert_src::insertLanguagePart(string& sKey, string& sTextType) void convert_src::insertLanguagePart(string& sKey, string& sTextType)
{ {
string sLang, sText, sTagText; string sLang, sText, sTagText;
...@@ -317,3 +308,4 @@ void convert_src::insertLanguagePart(string& sKey, string& sTextType) ...@@ -317,3 +308,4 @@ void convert_src::insertLanguagePart(string& sKey, string& sTextType)
writeSourceFile(sTagText); writeSourceFile(sTagText);
} }
} }
#endif
...@@ -39,16 +39,13 @@ using namespace std; ...@@ -39,16 +39,13 @@ using namespace std;
%p 24000 %p 24000
%e 1200 %e 1200
%n 500 %n 500
%x CMD %x CMD ID LANG LANG2 LANG3 LANG4
PRE ^[ \t]*
SUF [ \t\r\n\\]
SUFT [ \t\r\n\[]
SPACE [ \t]* SPACE [ \t]*
IDENT ([(a-zA-Z0-9_][ a-zA-Z0-9_\-\+\*(,&]*[a-zA-Z0-9)_]|[a-zA-Z0-9_]) IDENT ([(a-zA-Z0-9_][ a-zA-Z0-9_\-\+\*(,&]*[a-zA-Z0-9)_]|[a-zA-Z0-9_])
KEYID [a-zA-Z0-9_-]+ SUF [ \t\r\n\\]+
%% %%
f
"/*" { "/*" {
...@@ -66,13 +63,80 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -66,13 +63,80 @@ KEYID [a-zA-Z0-9_-]+
} }
"//".* { "//".* {
LOCptr->copySource(yytext); LOCptr->copySource(yytext);
} }
"\"" { "{" {
LOCptr->copySource(yytext);
LOCptr->startBlock();
}
"}"{SPACE}";"* {
LOCptr->copySource(yytext);
LOCptr->stopBlock();
}
[iI][dD][eE][nN][tT][iI][fF][iI][eE][rR] {
LOCptr->copySource(yytext);
BEGIN(ID);
}
<ID>{SPACE}[=]*{SPACE} {
LOCptr->copySource(yytext);
}
<ID>{IDENT} {
LOCptr->setName(LOCptr->copySource(yytext));
BEGIN(INITIAL);
}
[tT][eE][xX][tT] {
LOCptr->copySource(yytext);
BEGIN(LANG);
}
<LANG>{SPACE}"["{SPACE} {
LOCptr->copySource(yytext);
BEGIN(LANG2);
}
<LANG2>{IDENT} {
if (LOCptr->setLang(LOCptr->copySource(yytext))) {
BEGIN(LANG3);
}
else {
BEGIN(INITIAL);
}
}
<LANG3>{SPACE}"]"{SPACE}"="{SPACE} {
LOCptr->copySource(yytext);
BEGIN(LANG4);
}
<LANG4>"\"" {
char buildValue[8000]; char buildValue[8000];
int j, i; int j, i;
...@@ -84,31 +148,65 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -84,31 +148,65 @@ KEYID [a-zA-Z0-9_-]+
if (yytext[i] == '\\') if (yytext[i] == '\\')
buildValue[++j] = yytext[++i] = yyinput(); buildValue[++j] = yytext[++i] = yyinput();
--j; --j;
// Look for termination or continuation for (; (yytext[++i] = yyinput()) != ';' && yytext[i] != '\"';) ;
if (LOCptr->mbExpectValue)
for (; (yytext[++i] = yyinput()) != ';' && yytext[i] != '\"';) ;
else
break;
} }
yytext[++i] = yytext[++i] =
buildValue[j+1] = '\0'; buildValue[j+1] = '\0';
LOCptr->setValue(yytext, &buildValue[1]); LOCptr->setValue(LOCptr->copySource(buildValue));
BEGIN(INITIAL);
} }
"{" { [mM][eE][nN][uU] |
LOCptr->startBlock(yytext); [mM][eE][nN][uU][iI][tT][eE][mM] |
[sS][tT][rR][iI][nN][gG] {
LOCptr->setCmd(LOCptr->copySource(yytext));
BEGIN(CMD);
} }
"}"{SPACE}";"* { <CMD>{IDENT} {
LOCptr->stopBlock(yytext); LOCptr->setName(LOCptr->copySource(yytext));
BEGIN(INITIAL);
}
<CMD>{SPACE} {
LOCptr->copySource(yytext);
} }
<CMD>{SUF} {
LOCptr->copySource(yytext);
BEGIN(INITIAL);
}
. {
LOCptr->copySource(yytext);
// Just to please compiler.
if (false)
REJECT;
}
%%
#if 0
PRE ^[ \t]*
SUFT [ \t\r\n\[]
KEYID [a-zA-Z0-9_-]+
%%
{PRE}"<"{SUF} { {PRE}"<"{SUF} {
yyless(strlen(yytext)-1); yyless(strlen(yytext)-1);
LOCptr->setListItem(yytext, true); LOCptr->setListItem(yytext, true);
...@@ -135,18 +233,6 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -135,18 +233,6 @@ KEYID [a-zA-Z0-9_-]+
"["{SPACE}en-US{SPACE}"]" {
LOCptr->setLang(yytext, true);
}
"["{SPACE}{KEYID}{SPACE}"]" {
LOCptr->setLang(yytext, false);
}
{PRE}[bB][iI][tT][mM][aA][pP]{SUF} | {PRE}[bB][iI][tT][mM][aA][pP]{SUF} |
{PRE}[bB][uU][tT][tT][oO][nN][iI][mM][aA][gG][eE]{SUF} | {PRE}[bB][uU][tT][tT][oO][nN][iI][mM][aA][gG][eE]{SUF} |
{PRE}[cC][aA][nN][cC][eE][lL][bB][uU][tT][tT][oO][nN]{SUF} | {PRE}[cC][aA][nN][cC][eE][lL][bB][uU][tT][tT][oO][nN]{SUF} |
...@@ -168,9 +254,7 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -168,9 +254,7 @@ KEYID [a-zA-Z0-9_-]+
{PRE}[iI][mM][aA][gG][eE][rR][aA][dD][iI][oO][bB][uU][tT][tT][oO][nN]{SUF} | {PRE}[iI][mM][aA][gG][eE][rR][aA][dD][iI][oO][bB][uU][tT][tT][oO][nN]{SUF} |
{PRE}[iI][nN][fF][oO][bB][oO][xX]{SUF} | {PRE}[iI][nN][fF][oO][bB][oO][xX]{SUF} |
{PRE}[lL][iI][sS][tT][bB][oO][xX]{SUF} | {PRE}[lL][iI][sS][tT][bB][oO][xX]{SUF} |
{PRE}[mM][eE][nN][uU]{SUF} |
{PRE}[mM][eE][nN][uU][bB][uU][tT][tT][oO][nN]{SUF} | {PRE}[mM][eE][nN][uU][bB][uU][tT][tT][oO][nN]{SUF} |
{PRE}[mM][eE][nN][uU][iI][tT][eE][mM]{SUF} |
{PRE}[mM][eE][sS][sS][bB][oO][xX]{SUF} | {PRE}[mM][eE][sS][sS][bB][oO][xX]{SUF} |
{PRE}[mM][eE][tT][rR][iI][cC][fF][iI][eE][lL][dD]{SUF} | {PRE}[mM][eE][tT][rR][iI][cC][fF][iI][eE][lL][dD]{SUF} |
{PRE}[mM][oO][dD][aA][lL][dD][iI][aA][lL][oO][gG]{SUF} | {PRE}[mM][oO][dD][aA][lL][dD][iI][aA][lL][oO][gG]{SUF} |
...@@ -188,7 +272,6 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -188,7 +272,6 @@ KEYID [a-zA-Z0-9_-]+
{PRE}[sS][fF][xX][sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][iI][eS][sS]{SUF} | {PRE}[sS][fF][xX][sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][iI][eS][sS]{SUF} |
{PRE}[sS][fF][xX][sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][yY][iI][tT][eE][mM]{SUF} | {PRE}[sS][fF][xX][sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][yY][iI][tT][eE][mM]{SUF} |
{PRE}[sS][pP][iI][nN][fF][iI][eE][lL][dD]{SUF} | {PRE}[sS][pP][iI][nN][fF][iI][eE][lL][dD]{SUF} |
{PRE}[sS][tT][rR][iI][nN][gG]{SUF} |
{PRE}[sS][tT][rR][iI][nN][gG][aA][rR][rR][aA][yY]{SUF} | {PRE}[sS][tT][rR][iI][nN][gG][aA][rR][rR][aA][yY]{SUF} |
{PRE}[tT][aA][bB][cC][oO][nN][tT][rR][oO][lL]{SUF} | {PRE}[tT][aA][bB][cC][oO][nN][tT][rR][oO][lL]{SUF} |
{PRE}[tT][aA][bB][dD][iI][aA][lL][oO][gG]{SUF} | {PRE}[tT][aA][bB][dD][iI][aA][lL][oO][gG]{SUF} |
...@@ -200,24 +283,6 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -200,24 +283,6 @@ KEYID [a-zA-Z0-9_-]+
{PRE}[wW][aA][rR][nN][iI][nN][gG][bB][oO][xX]{SUF} | {PRE}[wW][aA][rR][nN][iI][nN][gG][bB][oO][xX]{SUF} |
{PRE}[wW][iI][nN][dD][oO][wW]{SUF} | {PRE}[wW][iI][nN][dD][oO][wW]{SUF} |
{PRE}[wW][oO][rR][kK][wW][iI][nN][dD][oO][wW]{SUF} { {PRE}[wW][oO][rR][kK][wW][iI][nN][dD][oO][wW]{SUF} {
yyless(strlen(yytext)-1);
LOCptr->setCmd(yytext);
BEGIN(CMD);
}
<CMD>{IDENT} {
LOCptr->setName(yytext);
BEGIN(INITIAL);
}
<CMD>[ \t=]+ {
LOCptr->copySource(yytext);
}
<CMD>.|\n|\r {
yyless(0);
BEGIN(INITIAL);
}
...@@ -229,10 +294,6 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -229,10 +294,6 @@ KEYID [a-zA-Z0-9_-]+
{PRE}[sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][yY]{SUF} | {PRE}[sS][tT][yY][lL][eE][fF][aA][mM][iI][lL][yY]{SUF} |
{PRE}[iI][dD][eE][nN][tT][iI][fF][iI][eE][rR]{SUF} {
yyless(strlen(yytext)-1);
LOCptr->setId(yytext, true);
}
...@@ -277,18 +338,7 @@ KEYID [a-zA-Z0-9_-]+ ...@@ -277,18 +338,7 @@ KEYID [a-zA-Z0-9_-]+
LOCptr->setName(yytext); LOCptr->setName(yytext);
} }
#endif
. {
LOCptr->copySource(yytext);
// Just to please compiler.
if (false)
REJECT;
}
%%
void src_dummyJustForCompiler() void src_dummyJustForCompiler()
......
#!/bin/bash #!/bin/bash
cd ${LODE_HOME}/dev/work cd ${LODE_HOME}/dev/core
MYCMD='./workdir/LinkTarget/Executable/genlang.exe extract -s --target workdir/jan ' MYCMD='./workdir/LinkTarget/Executable/genlang.exe extract -s --target workdir/jan '
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment