ReFormat

 (Available in 00 TS Tools(Base) - TS_Tools_Atomizer)

Source

METHOD ReFormat( aAtomized AS ARRAY ) AS ARRAY PASCAL CLASS TS_Atomizer
LOCAL oAtomizerItemThis AS TS_AtomizerItem
LOCAL oAtomizerItemPrev AS TS_AtomizerItem
LOCAL aReFormat AS ARRAY
LOCAL X AS DWORD
LOCAL Z AS DWORD
   TSTrace Enter
   SELF:_ItemCreationBlocked+=1U
   aReFormat:=ArrayCreate( 0U )
   Z:=ALen( aAtomized )
   oAtomizerItemPrev:=SELF:_GetWhite
   FOR X:=1U UPTO Z
      oAtomizerItemThis:=aAtomized[ X ]
      IF oAtomizerItemThis:IsNotWhite
         DO CASE
         CASE oAtomizerItemPrev:IsMain .AND. oAtomizerItemThis:IsMain
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsNotWhite .AND. oAtomizerItemThis:NeedsLeadingWhite
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsNotWhiteAndIsNotGray .AND. oAtomizerItemThis:NeedsLeadingGray
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:NeedsTrailingWhite .AND. oAtomizerItemThis:IsNotWhite
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:NeedsTrailingGray .AND. oAtomizerItemThis:IsNotWhiteAndIsNotGray
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
         END
         DO CASE
         CASE oAtomizerItemPrev:IsAtractorOrIsAtracted .AND. oAtomizerItemThis:IsNotMain
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsNotMain .AND. oAtomizerItemThis:IsAtractorOrIsAtracted
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsWhite
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsMain .AND. oAtomizerItemThis:IsStringAndIsLeft
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsStringAndIsRight .AND. oAtomizerItemThis:IsMain
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         CASE oAtomizerItemPrev:IsGrayAndIsRight .AND. oAtomizerItemThis:IsMain
            oAtomizerItemPrev:=SELF:_GetWhite
            AAdd( aReFormat, oAtomizerItemPrev )
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         OTHERWISE
            oAtomizerItemPrev:=oAtomizerItemThis
            AAdd( aReFormat, oAtomizerItemPrev )
         END
      END
   NEXT
   SELF:_ItemCreationBlocked-=1U
   TSTrace Leave
RETURN aReFormat