[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdeedu/kmplot/kmplot
From:       Fredrik Edemar <f_edemar () linux ! se>
Date:       2004-09-01 0:08:14
Message-ID: 20040901000814.7D9641CC2 () office ! kde ! org
[Download RAW message or body]

CVS commit by fedemar: 

Better auto-correction of expressions: x(x+1)5=x*(x+1)*5

CCMAIL:kdmoeller@foni.net
CCMAIL:bmlmessmer@web.de


  M +33 -30    parser.cpp   1.28


--- kdeedu/kmplot/kmplot/parser.cpp  #1.27:1.28
@@ -141,11 +141,11 @@ double Parser::eval(QString str)
         str.remove(" " );
         //insert '*' when it is needed
-        for(int i=0; i < (int)str.length();i++)
-        {
-                if( (str.at(i).isNumber() || \
str.at(i).category()==QChar::Letter_Uppercase )&& ( str.at(i-1).isLetter() || \
str.at(i-1) == ')' ) ) +        QChar ch;
+        for(uint i=0; i <  str.length();i++)
                 {
+                ch = str.at(i);
+                if( (ch.isNumber() || ch.category()==QChar::Letter_Uppercase )&& ( \
str.at(i-1).isLetter() || str.at(i-1) == ')' ) || (ch.isLetter() && str.at(i-1)==')') \
)  str.insert(i,'*');
-                }
-                else if( (str.at(i).isNumber() || str.at(i) == ')' || \
str.at(i).category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || \
str.at(i+1) == '(' ) ) +                else if( (ch.isNumber() || ch == ')' || \
ch.category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || str.at(i+1) == \
'(' ) || (ch.isLetter() && str.at(i+1)=='(') )  {
                         str.insert(i+1,'*');
@@ -153,4 +153,5 @@ double Parser::eval(QString str)
                 }
         }
+        
         if ( str.contains('y')!=0)
         {
@@ -265,9 +266,11 @@ int Parser::addfkt(QString str)
         
         //insert '*' when it is needed
-        for(int i=p1+3; i < (int) str.length();i++)
+        QChar ch;
+        for(uint i=p1+4; i <  str.length();i++)
         {
-                if( (str.at(i).isNumber() || \
str.at(i).category()==QChar::Letter_Uppercase )&& ( str.at(i-1).isLetter() || \
str.at(i-1) == ')' ) ) +                ch = str.at(i);
+                if( (ch.isNumber() || ch.category()==QChar::Letter_Uppercase )&& ( \
str.at(i-1).isLetter() || str.at(i-1) == ')' ) || (ch.isLetter() && str.at(i-1)==')') \
)  str.insert(i,'*');
-                else if( (str.at(i).isNumber() || str.at(i) == ')' || \
str.at(i).category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || \
str.at(i+1) == '(' ) ) +                else if( (ch.isNumber() || ch == ')' || \
ch.category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || str.at(i+1) == \
'(' ) || (ch.isLetter() && str.at(i+1)=='(') )  {
                         str.insert(i+1,'*');
@@ -351,11 +354,11 @@ void Parser::reparse(int ix)
         
         //insert '*' when it is needed
-        for(int i=p1+3; i < (int) str.length();i++)
-        {
-                if( (str.at(i).isNumber() || \
str.at(i).category()==QChar::Letter_Uppercase )&& ( str.at(i-1).isLetter() || \
str.at(i-1) == ')' ) ) +        QChar ch;
+        for(uint i=p1+4; i <  str.length();i++)
                 {
+                ch = str.at(i);
+                if( (ch.isNumber() || ch.category()==QChar::Letter_Uppercase )&& ( \
str.at(i-1).isLetter() || str.at(i-1) == ')' ) || (ch.isLetter() && str.at(i-1)==')') \
)  str.insert(i,'*');
-                }
-                else if( (str.at(i).isNumber() || str.at(i) == ')' || \
str.at(i).category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || \
str.at(i+1) == '(' ) ) +                else if( (ch.isNumber() || ch == ')' || \
ch.category()==QChar::Letter_Uppercase) && ( str.at(i+1).isLetter() || str.at(i+1) == \
'(' ) || (ch.isLetter() && str.at(i+1)=='(') )  {
                         str.insert(i+1,'*');


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic