home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / Painting / PPLIBS.LHA / PPRX_VEC.LHA / PPRX_VectorText / VectorText.pprx < prev   
Encoding:
Text File  |  1997-02-24  |  6.9 KB  |  261 lines

  1. /* Personal Paint Amiga Rexx script - Copyright © 1996, 1997 Cloanto Italia srl */
  2.  
  3. /* $VER: VectorText.pprx 1.1 */
  4.  
  5. /** ENG
  6.  This script renders a vector text in the current environment.
  7.  A requester allows the user to select several parameters, such as
  8.  font, text string, angle, shear angle, bold level, antialiasing, etc.
  9.  The text is drawn using the current foreground color.
  10. */
  11.  
  12. /** DEU
  13.  Mit diesem Skript läßt sich ein Vektortext in der aktuellen
  14.  Umgebung erzeugen. Das dazugehörige Dialogfenster enthält
  15.  Einstellmöglichkeiten für verschiedene Parameter, wie Font,
  16.  Textstring, Winkel, Neigungsgrad, Stärke, Kantenglättung,
  17.  usw. Die Textdarstellung erfolgt in der aktuellen Vordergrundfarbe.
  18. */
  19.  
  20. IF ARG(1, EXISTS) THEN
  21.     PARSE ARG PPPORT x0 y0 rwidth rheight .
  22. ELSE
  23.     EXIT 0  /* macro execution only */
  24.  
  25. ADDRESS VALUE PPPORT
  26. OPTIONS RESULTS
  27. OPTIONS FAILAT 10000
  28.  
  29.  
  30. Get 'LANG'
  31. IF RESULT = 1 THEN DO        /* Deutsch */
  32.     txt_title_req     = "Texteinstellungen"
  33.     txt_gad_font      = "_Font:"
  34.     txt_gad_text      = "_Text:"
  35.     txt_string_text   = "Text"
  36.     txt_gad_angle     = "Wink_el:"
  37.     txt_gad_shear     = "_Neigung:"
  38.     txt_gad_boldx     = "Stärke _X:"
  39.     txt_gad_boldy     = "Stärke _Y:"
  40.     txt_gad_aalias    = "_Kantenglättung:"
  41.     txt_gad_aalias0   = "Keine"
  42.     txt_gad_aalias1   = "Schwach"
  43.     txt_gad_aalias2   = "Mittel"
  44.     txt_gad_aalias3   = "Stark"
  45.     txt_gad_kratio    = "_Verhältnis erhalten:"
  46.     txt_gad_kbline    = "_Grundlinie erhalten:"
  47.     txt_err_oldclient = "Für dieses Skript_ist eine neuere Version_von Personal Paint erforderlich"
  48.     txt_err_nofonts   = "Vektorfonts nicht auffindbar"
  49.     txt_err_vtext     = "VektorText-Fehler: "
  50. END
  51. ELSE IF RESULT = 2 THEN DO    /* Italiano */
  52.     txt_title_req     = "Parametri testo"
  53.     txt_gad_font      = "_Font:"
  54.     txt_gad_text      = "_Testo:"
  55.     txt_string_text   = "Testo"
  56.     txt_gad_angle     = "Ang_olo:"
  57.     txt_gad_shear     = "In_clinazione:"
  58.     txt_gad_boldx     = "Grassetto _X:"
  59.     txt_gad_boldy     = "Grassetto _Y:"
  60.     txt_gad_aalias    = "Antialia_s:"
  61.     txt_gad_aalias0   = "Nessuno"
  62.     txt_gad_aalias1   = "Basso"
  63.     txt_gad_aalias2   = "Medio"
  64.     txt_gad_aalias3   = "Alto"
  65.     txt_gad_kratio    = "Asp_etto:"
  66.     txt_gad_kbline    = "Linea di _base:"
  67.     txt_err_oldclient = "Questa procedura richiede_una versione più recente_di Personal Paint"
  68.     txt_err_nofonts   = "Non vi sono font vettoriali"
  69.     txt_err_vtext     = "Errore comando VectorText: "
  70. END
  71. ELSE DO                /* English */
  72.     txt_title_req     = "Text Settings"
  73.     txt_gad_font      = "_Font:"
  74.     txt_gad_text      = "_Text:"
  75.     txt_string_text   = "Text"
  76.     txt_gad_angle     = "_Angle:"
  77.     txt_gad_shear     = "_Shear:"
  78.     txt_gad_boldx     = "Bold _X:"
  79.     txt_gad_boldy     = "Bold _Y:"
  80.     txt_gad_aalias    = "A_ntialias:"
  81.     txt_gad_aalias0   = "None"
  82.     txt_gad_aalias1   = "Low"
  83.     txt_gad_aalias2   = "Medium"
  84.     txt_gad_aalias3   = "High"
  85.     txt_gad_kratio    = "Keep _Ratio:"
  86.     txt_gad_kbline    = "Keep _Baseline:"
  87.     txt_err_oldclient = "This script requires a newer_version of Personal Paint"
  88.     txt_err_nofonts   = "Vector fonts not found"
  89.     txt_err_vtext     = "VectorText error: "
  90. END
  91.  
  92. Version 'REXX'
  93. IF RESULT < 7 THEN DO
  94.     RequestNotify 'PROMPT "'txt_err_oldclient'"'
  95.     EXIT 10
  96. END
  97.  
  98.  
  99. def_font_path = "FONTS:"
  100. max_text_size = 8000
  101.  
  102. font_path = LoadSet('PP_VectorPath', def_font_path, 1, 0)
  103.  
  104.  
  105. ftot = 0
  106. vftfname = 'ENV:PP_VectorFonts'
  107. IF ~OPEN(fexists, vftfname) THEN DO
  108.     ADDRESS COMMAND 'List >'vftfname' 'font_path' PAT=#?.otag NOHEAD LFORMAT="%s"'
  109.     ADDRESS COMMAND 'Sort 'vftfname vftfname'.s'
  110.     IF RC = 0 THEN DO
  111.         ADDRESS COMMAND 'Delete >NIL: 'vftfname
  112.         ADDRESS COMMAND 'Copy >NIL: 'vftfname'.s' vftfname
  113.         ADDRESS COMMAND 'Delete >NIL: 'vftfname'.s'
  114.     END
  115. END
  116. ELSE CALL CLOSE(fexists)
  117.  
  118. IF OPEN('listfile', vftfname) THEN DO
  119.     DO FOREVER
  120.         fline = READLN('listfile')
  121.         IF EOF('listfile') THEN BREAK
  122.         ftot = ftot + 1
  123.         fontname.ftot = LEFT(fline, LENGTH(fline) - 5)
  124.     END
  125.     CALL CLOSE('listfile')
  126. END
  127.  
  128. IF ftot = 0 THEN DO
  129.     RequestNotify 'PROMPT "'txt_err_nofonts'"'
  130.     EXIT 10
  131. END
  132.  
  133.  
  134. fntnum = LoadSet('Font', 0)
  135. text   = LoadSet('Text', txt_string_text)
  136. angle  = LoadSet('Angle', 0)
  137. shear  = LoadSet('Shear', 0)
  138. boldx  = LoadSet('BoldX', 0)
  139. boldy  = LoadSet('BoldY', 0)
  140. aalias = LoadSet('Antialias', 0)
  141. kratio = LoadSet('KeepRatio', 0)
  142. kbline = LoadSet('KeepBaseline', 0)
  143.  
  144. req = '"LIST = ""'txt_gad_font'"", 'ftot', 'fntnum', 20, 5'
  145. DO f = 1 TO ftot
  146.     req = req || ', ""' || fontname.f || '""'
  147. END
  148. req = req ||,
  149.      ' VSPACE = 2 ' ||,
  150.       'STRING = ""'txt_gad_text'"", 'max_text_size', ""'text'"" ' ||,
  151.       'VSPACE = 2 ' ||,
  152.       'SLIDE = ""'txt_gad_angle'"", -360, 360, 'angle' ' ||,
  153.       'SLIDE = ""'txt_gad_shear'"", -45, 45, 'shear' ' ||,
  154.       'SLIDE = ""'txt_gad_boldx'"", -8, 8, 'boldx' ' ||,
  155.       'SLIDE = ""'txt_gad_boldy'"", -8, 8, 'boldy' ' ||,
  156.       'VSPACE = 2 ' ||,
  157.         'CYCLE = ""'txt_gad_aalias'"", 4, 'aalias', ""'txt_gad_aalias0'"", ""'txt_gad_aalias1'"", ""'txt_gad_aalias2'"", ""'txt_gad_aalias3'"" ' ||,
  158.       'CHECK = ""'txt_gad_kratio'"", 'kratio' ' ||,
  159.       'CHECK = ""'txt_gad_kbline'"", 'kbline' ' ||,
  160.       'VSPACE = 2 "'
  161.  
  162. LockGUI
  163. Request 'RESIZE COMPACT "'txt_title_req'" 'req
  164. IF RC = 0 THEN DO
  165.     fntnum = RESULT.1 + 1
  166.     text   = RESULT.2
  167.     angle  = RESULT.3
  168.     shear  = RESULT.4
  169.     boldx  = RESULT.5
  170.     boldy  = RESULT.6
  171.     aalias = RESULT.7
  172.     kratio = RESULT.8
  173.     kbline = RESULT.9
  174.  
  175.     CALL SaveSet('Font', fntnum - 1)        /* setting persistence */
  176.     CALL SaveSet('Text', text)
  177.     CALL SaveSet('Angle', angle)
  178.     CALL SaveSet('Shear', shear)
  179.     CALL SaveSet('BoldX', boldx)
  180.     CALL SaveSet('BoldY', boldy)
  181.     CALL SaveSet('Antialias', aalias)
  182.     CALL SaveSet('KeepRatio', kratio)
  183.     CALL SaveSet('KeepBaseline', kbline)
  184.  
  185.     options = 'DYNAMIC'
  186.     IF kratio THEN
  187.         options = options 'KEEPRATIO'
  188.     IF kbline THEN
  189.         options = options 'KEEPBASELINE'
  190.  
  191.     /* encode quotes */
  192.     pos = 1
  193.     DO FOREVER
  194.         pos = INDEX(text, '"', pos)
  195.         IF pos = 0 THEN
  196.             BREAK
  197.         text = INSERT('"', text, pos)
  198.         pos = pos + 2
  199.     END
  200.  
  201.     VectorText 'TEXT "'text'" FONTPATH "'font_path'" FONTNAME "'fontname.fntnum'" X0 'x0' Y0 'y0' X1 'x0 + rwidth - 1' Y1 'y0 + rheight - 1' ANGLE 'angle * 1000' SHEAR 'shear * 1000' BOLDX 'boldx * 1000' BOLDY 'boldy * 1000' ANTIALIAS 'aalias options
  202.     IF RC > 5 THEN
  203.         RequestNotify 'PROMPT "'txt_err_vtext || RC'"'
  204. END
  205. UnlockGUI
  206.  
  207. EXIT 0
  208.  
  209.  
  210.  
  211.  
  212. SaveSet:
  213.     sname = ARG(1)
  214.     val = ARG(2)
  215.  
  216.     IF OPEN('settingfile', 'ENV:PP_VectorText_'sname, 'W') THEN DO
  217.         CALL WRITECH('settingfile', val)
  218.         CALL CLOSE('settingfile')
  219.     END
  220.  
  221.     RETURN
  222.  
  223.  
  224.  
  225.  
  226. LoadSet:
  227.     sname = ARG(1)
  228.     def_val = ARG(2)
  229.     IF ARG() > 2 THEN
  230.         global_set = ARG(3)
  231.     ELSE
  232.         global_set = 0
  233.     IF ARG() > 3 THEN
  234.         request_quote = ARG(4)
  235.     ELSE
  236.         request_quote = 1
  237.  
  238.     val = def_val
  239.     IF global_set THEN
  240.         set_fname = 'ENV:'sname
  241.     ELSE
  242.         set_fname = 'ENV:PP_VectorText_'sname
  243.  
  244.     IF OPEN('settingfile', set_fname, 'R') THEN DO
  245.         val = READCH('settingfile', 65535)
  246.         CALL CLOSE('settingfile')
  247.     END
  248.  
  249.     IF request_quote THEN DO
  250.         /* encode quotes for the Request command ('"' -> '\""') */
  251.         qpos_start = 1
  252.         DO FOREVER
  253.             qpos = INDEX(val, '"', qpos_start)
  254.             IF qpos = 0 THEN BREAK
  255.             val = INSERT('\"', val, qpos-1)
  256.             qpos_start = qpos + 3
  257.         END
  258.     END
  259.  
  260.     RETURN val
  261.