2002-06-25 Rachel Hestilow <hestilow@ximian.com>

* doc/: Added the makeshift doc generation toolchain.

svn path=/trunk/gtk-sharp/; revision=5454
This commit is contained in:
Rachel Hestilow 2002-06-25 20:22:41 +00:00
parent 1987e501df
commit 533f703332
15 changed files with 16314 additions and 0 deletions

View file

@ -1,3 +1,7 @@
2002-06-25 Rachel Hestilow <hestilow@ximian.com>
* doc/: Added the makeshift doc generation toolchain.
2002-06-25 Mike Kestner <mkestner@speakeasy.net>
* configure.in : back out a premature add of gnome/Makefile.in

15
doc/README Normal file
View file

@ -0,0 +1,15 @@
This is the makeshift doc generator until NDoc works.
Stylistic matters are of very little concern, but the docs should
still be XHTML conformant.
The build system is multi-stage, it effectively works like this:
* Original docs (built by mcs for now): glib-sharp-docs.xml, ...
* netdoc_pp.pl preprocesses these into a cleaner format:
glib-sharp-docs-stage1.xml, ...
* introspect.exe adds type information from the assembly at hand:
glib-sharp-docs-stage2.xml, ...
* netdoc.xsl (via xsltproc) translates this xml file into XHTML:
glib-sharp-docs.html
Plans for the future are listed in TODO.

23
doc/TODO Normal file
View file

