Quintiq file version 2.0
#parent: #root
Method PTF_RemoveTextBetweenKeepNewLines (
  String body,
  String startsymbol,
  String endsymbol
) as String id:Method_LibPTF_dlgCreateEditTestScript_PTF_RemoveTextBetweenKeepNewLines
{
  #keys: '[104342.0.875298696]'
  Body:
  [*
    // Helper method to remove strings between the start and end indicator
    resultbody := body;
    
    // Remove everything between startsymbol and endsymbol.
    // Both startsymbol and endsymbol are also removed, unless the last character of endsymbol is a newline.
    // In that case the newline is not removed.
    idxstart := resultbody.FindString( startsymbol, 0 );
    while( idxstart >= 0 )
    {
      idxend := resultbody.FindString( endsymbol, idxstart + 1 );
    
      if( idxend < 0 )
      {
        idxend := resultbody.Length() - endsymbol.Length();
      }
    
      // Keep number of newlines found before deleting the comments
      textremovelength := idxend - idxstart + endsymbol.Length();
      texttoremove     := resultbody.SubString( idxstart, textremovelength )
      nfofnewlines     := texttoremove.NrOccurrences( String::NewLine(), 0, true );
    
      resultbody := resultbody.Replace( idxstart, textremovelength, "" );
    
      // Insert Newlines back to the resultbody
      while( nfofnewlines > 0 )
      {
        resultbody := resultbody.Insert( idxstart, String::NewLine() );
        nfofnewlines--;
      }
    
      idxstart := resultbody.FindString( startsymbol, idxstart );
    }
    
    return resultbody;
  *]
}
