[svn] r6758: nemerle/trunk/tools/ndp: . AssemblyAnalyzer.n COPYRIGHT DataTree.n Makefile XMLMacro.n nemerl...

malekith svnadmin at nemerle.org
Sat Oct 14 13:36:59 CEST 2006


Log:
Import NDP by Marcin Mlotkowski.

Author: malekith
Date: Sat Oct 14 13:36:57 2006
New Revision: 6758

Added:
   nemerle/trunk/tools/ndp/
   nemerle/trunk/tools/ndp/AssemblyAnalyzer.n
   nemerle/trunk/tools/ndp/COPYRIGHT
   nemerle/trunk/tools/ndp/DataTree.n
   nemerle/trunk/tools/ndp/Makefile
   nemerle/trunk/tools/ndp/XMLMacro.n
   nemerle/trunk/tools/ndp/nemerle-doc.css

Added: nemerle/trunk/tools/ndp/AssemblyAnalyzer.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/AssemblyAnalyzer.n	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,26 @@
+using System;
+using System.Reflection;
+
+module AssemblyAnalyzer
+{
+  mutable ass : Assembly;
+  public analyze (filename : string, tree : DataTree) : void
+  {
+    ass = Assembly.LoadFile(filename);
+    foreach (t in ass.GetTypes())
+    {
+      // Console.WriteLine("Namespace: {0}, name: {1}", t.Namespace, t.FullName);
+      foreach (_m in t.GetMembers()) {
+        mutable info = "";
+        when (t.IsAbstract) info += " abstract ";
+        when (t.IsArray) info += " array ";
+        when (t.IsClass) info += " class ";
+        when (t.IsInterface) info += " interface ";
+        tree.AddItem(t.ToString(), t.Attributes, info);
+        // Console.WriteLine("   nazwa {0}, opis {1}, atrybut {2}", t.Name, t.ToString(), t.Attributes);
+      }
+    }
+  
+  }
+
+}

Added: nemerle/trunk/tools/ndp/COPYRIGHT
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/COPYRIGHT	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2006 The University of Wroclaw.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *    1. Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *    2. Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *    3. The name of the University may not be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE UNIVERSITY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */

