2008-07-29 20:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/rtl/mlcfunc.c
! skip SOFTCR when it's on the end of extracted line.
; NOTE: MPOSTOLC() is not exactly CA-Cl*pper compatible
The returned value is intentionally updated to be
MLCTOPOS() so conversions are revertable. For me
it's a bug in CA-Cl*pper.
This commit is contained in:
@@ -8,6 +8,14 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-07-29 20:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/source/rtl/mlcfunc.c
|
||||
! skip SOFTCR when it's on the end of extracted line.
|
||||
; NOTE: MPOSTOLC() is not exactly CA-Cl*pper compatible
|
||||
The returned value is intentionally updated to be
|
||||
MLCTOPOS() so conversions are revertable. For me
|
||||
it's a bug in CA-Cl*pper.
|
||||
|
||||
2008-07-29 18:03 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* source/rtl/memoedit.prg
|
||||
! Fixed so that "Abort (Y/N)" confirmation gets only popped
|
||||
|
||||
@@ -60,6 +60,19 @@ typedef struct
|
||||
ULONG ulLen;
|
||||
} HB_EOL_INFO, * PHB_EOL_INFO;
|
||||
|
||||
static int hb_mlEol( char * pszString, ULONG ulLen,
|
||||
PHB_EOL_INFO pEOLs, int iEOLs )
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < iEOLs; ++i )
|
||||
{
|
||||
if( ulLen >= pEOLs[ i ].ulLen &&
|
||||
memcmp( pszString, pEOLs[ i ].szEOL, pEOLs[ i ].ulLen ) == 0 )
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static ULONG hb_mlGetLine( char * pszString, ULONG ulLen, ULONG ulOffset,
|
||||
ULONG ulLineLength, ULONG ulTabSize, ULONG ulMaxPos,
|
||||
BOOL fWordWrap, PHB_EOL_INFO pEOLs, int iEOLs,
|
||||
@@ -73,20 +86,29 @@ static ULONG hb_mlGetLine( char * pszString, ULONG ulLen, ULONG ulOffset,
|
||||
|
||||
while( ulOffset < ulLen && ( ulMaxPos == 0 || ulOffset < ulMaxPos ) )
|
||||
{
|
||||
for( i = 0; i < iEOLs; ++i )
|
||||
if( pszString[ ulOffset ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulOffset + 1 ] == HB_CHAR_SOFT2 )
|
||||
{
|
||||
if( ulLen - ulOffset >= pEOLs[ i ].ulLen &&
|
||||
memcmp( pszString + ulOffset, pEOLs[ i ].szEOL, pEOLs[ i ].ulLen ) == 0 )
|
||||
if( !fWordWrap )
|
||||
{
|
||||
if( ulMaxPos )
|
||||
ulCol += pEOLs[ i ].ulLen;
|
||||
else
|
||||
ulOffset += pEOLs[ i ].ulLen;
|
||||
* pulLen = ulCol;
|
||||
if( pulEOL )
|
||||
* pulEOL = pEOLs[ i ].ulLen;
|
||||
return ulOffset;
|
||||
if( ulMaxPos == 0 )
|
||||
ulOffset += 2;
|
||||
break;
|
||||
}
|
||||
ulOffset += 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
i = hb_mlEol( pszString + ulOffset, ulLen - ulOffset, pEOLs, iEOLs );
|
||||
if( i >= 0 )
|
||||
{
|
||||
if( ulMaxPos )
|
||||
ulCol += pEOLs[ i ].ulLen;
|
||||
else
|
||||
ulOffset += pEOLs[ i ].ulLen;
|
||||
if( pulEOL )
|
||||
* pulEOL = pEOLs[ i ].ulLen;
|
||||
break;
|
||||
}
|
||||
|
||||
if( pszString[ ulOffset ] == ' ' || pszString[ ulOffset ] == HB_CHAR_HT )
|
||||
@@ -95,23 +117,6 @@ static ULONG hb_mlGetLine( char * pszString, ULONG ulLen, ULONG ulOffset,
|
||||
ulBlankPos = ulOffset;
|
||||
}
|
||||
|
||||
if( pszString[ ulOffset ] == HB_CHAR_HT )
|
||||
ulCol += ulTabSize - ( ulCol % ulTabSize );
|
||||
else if( pszString[ ulOffset ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulOffset + 1 ] == HB_CHAR_SOFT2 )
|
||||
{
|
||||
ulOffset++;
|
||||
if( !fWordWrap )
|
||||
{
|
||||
ulOffset++;
|
||||
* pulLen = ulCol;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
ulCol++;
|
||||
|
||||
ulOffset++;
|
||||
if( ulCol >= ulLineLength )
|
||||
{
|
||||
if( fWordWrap )
|
||||
@@ -122,6 +127,9 @@ static ULONG hb_mlGetLine( char * pszString, ULONG ulLen, ULONG ulOffset,
|
||||
ulCol = ulLineLength;
|
||||
if( pszString[ ulOffset ] == ' ' )
|
||||
++ulOffset;
|
||||
if( pszString[ ulOffset ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulOffset + 1 ] == HB_CHAR_SOFT2 )
|
||||
ulOffset += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -137,6 +145,10 @@ static ULONG hb_mlGetLine( char * pszString, ULONG ulLen, ULONG ulOffset,
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
ulCol += pszString[ ulOffset ] == HB_CHAR_HT ?
|
||||
ulTabSize - ( ulCol % ulTabSize ) : 1;
|
||||
ulOffset++;
|
||||
}
|
||||
* pulLen = ulCol;
|
||||
|
||||
@@ -423,6 +435,19 @@ HB_FUNC( MPOSTOLC )
|
||||
}
|
||||
}
|
||||
while( ulOffset < ulLen && ulOffset < ulPos );
|
||||
|
||||
if( ulLine && ulCol == ulLineLength && ulPos <= ulLen &&
|
||||
( hb_mlEol( pszString + ulPos, ulLen - ulPos, pEOLs, iEOLs ) >= 0 ||
|
||||
( pszString[ ulPos ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulPos + 1 ] == HB_CHAR_SOFT2 ) ||
|
||||
( ulPos > 0 && pszString[ ulPos - 1 ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulPos ] == HB_CHAR_SOFT2 ) ||
|
||||
( ulPos > 1 && pszString[ ulPos - 2 ] == HB_CHAR_SOFT1 &&
|
||||
pszString[ ulPos - 1 ] == HB_CHAR_SOFT2 ) ) )
|
||||
{
|
||||
ulCol = 0;
|
||||
++ulLine;
|
||||
}
|
||||
}
|
||||
else
|
||||
++ulLine;
|
||||
|
||||
Reference in New Issue
Block a user