Browse Source

Autodoc: Period

Arthur Yefimov 2 years ago
parent
commit
46be6df5b1
3 changed files with 36 additions and 9 deletions
  1. 30 7
      src/Autodoc/AutodocParser.Mod
  2. 1 1
      src/Autodoc/Makefile
  3. 5 1
      src/Autodoc/Test/A.Mod

+ 30 - 7
src/Autodoc/AutodocParser.Mod

@@ -543,13 +543,37 @@ BEGIN
   END
 END WriteDoc;
 
+(** Returns TRUE if last comment in doc needs a period in the end *)
+PROCEDURE NeedPeriod(): BOOLEAN;
+VAR x: CHAR;
+  i: INTEGER;
+  res: BOOLEAN;
+
+  PROCEDURE IsPunctuation(x: CHAR): BOOLEAN;
+  RETURN (x = '.') OR (x = ':') OR (x = '?') OR
+         (x = '!') OR (x = ';') OR (x = '*')
+  END IsPunctuation;
+
+BEGIN
+  res := FALSE;
+  IF docLen # 0 THEN
+    i := docLen - 1; x := doc[i];
+    IF ~IsPunctuation(x) & (x # ',') THEN
+      REPEAT
+        DEC(i);
+        IF i # -1 THEN x := doc[i] END
+      UNTIL (i = -1) OR (x = tab) OR (x = vtab) OR IsPunctuation(x);
+      IF (i # -1) & (x # tab) & (x # vtab) THEN res := TRUE END
+    END
+  END
+RETURN res END NeedPeriod;
+
 (** Recursive procedure to read (potentially nested) comments.
      toplevel is TRUE only for the top-level comments, only the top-level
     comments that are opened with two stars are being saved in doc.
     The procedure is called at '*' that comes after '(' *)
 PROCEDURE ReadComment(toplevel: BOOLEAN);
 VAR closed, tmp: BOOLEAN;
-  x: CHAR;
   title: BOOLEAN;
 BEGIN
   IF toplevel & (docLen = 0) THEN docLine := line END;
@@ -591,13 +615,10 @@ BEGIN
     ELSE title := FALSE
     END;
     REPEAT DEC(docLen) UNTIL (docLen = -1) OR (doc[docLen] > ' ');
-    IF (docLen # -1) & (docLen < LEN(doc) - 2) THEN x := doc[docLen];
-      IF ~title & (x # '!') & (x # ',') & (x # '.') &
-         (x # ':') & (x # ';') & (x # '?') & (x # '*')
-      THEN INC(docLen); doc[docLen] := '.'
-      END
-    END;
     INC(docLen); doc[docLen] := 0X;
+    IF ~title & (docLen < LEN(doc) - 1) & NeedPeriod() THEN
+      doc[docLen] := '.'; INC(docLen); doc[docLen] := 0X
+    END;
     IF title THEN
       titleNotUsed := TRUE;
       IF doc[0] = 0X THEN curTitle := '-'
@@ -1536,9 +1557,11 @@ END SortGroups;
 PROCEDURE SortModule(M: Module);
 BEGIN
   SortGroups(M.consts);
+  (*
   SortGroups(M.vars);
   SortGroups(M.types);
   SortGroups(M.procedures)
+  *)
 END SortModule;
 
 PROCEDURE ParseModule*(VAR r: Files.Rider; VAR err: ARRAY OF CHAR): Module;

+ 1 - 1
src/Autodoc/Makefile

@@ -5,7 +5,7 @@ Autodoc: Autodoc.Mod AutodocParser.Mod AutodocHtml.Mod
 	fob Autodoc.Mod
 
 run: Autodoc
-	clear;./Autodoc --template T.html -o Test Test/A.Mod
+	clear;./Autodoc -o Test Test/A.Mod
 
 #	clear;./Autodoc --template T.html -o Test Test/*.Mod -a -t "Библиотека модулей"
 

+ 5 - 1
src/Autodoc/Test/A.Mod

@@ -49,11 +49,15 @@ CONST
 PROCEDURE P*;
 BEGIN END P;
 (** Функция Ф *)
+(** ЫЫЫ *)
+(** ЖЖЖ *)
 PROCEDURE F*(): INTEGER;
 RETURN 5 END F;
 
 PROCEDURE Q*(a: INTEGER; b: PROCEDURE(x, y: INTEGER): REAL; c: CHAR);
-(** Процедура принимает число, процедуру и литеру *)
+(** Процедура принимает число, процедуру и литеру. А ищщё *)
+(** А тут ещё коментарий *)
+(** И ЕЩЁ ОДИН *)
 BEGIN
 END Q;