Przeglądaj źródła

Автодок: опция -i

Arthur Yefimov 2 lat temu
rodzic
commit
c0791a7c49
2 zmienionych plików z 37 dodań i 3 usunięć
  1. 2 0
      src/Autodoc/Autodoc.Mod
  2. 35 3
      src/Autodoc/AutodocHtml.Mod

+ 2 - 0
src/Autodoc/Autodoc.Mod

@@ -130,6 +130,8 @@ BEGIN
           Args.Get(i + 1, out);
           INC(i)
         END
+      ELSIF (s = '--inline-style') OR (s = '-i') THEN
+        H.SetInlineStyle(TRUE)
       ELSE
         Strings.Copy(s, fnames[fnameCount]);
         INC(fnameCount)

+ 35 - 3
src/Autodoc/AutodocHtml.Mod

@@ -1,12 +1,19 @@
 MODULE AutodocHtml;
 IMPORT Texts, Out, Strings, P := AutodocParser;
 
+CONST
+  styleFname = 'style.css';
+
 VAR
   PrintObject: PROCEDURE (o: P.Object; indent: INTEGER; inlined: BOOLEAN);
+
+  T: Texts.Text;
   W: Texts.Writer;
   
   preventSemicol: BOOLEAN;
 
+  inlineStyle: BOOLEAN;
+
 (** Printing **)
 
 PROCEDURE Write(s: ARRAY OF CHAR);
@@ -45,6 +52,23 @@ BEGIN
   END
 END WriteParagraphs;
 
+PROCEDURE WriteStyle;
+VAR T2: Texts.Text;
+  buf: Texts.Buffer;
+BEGIN
+  NEW(T2); Texts.Open(T2, styleFname);
+  IF T2.len # 0 THEN
+    WriteLn('<style>');
+    Texts.Append(T, W.buf);
+    NEW(buf); Texts.OpenBuf(buf);
+    Texts.Save(T2, 0, T2.len, buf);
+    Texts.Append(T, buf);
+    WriteLn(''); WriteLn('</style>')
+  ELSE Out.String('Could not find stylesheet file "');
+    Out.String(styleFname); Out.String('".'); Out.Ln
+  END
+END WriteStyle;
+
 PROCEDURE OpenGroup(title: ARRAY OF CHAR);
 BEGIN
   WriteLn('<article class="group">');
@@ -229,7 +253,6 @@ BEGIN
   WriteLn('<title>'); Write(modName);
   WriteLn(' Module Reference</title>');
   WriteLn('<meta name="viewport" content="width=device-width,initial-scale=1.0">');
-  WriteLn('<link rel="stylesheet" href="style.css">');
   WriteLn('</head>');
   WriteLn('<body>');
   WriteLn('<header class="header"><div class="inner">');
@@ -245,6 +268,11 @@ BEGIN
   WriteLn('<p>Generated automatically by Free Oberon Autodoc</p>');
  
   WriteLn('</div></footer>');
+
+  IF inlineStyle THEN WriteStyle
+  ELSE WriteLn('<link rel="stylesheet" href="style.css">')
+  END;
+
   WriteLn('</body></html>')
 END Footer;
 
@@ -280,8 +308,11 @@ END PrintObject0;
 
 (** - **)
 
+PROCEDURE SetInlineStyle*(inline: BOOLEAN);
+BEGIN inlineStyle := inline
+END SetInlineStyle;
+
 PROCEDURE Save*(module: P.Module; fname: ARRAY OF CHAR): BOOLEAN;
-VAR T: Texts.Text;
 BEGIN
   NEW(T); Texts.Open(T, ''); Texts.OpenWriter(W);
   preventSemicol := FALSE;
@@ -290,5 +321,6 @@ BEGIN
 RETURN TRUE END Save;
 
 BEGIN
-  PrintObject := PrintObject0
+  PrintObject := PrintObject0;
+  inlineStyle := FALSE
 END AutodocHtml.