programming tools for Windows applications development
  Home  |   SwiftForth Archive  |   SwiftX Archive  |

Snipped - texts in verbose program

From: Charles Melice <mail_at_forthcad.com>
Date: Mon, 13 Dec 1999 18:49:25 +0100

I have found the following wordset usefull in Belgium ( where we speek at
least French and Dutch).

I think the system also can be interesting to unify all texts in a verbose
Forth program.

Charles
--------------

OPTIONAL TEXTRES.F

DECIMAL

{ Wordset to enable translatable text resource
    =============================================
    TEXT ( "strToken" "strValue" -- )
    Append a text resource.

>TEXT ( zToken -- zTranslated|zToken )
    Return 'zToken' or, if exist, the translated text version.

    [TEXT] ( "strToken" -- zTranslated )
    Parse "strToken" and compile the translated text address.
}

( Preambule - HASH-CODE )

: LROT ( x1 u -- x2 )
    2DUP LSHIFT >R 32 SWAP - RSHIFT R> OR ;

: HASHSTR ( addr u -- uh )
    TUCK OVER CHARS + SWAP \ len addr+len addr
    ?DO 5 LROT I C@ BL OR BL XOR BL 1- - XOR LOOP
    DUP 0> ?EXIT INVERT ;

\ ------------------------------------------------
\ Text resource and language translation wordset
\ ------------------------------------------------

VARIABLE TEXT-LANGAGE

: (FIND-HTEXT) ( hcode -- addr t | f )
    TEXT-LANGAGE
    BEGIN @REL DUP WHILE \ s: hcode addr
        OVER OVER CELL+ @ =
        IF NIP CELL+ CELL+ TRUE EXIT THEN
    REPEAT
    2DROP FALSE ;

: TEXT ( "strToken" "strValue" -- )
    BL WORD COUNT HASHSTR
    DUP (FIND-HTEXT) ABORT" - hcode collision"
    TEXT-LANGAGE >LINK
    ( HCODE ) ,
    [CHAR] " PARSE 2DROP ,Z" ;

: >TEXT ( zToken -- zTranslated|zToken )
    DUP ZCOUNT HASHSTR \ s: zToken hcode
    (FIND-HTEXT) IF NIP THEN ;

: [TEXT] ( "strToken" -- zTranslated )
    HASHSTR> \ s: hcode
    (FIND-HTEXT) 0= ABORT" - missing langage translation"
    STATE @ IF POSTPONE LITERAL THEN ; IMMEDIATE

\\ ========================================================
\ Example

\ in a resource text file
\ ---------------------------------

CREATE FRENCH

[DEFINED] FRENCH [IF]

TEXT Find "Rechercher"
TEXT Ref "Reférence"
TEXT CliClass "Type"
TEXT Lib "Description"
TEXT Name "Nom"
TEXT RefCli "Reférence Client"
TEXT Address "Adresse"
TEXT Company "Société"
TEXT Remark "Remarque"

[THEN]

[DEFINED] ENGLISH [IF]

TEXT Find "Find"
TEXT Ref "Reference"
TEXT CliClass "Client Type"
TEXT Lib "Description"
TEXT Name "Name"
TEXT RefCli "Client Reference"
TEXT Address "Address"
TEXT Company "Company"
TEXT Remark "Remark"

[THEN]

\ in application
\ ---------------------------------

: TEST
    CR [TEXT] Find ZCOUNT TYPE
    CR Z" Ref" ZCOUNT TYPE
    CR Z" Hello" ZCOUNT TYPE \ no error
    \ CR [TEXT] Hello ZCOUNT TYPE \ error
;

.
Received on Mon Dec 13 1999 - 18:49:25 PST

This archive was generated by hypermail 2.2.0 : Thu Nov 20 2008 - 03:04:26 PST