@ -0,0 +1,23 @@
Short-term within the doc scripts:
* Determine why some properties are not listing their types properly.
(see: introspect.cs:160)
* In introspect.cs, import introspection functions from gobject, use these
to retrieve things like enum field descriptions
* have makefile.win32 reference the csc-generated docs instead
of the local copies stored here (since mcs doesn't generate docs)
* generate summary page(s)
Short-term within gtksharp/generator/codegen.exe:
* Once struct and boxed field generation is working again,
generate docs for these fields.
Long-term:
* Per Arneng has written an HTML generator for the ECMA doc format
that looks very nice. We may want to use this format for stage 1 & 2
and use his generator instead of the XSLT step.
The generator is at: http://hus11.rsn.bth.se/~pure/sharpdoc.tar.gz
* Get NDoc working and use that instead:
* on windows, NDoc breaks because there are no dllimport-compatible
windows dlls for gtk+/glib/etc.
* on linux, I'm not even sure if NDoc compiles yet. Also, mcs does
not generate doc.xml files yet.

1639
doc/atk-sharp-docs.xml Normal file

File diff suppressed because it is too large Load diff

3159
doc/gdk-sharp-docs.xml Normal file

File diff suppressed because it is too large Load diff

487
doc/glib-sharp-docs.xml Normal file
View file

@ -0,0 +1,487 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>glib-sharp</name>
</assembly>
<members>
<member name="T:GtkSharp.SignalCallback">
<summary>
SignalCallback Class
</summary>
<remarks>
Base Class for GSignal to C# event marshalling.
</remarks>
</member>
<member name="M:GtkSharp.SignalCallback.#ctor(GLib.Object,System.EventHandler)">
<summary>
SignalCallback Constructor
</summary>
<remarks>
Initializes instance data.
</remarks>
</member>
<member name="T:GLib.Boxed">
<summary>
Boxed Class
</summary>
<remarks>
An abstract base class to derive structures and marshal them.
</remarks>
</member>
<member name="M:GLib.Boxed.#ctor(System.IntPtr)">
<summary>
Boxed Constructor
</summary>
<remarks>
Constructs a Boxed type from a raw ref.
</remarks>
</member>
<member name="M:GLib.Boxed.FromNative(System.IntPtr)">
<summary>
FromNative Method
</summary>
<remarks>
Gets a Boxed type from a raw IntPtr.
</remarks>
</member>
<member name="P:GLib.Boxed.Handle">
<summary>
Handle Property
</summary>
<remarks>
Gets a marshallable IntPtr.
</remarks>
</member>
<member name="P:GLib.Boxed.Raw">
<summary>
Raw Property
</summary>
<remarks>
Gets or sets a marshallable IntPtr.
</remarks>
</member>
<member name="T:GtkSharp.SignalArgs">
<summary>
SignalArgs Class
</summary>
<remarks>
Arguments and return value for signals.
</remarks>
</member>
<member name="M:GtkSharp.SignalArgs.#ctor">
<summary>
SignalArgs Constructor
</summary>
<remarks>
Creates a SignalArgs object with no return value and
no arguments.
</remarks>
</member>
<member name="M:GtkSharp.SignalArgs.#ctor(System.Object)">
<summary>
SignalArgs Constructor
</summary>
<remarks>
Creates a SignalArgs object with a return value and
no arguments.
</remarks>
</member>
<member name="M:GtkSharp.SignalArgs.#ctor(System.Object,System.Object[])">
<summary>
SignalArgs Constructor
</summary>
<remarks>
Creates a SignalArgs object with a return value and
a list of arguments.
</remarks>
</member>
<member name="P:GtkSharp.SignalArgs.Args">
<summary>
Args Property
</summary>
<remarks>
A list of arguments.
</remarks>
</member>
<member name="P:GtkSharp.SignalArgs.RetVal">
<summary>
RetVal Property
</summary>
<remarks>
The return value.
</remarks>
</member>
<member name="T:GLib.TimeoutHandler">
<summary>
TimeoutHandler Delegate
</summary>
<remarks>
Delegate used for Timeouts in the GLib main loop. Return
true to restart the timeout. Returning false clears the
timeout.
</remarks>
</member>
<member name="T:GLib.Timeout">
<summary>
Timeout Class
</summary>
<remarks>
Allows the installation of Timeout Handlers on the GLib main
loop.
</remarks>
</member>
<member name="T:GLib.TypeFundamentals">
<summary>
TypeFundamentals enumeration
</summary>
<remarks>
The built-in types available in GLib.
</remarks>
</member>
<member name="T:GLib.Object">
<summary>
Object Class
</summary>
<remarks>
Wrapper class for GObject.
</remarks>
</member>
<member name="M:GLib.Object.GetObject(System.IntPtr)">
<summary>
GetObject Shared Method
</summary>
<remarks>
Used to obtain a CLI typed object associated with a
given raw object pointer. This method is primarily
used to wrap object references that are returned
by either the signal system or raw class methods that
return GObject references.
</remarks>
<returns>
The wrapper instance.
</returns>
</member>
<member name="M:GLib.Object.#ctor">
<summary>
Object Constructor
</summary>
<remarks>
Dummy constructor needed for derived classes.
</remarks>
</member>
<member name="M:GLib.Object.#ctor(System.IntPtr)">
<summary>
Object Constructor
</summary>
<remarks>
Creates an object from a raw object reference.
</remarks>
</member>
<member name="M:GLib.Object.Equals(System.Object)">
<summary>
Equals Method
</summary>
<remarks>
Checks equivalence of two Objects.
</remarks>
</member>
<member name="M:GLib.Object.GetHashCode">
<summary>
GetHashCode Method
</summary>
<remarks>
Calculates a hashing value.
</remarks>
</member>
<member name="M:GLib.Object.GetData(System.String)">
<summary>
GetData Method
</summary>
<remarks>
Accesses arbitrary data storage on the Object.
</remarks>
</member>
<member name="M:GLib.Object.SetData(System.String,System.Object)">
<summary>
SetData Method
</summary>
<remarks>
Stores arbitrary data on the Object.
</remarks>
</member>
<member name="M:GLib.Object.GetProperty(System.String,GLib.Value)">
<summary>
GetProperty Method
</summary>
<remarks>
Accesses a Value Property.
</remarks>
</member>
<member name="M:GLib.Object.SetProperty(System.String,GLib.Value)">
<summary>
SetProperty Method
</summary>
<remarks>
Accesses a Value Property.
</remarks>
</member>
<member name="P:GLib.Object.Raw">
<summary>
Raw Property
</summary>
<remarks>
The raw GObject reference associated with this wrapper.
Only subclasses of Object can access this read/write
property. For public read-only access, use the
Handle property.
</remarks>
</member>
<member name="P:GLib.Object.Handle">
<summary>
Handle Property
</summary>
<remarks>
The raw GObject reference associated with this object.
Subclasses can use Raw property for read/write
access.
</remarks>
</member>
<member name="P:GLib.Object.EventList">
<summary>
EventList Property
</summary>
<remarks>
A list object containing all the events for this
object indexed by the Gtk+ signal name.
</remarks>
</member>
<member name="T:GLib.SList">
<summary>
SList Class
</summary>
<remarks>
Wrapper class for GSList.
</remarks>
</member>
<member name="P:GLib.SList.Handle">
<summary>
Handle Property
</summary>
<remarks>
A raw GSList reference for marshaling situations.
</remarks>
</member>
<member name="T:GLib.Value">
<summary>
Value Class
</summary>
<remarks>
An arbitrary data type similar to a CORBA Any which is used
to get and set properties on Objects.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.IntPtr,System.String)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value corresponding to the type of the
specified property.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.Boolean)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified boolean.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(GLib.Boxed)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified boxed type.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.Double)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified double.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.Single)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified float.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.Int32)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified integer.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(GLib.Object)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified object.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.IntPtr)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified pointer.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.String)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified string.
</remarks>
</member>
<member name="M:GLib.Value.#ctor(System.UInt32)">
<summary>
Value Constructor
</summary>
<remarks>
Constructs a Value from a specified uint.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.Boolean">
<summary>
Value to Boolean Conversion
</summary>
<remarks>
Extracts a bool from a Value. Note, this method
will produce an exception if the Value does not hold a
boolean value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~GLib.Boxed">
<summary>
Value to Boxed Conversion
</summary>
<remarks>
Extracts a boxed type from a Value. Note, this method
will produce an exception if the Value does not hold a
boxed type value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.Double">
<summary>
Value to Double Conversion
</summary>
<remarks>
Extracts a double from a Value. Note, this method
will produce an exception if the Value does not hold a
double value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.Single">
<summary>
Value to Float Conversion
</summary>
<remarks>
Extracts a float from a Value. Note, this method
will produce an exception if the Value does not hold a
float value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.Int32">
<summary>
Value to Integer Conversion
</summary>
<remarks>
Extracts an int from a Value. Note, this method
will produce an exception if the Value does not hold a
integer value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~GLib.Object">
<summary>
Value to Object Conversion
</summary>
<remarks>
Extracts an object from a Value. Note, this method
will produce an exception if the Value does not hold a
object value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.IntPtr">
<summary>
Value to Pointer Conversion
</summary>
<remarks>
Extracts a pointer from a Value. Note, this method
will produce an exception if the Value does not hold a
pointer value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.String">
<summary>
Value to String Conversion
</summary>
<remarks>
Extracts a string from a Value. Note, this method
will produce an exception if the Value does not hold a
string value.
</remarks>
</member>
<member name="M:GLib.Value.op_Explicit(GLib.Value)~System.UInt32">
<summary>
Value to Unsigned Integer Conversion
</summary>
<remarks>
Extracts an uint from a Value. Note, this method
will produce an exception if the Value does not hold a
unsigned integer value.
</remarks>
</member>
<member name="P:GLib.Value.Handle">
<summary>
Handle Property
</summary>
<remarks>
Read only. Accesses a pointer to the raw GValue.
</remarks>
</member>
</members>
</doc>

