Patch level : 2.1 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento : Corretta lettura file xml git-svn-id: svn://10.65.10.50/trunk@11948 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
591c49e4c5
commit
829f30e2be
@ -771,7 +771,7 @@ TCodesym TExpression::tok2fun(const char* tok) const
|
||||
|
||||
|
||||
|
||||
TCodesym TExpression::__gettoken(bool /* reduct */)
|
||||
TCodesym TExpression::__gettoken()
|
||||
{
|
||||
TCodesym sym = _invalid;
|
||||
int i = 0;
|
||||
@ -827,7 +827,7 @@ TCodesym TExpression::__gettoken(bool /* reduct */)
|
||||
_tok[i++] = *(_s++);
|
||||
|
||||
while (isalnum(*_s) || (*_s == '-') || (*_s == '[') ||
|
||||
(*_s == ':') || (*_s == '_') ||
|
||||
(*_s == ':') || (*_s == '_') || (*_s == '.') ||
|
||||
(square_bracket && (*_s == ',' || *_s == ']'))
|
||||
)
|
||||
{
|
||||
@ -837,15 +837,15 @@ TCodesym TExpression::__gettoken(bool /* reduct */)
|
||||
break; // Non e' una -> (freccia)
|
||||
_tok[i++] = *(_s++);
|
||||
sym = _variable;
|
||||
}
|
||||
else
|
||||
} else
|
||||
if (*_s == '[')
|
||||
{
|
||||
if (*_s == '[')
|
||||
{
|
||||
sym = _variable;
|
||||
square_bracket = TRUE;
|
||||
}
|
||||
}
|
||||
sym = _variable;
|
||||
square_bracket = TRUE;
|
||||
} else
|
||||
if (*_s == '.')
|
||||
sym = _variable;
|
||||
|
||||
_tok[i++] = *(_s++);
|
||||
}
|
||||
_tok[i] = '\0';
|
||||
@ -1007,13 +1007,13 @@ TCodesym TExpression::__factor(TCodesym startsym)
|
||||
for (i = numvar()-1 ; i >= 0; i--)
|
||||
if (strcmp(_tok, varname(i)) == 0) break;
|
||||
if (i < 0) _var.add(_tok);
|
||||
sym = __gettoken(TRUE);
|
||||
sym = __gettoken();
|
||||
}
|
||||
break;
|
||||
case _number:
|
||||
case _string:
|
||||
_code.add(startsym, _tok);
|
||||
sym = __gettoken(TRUE);
|
||||
sym = __gettoken();
|
||||
break;
|
||||
case _userfunc:
|
||||
{
|
||||
@ -1129,24 +1129,24 @@ TCodesym TExpression::__expression(TCodesym startsym)
|
||||
|
||||
TCodesym TExpression::__function(int nparms, bool fixed_num)
|
||||
{
|
||||
TCodesym sym = __gettoken(TRUE);
|
||||
TCodesym sym = __gettoken();
|
||||
if (sym != _lpar)
|
||||
return _invalid;
|
||||
__parms_found = 0;
|
||||
sym = __gettoken(TRUE);
|
||||
sym = __gettoken();
|
||||
if (sym == _rpar)
|
||||
return nparms <= 0 || !fixed_num ? __gettoken(TRUE) : _invalid;
|
||||
return nparms <= 0 || !fixed_num ? __gettoken() : _invalid;
|
||||
__parms_found++;
|
||||
sym = __expression(sym);
|
||||
while (sym == _comma || sym == _semicolon)
|
||||
{
|
||||
sym = __gettoken(TRUE);
|
||||
sym = __gettoken();
|
||||
__parms_found++;
|
||||
sym = __expression(sym);
|
||||
}
|
||||
if (sym == _rpar)
|
||||
return nparms < 0 || __parms_found == nparms || (__parms_found < nparms && !fixed_num) ?
|
||||
__gettoken(TRUE) :
|
||||
__gettoken() :
|
||||
_invalid;
|
||||
return _invalid;
|
||||
}
|
||||
|
@ -433,7 +433,7 @@ protected:
|
||||
TCodesym tok2fun(const char* tok) const;
|
||||
// @cmember Ritorna il prossimo token dell'espressione (se <p reduct> e' TRUE interpreta
|
||||
// la virgola come un token)
|
||||
TCodesym __gettoken(bool reduct = FALSE);
|
||||
TCodesym __gettoken();
|
||||
// @cmember Esegue la compilazione di un fattore
|
||||
TCodesym __factor(TCodesym startsym);
|
||||
// @cmember Esegue la compilazione di un termine
|
||||
|
@ -203,11 +203,12 @@ bool TXmlItem::GetWord(istream& inf, TString& str) const
|
||||
}
|
||||
if (cFirstChar == EOF)
|
||||
return false;
|
||||
|
||||
str << char(cFirstChar);
|
||||
|
||||
const bool bIsString = cFirstChar == '"' || cFirstChar == '\'';
|
||||
if (!bIsString)
|
||||
{
|
||||
str << char(cFirstChar);
|
||||
if (strchr("<=/>", cFirstChar) != NULL)
|
||||
return true; // Simboli terminali
|
||||
if (cFirstChar == '&')
|
||||
@ -219,11 +220,11 @@ bool TXmlItem::GetWord(istream& inf, TString& str) const
|
||||
int c = inf.get();
|
||||
if (bIsString)
|
||||
{
|
||||
if (c == cFirstChar)
|
||||
break;
|
||||
if (c >= '\0' && c <= ' ')
|
||||
c = ' ';
|
||||
str << char(c);
|
||||
if (c == cFirstChar)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -263,7 +264,8 @@ int TXmlItem::ReadTag(istream& inf)
|
||||
}
|
||||
if (bFirstChar)
|
||||
{
|
||||
str << ' ';
|
||||
if (c != ' ')
|
||||
str << ' ';
|
||||
bFirstChar = false;
|
||||
}
|
||||
if (c == '&')
|
||||
@ -304,6 +306,9 @@ int TXmlItem::ReadTag(istream& inf)
|
||||
break;
|
||||
// Leggo il valore dell'attributo
|
||||
GetWord(inf, tmp);
|
||||
const int len = tmp.len();
|
||||
if (len >= 2 && (tmp[0] == '"' || tmp[0] == '\'') && tmp[len-1] == tmp[0])
|
||||
{ tmp.rtrim(1); tmp.ltrim(1); }
|
||||
SetAttr(name, tmp);
|
||||
}
|
||||
return -1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user