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

src/SMESH_I/SMESH_2smeshpy.cxx

index f3e8d5746facbb9067fac8ea38b0f8374c827e31..cc189fd646f3ea357852a0a41c961052fe540c4b 100644 (file)
@@ -1714,8 +1714,22 @@ const TCollection_AsciiString & _pyCommand::GetObject()
   {
     // beginning
     int begPos = GetBegPos( RESULT_IND ) + myRes.Length();
-    if ( begPos < 1 )
+    if ( begPos < 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 ( fmod( nb1, 2 ) != 0 || fmod( nb2, 2 ) != 0 )
+       begPos = 1;
+    }
     // store
     myObj = GetWord( myString, begPos, true );
     SetBegPos( OBJECT_IND, begPos );