@@ -511,6 +511,36 @@ static QVariant fcnStrpos( const QVariantList& values, QgsFeature* , QgsExpressi
511511 return string.indexOf ( QRegExp ( getStringValue ( values.at ( 1 ), parent ) ) );
512512}
513513
514+ static QVariant fcnRight ( const QVariantList& values, QgsFeature* , QgsExpression *parent )
515+ {
516+ QString string = getStringValue ( values.at ( 0 ), parent );
517+ int pos = getIntValue ( values.at ( 1 ), parent );
518+ return string.right ( pos );
519+ }
520+
521+ static QVariant fcnLeft ( const QVariantList& values, QgsFeature* , QgsExpression *parent )
522+ {
523+ QString string = getStringValue ( values.at ( 0 ), parent );
524+ int pos = getIntValue ( values.at ( 1 ), parent );
525+ return string.left ( pos );
526+ }
527+
528+ static QVariant fcnRPad ( const QVariantList& values, QgsFeature* , QgsExpression *parent )
529+ {
530+ QString string = getStringValue ( values.at ( 0 ), parent );
531+ int length = getIntValue ( values.at ( 1 ), parent );
532+ QString fill = getStringValue ( values.at ( 2 ), parent );
533+ return string.rightJustified ( length, fill.at ( 0 ), true );
534+ }
535+
536+ static QVariant fcnLPad ( const QVariantList& values, QgsFeature* , QgsExpression *parent )
537+ {
538+ QString string = getStringValue ( values.at ( 0 ), parent );
539+ int length = getIntValue ( values.at ( 1 ), parent );
540+ QString fill = getStringValue ( values.at ( 2 ), parent );
541+ return string.leftJustified ( length, fill.at ( 0 ), true );
542+ }
543+
514544static QVariant fcnNow ( const QVariantList&, QgsFeature* , QgsExpression * )
515545{
516546 return QVariant ( QDateTime::currentDateTime () );
@@ -775,6 +805,11 @@ const QList<QgsExpression::FunctionDef> &QgsExpression::BuiltinFunctions()
775805 << FunctionDef ( " substr" , 3 , fcnSubstr, QObject::tr ( " String" ) )
776806 << FunctionDef ( " concat" , -1 , fcnConcat, QObject::tr ( " String" ) )
777807 << FunctionDef ( " strpos" , 2 , fcnStrpos, QObject::tr ( " String" ) )
808+ << FunctionDef ( " left" , 2 , fcnLeft, QObject::tr ( " String" ) )
809+ << FunctionDef ( " right" , 2 , fcnRight, QObject::tr ( " String" ) )
810+ << FunctionDef ( " rpad" , 3 , fcnRPad, QObject::tr ( " String" ) )
811+ << FunctionDef ( " lpad" , 3 , fcnLPad, QObject::tr ( " String" ) )
812+
778813 // geometry accessors
779814 << FunctionDef ( " xat" , 1 , fcnXat, QObject::tr ( " Geometry" ), " " , true )
780815 << FunctionDef ( " yat" , 1 , fcnYat, QObject::tr ( " Geometry" ), " " , true )
0 commit comments