This is G o o g l e's cache of http://home.earthlink.net/~neilbawd/lnfiltex.html.
G o o g l e's cache is the snapshot that we took of the page as we crawled the web.
The page may have changed since that time. Click here for the current page without highlighting.
To link to or bookmark this page, use the following url: http://www.google.com/search?q=cache:crbIJtpWto0C:home.earthlink.net/~neilbawd/lnfiltex.html+&hl=en&ie=UTF-8


Google is not affiliated with the authors of this page nor responsible for its content.

Line Filter Examples

Line Filter Examples

Wil Baden 2000-07-07 - 2000-08-13

#TAB-SPACES   .DETAB   C   CY   DETAB   DS   FMT   GLOSS   GLOSSARY   INDENT   LC   LIST   OCCUR   Q   RECOM   SCR   SORT-LINES   SORT-SAVED-STRINGS   SS   STATUS-QUO   STEFF   TSBW   UNC   VOID   WC   WW  

Definitions are in the order in which they were needed in preparing the web site.

TEXT

2000-07-07

CY                  ( Line Filter )
Enclose selected text as commentary.
Program Text 1
LINE: CY            ( Line Filter )
    ." 0 [IF]" SPACE
    #CHARS/LINE 7 - [CHAR] = EMITS
    CR
    || TYPE CR ||
    #CHARS/LINE 7 - [CHAR] - EMITS
    SPACE ." [THEN]"
    CR
    LINE;


2000-07-07

#TAB-SPACES         ( -- n )
The value used with #TAB-CHAR to align output.
.DETAB              ( str len -- )
Display a string with #TAB-CHAR expanded for a multiple of #TAB-SPACES.
DETAB               ( Line Filter )
Display the lines of the clipboard with #TAB-CHAR expanded for a multiple of #TAB-SPACES.
Program Text 2
\ 09 CONSTANT #TAB-CHAR

4 VALUE #TAB-SPACES

VARIABLE COLUMN

: .DETAB            ( str len -- )
    0 COLUMN !
    BEGIN  DUP WHILE
        2DUP  #TAB-CHAR SCAN  /SPLIT
            DUP COLUMN +!  TYPE
    DUP WHILE
        #TAB-SPACES  COLUMN @  OVER MOD -
            DUP COLUMN +!  SPACES
        1 /STRING
    REPEAT THEN
    2DROP ;

LINE: DETAB
    TRIM
    .DETAB  CR
    LINE;


2000-07-10

UNC                 ( Line Filter )
Uncomment lines.
Program Text 3
LINE: UNC           ( Line Filter )
    S" \  " STARTS? IF  1 /STRING  TYPE CR  EXIT THEN
    S" \ " STARTS? IF  2 /STRING  TYPE CR  EXIT THEN
    TYPE CR
    LINE;


2000-07-12

DS                  ( Line Filter )
Double-space lines
Program Text 4
LINE: DS            ( Line Filter )
    TRIM  DUP 0= IF 2DROP EXIT THEN
    TYPE CR CR
    LINE;


2000-07-13

RECOM               ( Line Filter )
Replace commentary lines with current preference.
Program Text 5
LINE: RECOM         ( Line Filter )
    \ TRIM  DUP 0= IF 2DROP  CR  EXIT THEN

    S" 0 [IF]" STARTS? IF 2DROP
        ." 0 [IF]" SPACE  #CHARS/LINE 7 - [CHAR] = EMITS  CR
    EXIT THEN

    S"  [THEN]" ENDS? IF 2DROP
        #CHARS/LINE 7 - [CHAR] - EMITS  ."  [THEN]"  CR
    EXIT THEN

    TYPE CR
    LINE;


2000-07-14

WW                  ( Line Filter )
Word wrap the flush-left lines. Indented lines are unchanged. White space is collapsed.
Program Text 6
116 USER C#

