\code\ Word Wrap/Break

Раздел посвящен программированию с использованием Power Basic.
Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

\code\ Word Wrap/Break

Сообщение Dark Machine » 17.06.2009 (Ср) 13:17

Код: Выделить всё
FUNCTION WordBreakString (szIn AS ASCIIZ * 256, szOut AS ASCIIZ * 512, BYVAL MaxLineLength AS LONG) AS LONG

' breaks up szIn into LF =terminated strings not larger than maxLineLength
' returns: # of LF-terminated strings szOut

   LOCAL Stat AS LONG, I AS LONG, J AS LONG
   LOCAL inLEn AS LONG
   LOCAL LenSzOut AS LONG

   LOCAL pIN AS STRING PTR * 1, pOut AS STRING PTR * 1
   LOCAL LineBReak AS LONG, LineLength AS LONG

   pIn   =  VARPTR (szIn)
   pOut  = VARPTR (szOut)
   inLEn = LEN (szIn)

   I = 0
   J = 0    ' characters this line

   LOCAL forward AS LONG, backward AS LONG, Direction AS LONG
   Forward = 1
   Backward = -1

   DECR pIn
   DECR pOut

   LineBreak = 0
   Direction = Forward
   LineLength = MaxLineLength
   Stat = 0

   WHILE I <= InLen
         pIn   = pIn  + Direction
         pOut  = pOut + Direction
         @Pout = @pin
         J = J + Direction
         I = I + direction
         IF J = LineLength THEN
            SELECT CASE @pin
                   CASE ",", " ",")","!","?"   ' character OK to break on
                      LineBreak = -1
                   CASE ELSE
                  ' go back to first qualifying break character and accept a smaller linelenght
                      Direction = Backward
                      DECR LineLength
            END SELECT
        ELSEIF I = InLen THEN
           LineBreak = -1
        END IF
        IF LineBreak THEN
           INCR pOut
           @pOut = $LF
           INCR Stat
           Direction = Forward
           LineLength = MaxLineLength
           LineBreak = 0
           J = 0
        END IF
   WEND
   FUNCTION = Stat
END FUNCTION

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: \code\ Word Wrap/Break

Сообщение jangle » 28.07.2009 (Вт) 15:04

Интересный код, спасибо!

Kumpel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 02.01.2009 (Пт) 0:24
Откуда: Украина, Львов

Re: \code\ Word Wrap/Break

Сообщение Kumpel » 31.07.2009 (Пт) 22:35

Действительно полезный код, но я использую его для динамических строк
Код: Выделить всё
Function WordBreakString (szIn As String, szOut As String, ByVal MaxLineLength As Long) As Long

' breaks up szIn into LF =terminated strings not larger than maxLineLength
' returns: # of LF-terminated strings szOut

    Local Stat As Long, I As Long, J As Long
    Local inLEn As Long
    Local LenSzOut As Long

    Local pIN As String Ptr * 1, pOut As String Ptr * 1
    Local LineBReak As Long, LineLength As Long

    '!!! pIn = VarPtr (szIn)
    pIn = StrPtr (szIn)

    '!!!pOut = VarPtr (szOut)
    pOut = StrPtr (szOut)

    inLEn = Len (szIn)

    '!!! Буфер на длинну исходной строки + *прогнозируемое кол-во "$LF"
    szOut =  Space$(inLEn + inLEn \ MaxLineLength)   
    '!!!

    ... дальше без изменений


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList