Explorar el Código

Procedures for module Int and Time; Autodoc: Code tags

Arthur Yefimov hace 2 años
padre
commit
a497436198

+ 20 - 21
src/Autodoc/AutodocHtml.Mod

@@ -179,9 +179,9 @@ END WriteExport;
 PROCEDURE WriteParagraphs(s: ARRAY OF CHAR; marks: BOOLEAN);
 VAR i: INTEGER;
   c: CHAR;
-  closed, pre: BOOLEAN;
+  closed, pre, code: BOOLEAN;
 BEGIN
-  i := 0; c := s[0]; pre := FALSE;
+  i := 0; c := s[0]; pre := FALSE; code := FALSE;
   IF c # 0X THEN
     WriteLn('<p>'); closed := FALSE;
     IF marks THEN Write('<span class="mark">(*</span> ') END;
@@ -198,6 +198,15 @@ BEGIN
         END;
         INC(i, 3);
         IF s[i - 1] = 0AX THEN INC(i) END
+      ELSIF ~pre & (c = '`') & (s[i + 1] # '`') &
+            ((i = 0) OR (s[i - 1] # '`')) THEN
+        IF code THEN
+          Texts.WriteString(W, '</code>');
+          code := FALSE
+        ELSE
+          Texts.WriteString(W, '<code>');
+          code := TRUE
+        END
       ELSE
         IF closed THEN WriteLn('<p>'); closed := FALSE END;
         IF c = '<' THEN Texts.WriteString(W, '&lt;')
@@ -212,6 +221,7 @@ BEGIN
       END;
       INC(i); c := s[i]
     END;
+    IF pre THEN WriteLn('</pre>') ELSIF code THEN WriteLn('</code>') END;
     IF ~closed THEN WriteLn('') END;
     IF marks THEN Write(' <span class="mark">*)</span>') END;
     IF ~closed THEN WriteLn('</p>') END
@@ -645,11 +655,19 @@ BEGIN
   WriteLn('</style>')
 END PrintPalette;
 
+PROCEDURE PrintDate;
+VAR s: ARRAY 256 OF CHAR;
+BEGIN
+  Time.GetDateStr(s);
+  Write(s)
+END PrintDate;
+
 PROCEDURE Footer;
 VAR s: ARRAY 256 OF CHAR;
 BEGIN
   WriteLn('</div></main><footer class="footer"><div class="inner">');
   Write('<p>'); Lang.Get('generatedMsg', s); Write(s); WriteLn('</p>');
+  Write('<p class="date">'); PrintDate; WriteLn('</p>');
  
   WriteLn('</div></footer>');
 
@@ -713,25 +731,6 @@ BEGIN
   PrintComment(indexComment, FALSE)
 END PrintIndexComment;
 
-PROCEDURE PrintDate;
-VAR Y, M, D, h, m, s: INTEGER;
-BEGIN
-  Time.GetTime(Y, M, D, h, m, s);
-
-  Write('20'); WriteInt(Y); Write('.');
-  WriteInt(M); Write('.');
-  WriteInt(D)
-
-  (*WriteInt(h); Write(':');
-  WriteInt(m); Write(':');
-  WriteInt(s)
-
-  ;Time.GetClock(Y, M);
-  Write('   ');
-  WriteInt(Y); Write(':');
-  WriteInt(M);*)
-END PrintDate;
-
 PROCEDURE RunTag(M: P.Module; tag: ARRAY OF CHAR);
 BEGIN
   IF tag = 'TITLE' THEN

+ 1 - 1
src/Autodoc/AutodocParser.Mod

@@ -1587,8 +1587,8 @@ BEGIN NEW(M); InitObject(M); curModule := M;
     ELSE MarkExp('module name')
     END;
     IF sym = semicol THEN GetSym ELSE MarkExp(';') END;
-    ParseImportList(M);
     SaveAllComments(M);
+    ParseImportList(M);
     Declarations(M);
     IF sym = begin THEN
       REPEAT GetSym UNTIL (sym = eot) OR (sym = end)

+ 9 - 0
src/Autodoc/Data/style.css

@@ -77,6 +77,11 @@ a:hover {
   text-align: center;
 }
 
+.footer .date {
+  color: var(--head2-bg);
+  margin-top: 1em;
+}
+
 .main {
   padding: 20px 0;
   flex: 1;
@@ -238,6 +243,10 @@ h2, h3, h4, h5, h6 {
   display: none;
 }
 
+.comment code {
+  color: var(--tab-row-fg);
+}
+
 .record-fields .comment {
   color: #C91E0C;
   color: var(--tab-row-fg);

+ 1 - 1
src/Autodoc/Makefile

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

+ 8 - 4
src/Autodoc/Test/A.Mod

@@ -32,7 +32,7 @@ CONST
   (** Ещё **)
   (** Что-то **)
   (** Общие **)
-  (** Здесь находятся буквы *)
+  (** Здесь находятся буквы `ц` и `мю` *)
 
   (** буква а *)
   a* = 'а';
@@ -45,18 +45,22 @@ CONST
   d* = 'Д'; (** буква Д *)
 
 (** Управление **)
-(** Процедура П *)
+(** Процед`ура П *)
 PROCEDURE P*;
 BEGIN END P;
 (** Функция Ф *)
-(** ЫЫЫ *)
+(** Много можно сказать о процедуре `Ф` -- функциональной
+    процедуре модуля `A` *)
 (** ЖЖЖ *)
 PROCEDURE F*(): INTEGER;
 RETURN 5 END F;
 
 PROCEDURE Q*(a: INTEGER; b: PROCEDURE(x, y: INTEGER): REAL; c: CHAR);
 (** Процедура принимает число, процедуру и литеру. А ищщё *)
-(** А тут ещё коментарий *)
+(** А тут ещё коментарий
+      С иллюстрацией
+        На несколько строк
+           и более *)
 (** И ЕЩЁ ОДИН *)
 BEGIN
 END Q;

+ 12 - 6
src/Int.Mod

@@ -1,8 +1,10 @@
 MODULE Int;
-(** Module for INTEGER conversion from and to a string *)
+(** Module for conversion of integers to and from a string
+%RU Модуль для преобразования целых чисел в строку и из строки *)
 IMPORT Strings;
 
-(** Converts integer `n` to string `s` *)
+(** Converts integer `n` to string `s`
+%RU Преобразует целое число `n` в строку `s` *)
 PROCEDURE Str*(n: INTEGER; VAR s: ARRAY OF CHAR);
 VAR i, j: INTEGER; tmp: CHAR; neg: BOOLEAN;
 BEGIN
@@ -40,20 +42,24 @@ BEGIN n := 0; c := s[0]; ok := FALSE;
 RETURN n END ValEx;
 
 (** Returns the contents of string `s` converted to an integer. If `s`
-    does not contain a valid representation of an integer number, returns 0 *)
+    does not contain a valid representation of an integer number, returns 0
+%RU Возвращает содержимое строки `s`, преобразованное в целое число. Если `s`
+    не содержит правильного представления целого числа, возвращается 0 *)
 PROCEDURE Val*(IN s: ARRAY OF CHAR): INTEGER;
 VAR ok: BOOLEAN;
 BEGIN RETURN ValEx(s, ok) END Val;
 
 (** Inserts a textual representation of integer `n` in position `pos` of
-    string `s` *)
+    string `s`
+%RU Вставляет текстовое представление целого числа `n` в позицию `pos`
+    строки `s` *)
 PROCEDURE Insert*(n: INTEGER; pos: INTEGER; VAR s: ARRAY OF CHAR);
 VAR sn: ARRAY 30 OF CHAR;
 BEGIN Str(n, sn); Strings.Insert(sn, pos, s)
 END Insert;
 
-(** Appends a textual representation of integer `n` to the end of
-    the string `s` *)
+(** Appends a textual representation of integer `n` to the end of string `s`
+%RU Добавляет текстовое представление целого числа `n` в конец строки `s` *)
 PROCEDURE Append*(n: INTEGER; VAR s: ARRAY OF CHAR);
 VAR sn: ARRAY 30 OF CHAR;
 BEGIN Str(n, sn); Strings.Append(sn, s)

+ 29 - 2
src/Time.Mod

@@ -1,12 +1,12 @@
 MODULE Time;
-IMPORT Platform;
+IMPORT Platform, Int;
 
 PROCEDURE GetClock*(VAR time, date: INTEGER);
 BEGIN
   Platform.GetClock(time, date)
 END GetClock;
 
-PROCEDURE GetTime*(VAR Y, M, D, h, m, s: INTEGER);
+PROCEDURE GetDateTime*(VAR Y, M, D, h, m, s: INTEGER);
 VAR t, d: INTEGER;
 BEGIN
   GetClock(t, d);
@@ -17,6 +17,33 @@ BEGIN
   h := ASR(t, 12) MOD 10H;
   m := ASR(t, 6) MOD 40H;
   s := t MOD 40H
+END GetDateTime;
+
+PROCEDURE GetDate*(VAR Y, M, D: INTEGER);
+VAR h, m, s: INTEGER;
+BEGIN GetDateTime(Y, M, D, h, m, s); INC(Y, 2000)
+END GetDate;
+
+PROCEDURE GetTime*(VAR h, m, s: INTEGER);
+VAR Y, M, D: INTEGER;
+BEGIN GetDateTime(Y, M, D, h, m, s)
 END GetTime;
 
+PROCEDURE GetDateStr*(VAR s: ARRAY OF CHAR);
+VAR Y, M, D, i, n: INTEGER;
+  m: ARRAY 16 OF CHAR;
+BEGIN
+  IF LEN(s) < 11 THEN s[0] := 0X
+  ELSE
+    GetDate(Y, M, D);
+    Int.Str(Y, s); s[4] := '-';
+    s[5] := CHR(ORD('0') + M DIV 10);
+    s[6] := CHR(ORD('0') + M MOD 10);
+    s[7] := '-';
+    s[8] := CHR(ORD('0') + D DIV 10);
+    s[9] := CHR(ORD('0') + D MOD 10);
+    s[10] := 0X
+  END
+END GetDateStr;
+
 END Time.