Browse Source

Delete selected text on type

Arthur Yefimov 3 years ago
parent
commit
26833b6155
1 changed files with 13 additions and 12 deletions
  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;
   Strings, StrList, Dir, Out;
 CONST
 CONST
   stdPath* = 'Programs/';
   stdPath* = 'Programs/';
+  dotChar = 0B7X; (* To higlight spaces *)
 
 
   (* Direction of Selection *)
   (* Direction of Selection *)
   dirLeft  = 0;
   dirLeft  = 0;
@@ -392,7 +393,9 @@ BEGIN
       KW('PROCEDURE') OR KW('RECORD') OR KW('REPEAT') OR KW('RETURN') OR
       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('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('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
   ELSE result := FALSE
   END ;
   END ;
 RETURN result END IsKeywordInString;
 RETURN result END IsKeywordInString;
@@ -508,8 +511,7 @@ RETURN color END GetTokenColor;
 (* Like T.PutString, but highlighted *)
 (* Like T.PutString, but highlighted *)
 PROCEDURE PutStringH*(x, y: INTEGER; s: ARRAY OF CHAR;
 PROCEDURE PutStringH*(x, y: INTEGER; s: ARRAY OF CHAR;
   bg, limit: INTEGER; VAR comLevel: INTEGER);
   bg, limit: INTEGER; VAR comLevel: INTEGER);
-VAR i, fg, class, len: INTEGER;
-  tW, tH: INTEGER;
+VAR i, fg, class, len, tW, tH: INTEGER;
 BEGIN
 BEGIN
   T.Size(tW, tH);
   T.Size(tW, tH);
   IF limit = 0 THEN limit := tW END;
   IF limit = 0 THEN limit := tW END;
@@ -526,7 +528,7 @@ BEGIN
   DEC(i);
   DEC(i);
   WHILE (i >= 0) & (s[i] = ' ') DO
   WHILE (i >= 0) & (s[i] = ' ') DO
     DEC(x);
     DEC(x);
-    T.SetCell(x, y, 0FAX(*!FIXME*), 3, bg);
+    T.SetCell(x, y, dotChar, 3, bg);
     DEC(i)
     DEC(i)
   END
   END
 END PutStringH;
 END PutStringH;
@@ -585,8 +587,7 @@ BEGIN T.Size(tW, tH);
       PutSelStringH(minX, scrY, L.s, c.bg, maxX, comLevel, 1, 7, x0, x1)
       PutSelStringH(minX, scrY, L.s, c.bg, maxX, comLevel, 1, 7, x0, x1)
     ELSE PutStringH(minX, scrY, L.s, c.bg, maxX, comLevel)
     ELSE PutStringH(minX, scrY, L.s, c.bg, maxX, comLevel)
     END;
     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;
       x0 := minX + c.text.x;
       IF c.focused & (x0 <= maxX) THEN
       IF c.focused & (x0 <= maxX) THEN
         T.SetCursor(x0, scrY);
         T.SetCursor(x0, scrY);
@@ -690,9 +691,9 @@ BEGIN
         THEN c.text.selL := c.text.cur.next.len END
         THEN c.text.selL := c.text.cur.next.len END
       END
       END
     ELSE 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
   END
 END HandleSelection;
 END HandleSelection;
@@ -909,9 +910,8 @@ END EditClear;
 PROCEDURE EditPaste*(c: OV.Control);
 PROCEDURE EditPaste*(c: OV.Control);
 VAR e: Editor;
 VAR e: Editor;
 BEGIN
 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.DeleteSelection;
     e.text.Insert(clipboard, FALSE);
     e.text.Insert(clipboard, FALSE);
     IF e.text.y >= e.text.scrY + e.h - 2 THEN
     IF e.text.y >= e.text.scrY + e.h - 2 THEN
@@ -971,6 +971,7 @@ END EditorMouseMove;
 
 
 PROCEDURE EditorTextInput(c: OV.Control; ch: CHAR);
 PROCEDURE EditorTextInput(c: OV.Control; ch: CHAR);
 BEGIN
 BEGIN
+  IF c(Editor).text.selected THEN c(Editor).text.DeleteSelection END;
   IF ch # 0X THEN c(Editor).text.InsertChar(ch);
   IF ch # 0X THEN c(Editor).text.InsertChar(ch);
     c(Editor).text.selected := FALSE; PrintText(c(Editor))
     c(Editor).text.selected := FALSE; PrintText(c(Editor))
   END
   END