Added: nemerle/trunk/tools/ndp/DataTree.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/DataTree.n	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,407 @@
+using System;
+using Nemerle.Collections;
+
+
+module HtmlGenerator
+{
+  public Page (f : void -> string, fname : string) : void
+  {
+    def buf = System.Text.StringBuilder();
+    _ = buf.Append("<?xml version=\"1.0\"?>\n");
+    _ = buf.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n");
+    _ = buf.Append("  \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");
+    _ = buf.Append("<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">\n");
+    _ = buf.Append("<head>\n");
+    _ = buf.Append("<title>Nemerle Documentation Project</title>\n");
+    _ = buf.Append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");
+    _ = buf.Append("<link rel=\"stylesheet\" type=\"text/css\" href=\"nemerle-doc.css\" />\n");
+    _ = buf.Append("</head>\n");
+    _ = buf.Append("<body>\n");
+    _ = buf.Append(f());
+    _ = buf.Append("<div class=\"footer\">Nemerle Documentation Project</div>");
+    _ = buf.Append("</body>\n");
+    _ = buf.Append("</html>\n");
+
+    def outf = IO.StreamWriter(fname);
+    outf.Write(buf);
+    outf.Close();
+    // Console.WriteLine("---> zapis do {0}", fname);
+  }
+
+  public Title (title : string, subtitle : string) : string
+  {
+    mutable content = "";
+    content += "<div class=\"title\">";
+    content += "<span class=\"title\">" + title + "</span><br />";
+    content += "<span class=\"subtitle\">";
+    content += subtitle;
+    content += "</span>";
+    content += "</div>\n\n";
+    content;  
+  }
+
+}
+
+variant ElementType
+{
+  | Unknown
+  | Property
+  | Method
+  | Field
+  | Type
+}
+
+class TopNode
+{
+  
+  internal mutable elements : list [ Node ] = [];
+    
+  /// <summary>A reference on a html page</summary>
+  public href : string = this.ToString() + this.GetHashCode().ToString();
+  
+  internal mutable current : Node;
+  
+  internal mutable comment : string = "";
+  internal mutable remark : string = "";
+  internal mutable return : string = "";
+  internal mutable param : string = "";
+  internal mutable attr : Reflection.TypeAttributes;
+  internal mutable info : string;
+  internal parent : TopNode;
+  
+  
+  internal page_content (elements : list [ Node ], ns : string) : string
+  {
+    mutable res = "";
+    res += "<div class=\"ns-index\">\n";
+    res += "<span class=\"ns-index\" id=\"" + this.href + "\">Namespace " + (if (ns.Length ==0) "?Empty?" else ns) +"</span>\n";
+    foreach (e in elements)      
+      when (e.elemType.Equals(ElementType.Type()) || e.elemType.Equals(ElementType.Unknown()))
+      {
+        def ahref = match (e.elemType) { | Unknown => "#" + e.href | _ => e.html_file + "#" + e.href };
+        res += "<div title=\"" + e.full_name + "\" class=\"index-element\">";
+        res += match (e.elemType) { | Type => "class" | Unknown => "namespace" | _ => e.elemType.ToString() };
+        res += " ";
+        res += "<a href=\"" + ahref + "\">" + e.name + "</a>";
+        res += if (comment.Length > 0) "<div class=\"komentarz\">Comment: " + comment + "</div>" else "";
+        res += if (remark.Length > 0) "<div class=\"uwaga\">Remark: " + remark + "</div>" else "";
+        res += "</div>\n";
+      }
+    res += "</div>\n";
+    res
+  }
+  
+  public virtual ToIndex (content : ref string) : void
+  {
+    // first group types in 'anonymous' namespace
+    mutable is_anonymous_ns = false;
+    foreach (e in elements)      
+      when (e.elemType.Equals(ElementType.Type())) is_anonymous_ns = true;
+    
+    // add elements in anonymous
+    when (is_anonymous_ns)
+    {
+      content += page_content(this.elements, "");
+    }
+        
+    foreach (e in elements)
+       when (e.elemType.Equals(ElementType.Unknown())) e.ToIndex(ref content)
+  }
+  
+  public virtual infoPages () : void
+  {       
+    foreach (e in elements)
+        when (e.elemType.Equals(ElementType.Unknown())) e.infoPages();    
+  }
+  
+  public Comment(str : string) : void { 
+    current.comment += str;
+  }
+  
+  public Remark(str : string) : void { 
+    current.remark += str;
+  }
+  
+  public Return(str : string) : void { 
+    current.return += str;
+  }
+  
+  public Param(str : string) : void { 
+    current.param += str;
+  }   
+  
+}
+
+
+class Node : TopNode
+{
+  public mutable elemType : ElementType = ElementType.Unknown();
+  /// <summary>Name of the element</summary>
+  public mutable name : string;
+  /// <summary>Full name (with namespaces path)</summary>
+  public mutable full_name : string = "";
+  
+  public html_file : string {
+    get { if (parent is Node) (parent :> Node).full_name + ".html" else "index.html"}
+  
+  }
+  
+  public override ToIndex (content : ref string) : void
+  {
+    when (this.elemType.Equals(ElementType.Unknown()))
+    {
+      // Console.WriteLine("Podstrona typu {0}, nazwa {1}", this.elemType, this.full_name);
+      // self-explanation
+      content += page_content(this.elements, this.full_name);
+    
+      foreach (e in elements)
+        when (e.elemType.Equals(ElementType.Unknown())) e.ToIndex(ref content);
+    }
+  }
+
+  public override infoPages () : void
+  {    
+    // create page for current namespace
+    // Console.WriteLine("Zapis pliku {0}", this);
+    when (this.elemType.Equals(ElementType.Unknown()))
+    {
+      def fname = this.full_name ;
+      mutable content = "";
+      content += HtmlGenerator.Title("Nemerle Library", "Namespace " + fname);
+      foreach (e in elements)
+        content += e.ToHtml();
+      HtmlGenerator.Page ( fun () { content }, fname + ".html");
+    }
+   
+    foreach (e in elements)
+      when (e.elemType.Equals(ElementType.Unknown())) e.infoPages();    
+  }
+  
+
+  public this(name : string, prefiks : string, parent : TopNode) {
+      this.name = name;
+      this.full_name = prefiks;
+      this.parent = parent;
+      // Console.WriteLine("Nowy element Name " + prefiks);
+  }
+  
+  
+  
+  filteredIter (l : list [ Node ], cond : Node -> bool, iter : Node -> string) : string
+  {
+    mutable res = "";
+    foreach (e in l) when (cond(e)) res += iter(e);
+    res;
+  }
+  
+  public ToHtml () : string
+  {
+    mutable res = "";
+    mutable com = if (comment.Length > 0) "<div class=\"komentarz\">" + comment + "</div>" else "";
+    com += if (remark.Length > 0) "<div class=\"uwaga\">Remark: " + remark + "</div>" else "";
+    com += if (return.Length > 0) "<div class=\"return\">Return: " + return + "</div>" else "";
+    com += if (param.Length > 0) "<div class=\"param\">Parameter: " + param + "</div>" else "";
+    
+    /*
+    mutable att = this.info;
+    when (!this.attr.Equals(null))
+        att += " " + this.attr.ToString() + " ";
+    att += " ";
+    */
+    def att = "";
+    
+    match (elemType) {
+      | Unknown => 
+          /**
+          res += att + "<span class=\"namespace\" title=\"" + this.full_name + "\">" + name + "</span>\n";
+          res += com;
+          res += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Method()) }, fun (e) { e.ToHtml() });
+          res += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Property()) }, fun (e) { e.ToHtml() });
+          res += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Field()) }, fun (e) { e.ToHtml() });
+          res += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Type()) }, fun (e) { e.ToHtml() });
+          // foreach (e in elements) when (!e.elemType.Equals(ElementType.Unknown())) res += e.ToHtml();
+          **/
+          res = "";
+      | Property => res += "Property: " + att + name + com;
+      | Method => res += "Method: " + att + name + com;
+      | Field => res += "Field: " + att + name + com;
+      | Type =>
+          res += "<div class=\"ns-index\"" + ("id=\"" + this.href + "\"") + ">Class " + att;
+          res += "<span class=\"ns-index\" title=\"" + this.full_name + "\">" + name + "</span>\n";
+          res += com;
+          mutable components = "";
+          components += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Method()) },   fun (e) { "<li>" + e.ToHtml() + "</li>\n"});
+          components += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Property()) }, fun (e) { "<li>" + e.ToHtml() + "</li>\n"});
+          components += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Field()) },    fun (e) { "<li>" + e.ToHtml() + "</li>\n"});
+          components += filteredIter(elements, fun (e) { e.elemType.Equals(ElementType.Type()) },     fun (e) { "<li>" + e.ToHtml() + "</li>\n"});
+          when (components.Length > 0)
+            res += "<ul>\n" + components + "</ul>\n";
+          res += "</div>\n";
+    }
+    res  
+  }
+}
+
+// -----------------------------------------------
+class DataTree
+{
+  split (str : string) : char*string { (str[0], str.Substring(2)) }
+  
+  mutable tree : TopNode = TopNode();
+  mutable sources : list [ string ] = [];
+  
+  public sourcesToString () : string
+  {
+    mutable res = "";
+    res += 
+        match (sources.Length) {
+              | 0 => "No sources?"
+              | 1 => "Source: "
+              | _ => "Sources:<br /> "
+        }
+    res += List.Head(sources);
+    def r = List.Tail(sources);
+    foreach (e in r) res += ", " + e;
+    res
+  }
+  
+  public AddSource(src : string) : void
+  {
+    sources += [ src ]
+  }     
+  
+  smart_strip(path : string) : list [ string ]
+  {
+    // first split into name and parameters
+    def par_pos = path.IndexOf('(');
+    def path_name = if (par_pos != -1) path.Substring(0, par_pos) else path;
+    def param = if (par_pos != -1) path.Substring(par_pos) else "";
+    
+    // Console.WriteLine("{0} = ({1},{2})", path, path_name, param);
+    
+    mutable token_list = Nemerle.Collections.List.FromArray(path_name.Split(array ['.']));
+    mutable res = [];
+    // analyze name
+    while (token_list.Length > 1)
+    {
+      mutable r = List.Hd(token_list);
+      
+      /// when not .., i.e. ctor
+      when (r.Length != 0)
+      {
+        res += [ r ];
+        // Console.WriteLine("<-- " + r);
+      }
+      when (token_list.Length > 0) token_list = List.Tl(token_list)
+    } // while ()
+    def last = List.Hd(token_list);
+    def last_token = if (par_pos > -1) (last + param) else last;
+    res += [ last_token ];
+    res
+  }
+  
+  memb (set : TopNode, name : string) : Node
+  {
+    mutable res = null;
+    foreach (e in set.elements) when (name.Equals(e.name)) res = e;
+    res;
+  }
+  
+  public AddItem(str : string, attr : System.Reflection.TypeAttributes, info : string) : void
+  {
+    def path = str.Split(array ['.']);
+    mutable pointer = tree;
+    mutable next;
+    foreach (edge in path)
+    {    
+      // Console.WriteLine("ścieşka " + edge);
+      next = memb(pointer, edge);
+      when (next == null)
+      {
+        def pref = if (pointer is Node) ((pointer :> Node).full_name + "." + edge) else edge;
+        next = Node(edge, pref, pointer);
+        pointer.elements = pointer.elements + [ next ];
+      }
+      pointer = next;
+    }
+    pointer.attr = attr; 
+    pointer.info = info; 
+  }
+  
+  public AddItem (str : string) : void
+  {
+    // System.Console.WriteLine("---> " + str);
+    def (tySy, path) = split(str);
+    // System.Console.WriteLine("---> split({0}) = ({1}, {2})", str, tySy, path);
+    def ty = 
+      match (tySy) {
+        | 'T' => ElementType.Type();
+        | 'F' => ElementType.Field();
+        | 'M' => ElementType.Method();
+        | 'P' => ElementType.Property()
+        | _   => ElementType.Unknown()
+      }
+      
+    def pathList = smart_strip(path);
+    mutable pointer = tree;
+    mutable next;
+    foreach (edge in pathList)
+    {    
+      next = memb(pointer, edge);
+      when (next == null)
+      {
+        def pref = if (pointer is Node) ((pointer :> Node).full_name + "." + edge) else edge;
+        next = Node(edge, pref, pointer);
+        pointer.elements = pointer.elements + [ next ];
+      }
+      pointer = next;
+    }
+    tree.current = next;
+    tree.current.elemType = ty;
+    // Console.WriteLine("Added {0} {1}", tree.current.full_name, tree.current.elemType);
+  }
+    
+  public AddComment (str : string) : void 
+  {
+    tree.Comment(str);
+  }
+  
+  public AddRemark (str : string) : void 
+  {
+    tree.Remark(str);
+  }
+  
+  public AddReturn (str : string) : void 
+  {
+    tree.Return(str);
+  }
+  
+  public AddParam (str : string) : void 
+  {
+    tree.Param(str);
+  }
+  
+  
+  index_content () : string
+  {
+    mutable content = "";
+    content += HtmlGenerator.Title("Nemerle Library", this.sourcesToString());
+    // teraz zawartość
+    
+    tree.ToIndex(ref content);
+    content;
+  }
+  
+  
+  public indexPage() : void
+  {
+    HtmlGenerator.Page(index_content, "index.html");
+  }
+  
+  public infoPages () : void
+  {
+    tree.infoPages();
+  }
+  
+}
+

