Krita Source Code Documentation
Loading...
Searching...
No Matches
EnhancedPathFormula.cpp File Reference
#include "EnhancedPathFormula.h"
#include "EnhancedPathShape.h"
#include <QStack>
#include <math.h>
#include <QDebug>

Go to the source code of this file.

Classes

class  FormulaTokenStack
 
class  Opcode
 

Functions

bool isIdentifier (QChar ch)
 
EnhancedPathFormula::Function matchFunction (const QString &text)
 
QString matchFunction (EnhancedPathFormula::Function function)
 
FormulaToken::Operator matchOperator (const QString &text)
 
int opPrecedence (FormulaToken::Operator op)
 

Function Documentation

◆ isIdentifier()

bool isIdentifier ( QChar ch)

Definition at line 718 of file EnhancedPathFormula.cpp.

719{
720 return (ch.unicode() == '?') || (ch.unicode() == '$') || (ch.isLetter());
721}

◆ matchFunction() [1/2]

EnhancedPathFormula::Function matchFunction ( const QString & text)

Definition at line 741 of file EnhancedPathFormula.cpp.

742{
743 if (text == "abs") {
745 }
746 if (text == "sqrt") {
748 }
749 if (text == "sin") {
751 }
752 if (text == "cos") {
754 }
755 if (text == "tan") {
757 }
758 if (text == "atan") {
760 }
761 if (text == "atan2") {
763 }
764 if (text == "min") {
766 }
767 if (text == "max") {
769 }
770 if (text == "if") {
772 }
773
775}

References EnhancedPathFormula::FunctionAbs, EnhancedPathFormula::FunctionAtan, EnhancedPathFormula::FunctionAtan2, EnhancedPathFormula::FunctionCos, EnhancedPathFormula::FunctionIf, EnhancedPathFormula::FunctionMax, EnhancedPathFormula::FunctionMin, EnhancedPathFormula::FunctionSin, EnhancedPathFormula::FunctionSqrt, EnhancedPathFormula::FunctionTan, and EnhancedPathFormula::FunctionUnknown.

◆ matchFunction() [2/2]

QString matchFunction ( EnhancedPathFormula::Function function)

Definition at line 777 of file EnhancedPathFormula.cpp.

778{
779 switch (function) {
781 return "fabs";
782 break;
784 return "sqrt";
785 break;
787 return "sin";
788 break;
790 return "cos";
791 break;
793 return "tan";
794 break;
796 return "atan";
797 break;
799 return "atan2";
800 break;
802 return "min";
803 break;
805 return "max";
806 break;
808 return "if";
809 break;
810 default:
811 break;
812 }
813
814 return "unknown";
815}

References EnhancedPathFormula::FunctionAbs, EnhancedPathFormula::FunctionAtan, EnhancedPathFormula::FunctionAtan2, EnhancedPathFormula::FunctionCos, EnhancedPathFormula::FunctionIf, EnhancedPathFormula::FunctionMax, EnhancedPathFormula::FunctionMin, EnhancedPathFormula::FunctionSin, EnhancedPathFormula::FunctionSqrt, and EnhancedPathFormula::FunctionTan.

◆ matchOperator()

FormulaToken::Operator matchOperator ( const QString & text)

Definition at line 698 of file EnhancedPathFormula.cpp.

699{
700 if (text.length() != 1) {
702 }
703
704 const char c = text[0].toLatin1();
705 switch (c) {
706 case '+': return FormulaToken::OperatorAdd; break;
707 case '-': return FormulaToken::OperatorSub; break;
708 case '*': return FormulaToken::OperatorMul; break;
709 case '/': return FormulaToken::OperatorDiv; break;
710 case '(': return FormulaToken::OperatorLeftPar; break;
711 case ')': return FormulaToken::OperatorRightPar; break;
712 case ',': return FormulaToken::OperatorComma; break;
713 default : return FormulaToken::OperatorInvalid; break;
714 }
715}
@ OperatorLeftPar
(left parentheses
@ OperatorInvalid
invalid operator
@ OperatorRightPar
) right parentheses
@ OperatorDiv
/ division

References FormulaToken::OperatorAdd, FormulaToken::OperatorComma, FormulaToken::OperatorDiv, FormulaToken::OperatorInvalid, FormulaToken::OperatorLeftPar, FormulaToken::OperatorMul, FormulaToken::OperatorRightPar, and FormulaToken::OperatorSub.

◆ opPrecedence()

int opPrecedence ( FormulaToken::Operator op)

Definition at line 725 of file EnhancedPathFormula.cpp.

726{
727 int prec = -1;
728 switch (op) {
729 case FormulaToken::OperatorMul: prec = 5; break;
730 case FormulaToken::OperatorDiv: prec = 6; break;
731 case FormulaToken::OperatorAdd: prec = 3; break;
732 case FormulaToken::OperatorSub: prec = 3; break;
733 case FormulaToken::OperatorComma: prec = 0; break;
734 case FormulaToken::OperatorRightPar: prec = 0; break;
735 case FormulaToken::OperatorLeftPar: prec = -1; break;
736 default: prec = -1; break;
737 }
738 return prec;
739}

References FormulaToken::OperatorAdd, FormulaToken::OperatorComma, FormulaToken::OperatorDiv, FormulaToken::OperatorLeftPar, FormulaToken::OperatorMul, FormulaToken::OperatorRightPar, and FormulaToken::OperatorSub.