home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / texed133.zip / Deutsch.zip / Klammer.cmd < prev    next >
OS/2 REXX Batch file  |  1996-02-02  |  3KB  |  114 lines

  1. /*
  2.  * KlammerCheck
  3.  *
  4.  * Dieses Makro markiert den gesammten Text zwischen der schließenden und
  5.  * der zugehörigen öffnenden Klammer für eine kurze Zeit.
  6.  *
  7.  * Der Cursor muß entweder auf oder direkt hinter der schließenden
  8.  * Klammer stehen.
  9.  */
  10.  
  11.  
  12. /*
  13.  * Variablen
  14.  */
  15. Text = VRGet( 'MLE_1', 'Value')
  16. pos  = VRGet( 'MLE_1', 'SelectedStart')
  17. if Check(pos) = 0 then return
  18.  
  19.  
  20. /*
  21.  * Klammer bestimmen
  22.  */
  23. if pos \= VRGet( 'MLE_1', 'SelectedEnd') then
  24.    Pos = Max( VRGet( 'MLE_1', 'SelectedStart'), VRGet( 'MLE_1', 'SelectedEnd'))
  25. OldPos = Pos
  26. Pos = Pos - 1
  27. SKl = SubStr( Text, Pos , 1)
  28. select
  29.    when SKl = ')' then OKl = '('
  30.    when SKl = '}' then OKl = '{'
  31.    when SKl = ']' then OKl = '['
  32.    otherwise return
  33. end
  34.  
  35.  
  36. /*
  37.  * Anzahl der Klammern finden
  38.  */
  39. found = 1
  40. do while found > 0
  41.    S = LastPos( SKl, Text, pos - 1)
  42.    ImText = Check(S)
  43.    do while ImText = 0
  44.       S = LastPos( SKl, Text, S - 1)
  45.       ImText = Check(S)
  46.    end
  47.    O = LastPos( OKl, Text, pos - 1)
  48.    ImText = Check(O)
  49.    do while ImText = 0
  50.       O = LastPos( OKl, Text, O - 1)
  51.       ImText = Check(O)
  52.    end
  53.    if (S = 0) then
  54.       select
  55.          when O > 0 then S = O - 1
  56.          when O = 0 then do
  57.             call VRMessage VRWindow(), "Öffnende Klammer nicht gefunden.",
  58.                "Klammer Makro", "Information"
  59.             return
  60.          end
  61.       end
  62.    if S > O then do
  63.       found = found + 1
  64.       pos = S
  65.    end
  66.    else do
  67.       found = found - 1
  68.       pos = O
  69.    end
  70. end
  71.  
  72.  
  73. /*
  74.  * Zugehörige öffnende Klammer kurz markieren
  75.  */
  76. call VRSet 'MLE_1', 'SelectedEnd', OldPos
  77. call VRSet 'MLE_1', 'SelectedStart', Pos
  78. do 50000
  79.    nop
  80. end
  81. call VRSet 'MLE_1', 'SelectedStart', OldPos
  82. return
  83.  
  84.  
  85. /*
  86.  * Unterroutine, die Prüft, ob sich die 'Fundstelle' in einem
  87.  * Kommentar befindet.
  88.  */
  89.  
  90. Check:  procedure expose Text
  91. pos   = arg(1)
  92. rc = 1
  93. if pos > 0 then do
  94.    ENTER = LastPos( D2C(13), Text, pos) + 1
  95.    if ENTER = 1 then return rc
  96.    Str   = SubStr(Text, ENTER, pos - ENTER + 1)
  97.    Marker = Pos( ' %', Str)
  98.    if (Marker < pos - ENTER) & (Marker > 0) then return 0
  99.    do forever
  100.       Str = DelStr( Str, 1, 1)
  101.       Marker = Marker - 1
  102.       select
  103.          when C2D( Left( Str, 1, 1)) = '9' then iterate
  104.          when C2D( Left( Str, 1, 1)) = '32' then iterate
  105.          when C2D( Left( Str, 1, 1)) = '37' then do
  106.             rc = 0
  107.             leave
  108.          end
  109.          otherwise leave
  110.       end
  111.    end
  112. end
  113. return rc
  114.