Added: nemerle/trunk/tools/ndp/Makefile
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/Makefile	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,3 @@
+
+nemerledoc.exe: XMLMacro.n DataTree.n AssemblyAnalyzer.n
+	ncc -g -Ot -texe -doc:test.xml -out:$@ $^

Added: nemerle/trunk/tools/ndp/XMLMacro.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/XMLMacro.n	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,199 @@
+// xml
+// Top-down (LL) parser
+
+using System;
+using System.Collections;
+using System.Text;
+using System.Xml;
+// using System.Xml.XPath;
+using Nemerle.Assertions;
+
+
+module NemerleDocXml
+{
+
+  _info () : void
+  {
+        Console.WriteLine("Typ:" + cursor.NodeType.ToString() + " nazwa: " + cursor.Name + 
+        " atrybut: " + (if (cursor.AttributeCount > 0) cursor[0] else "") +
+        " val: " + cursor.Value + " line:" + cursor.LineNumber.ToString())
+  }
+
+  /// <summary>hygienic tests</summary>
+  StartTag(name : string) : void
+  {
+    def error = String.Format("Open tag <{0}> expected, line: {1}", name, cursor.LineNumber);
+    assert(cursor.NodeType == XmlNodeType.Element && cursor.Name.Equals(name), error);  
+  }
+  
+  SkipStartTag(name : string) : void
+  {
+    def error = String.Format("Open tag <{0}> expected, line: {1}", name, cursor.LineNumber);
+    assert(cursor.NodeType == XmlNodeType.Element && cursor.Name.Equals(name), error);  
+    _ = cursor.Read()
+  }
+  
+  SkipEndTag(name : string) : void
+  {
+    def error = String.Format("Closing tag </{0}> expected, line: {1}", name, cursor.LineNumber);
+    assert(cursor.NodeType == XmlNodeType.EndElement && cursor.Name.Equals(name), error);
+    _ = cursor.Read();
+  }
+  
+  readText () : string
+  {
+    mutable res = "";
+    when (cursor.NodeType == XmlNodeType.Text)
+    {
+      res = cursor.Value;
+      _ = cursor.Read()
+    }
+    res
+  }
+  
+  isOpenTag(name : string) : bool
+  {
+    cursor.NodeType == XmlNodeType.Element && cursor.Name.Equals(name)
+  }
+  
+  isEndTag(name : string) : bool
+  {
+    cursor.NodeType == XmlNodeType.EndElement && cursor.Name.Equals(name);
+  }
+  
+  // ---------------------------
+  mutable cursor : XmlTextReader;
+  mutable tree : DataTree;
+  
+  paramTag () : void
+  {
+    mutable res = "";
+    res = cursor[0];
+    SkipStartTag("param");
+    res += ": " + readText();
+    tree.AddParam(res);
+    SkipEndTag("param");  
+  }
+    
+  /// <summary>
+  /// Why summary is doubly quoted???? Why?
+  /// </summary>
+  summaryTag() : void
+  {
+    SkipStartTag("summary");
+    
+    match ((cursor.NodeType, cursor.Name)) {
+      | (XmlNodeType.Element, "summary") =>
+          SkipStartTag("summary");
+          tree.AddComment(readText());
+          SkipEndTag("summary");
+          when (isOpenTag("param"))
+                    paramTag ();
+          when (isEndTag("summary")) SkipEndTag("summary");
+      | (XmlNodeType.Text, _ ) =>
+          tree.AddComment(readText());
+          while (!isEndTag("summary"))
+          {
+              when (isOpenTag("param"))
+                      paramTag();
+              when (isOpenTag("returns"))
+              {
+                SkipStartTag("returns");
+                tree.AddReturn(readText());
+                SkipEndTag("returns");
+              }
+          }
+          SkipEndTag("summary");
+          
+          when (isOpenTag("remarks")) {
+            SkipStartTag("remarks");
+            tree.AddRemark(readText());
+            SkipEndTag("remarks");
+          }
+      | _ => throw Exception("Not implemented " + cursor.LineNumber.ToString());
+    }
+  }
+  
+  
+  
+  memberTag() : void
+  {
+    StartTag("member");
+    // Info();
+    tree.AddItem(cursor[0]);
+    if (cursor.IsEmptyElement)
+    {
+      _ = cursor.Read();
+    }
+    else {
+      _ = cursor.Read();
+      summaryTag();
+      SkipEndTag("member");
+    }
+  }
+  
+  membersTag() : void
+  {
+    SkipStartTag("members");
+    while (isOpenTag("member"))
+        memberTag();
+    SkipEndTag("members");
+  }
+  
+  nameTag() : void
+  {
+    SkipStartTag("name");
+    _ = cursor.Read();
+    SkipEndTag("name")
+  }
+  
+  assemblyTag() : void
+  {
+    SkipStartTag("assembly");
+    nameTag();
+    SkipEndTag("assembly");
+  }
+  
+  docTag() : void
+  {
+    SkipStartTag("doc");
+    
+    assemblyTag();
+    // Info();
+    membersTag();
+    // Info();
+    
+    SkipEndTag("doc")
+  }
+  
+  rootTag() : void
+  {
+    assert(cursor.NodeType == XmlNodeType.XmlDeclaration, "Oczekiwano znacznik <?xml>");
+    when (cursor.Read())
+        docTag();
+  }
+
+
+  public static Main(arg : array [ string ]) : void
+  {
+    tree = DataTree();
+    foreach (file in arg)
+    {
+      when (file.EndsWith(".dll"))
+        AssemblyAnalyzer.analyze(file, tree);
+        
+      when (file.EndsWith(".xml"))
+      {
+        cursor = XmlTextReader(file);
+        cursor.WhitespaceHandling = WhitespaceHandling.None;
+        _ = cursor.Read();
+        rootTag();
+      }
+      
+      tree.AddSource(file);
+    }
+    tree.indexPage();
+    tree.infoPages();
+  }
+
+} // -- NemerleDocXml