LINE: WW            ( Line Filter )
    TRIM  DUP 0= IF 2DROP  CR CR  EXIT  THEN

    OVER C@ IS-WHITE IF  CR TYPE  EXIT THEN

    BEGIN
        2DUP BL SCAN /SPLIT    ( . . s2 l2 s1 l1)
        DUP C# @ + #CHARS/LINE > IF CR THEN
        TYPE SPACE
        BL SKIP                ( . . s2 l2)
    DUP 0= UNTIL
    2DROP                      ( . .)
    LINE;


2000-07-14

FMT                 ( Line Filter )
Format the lines, maintaining indentation. White space is collapsed.
Program Text 7
LINE: FMT           ( Line Filter )
    \  Uses TEMP for indentation.
    TRIM  DUP 0= IF 2DROP           ( src .)
        C# @ IF CR THEN
        CR  0 TEMP !
    EXIT THEN                       ( . . str len)
    2DUP BL SKIP  >R DROP DUP R> -  ( . . str len indent)
    DUP >R  TEMP @ = NOT IF         ( . . str len)
        C# @ IF CR THEN
        R@ SPACES
    THEN
    R>  DUP TEMP !  /STRING
    BEGIN
        2DUP BL SCAN /SPLIT         ( . . str2 len2 str1 len1)
        DUP  C# @ +  #CHARS/LINE >
            IF  CR  TEMP @ SPACES  THEN
        TYPE SPACE                  ( . . str2 len2)
        BL SKIP
    DUP 0= UNTIL
    2DROP                           ( src .)
    LINE;


2000-07-15

STEFF               ( Line Filter )
Display stack effect at current preference, column 20.
Program Text 8
LINE: STEFF         ( Line Filter )
    TRIM  DUP 0=                IF  2DROP  CR  EXIT THEN
    OVER C@ IS-WHITE            IF  TYPE CR  EXIT THEN
    2DUP 1- + C@ [CHAR] ) = NOT IF  TYPE CR  EXIT THEN
    2DUP S"  ( " SEARCH IF /SPLIT
        TRIM  DUP >R  TYPE  19 R> -  1 MAX SPACES
        TYPE CR
    EXIT THEN
    2DROP TYPE CR
    LINE;


2000-07-16

SS                  ( Line Filter )
Single-space lines.
Program Text 9
LINE: SS           ( Line Filter )
    TRIM DUP 0= IF 2DROP  EXIT THEN
    TYPE CR
    LINE;


2000-07-20

C
Prefix non-empty line with "\ ".
Program Text 10
LINE: C
    DUP IF  ." \  " THEN
    TYPE CR
    LINE;


2000-07-20

VOID                ( Line Filter )
Enclose lines as void.
Program Text 11
LINE: VOID          ( Line Filter )
    ." [VOID] [IF]" CR
    || TYPE CR ||
    ." [THEN]" CR
    LINE;


2000-07-21

LC                  ( -- n )
Line count.
Program Text 12
: LC                ( -- n )
    0 TEMP !
    CLIPBOARD BEGIN  #EOL-CHAR SCAN DUP WHILE
        1 TEMP +!
        1 /STRING
    REPEAT  2DROP
    TEMP @ ;


2000-07-23

INDENT              ( Line Filter )
Indent selected lines.
Program Text 13
LINE: INDENT        ( Line Filter )
    TRIM  DUP IF  4 SPACES  THEN  TYPE CR  LINE;


2000-07-25

STATUS-QUO          ( -- addr )
Variable for current HERE.
SORT-SAVED-STRINGS  ( -- )
Sort strings that have been saved between STATUS-QUO @ and HERE.
SORT-LINES          ( Line Filter )
Save HERE in STATUS-QUO, save lines in data space, display saved lines in sorted order, restore HERE.
Program Text 14
VARIABLE STATUS-QUO