9414
doc/gtk-sharp-docs.xml Normal file

File diff suppressed because it is too large Load diff

17
doc/index.html Normal file
View file

@ -0,0 +1,17 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Gtk# documentation</title>
</head>
<body>
Documentation on the following assemblies is available:
<ul><a href="glib-sharp-docs.html">glib</a></ul>
<ul><a href="atk-sharp-docs.html">atk</a></ul>
<ul><a href="pango-sharp-docs.html">pango</a></ul>
<ul><a href="gdk-sharp-docs.html">gdk</a></ul>
<ul><a href="gtk-sharp-docs.html">gtk</a></ul>
<p align="right"><i>Last updated Monday, June 24 2002</i></p>
<p align="right"><i>Rachel Hestilow <a href="mailto:hestilow@ximian.com">(hestilow at ximian.com)</a></i></p>
</body>
</html>

298
doc/introspect.cs Normal file
View file

@ -0,0 +1,298 @@
// introspect.cs: Add introspectable information to a docs file.
//
// Author: Rachel Hestilow <hestilow@ximian.com>
//
// (c) 2002 Rachel Hestilow
namespace GtkSharp.DocGeneration {
using System;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Xml;
public class Introspect {
Hashtable assemblies = new Hashtable ();
Hashtable primitives = new Hashtable ();
XmlDocument doc;
string current_ns;
public Introspect (XmlDocument doc) {
this.doc = doc;
primitives["System.Boolean"] = "bool";
primitives["System.Byte"] = "byte";
primitives["System.Char"] = "char";
primitives["System.Decimal"] = "decimal";
primitives["System.Double"] = "double";
primitives["System.Int16"] = "int16";
primitives["System.Int32"] = "int";
primitives["System.Int64"] = "int64";
primitives["System.Object"] = "object";
primitives["System.SByte"] = "sbyte";
primitives["System.Single"] = "single";
primitives["System.String"] = "string";
primitives["System.UInt16"] = "uint16";
primitives["System.UInt32"] = "uint";
primitives["System.UInt64"] = "uint64";
primitives["System.Void"] = "void";
/* FIXME: mcs does not support Assembly.GetReferencedAssemblies*/
foreach (string asm in new string[] {"glib", "atk", "pango", "gdk"}) {
string key = asm + "-sharp";
assemblies[key] = Assembly.Load (key);
}
}
public Type LookupType (string typename)
{
foreach (Assembly assembly in assemblies.Values) {
Type type = assembly.GetType (typename);
if (type != null)
return type;
}
return Type.GetType (typename);
}
public string StringifyType (Type type)
{
string full = type.ToString ();
bool isArray;
if (full.EndsWith ("[]")) {
full = full.Substring (0, full.Length - 2);
isArray = true;
} else
isArray = false;
if (primitives.Contains (full)) {
string ret = (string) primitives[full];
if (isArray) ret += "[]";
return ret;
} else {
if (String.Compare (full, 0, current_ns, 0, current_ns.Length) == 0) {
full = full.Substring (current_ns.Length + 1);
}
return full;
}
}
public void FixArgs (XmlElement method_node, Type type, Assembly asm, string method_name, string orig, bool isCtor)
{
XmlNode args_node = doc.CreateNode ("element", "arguments", "");
method_node.AppendChild (args_node);
if (orig == "") return;
string[] args = orig.Split (',');
Type[] signature = new Type[args.Length];
int i = 0;
foreach (string arg in args) {
string fix = arg.Trim ('@');
signature[i] = LookupType (fix);
i++;
}
MethodBase method = null;
MethodBase[] methods;
if (isCtor)
{
MemberInfo[] bases = type.FindMembers (MemberTypes.Constructor | MemberTypes.Method, BindingFlags.Public | BindingFlags.Instance, Type.FilterName, ".ctor");
ArrayList ctors = new ArrayList ();
foreach (MemberInfo info in bases) {
if (info.MemberType == MemberTypes.Constructor)
ctors.Add (info);
}
methods = new MethodBase[ctors.Count];
ctors.CopyTo (methods);
}
else
methods = type.GetMethods ();
foreach (MethodBase m in methods) {
if (m.GetParameters () == null)
continue;
if (m.Name != method_name)
continue;
if (m.GetParameters ().Length != signature.Length)
continue;
bool valid = true;
for (i = 0; i < signature.Length; i++) {
// FIXME: cludge
string t1 = m.GetParameters ()[i].ParameterType.FullName;
t1 = t1.Trim ('&');
if (t1 != signature[i].FullName) {
valid = false;
break;
}
}
if (!valid) continue;
method = m;
break;
}
i = 0;
foreach (ParameterInfo p in method.GetParameters ()) {
string modifiers = "";
// FIXME: another mono bug...this is always false
if (p.IsOut || p.IsRetval)
modifiers += "out ";
XmlElement arg_node = (XmlElement) doc.CreateNode ("element", "argument", "");
args_node.AppendChild (arg_node);
arg_node.SetAttribute ("modifiers", modifiers);
arg_node.SetAttribute ("type", StringifyType (signature[i]));
arg_node.SetAttribute ("name", p.Name);
i++;
}
}
public void FixProperty (XmlElement prop, Assembly asm, Type type)
{
PropertyInfo[] props = type.GetProperties (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
string prop_name = prop.GetAttribute ("name");
PropertyInfo pinfo = null;
foreach (PropertyInfo i in props) {
if (i.Name == prop_name) {
pinfo = i;
break;
}
}
// FIXME: mono bug: why is PropertyType sometimes null?
if (pinfo.PropertyType != null)
prop.SetAttribute ("type", StringifyType (pinfo.PropertyType));
else
prop.SetAttribute ("type", "[unknown]");
}
public void FixMethod (XmlElement method, Assembly asm, Type type)
{
MethodInfo[] methods = type.GetMethods (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
string method_name = method.GetAttribute ("name");
string op = "op_Explicit -> ";
if (String.Compare (method_name, 0, op, 0, op.Length) == 0) {
method.SetAttribute ("type", StringifyType (LookupType (method_name.Substring (op.Length))));
method.SetAttribute ("name", "op_Explicit");
return;
}
FixArgs (method, type, asm, method_name, method.GetAttribute ("args"), false);
MethodInfo minfo = null;
foreach (MethodInfo i in methods) {
if (i.Name == method_name) {
minfo = i;
break;
}
}
method.SetAttribute ("type", StringifyType (minfo.ReturnType));
}
public void FixConstructor (XmlElement method, Assembly asm, Type type)
{
string method_name = method.GetAttribute ("name");
FixArgs (method, type, asm, ".ctor", method.GetAttribute ("args"), true);
}
public bool BaseClassImplements (Type type, Type target)
{
if (type.BaseType == Type.GetType ("System.Object"))
return false;
foreach (Type iface in type.BaseType.GetInterfaces ()) {
if (iface == target)
return true;
}
return BaseClassImplements (type.BaseType, target);
}
public void FixClass (XmlElement klass, string ns)
{
current_ns = ns;
string asm = klass.GetAttribute ("assembly");
Assembly assembly;
if (assemblies.Contains (asm))
assembly = (Assembly) assemblies[asm];
else {
assembly = Assembly.Load (asm);
assemblies[asm] = assembly;
}
Type type = LookupType (ns + "." + klass.GetAttribute ("name"));
if (type.BaseType != null && type.BaseType != Type.GetType ("System.Object") && type.BaseType != Type.GetType ("System.Enum"))
klass.SetAttribute ("base", StringifyType (type.BaseType));
Type[] unfiltered = type.GetInterfaces ();
ArrayList ifaces = new ArrayList ();
if (unfiltered != null && unfiltered.Length > 0) {
foreach (Type iface in unfiltered) {
if (type.BaseType == null || !BaseClassImplements (type, iface))
ifaces.Add (iface);
}
}
if (ifaces.Count > 0) {
XmlNode implements = doc.CreateNode ("element", "implements", "");
klass.AppendChild (implements);
foreach (Type iface in ifaces) {
XmlNode iface_node = doc.CreateNode ("element", "interface", "");
implements.AppendChild (iface_node);
XmlText text = (XmlText) doc.CreateNode ("text", "", "");
text.Value = StringifyType (iface);
iface_node.AppendChild (text);
}
}
foreach (XmlNode member in klass.ChildNodes) {
switch (member.Name) {
case "property":
FixProperty ((XmlElement) member, assembly, type);
break;
case "method":
FixMethod ((XmlElement) member, assembly, type);
break;
case "constructor":
FixConstructor ((XmlElement) member, assembly, type);
break;
default:
break;
}
}
}
public static int Main (string[] args)
{
if (args.Length != 2) {
Console.WriteLine ("usage: introspect <infile> <outfile>");
return 0;
}
XmlDocument doc = new XmlDocument ();
try {
doc.Load (args[0]);
} catch (XmlException e) {
Console.WriteLine ("Failed to load {0}", args[0]);
return 1;
}
Introspect introspector = new Introspect (doc);
XmlElement root = doc.DocumentElement;
foreach (XmlNode ns in root.ChildNodes) {
if (ns.Name != "namespace") continue;
XmlElement ns_elem = (XmlElement) ns;
foreach (XmlNode klass in ns.ChildNodes) {
if (klass.Name != "class") continue;
introspector.FixClass ((XmlElement) klass, ns_elem.GetAttribute ("name"));
}
}
FileStream stream = new FileStream (args[1], FileMode.Create, FileAccess.Write);
doc.Save (stream);
return 0;
}
}
}

9
doc/makefile Normal file
View file

@ -0,0 +1,9 @@
include makefile.common
MCS=mcs
$(stage2_files): %stage2.xml: %stage1.xml introspect.exe
mono introspect.exe $< $@
introspect.exe: introspect.cs
$(MCS) -o introspect.exe -r System.Xml introspect.cs

20
doc/makefile.common Normal file
View file

@ -0,0 +1,20 @@
TARGETS = glib pango atk gdk gtk
output_files = $(TARGETS:=-sharp-docs.html)
input_files = $(TARGETS:=-sharp-docs.xml)
stage1_files = $(TARGETS:=-sharp-docs-stage1.xml)
stage2_files = $(TARGETS:=-sharp-docs-stage2.xml)
all: $(output_files)
stage1: $(stage1_files)
clean:
rm -f $(output_files) $(stage1_files) $(stage2_files) introspect.exe
$(stage1_files): %-docs-stage1.xml: %-docs.xml netdoc_pp.pl $(input_files)
./netdoc_pp.pl $< > $@
$(output_files): %.html: %-stage2.xml netdoc.xsl
xsltproc netdoc.xsl $< > $@

10
doc/makefile.win32 Normal file
View file

@ -0,0 +1,10 @@
include makefile.common
ROOT=/cygdrive/$(subst \,/,$(subst :\,/,$(SYSTEMROOT)))
CSC=$(ROOT)/microsoft.net/framework/v1.0.3705/csc.exe
$(stage2_files): %stage2.xml: %stage1.xml introspect.exe
./introspect $< $@
introspect.exe: introspect.cs
$(CSC) /out:introspect.exe introspect.cs

187
doc/netdoc.xsl Normal file
View file

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="doc">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title><xsl:value-of select="@assembly"/>.dll documentation</title></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="namespace">
<b><xsl:value-of select="@name"/></b><br />
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="class">
<a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
<ul><xsl:value-of select="@name"/>
<xsl:apply-templates select="summary"/>
<xsl:if test="boolean(remarks)">
<xsl:apply-templates select="remarks"/>
<br />
</xsl:if>
<xsl:if test="@base != ''">
<ul><u>Inherits from:</u><xsl:text> </xsl:text>
<xsl:call-template name="maybeLink">
<xsl:with-param name="klass">
<xsl:value-of select="@base"/>
</xsl:with-param>
</xsl:call-template>
</ul>
<br />
</xsl:if>
<xsl:if test="boolean(implements)">
<ul><u>Implements</u></ul>
<xsl:apply-templates select="./implements"/>
<br />
</xsl:if>
<xsl:if test="boolean(constructor)">
<ul><u>Constructors</u></ul>
<xsl:apply-templates select="./constructor"/>
<br />
</xsl:if>
<xsl:if test="boolean(method)">
<ul><u>Methods</u></ul>
<xsl:apply-templates select="./method"/>
<br />
</xsl:if>
<xsl:if test="boolean(property)">
<ul><u>Properties</u></ul>
<xsl:apply-templates select="./property"/>
<br />
</xsl:if>
<xsl:if test="boolean(event)">
<ul><u>Events</u></ul>
<xsl:apply-templates select="./event"/>
<br />
</xsl:if>
<xsl:if test="boolean(field)">
<ul><u>Fields</u></ul>
<xsl:apply-templates select="./field"/>
<br />
</xsl:if>
</ul>
</xsl:template>
<xsl:template match="constructor">
<ul><xsl:value-of select="@name"/> <xsl:apply-templates select="arguments"/><xsl:apply-templates select="summary"/><xsl:apply-templates select="remarks"/></ul>
</xsl:template>
<xsl:template match="method">
<ul>
<xsl:call-template name="maybeLink">
<xsl:with-param name="klass">
<xsl:value-of select="@type"/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:apply-templates select="arguments"/><xsl:apply-templates select="summary"/><xsl:apply-templates select="remarks"/></ul>
</xsl:template>
<xsl:template match="property">
<ul>
<xsl:call-template name="maybeLink">
<xsl:with-param name="klass">
<xsl:value-of select="@type"/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="event|field">
<ul><xsl:value-of select="@name"/><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="summary">
- <font size="-1"><i><xsl:apply-templates/></i></font>
</xsl:template>
<xsl:template match="remarks">
<ul><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="implements">
<ul><xsl:apply-templates/></ul>
</xsl:template>
<xsl:template match="interface">
<xsl:call-template name="maybeLink">
<xsl:with-param name="klass">
<xsl:apply-templates/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template name="maybeLink">
<xsl:param name="klass"/>
<!-- FIXME: handle arrays better -->
<xsl:variable name="is_primitive" select="boolean($klass = 'bool' or $klass = 'byte' or $klass = 'char' or $klass = 'decimal' or $klass = 'double' or $klass = 'int16' or $klass = 'int' or $klass = 'int64' or $klass = 'object' or $klass = 'sbyte' or $klass = 'single' or $klass = 'string' or $klass = 'uint16' or $klass = 'uint' or $klass = 'uint64' or $klass = 'void' or contains ($klass, '[]') or $klass = '[unknown]')"/>
<xsl:choose>
<xsl:when test="contains($klass, '.')">
<xsl:variable name="ns" select="substring-before ($klass, '.')"/>
<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:choose>
<xsl:when test="$ns = 'GLib' or $ns = 'Atk' or $ns = 'Pango' or $ns = 'Gdk' or $ns = 'Gtk'">
<a><xsl:attribute name="href"><xsl:value-of select="translate($ns, $ucletters, $lcletters)"/>-sharp-docs.html#<xsl:value-of select="substring-after ($klass, '.')"/></xsl:attribute><xsl:value-of select="$klass"/></a>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$klass"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="boolean($is_primitive)">
<xsl:value-of select="$klass"/>
</xsl:when>
<xsl:otherwise>
<a><xsl:attribute name="href">#<xsl:value-of select="$klass"/></xsl:attribute><xsl:value-of select="$klass"/></a>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="arguments">
(<xsl:if test="count(*) != 0">
<xsl:call-template name="argument-iteration">
<xsl:with-param name="needs_comma" select="boolean(0)"/>
<xsl:with-param name="i" select="1"/>
<xsl:with-param name="args" select="*"/>
</xsl:call-template>
</xsl:if>)
</xsl:template>
<xsl:template name="argument-iteration">
<xsl:param name="needs_comma"/>
<xsl:param name="i"/>
<xsl:param name="args"/>
<xsl:if test="boolean($needs_comma)"><xsl:text>, </xsl:text></xsl:if>
<xsl:apply-templates select="$args[$i]"/>
<xsl:if test="$i != count($args)">
<xsl:call-template name="argument-iteration">
<xsl:with-param name="needs_comma" select="boolean(1)"/>
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="args" select="$args"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="argument">
<xsl:value-of select="@modifiers"/>
<xsl:call-template name="maybeLink">
<xsl:with-param name="klass">
<xsl:value-of select="@type"/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> </xsl:text><xsl:value-of select="@name"/>
</xsl:template>
</xsl:stylesheet>

226
doc/netdoc_pp.pl Executable file
View file

@ -0,0 +1,226 @@
#!/usr/bin/perl -w
#
# netdoc_pp.pl: .NET documentation preprocessor
#
# Author: Rachel Hestilow <hestilow@ximian.com>
#
# <c> 2002 Rachel Hestilow
die "Usage: netdoc_pp.pl <infile1> ...\n" if not $ARGV[0];
use XML::LibXML;
my $parser = new XML::LibXML;
my (%namespaces, $assembly);
use Class::Struct;
struct( Klass => {
assembly => '$',
ctors => '%',
methods => '%',
props => '%',
events => '%',
fields => '%',
data => '@',
});
foreach $file (@ARGV) {
my $doc = $parser->parse_file ($file);
my $node;
for ($node = $doc->documentElement->firstChild; $node; $node = $node->nextSibling ()) {
if ($node->nodeName eq "assembly") {
$assembly = parseAssembly ($node);
} elsif ($node->nodeName eq "members") {
%namespaces = parseMembers ($node, $assembly);
}
}
}
generate ($assembly, %namespaces);
sub parseMembers {
my ($members, $assembly) = @_;
my %namespaces = ();
for ($member = $members->firstChild; $member; $member = $member->nextSibling ()) {
next if $member->nodeName ne "member";
my @attrs = $member->attributes;
my $name = $attrs[0]->value;
die "Invalid member $name\n" if not ($name =~ /^([TMPEF]):([\w\.]+)\.([\w\#]+)(\((.*)\))?(\~([\w\.]+))?$/);
my ($type, $ns, $mname, $args, $op) = ($1, $2, $3, $5, $7);
my ($klasses, $klass);
my @data = ('', '', '');
$mname .= " -> $op" if $op;
if ($type eq 'T') {
$klass = Klass->new (assembly => $assembly);
if (not $namespaces{$ns}) {
$klasses = {};
$namespaces{$ns} = $klasses;
} else {
$klasses = $namespaces{$ns};
}
${$klasses}{$mname} = $klass;
} else {
my $klass_name = $ns;
if ($ns =~ /(.+)\.(.+)/) {
$ns = $1;
$klass_name = $2;
}
if (not $namespaces{$ns}) {
$klasses = {};
$namespaces{$ns} = $klasses;
} else {
$klasses = $namespaces{$ns};
}
$klass = ${$klasses}{$klass_name};
if (not $klass) {
$klass = Klass->new (assembly => $assembly);
${$klasses}{$klass_name} = $klass;
}
}
my $subnode;
for ($subnode = $member->firstChild; $subnode; $subnode= $subnode->nextSibling ()) {
my $ind;
if ($subnode->nodeName eq "summary") {
$ind = 1;
} elsif ($subnode->nodeName eq "remarks") {
$ind = 2;
} else {
next;
}
if ($subnode->textContent) {
$data[$ind] = $subnode->textContent;
$data[$ind] =~ s/^([\n\s])+//;
$data[$ind] =~ s/([\n\s])+$//;
}
}
if ($type eq "T") {
my $d;
foreach $d (@data) {
$d = "" if not $d;
push @{$klass->data}, $d;
}
} elsif ($type eq "M") {
if ($mname eq "#ctor") {
$args = "" if not $args;
${$klass->ctors}{$args} = \@data;
} else {
$args = "" if not $args;
$data[0] = $args;
${$klass->methods}{$mname} = \@data;
}
} elsif ($type eq "P") {
${$klass->props}{$mname} = \@data;
} elsif ($type eq "E") {
${$klass->events}{$mname} = \@data;
} elsif ($type eq "F") {
${$klass->fields}{$mname} = \@data;
}
}
return %namespaces;
}
sub parseAssembly
{
my ($parent) = @_;
for ($node = $parent->firstChild; $node; $node = $node->nextSibling ()) {
next if $node->nodeName ne 'name';
return $node->textContent;
}
}
sub addComments {
my ($doc, $node, @data) = @_;
if (not ($data[1] =~ /^\s*$/)) {
$elem = $doc->createElement ("summary");
$node->appendChild ($elem);
$elem->appendChild (XML::LibXML::Text->new ($data[1]));
}
$elem = $doc->createElement ("remarks");
$node->appendChild ($elem);
$elem->appendChild (XML::LibXML::Text->new ($data[2]));
}
sub generate {
my ($asm, %namespaces) = @_;
my $doc = XML::LibXML::Document->new ();
my $root = $doc->createElement ('doc');
$doc->setDocumentElement ($root);
print STDERR "asm $asm\n";
$root->setAttribute ('assembly', $asm);
my ($ns, $ns_elem);
foreach $ns (sort keys %namespaces) {
$ns_elem = $doc->createElement ('namespace');
$ns_elem->setAttribute ('name', $ns);
$root->appendChild ($ns_elem);
my ($klass_name, $klass, $klass_elem, $klasses);
$klasses = $namespaces{$ns};
foreach $klass_name (sort keys %$klasses)
{
$klass = ${$klasses}{$klass_name};
$klass_elem = $doc->createElement ('class');
$klass_elem->setAttribute ('name', $klass_name);
$klass_elem->setAttribute ('assembly', $klass->assembly);
my ($elem, $ctor, $prop, $method, $event);
if ($klass->data and @{$klass->data}) {
addComments ($doc, $klass_elem, @{$klass->data});
}
foreach $ctor (sort keys %{$klass->ctors}) {
$elem = $doc->createElement ('constructor');
$elem->setAttribute ('name', $klass_name);
$elem->setAttribute ('args', $ctor);
my @data = @{${$klass->ctors}{$ctor}};
addComments ($doc, $elem, @data);
$klass_elem->appendChild ($elem);
}
foreach $method (sort keys %{$klass->methods}) {
$elem = $doc->createElement ('method');
$method =~ s/\#/\./g;
$elem->setAttribute ('name', $method);
my @data = @{${$klass->methods}{$method}};
$elem->setAttribute ('args', $data[0]);
addComments ($doc, $elem, @data);
$klass_elem->appendChild ($elem);
}
foreach $prop (sort keys %{$klass->props}) {
$elem = $doc->createElement ('property');
$elem->setAttribute ('name', $prop);
my @data = @{${$klass->props}{$prop}};
addComments ($doc, $elem, @data);
$klass_elem->appendChild ($elem);
}
foreach $event (sort keys %{$klass->events}) {
$elem = $doc->createElement ('event');
$elem->setAttribute ('name', $event);
my @data = @{${$klass->events}{$event}};
addComments ($doc, $elem, @data);
$klass_elem->appendChild ($elem);
}
foreach $field (sort keys %{$klass->fields}) {
$elem = $doc->createElement ('field');
$elem->setAttribute ('name', $field);
my @data = @{${$klass->fields}{$field}};
addComments ($doc, $elem, @data);
$klass_elem->appendChild ($elem);
}
$ns_elem->appendChild ($klass_elem);
}
}
print $doc->toString();
}

806
doc/pango-sharp-docs.xml Normal file
View file

@ -0,0 +1,806 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>pango-sharp</name>
</assembly>
<members>
<member name="T:Pango.FontsetSimple">
<summary> FontsetSimple Class</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Fontset">
<summary> Fontset Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.Fontset.GetFont(System.UInt32)">
<summary> GetFont Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Fontset.Metrics">
<summary> Metrics Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.FontsetSimple.Size">
<summary> Size Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.FontsetSimple.Append(Pango.Font)">
<summary> Append Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.XFontCache">
<summary> XFontCache Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Layout">
<summary> Layout Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.Layout.GetLogAttrs(Pango.LogAttr,System.Int32)">
<summary> GetLogAttrs Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.IndexToPos(System.Int32,Pango.Rectangle)">
<summary> IndexToPos Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.Copy">
<summary> Copy Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.SetMarkup(System.String,System.Int32)">
<summary> SetMarkup Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.XyToIndex(System.Int32,System.Int32,System.Int32,System.Int32)">
<summary> XyToIndex Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetExtents(Pango.Rectangle,Pango.Rectangle)">
<summary> GetExtents Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.SetText(System.String,System.Int32)">
<summary> SetText Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.SetMarkupWithAccel(System.String,System.Int32,System.String,System.String)">
<summary> SetMarkupWithAccel Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetSize(System.Int32,System.Int32)">
<summary> GetSize Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.MoveCursorVisually(System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
<summary> MoveCursorVisually Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetLine(System.Int32)">
<summary> GetLine Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.ContextChanged">
<summary> ContextChanged Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetPixelSize(System.Int32,System.Int32)">
<summary> GetPixelSize Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetCursorPos(System.Int32,Pango.Rectangle,Pango.Rectangle)">
<summary> GetCursorPos Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Layout.GetPixelExtents(Pango.Rectangle,Pango.Rectangle)">
<summary> GetPixelExtents Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Tabs">
<summary> Tabs Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.SingleParagraphMode">
<summary> SingleParagraphMode Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Indent">
<summary> Indent Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Wrap">
<summary> Wrap Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Text">
<summary> Text Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Alignment">
<summary> Alignment Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.LineCount">
<summary> LineCount Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Iter">
<summary> Iter Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Lines">
<summary> Lines Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Width">
<summary> Width Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Attributes">
<summary> Attributes Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Context">
<summary> Context Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Justify">
<summary> Justify Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.Spacing">
<summary> Spacing Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Layout.FontDescription">
<summary> FontDescription Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.FontFamily">
<summary> FontFamily Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.FontFamily.ListFaces(Pango.FontFace,System.Int32)">
<summary> ListFaces Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.FontFamily.Name">
<summary> Name Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.OTTableType">
<summary> OTTableType enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.OTTableType.Gsub">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.OTTableType.Gpos">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.FontMap">
<summary> FontMap Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.FontMap.ListFamilies(Pango.FontFamily,System.Int32)">
<summary> ListFamilies Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.FontMap.LoadFont(Pango.Context,Pango.FontDescription)">
<summary> LoadFont Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.Win32FontCache">
<summary> Win32FontCache Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.FontMask">
<summary> FontMask enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Family">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Style">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Variant">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Weight">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Stretch">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.FontMask.Size">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Variant">
<summary> Variant enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Variant.Normal">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Variant.SmallCaps">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Style">
<summary> Style enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Style.Normal">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Style.Oblique">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Style.Italic">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.IndicScript">
<summary> IndicScript Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.LogAttr">
<summary> LogAttr Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Item">
<summary> Item Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrFontDesc">
<summary> AttrFontDesc Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.GlyphGeometry">
<summary> GlyphGeometry Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.TabAlign">
<summary> TabAlign enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.TabAlign.Left">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Weight">
<summary> Weight enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Ultralight">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Light">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Normal">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Bold">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Ultrabold">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Weight.Heavy">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.GlyphString">
<summary> GlyphString Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.GlyphInfo">
<summary> GlyphInfo Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.GlyphVisAttr">
<summary> GlyphVisAttr Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.IntSet">
<summary> IntSet Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.LayoutRun">
<summary> LayoutRun Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.LayoutIter">
<summary> LayoutIter Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Underline">
<summary> Underline enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Underline.None">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Underline.Single">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Underline.Double">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Underline.Low">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.LayoutLine">
<summary> LayoutLine Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.MapEntry">
<summary> MapEntry Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.IncludedModule">
<summary> IncludedModule Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Map">
<summary> Map Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.TabArray">
<summary> TabArray Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Rectangle">
<summary> Rectangle Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Stretch">
<summary> Stretch enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.UltraCondensed">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.ExtraCondensed">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.Condensed">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.SemiCondensed">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.Normal">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.SemiExpanded">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.Expanded">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.ExtraExpanded">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Stretch.UltraExpanded">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.WrapMode">
<summary> WrapMode enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.WrapMode.Word">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.WrapMode.Char">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Alignment">
<summary> Alignment enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Alignment.Left">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Alignment.Center">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Alignment.Right">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Analysis">
<summary> Analysis Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrClass">
<summary> AttrClass Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrColor">
<summary> AttrColor Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrFloat">
<summary> AttrFloat Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrIterator">
<summary> AttrIterator Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrInt">
<summary> AttrInt Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrLanguage">
<summary> AttrLanguage Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.CoverageLevel">
<summary> CoverageLevel enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.CoverageLevel.None">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.CoverageLevel.Fallback">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.CoverageLevel.Approximate">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.CoverageLevel.Exact">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrList">
<summary> AttrList Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrShape">
<summary> AttrShape Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrString">
<summary> AttrString Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.AttrType">
<summary> AttrType enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Invalid">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Language">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Family">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Style">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Weight">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Variant">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Stretch">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Size">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.FontDesc">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Foreground">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Background">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Underline">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Strikethrough">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Rise">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Shape">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.AttrType.Scale">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Attribute">
<summary> Attribute Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Color">
<summary> Color Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Context">
<summary> Context Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.Context.ListFamilies(Pango.FontFamily,System.Int32)">
<summary> ListFamilies Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Context.LoadFont(Pango.FontDescription)">
<summary> LoadFont Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Context.BaseDir">
<summary> BaseDir Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Context.FontDescription">
<summary> FontDescription Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.Context.FontMap">
<summary> FontMap Property </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.Coverage">
<summary> Coverage Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.EngineRange">
<summary> EngineRange Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Direction">
<summary> Direction enumeration </summary>
<remarks>
</remarks>
</member>
<member name="F:Pango.Direction.Ltr">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Direction.Rtl">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Direction.TtbLtr">
<summary />
<remarks>
</remarks>
</member>
<member name="F:Pango.Direction.TtbRtl">
<summary />
<remarks>
</remarks>
</member>
<member name="T:Pango.Engine">
<summary> Engine Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.EngineInfo">
<summary> EngineInfo Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.EngineLang">
<summary> EngineLang Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.EngineShape">
<summary> EngineShape Struct </summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.FontDescription">
<summary> FontDescription Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.Font">
<summary> Font Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.Font.Describe">
<summary> Describe Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="M:Pango.Font.GetGlyphExtents(System.UInt32,Pango.Rectangle,Pango.Rectangle)">
<summary> GetGlyphExtents Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="T:Pango.FontMetrics">
<summary> FontMetrics Boxed Struct</summary>
<remarks>
</remarks>
</member>
<member name="T:Pango.FontFace">
<summary> FontFace Class</summary>
<remarks>
</remarks>
</member>
<member name="M:Pango.FontFace.Describe">
<summary> Describe Method </summary>
<remarks> To be completed </remarks>
</member>
<member name="P:Pango.FontFace.FaceName">
<summary> FaceName Property </summary>
<remarks> To be completed </remarks>
</member>
</members>
</doc>