Added: nemerle/trunk/tools/ndp/nemerle-doc.css
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/ndp/nemerle-doc.css	Sat Oct 14 13:36:57 2006
@@ -0,0 +1,137 @@
+html,body	{ color: darkblue; background: #E6ECFF;
+		  font-family: helvetica, arial, sans-serif }
+
+
+div.title       {  border-bottom: 1px solid black;
+                   background: rgb(153,212,239);
+                   color: black;
+                   padding: 4px }
+                   
+span.title      { font-weight: bold;
+                  font-size: large; }
+                  
+span.subtitle   { font-size: small; }
+
+
+div.ns-index    { background-color: white;
+                  color: black;
+                  border-collapse: collapse;
+                  border: 1px solid #aaa;
+                  padding: 0 .8em .3em .5em;
+                  margin-top: 1ex;
+                  margin-bottom: 1ex; }
+
+span.ns-index   { font-weight: bold; }
+                  
+div.index-element { padding-left: 20px; margin-left: 20px; }
+
+div.footer       { 
+    background: #E6ECFF;
+    border: none;
+    margin: .6em 0 0.8em 0;
+    padding: .4em 0 .4em 0;
+    text-align: center;
+    font-size: 90%;
+    font-variant: small-caps;
+}            
+
+/* ------------ OLD ------------*/
+a		{ text-decoration: underline; }
+a:link		{ color: blue; }
+a:visited	{ color: darkblue; }
+a:active	{ color: red; }
+
+
+
+div.site	{ border-bottom: 1px solid black;
+		  background: #f0f0d0; padding-bottom: 5px;
+                  font-size:large; font-weight: bold }
+
+div.salve {
+   font-size: 200%;
+   text-align: center;
+   color: rgb(204,149,97);
+   margin-top: 1ex;
+   margin-bottom: 1ex;
+}
+
+/** nawigacja **/
+
+// div.navigator	{ position: fixed; float: left; margin-left: 50%; margin-top: 2ex; }
+div.navigator	{  }
+
+
+div.navigator p	{ border-left:    2px solid white;
+		  border-top:     2px solid white;
+		  border-right:   2px solid #806040;
+		  border-bottom:  2px solid #806040;
+		  padding-left:   2ex;
+		  padding-right:  2ex;
+		  padding-top:    0.5em;
+		  padding-bottom: 0.5em;
+		  margin-top:     0em;
+		  margin-bottom:  1em;
+		  background: white; color: black }
+
+div.navi span	{ display: block; text-align: center; font-weight: bold; margin-bottom: 1ex }
+
+div.navigator a	{ text-decoration: none; display: block;
+		  text-align: left; padding: 1px; 
+		  font-size: small; 
+		  border-bottom: 1px solid #806040; }
+
+div.navigator a:hover { color: black; background: grey }
+
+
+
+/*** info ***/
+
+p.namespace,div.namespace {
+                  width:      90%;
+                  border-left:    2px solid white;
+		  border-top:     2px solid white;
+		  border-right:   2px solid #806040;
+		  border-bottom:  2px solid #806040;
+                  font-size:      small;
+                  float:          right;
+		  padding-left:   2ex;
+		  padding-right:  2ex;
+		  padding-top:    0.5em;
+		  padding-bottom: 0.5em;
+		  margin-top:     0em;
+		  margin-bottom:  1em;
+		  background: white; color: black;
+}
+
+span.namespace {
+    font-size:  130%;
+    text-align: center;
+    background: white;
+    color:      red;
+}
+
+
+/*** klasa ***/
+div.klasa {
+      border: 1px solid grey;
+}
+
+span.klasa {
+      color: magenta;
+}
+
+/** komnetarz **/
+div.komentarz {
+      font-style: italic;
+      color:      green;
+}
+
+div.uwaga {
+      font-style: italic;
+      color:      pink;
+}
+
+div.param {
+      font-style: italic;
+      color:      orange;
+}



More information about the svn mailing list