1,7 → 1,7 |
(* |
BSD 2-Clause License |
|
Copyright (c) 2018, Anton Krotov |
Copyright (c) 2018, 2019, Anton Krotov |
All rights reserved. |
*) |
|
30,11 → 30,8 |
line*, col*: INTEGER; |
eof*: BOOLEAN; |
eol*: BOOLEAN; |
peak*: CHAR |
|
open*: PROCEDURE (text: TEXT; name: ARRAY OF CHAR): BOOLEAN; |
peak*: PROCEDURE (text: TEXT): CHAR; |
nextc*: PROCEDURE (text: TEXT) |
|
END; |
|
|
43,26 → 40,6 |
texts: C.COLLECTION; |
|
|
PROCEDURE reset (text: TEXT); |
BEGIN |
text.chunk[0] := 0; |
text.pos := 0; |
text.size := 0; |
text.file := NIL; |
text.utf8 := FALSE; |
text.CR := FALSE; |
text.line := 1; |
text.col := 1; |
text.eof := FALSE; |
text.eol := FALSE |
END reset; |
|
|
PROCEDURE peak (text: TEXT): CHAR; |
RETURN CHR(text.chunk[text.pos]) |
END peak; |
|
|
PROCEDURE load (text: TEXT); |
BEGIN |
IF ~text.eof THEN |
71,17 → 48,20 |
IF text.size = 0 THEN |
text.eof := TRUE; |
text.chunk[0] := 0 |
END; |
text.peak := CHR(text.chunk[0]) |
END |
END |
END load; |
|
|
PROCEDURE next (text: TEXT); |
PROCEDURE next* (text: TEXT); |
VAR |
c: CHAR; |
|
BEGIN |
IF text.pos < text.size - 1 THEN |
INC(text.pos) |
INC(text.pos); |
text.peak := CHR(text.chunk[text.pos]) |
ELSE |
load(text) |
END; |
88,7 → 68,7 |
|
IF ~text.eof THEN |
|
c := peak(text); |
c := text.peak; |
|
IF c = CR THEN |
INC(text.line); |
123,7 → 103,6 |
|
PROCEDURE init (text: TEXT); |
BEGIN |
|
IF (text.pos = 0) & (text.size >= 3) THEN |
IF (text.chunk[0] = 0EFH) & |
(text.chunk[1] = 0BBH) & |
140,27 → 119,26 |
END; |
|
text.line := 1; |
text.col := 1 |
text.col := 1; |
|
text.peak := CHR(text.chunk[text.pos]) |
END init; |
|
|
PROCEDURE open (text: TEXT; name: ARRAY OF CHAR): BOOLEAN; |
PROCEDURE close* (VAR text: TEXT); |
BEGIN |
ASSERT(text # NIL); |
IF text # NIL THEN |
IF text.file # NIL THEN |
FILES.close(text.file) |
END; |
|
reset(text); |
text.file := FILES.open(name); |
IF text.file # NIL THEN |
load(text); |
init(text) |
C.push(texts, text); |
text := NIL |
END |
END close; |
|
RETURN text.file # NIL |
END open; |
|
|
PROCEDURE NewText (): TEXT; |
PROCEDURE open* (name: ARRAY OF CHAR): TEXT; |
VAR |
text: TEXT; |
citem: C.ITEM; |
171,39 → 149,32 |
NEW(text) |
ELSE |
text := citem(TEXT) |
END |
END; |
|
RETURN text |
END NewText; |
|
|
PROCEDURE create* (): TEXT; |
VAR |
text: TEXT; |
BEGIN |
text := NewText(); |
reset(text); |
text.open := open; |
text.peak := peak; |
text.nextc := next |
|
RETURN text |
END create; |
|
|
PROCEDURE destroy* (VAR text: TEXT); |
BEGIN |
IF text # NIL THEN |
text.chunk[0] := 0; |
text.pos := 0; |
text.size := 0; |
text.utf8 := FALSE; |
text.CR := FALSE; |
text.line := 1; |
text.col := 1; |
text.eof := FALSE; |
text.eol := FALSE; |
text.peak := 0X; |
text.file := FILES.open(name); |
IF text.file # NIL THEN |
FILES.close(text.file) |
END; |
|
C.push(texts, text); |
text := NIL |
load(text); |
init(text) |
ELSE |
close(text) |
END |
END destroy; |
END |
|
RETURN text |
END open; |
|
|
BEGIN |
texts := C.create() |
END TEXTDRV. |