فهرست منبع

Delete selected text on type

Arthur Yefimov 3 سال پیش
والد
کامیت
26833b6155
1فایلهای تغییر یافته به همراه13 افزوده شده و 12 حذف شده
  1. 13 12
      src/Editor.Mod

+ 13 - 12
src/Editor.Mod

@@ -20,6 +20,7 @@ IMPORT OV, T := TermBox, Text := EditorText,
   Strings, StrList, Dir, Out;
 CONST
   stdPath* = 'Programs/';
+  dotChar = 0B7X; (* To higlight spaces *)
 
   (* Direction of Selection *)
   dirLeft  = 0;
@@ -392,7 +393,9 @@ BEGIN
       KW('PROCEDURE') OR KW('RECORD') OR KW('REPEAT') OR KW('RETURN') OR
       KW('THEN') OR KW('TO') OR KW('TYPE') OR KW('VAR') OR KW('WHILE') OR
       KW('ELSE') OR KW('OF') OR KW('WITH') OR KW('LONGSET') OR
-      KW('UNTIL') OR KW('CONST') OR KW('MOD') OR KW('FLOOR')
+      KW('UNTIL') OR KW('CONST') OR KW('MOD') OR KW('FLOOR') OR KW('LSL') OR
+      KW('ASR') OR KW('ROR') OR KW('ASSERT') OR KW('BYTE') OR
+      KW('SHORTCHAR') OR KW('SYSTEM')
   ELSE result := FALSE
   END ;
 RETURN result END IsKeywordInString;
@@ -508,8 +511,7 @@ RETURN color END GetTokenColor;
 (* Like T.PutString, but highlighted *)
 PROCEDURE PutStringH*(x, y: INTEGER; s: ARRAY OF CHAR;
   bg, limit: INTEGER; VAR comLevel: INTEGER);
-VAR i, fg, class, len: INTEGER;
-  tW, tH: INTEGER;
+VAR i, fg, class, len, tW, tH: INTEGER;
 BEGIN
   T.Size(tW, tH);
   IF limit = 0 THEN limit := tW END;
@@ -526,7 +528,7 @@ BEGIN
   DEC(i);
   WHILE (i >= 0) & (s[i] = ' ') DO
     DEC(x);
-    T.SetCell(x, y, 0FAX(*!FIXME*), 3, bg);
+    T.SetCell(x, y, dotChar, 3, bg);
     DEC(i)
   END
 END PutStringH;
@@ -585,8 +587,7 @@ BEGIN T.Size(tW, tH);
       PutSelStringH(minX, scrY, L.s, c.bg, maxX, comLevel, 1, 7, x0, x1)
     ELSE PutStringH(minX, scrY, L.s, c.bg, maxX, comLevel)
     END;
-    IF (L = c.text.cur) & (c.text.x + 1 < tW) &
-       ~OV.HasModalWindow(c.app) THEN
+    IF (L = c.text.cur) & (c.text.x + 1 < tW) & ~OV.HasModalWindow(c.app) THEN
       x0 := minX + c.text.x;
       IF c.focused & (x0 <= maxX) THEN
         T.SetCursor(x0, scrY);
@@ -690,9 +691,9 @@ BEGIN
         THEN c.text.selL := c.text.cur.next.len END
       END
     ELSE END;
-    IF ((c.text.selT >= c.text.selB) & (c.text.selL >= c.text.selR)) OR
-       (c.text.selT > c.text.selB) THEN
-      c.text.selected := FALSE
+    IF (c.text.selT = c.text.selB) & (c.text.selL >= c.text.selR) OR
+       (c.text.selT > c.text.selB)
+    THEN c.text.selected := FALSE
     END
   END
 END HandleSelection;
@@ -909,9 +910,8 @@ END EditClear;
 PROCEDURE EditPaste*(c: OV.Control);
 VAR e: Editor;
 BEGIN
-  IF (c.app.windows # NIL) & (c.app.windows IS Editor) &
-      (clipboard[0] # 0X) THEN
-    e := c.app.windows(Editor);
+  IF (c.app.windows # NIL) & (c.app.windows IS Editor) & (clipboard[0] # 0X)
+  THEN e := c.app.windows(Editor);
     e.text.DeleteSelection;
     e.text.Insert(clipboard, FALSE);
     IF e.text.y >= e.text.scrY + e.h - 2 THEN
@@ -971,6 +971,7 @@ END EditorMouseMove;
 
 PROCEDURE EditorTextInput(c: OV.Control; ch: CHAR);
 BEGIN
+  IF c(Editor).text.selected THEN c(Editor).text.DeleteSelection END;
   IF ch # 0X THEN c(Editor).text.InsertChar(ch);
     c(Editor).text.selected := FALSE; PrintText(c(Editor))
   END