: SORT-SAVED-STRINGS  ( -- )
    HERE OUT !  0 C,
    BEGIN
        STATUS-QUO @ BEGIN  DUP C@ WHILE  ( addr)
            DUP COUNT OUT @ COUNT COMPARE 0> NOT
        WHILE  COUNT + REPEAT THEN
        DUP C@
    WHILE
        DUP TEMP !
        BEGIN  COUNT +  DUP C@ WHILE
            DUP COUNT OUT @ COUNT COMPARE 0> IF
                DUP COUNT TEMP @ COUNT COMPARE 0< IF
                    DUP TEMP !
                THEN
            THEN
        REPEAT DROP                       ( )
        TEMP @ COUNT TYPE CR
        TEMP @ OUT !
    REPEAT DROP ;

LINE: SORT-LINES
    HERE STATUS-QUO !
    ||
    DUP IF  2DUP STRING,  THEN
    2DROP
    ||
    SORT-SAVED-STRINGS
    STATUS-QUO @ HERE - ALLOT
    LINE;


2000-07-25

TSBW                ( Line Filter )
Triple Space Between Words.
Program Text 15
LINE: TSBW          ( Line Filter )
    4 SPACES
    ||
    BEGIN  BL-SKIP  DUP WHILE
        2DUP BL-SCAN /SPLIT
        DUP 3 + C# @ + #CHARS/LINE >
            IF  CR 4 SPACES  THEN
        TYPE  3 SPACES
    REPEAT 2DROP
    ||
    CR
    LINE;


2000-07-25

WC                  ( -- n )
Word count of selected lines.
Program Text 16
: WC                ( -- n )
    0 TEMP !
    CLIPBOARD BEGIN  BL-SKIP DUP WHILE
        1 TEMP +!
        BL-SCAN
    REPEAT  2DROP
    TEMP @ ;

2000-07-26

SCR                 ( -- addr )
Variable for current file-id.
LIST                ( file-id -- )
Save file-id in SCR and list the file.
Program Text 17
VARIABLE SCR

: LIST              ( file-id -- )
    SCR !  ( )
    SCR @ SLURP TYPE BURP
    SCR @ REWIND-FILE FILE-CHECK ;


2000-08-01

GLOSS               ( Line Filter )
Extract names from the glossary entries.
Program Text 18
    : .Gloss          ( src . str len -- src . )
        TRIM DUP 0= IF  2DROP  EXIT THEN
        COMMENTARY-STARTS IF  2DROP  COMMENTARY ON  EXIT THEN
        COMMENTARY-ENDS   IF  2DROP  COMMENTARY OFF EXIT THEN
        COMMENTARY @ 0=   IF  2DROP  EXIT THEN
        HANGING-INDENT    IF
            OVER C@ [CHAR] ` = IF
                1 /STRING  2DUP [CHAR] ` SCAN  NIP -
            ELSE
                2DUP BL-SCAN NIP -
            THEN
            STRING,
        EXIT THEN
        2DROP ;

LINE: GLOSS
    HERE STATUS-QUO !
    ||  .Gloss  ||
    SORT-SAVED-STRINGS
    STATUS-QUO @ HERE - ALLOT
    LINE;



2000-08-13

OCCUR               ( " pattern" -- )
Find pattern in selected text.
Program Text 19
: OCCUR           ( " pattern" -- )
    LEXEME PAD PLACE
    CR
    0 TEMP !
    CLIPBOARD BEGIN  DUP 0> WHILE
        SPLIT-NEXT-LINE
        1 TEMP +!
        2DUP PAD COUNT SEARCH NIP NIP IF
            TEMP @ 3 .R  SPACE
            2DUP TYPE CR
        THEN
        2DROP
    REPEAT  2DROP ;


2000-08-13

Q                   ( Line Filter )
Insert "> " before selected lines.
Program Text 20
LINE: Q
    TRIM  DUP IF   ." > "  THEN
    TYPE CR
    LINE;


Go back to Neil Bawd's home page.