Salome HOME
To correct parsing of commands like object.command(obj, 'str=value'),
authorakl <akl@opencascade.com>
Fri, 19 Dec 2008 11:19:09 +0000 (11:19 +0000)
committerakl <akl@opencascade.com>
Fri, 19 Dec 2008 11:19:09 +0000 (11:19 +0000)
when '=' character takes place between '' or "" symbols.

src/SMESH_I/SMESH_2smeshpy.cxx

index 2277fc967f5e7ab4a917c295c6d299d0288f92cc..157e0f41cac3c1a5a519ab9facf82be40a33a905 100644 (file)
@@ -1712,8 +1712,22 @@ const TCollection_AsciiString & _pyCommand::GetObject()
   {
     // beginning
     int begPos = GetBegPos( RESULT_IND ) + myRes.Length();
   {
     // beginning
     int begPos = GetBegPos( RESULT_IND ) + myRes.Length();
-    if ( begPos < 1 )
+    if ( begPos < 1 ) {
       begPos = myString.Location( "=", 1, Length() ) + 1;
       begPos = myString.Location( "=", 1, Length() ) + 1;
+      // is '=' in the string argument (for example, name) or not
+      int nb1 = 0; // number of ' character at the left of =
+      int nb2 = 0; // number of " character at the left of =
+      for ( int i = 1; i < begPos-1; i++ ) {
+       if ( IsEqual(myString.Value( i ), "'" ) )
+         nb1 += 1;
+       else if ( IsEqual( myString.Value( i ), '"' ) )
+         nb2 += 1;
+      }
+      // if number of ' or " is not divisible by 2,
+      // then get an object at the start of the command
+      if ( nb1 % 2 != 0 || nb2 % 2 != 0 )
+       begPos = 1;
+    }
     // store
     myObj = GetWord( myString, begPos, true );
     SetBegPos( OBJECT_IND, begPos );
     // store
     myObj = GetWord( myString, begPos, true );
     SetBegPos( OBJECT_IND, begPos );