38  if ( 
str.contains( 
',' ) )
 
   49    const thread_local QRegularExpression partsRx( QStringLiteral( 
"((?:.*?),(?:.*?),(?:(?:\\d+,)+)?(?:\\d+);)" ) );
 
   50    QRegularExpressionMatchIterator partsIt = partsRx.globalMatch( 
str + 
';' );
 
   52    while ( partsIt.hasNext() )
 
   54      const QRegularExpressionMatch partMatch = partsIt.next();
 
   55      const QString tuple = partMatch.captured( 1 );
 
   60      const thread_local QRegularExpression rx( QStringLiteral( 
"(.*?),(.*?),((?:\\d+,)+)?(\\d+)" ) );
 
   62      const QRegularExpressionMatch match = rx.match( tuple );
 
   63      if ( !match.hasMatch() )
 
   66      const QString layerId = match.captured( 1 );
 
   67      const QString symbolKey = match.captured( 2 );
 
   68      const QStringList indices = QString( match.captured( 3 ) + match.captured( 4 ) ).split( 
',' );
 
   70      QVector<int> indexPath;
 
   71      indexPath.reserve( indices.size() );
 
   72      for ( 
const QString &index : indices )
 
   74        indexPath.append( index.toInt() );
 
   82    const QStringList elems = 
str.split( 
';' );
 
   83    for ( 
int i = 0; i < elems.size(); )