no more submodule

This commit is contained in:
2024-09-15 22:40:48 +02:00
parent df3b8a3135
commit 0234b33671
5804 changed files with 943618 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
//
// AssemblyResolver.cs
//
// Author:
// Jb Evain (jbevain@novell.com)
//
// Copyright (C) 2007 Novell, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.Collections;
using System.IO;
using Mono.Cecil;
namespace GuiCompare {
public class AssemblyResolver : DefaultAssemblyResolver {
public AssemblyDefinition ResolveFile (string file)
{
return ProcessFile (file);
}
AssemblyDefinition ProcessFile (string file)
{
AddSearchDirectory (Path.GetDirectoryName (file));
var assembly = AssemblyDefinition.ReadAssembly (file, new ReaderParameters { AssemblyResolver = this });
RegisterAssembly (assembly);
return assembly;
}
}
}

View File

@@ -0,0 +1,28 @@
The audit/ folder contains various tools that are used to analyze API changes.
This analysis is done by inspecting the assembly binaries, so you need to
compile them first.
The usual workflow is as follows:
1. Generate the API info for the current version of the assemblies
./get-apiinfo.pl .. data/curr
This will find all *.dll files in Gtk#, produce one <assembly-name>.apiinfo
file per DLL, and save them in the data/curr folder
2. Analyze differences between a baseline and the current API info
./get-apidiff.pl base data/curr data/diff
This will generate one <assembly-name>.apidiff file for each *.apiinfo file in
the base folder, and save it in the data/diff folder.
3. Generate an HTML report for the API differences
mono gen-apidiff-html.exe data/diff html/diff.html
This will use the data in data/diff to generate a single HTML file and save it
as html/diff.html. You can then open this file in a browser to review the API
changes.

View File

@@ -0,0 +1,115 @@
//
// Util.cs
//
// Author:
// Jb Evain (jbevain@novell.com)
//
// Copyright (C) 2008 Novell, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.Collections.Generic;
using System.Text;
using Mono.Cecil;
using GuiCompare;
namespace Mono.AssemblyCompare {
static class TypeHelper {
public static AssemblyResolver Resolver = new AssemblyResolver ();
internal static bool IsPublic (TypeReference typeref)
{
if (typeref == null)
throw new ArgumentNullException ("typeref");
TypeDefinition td = typeref.Resolve ();
if (td == null)
return false;
return td.IsPublic;
}
internal static bool IsDelegate (TypeReference typeref)
{
return IsDerivedFrom (typeref, "System.MulticastDelegate");
}
internal static bool IsDerivedFrom (TypeReference type, string derivedFrom)
{
bool first = true;
foreach (var def in WalkHierarchy (type)) {
if (first) {
first = false;
continue;
}
if (def.FullName == derivedFrom)
return true;
}
return false;
}
internal static IEnumerable<TypeDefinition> WalkHierarchy (TypeReference type)
{
for (var def = type.Resolve (); def != null; def = GetBaseType (def))
yield return def;
}
internal static IEnumerable<TypeReference> GetInterfaces (TypeReference type)
{
var ifaces = new Dictionary<string, TypeReference> ();
foreach (var def in WalkHierarchy (type))
foreach (TypeReference iface in def.Interfaces)
ifaces [iface.FullName] = iface;
return ifaces.Values;
}
internal static TypeDefinition GetBaseType (TypeDefinition child)
{
if (child.BaseType == null)
return null;
return child.BaseType.Resolve ();
}
internal static bool IsPublic (CustomAttribute att)
{
return IsPublic (att.AttributeType);
}
internal static string GetFullName (CustomAttribute att)
{
return att.AttributeType.FullName;
}
internal static TypeDefinition GetTypeDefinition (CustomAttribute att)
{
return att.AttributeType.Resolve ();
}
}
}

View File

@@ -0,0 +1,294 @@
//
// WellFormedXmlWriter.cs
//
// Author:
// Atsushi Enomoto <atsushi@ximian.com>
//
// Copyright (C) 2006 Novell, Inc. http://www.novell.com
//
using System;
using System.Globalization;
using System.Collections;
using System.Xml;
namespace Mono.AssemblyCompare {
public class WellFormedXmlWriter : DefaultXmlWriter
{
public static bool IsValid (int ch)
{
return !IsInvalid (ch);
}
public static bool IsInvalid (int ch)
{
switch (ch) {
case 9:
case 10:
case 13:
return false;
}
if (ch < 32)
return true;
if (ch < 0xD800)
return false;
if (ch < 0xE000)
return true;
if (ch < 0xFFFE)
return false;
if (ch < 0x10000)
return true;
if (ch < 0x110000)
return false;
else
return true;
}
public static int IndexOfInvalid (string s, bool allowSurrogate)
{
for (int i = 0; i < s.Length; i++)
if (IsInvalid (s [i])) {
if (!allowSurrogate ||
i + 1 == s.Length ||
s [i] < '\uD800' ||
s [i] >= '\uDC00' ||
s [i + 1] < '\uDC00' ||
s [i + 1] >= '\uE000')
return i;
i++;
}
return -1;
}
public static int IndexOfInvalid (char [] s, int start, int length, bool allowSurrogate)
{
int end = start + length;
if (s.Length < end)
throw new ArgumentOutOfRangeException ("length");
for (int i = start; i < end; i++)
if (IsInvalid (s [i])) {
if (!allowSurrogate ||
i + 1 == end ||
s [i] < '\uD800' ||
s [i] >= '\uDC00' ||
s [i + 1] < '\uDC00' ||
s [i + 1] >= '\uE000')
return i;
i++;
}
return -1;
}
public WellFormedXmlWriter (XmlWriter writer) : base (writer)
{
}
public override void WriteString (string text)
{
int i = IndexOfInvalid (text, true);
if (i >= 0) {
char [] arr = text.ToCharArray ();
Writer.WriteChars (arr, 0, i);
WriteChars (arr, i, arr.Length - i);
} else {
// no invalid character.
Writer.WriteString (text);
}
}
public override void WriteChars (char [] text, int idx, int length)
{
int start = idx;
int end = idx + length;
while ((idx = IndexOfInvalid (text, start, length, true)) >= 0) {
if (start < idx)
Writer.WriteChars (text, start, idx - start);
Writer.WriteString (String.Format (CultureInfo.InvariantCulture,
text [idx] < 0x80 ? "\\x{0:X02}" : "\\u{0:X04}",
(int) text [idx]));
length -= idx - start + 1;
start = idx + 1;
}
if (start < end)
Writer.WriteChars (text, start, end - start);
}
}
public class DefaultXmlWriter : XmlWriter
{
XmlWriter writer;
public DefaultXmlWriter (XmlWriter writer)
{
this.writer = writer;
}
protected XmlWriter Writer {
get { return writer; }
}
public override void Close ()
{
writer.Close ();
}
public override void Flush ()
{
writer.Flush ();
}
public override string LookupPrefix (string ns)
{
return writer.LookupPrefix (ns);
}
public override void WriteBase64 (byte [] buffer, int index, int count)
{
writer.WriteBase64 (buffer, index, count);
}
public override void WriteBinHex (byte [] buffer, int index, int count)
{
writer.WriteBinHex (buffer, index, count);
}
public override void WriteCData (string text)
{
writer.WriteCData (text);
}
public override void WriteCharEntity (char ch)
{
writer.WriteCharEntity (ch);
}
public override void WriteChars (char [] buffer, int index, int count)
{
writer.WriteChars (buffer, index, count);
}
public override void WriteComment (string text)
{
writer.WriteComment (text);
}
public override void WriteDocType (string name, string pubid, string sysid, string subset)
{
writer.WriteDocType (name, pubid, sysid, subset);
}
public override void WriteEndAttribute ()
{
writer.WriteEndAttribute ();
}
public override void WriteEndDocument ()
{
writer.WriteEndDocument ();
}
public override void WriteEndElement ()
{
writer.WriteEndElement ();
}
public override void WriteEntityRef (string name)
{
writer.WriteEntityRef (name);
}
public override void WriteFullEndElement ()
{
writer.WriteFullEndElement ();
}
public override void WriteName (string name)
{
writer.WriteName (name);
}
public override void WriteNmToken (string name)
{
writer.WriteNmToken (name);
}
public override void WriteNode (XmlReader reader, bool defattr)
{
writer.WriteNode (reader, defattr);
}
public override void WriteProcessingInstruction (string name, string text)
{
writer.WriteProcessingInstruction (name, text);
}
public override void WriteQualifiedName (string localName, string ns)
{
writer.WriteQualifiedName (localName, ns);
}
public override void WriteRaw (string data)
{
writer.WriteRaw (data);
}
public override void WriteRaw (char [] buffer, int index, int count)
{
writer.WriteRaw (buffer, index, count);
}
public override void WriteStartAttribute (string prefix, string localName, string ns)
{
writer.WriteStartAttribute (prefix, localName, ns);
}
public override void WriteStartDocument (bool standalone)
{
writer.WriteStartDocument (standalone);
}
public override void WriteStartDocument ()
{
writer.WriteStartDocument ();
}
public override void WriteStartElement (string prefix, string localName, string ns)
{
writer.WriteStartElement (prefix, localName, ns);
}
public override void WriteString (string text)
{
writer.WriteString (text);
}
public override void WriteSurrogateCharEntity (char lowChar, char highChar)
{
writer.WriteSurrogateCharEntity (lowChar, highChar);
}
public override void WriteWhitespace (string ws)
{
writer.WriteWhitespace (ws);
}
public override WriteState WriteState {
get {
return writer.WriteState;
}
}
public override string XmlLang {
get {
return writer.XmlLang;
}
}
public override XmlSpace XmlSpace {
get {
return writer.XmlSpace;
}
}
}
}

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>9.0.21022</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D8A1AAF8-EA10-4D1D-8A8A-D38C56C0A753}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>audit</RootNamespace>
<AssemblyName>audit</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Compile Include="extract-missing.cs" />
<Compile Include="mono-api-diff.cs" />
<Compile Include="mono-api-info.cs" />
<Compile Include="AssemblyResolver.cs" />
<Compile Include="Util.cs" />
<Compile Include="WellFormedXmlWriter.cs" />
<Compile Include="gen-apidiff-html.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Mono.Cecil, Version=0.9.4.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756">
<Private>False</Private>
</Reference>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,994 @@
<?xml version="1.0"?>
<assemblies>
<assembly name="glade-sharp" version="2.12.0.0">
<attributes>
<attribute name="GLib.IgnoreClassInitializersAttribute" />
<attribute name="System.Reflection.AssemblyKeyFileAttribute">
<properties>
<property name="KeyFile" value="gtk-sharp.snk" />
</properties>
</attribute>
<attribute name="System.Reflection.AssemblyDelaySignAttribute">
<properties>
<property name="DelaySign" value="False" />
</properties>
</attribute>
</attributes>
<namespaces>
<namespace name="Glade">
<classes>
<class name="AccelInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="Key" attrib="6" fieldtype="System.UInt32" />
<field name="Modifiers" attrib="6" fieldtype="Gdk.ModifierType" />
<field name="Signal" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.AccelInfo" />
</fields>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.AccelInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="ApplyCustomPropFunc" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(Glade.XML, Gtk.Widget, System.String, System.String, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="widget" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="propname" position="2" attrib="0" type="System.String" />
<parameter name="value" position="3" attrib="0" type="System.String" />
<parameter name="callback" position="4" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="5" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(Glade.XML, Gtk.Widget, System.String, System.String)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="widget" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="propname" position="2" attrib="0" type="System.String" />
<parameter name="value" position="3" attrib="0" type="System.String" />
</parameters>
</method>
</methods>
</class>
<class name="AtkActionInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="ActionName" attrib="6" fieldtype="System.String" />
<field name="Description" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.AtkActionInfo" />
</fields>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.AtkActionInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="AtkRelationInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="Target" attrib="6" fieldtype="System.String" />
<field name="Type" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.AtkRelationInfo" />
</fields>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.AtkRelationInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="BuildChildrenFunc" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(Glade.XML, Gtk.Widget, Glade.WidgetInfo, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="parent" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
<parameter name="callback" position="3" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="4" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(Glade.XML, Gtk.Widget, Glade.WidgetInfo)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="parent" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
</methods>
</class>
<class name="ChildInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="InternalChild" attrib="6" fieldtype="System.String" />
<field name="NProperties" attrib="6" fieldtype="System.UInt32" />
<field name="Zero" attrib="22" fieldtype="Glade.ChildInfo" />
</fields>
<properties>
<property name="child" attrib="0" ptype="Glade.WidgetInfo" params="">
<methods>
<method name="get_child()" attrib="2182" returntype="Glade.WidgetInfo">
<parameters />
</method>
</methods>
</property>
<property name="properties" attrib="0" ptype="Glade.Property" params="">
<methods>
<method name="get_properties()" attrib="2182" returntype="Glade.Property">
<parameters />
</method>
</methods>
</property>
</properties>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.ChildInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="FindInternalChildFunc" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(Glade.XML, Gtk.Widget, System.String, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="parent" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="childname" position="2" attrib="0" type="System.String" />
<parameter name="callback" position="3" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="4" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(Glade.XML, Gtk.Widget, System.String)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="parent" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="childname" position="2" attrib="0" type="System.String" />
</parameters>
</method>
</methods>
</class>
<class name="Global" type="class" base="System.Object" charset="Ansi" layout="Auto">
<constructors>
<constructor name=".ctor()" attrib="2182">
<parameters />
</constructor>
</constructors>
<methods>
<method name="EnumFromString(GLib.GType, System.String)" attrib="150" static="true" returntype="System.Int32">
<parameters>
<parameter name="type" position="0" attrib="0" type="GLib.GType" />
<parameter name="str1ng" position="1" attrib="0" type="System.String" />
</parameters>
</method>
<method name="FlagsFromString(GLib.GType, System.String)" attrib="150" static="true" returntype="System.UInt32">
<parameters>
<parameter name="type" position="0" attrib="0" type="GLib.GType" />
<parameter name="str1ng" position="1" attrib="0" type="System.String" />
</parameters>
</method>
<method name="GetWidgetName(Gtk.Widget)" attrib="150" static="true" returntype="System.String">
<parameters>
<parameter name="widget" position="0" attrib="0" type="Gtk.Widget" />
</parameters>
</method>
<method name="GetWidgetTree(Gtk.Widget)" attrib="150" static="true" returntype="Glade.XML">
<parameters>
<parameter name="widget" position="0" attrib="0" type="Gtk.Widget" />
</parameters>
</method>
<method name="ModuleCheckVersion(System.Int32)" attrib="150" static="true" returntype="System.String">
<parameters>
<parameter name="version" position="0" attrib="0" type="System.Int32" />
</parameters>
</method>
<method name="RegisterCustomProp(GLib.GType, System.String, Glade.ApplyCustomPropFunc)" attrib="150" static="true" returntype="System.Void">
<parameters>
<parameter name="type" position="0" attrib="0" type="GLib.GType" />
<parameter name="prop_name" position="1" attrib="0" type="System.String" />
<parameter name="apply_prop" position="2" attrib="0" type="Glade.ApplyCustomPropFunc" />
</parameters>
</method>
<method name="RegisterWidget(GLib.GType, Glade.NewFunc, Glade.BuildChildrenFunc, Glade.FindInternalChildFunc)" attrib="150" static="true" returntype="System.Void">
<parameters>
<parameter name="type" position="0" attrib="0" type="GLib.GType" />
<parameter name="new_func" position="1" attrib="0" type="Glade.NewFunc" />
<parameter name="build_children" position="2" attrib="0" type="Glade.BuildChildrenFunc" />
<parameter name="find_internal_child" position="3" attrib="0" type="Glade.FindInternalChildFunc" />
</parameters>
</method>
<method name="SetCustomHandler(Glade.XMLCustomWidgetHandler)" attrib="150" static="true" returntype="System.Void">
<attributes>
<attribute name="System.ObsoleteAttribute">
<properties>
<property name="Message" value="Replaced by Glade.XML.CustomHandler static property." />
<property name="IsError" value="False" />
</properties>
</attribute>
</attributes>
<parameters>
<parameter name="handler" position="0" attrib="0" type="Glade.XMLCustomWidgetHandler" />
</parameters>
</method>
</methods>
</class>
<class name="HandlerNotFoundException" type="class" base="System.SystemException" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.String, System.String, System.String, System.Reflection.EventInfo, System.Type)" attrib="2182">
<parameters>
<parameter name="message" position="0" attrib="0" type="System.String" />
<parameter name="handler_name" position="1" attrib="0" type="System.String" />
<parameter name="signal_name" position="2" attrib="0" type="System.String" />
<parameter name="evnt" position="3" attrib="0" type="System.Reflection.EventInfo" />
<parameter name="delegate_type" position="4" attrib="0" type="System.Type" />
</parameters>
</constructor>
<constructor name=".ctor(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)" attrib="2180">
<parameters>
<parameter name="info" position="0" attrib="0" type="System.Runtime.Serialization.SerializationInfo" />
<parameter name="context" position="1" attrib="0" type="System.Runtime.Serialization.StreamingContext" />
</parameters>
</constructor>
<constructor name=".ctor(System.String, System.String, System.Reflection.EventInfo, System.Type)" attrib="2182">
<parameters>
<parameter name="handler_name" position="0" attrib="0" type="System.String" />
<parameter name="signal_name" position="1" attrib="0" type="System.String" />
<parameter name="evnt" position="2" attrib="0" type="System.Reflection.EventInfo" />
<parameter name="delegate_type" position="3" attrib="0" type="System.Type" />
</parameters>
</constructor>
<constructor name=".ctor(System.String, System.String, System.Reflection.EventInfo, System.Type, System.Exception)" attrib="2182">
<parameters>
<parameter name="handler_name" position="0" attrib="0" type="System.String" />
<parameter name="signal_name" position="1" attrib="0" type="System.String" />
<parameter name="evnt" position="2" attrib="0" type="System.Reflection.EventInfo" />
<parameter name="delegate_type" position="3" attrib="0" type="System.Type" />
<parameter name="inner" position="4" attrib="0" type="System.Exception" />
</parameters>
</constructor>
</constructors>
<properties>
<property name="DelegateType" attrib="0" ptype="System.Type" params="">
<methods>
<method name="get_DelegateType()" attrib="2182" returntype="System.Type">
<parameters />
</method>
</methods>
</property>
<property name="Event" attrib="0" ptype="System.Reflection.EventInfo" params="">
<methods>
<method name="get_Event()" attrib="2182" returntype="System.Reflection.EventInfo">
<parameters />
</method>
</methods>
</property>
<property name="HandlerName" attrib="0" ptype="System.String" params="">
<methods>
<method name="get_HandlerName()" attrib="2182" returntype="System.String">
<parameters />
</method>
</methods>
</property>
<property name="SignalName" attrib="0" ptype="System.String" params="">
<methods>
<method name="get_SignalName()" attrib="2182" returntype="System.String">
<parameters />
</method>
</methods>
</property>
</properties>
<methods>
<method name="GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)" attrib="198" virtual="true" returntype="System.Void">
<parameters>
<parameter name="info" position="0" attrib="0" type="System.Runtime.Serialization.SerializationInfo" />
<parameter name="context" position="1" attrib="0" type="System.Runtime.Serialization.StreamingContext" />
</parameters>
</method>
</methods>
</class>
<class name="Interface" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="NRequires" attrib="6" fieldtype="System.UInt32" />
<field name="NToplevels" attrib="6" fieldtype="System.UInt32" />
<field name="Requires" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.Interface" />
</fields>
<properties>
<property name="toplevels" attrib="0" ptype="Glade.WidgetInfo" params="">
<attributes>
<attribute name="System.ObsoleteAttribute">
<properties>
<property name="Message" value="Replaced by Toplevels property" />
<property name="IsError" value="False" />
</properties>
</attribute>
</attributes>
<methods>
<method name="get_toplevels()" attrib="2182" returntype="Glade.WidgetInfo">
<parameters />
</method>
</methods>
</property>
<property name="Toplevels" attrib="0" ptype="Glade.WidgetInfo[]" params="">
<methods>
<method name="get_Toplevels()" attrib="2182" returntype="Glade.WidgetInfo[]">
<parameters />
</method>
</methods>
</property>
</properties>
<methods>
<method name="Destroy()" attrib="134" returntype="System.Void">
<parameters />
</method>
<method name="Dump(System.String)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="filename" position="0" attrib="0" type="System.String" />
</parameters>
</method>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.Interface">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="NewFunc" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(Glade.XML, GLib.GType, Glade.WidgetInfo, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="widget_type" position="1" attrib="0" type="GLib.GType" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
<parameter name="callback" position="3" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="4" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(Glade.XML, GLib.GType, Glade.WidgetInfo)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="widget_type" position="1" attrib="0" type="GLib.GType" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
</methods>
</class>
<class name="Parser" type="class" base="System.Object" charset="Ansi" layout="Auto">
<constructors>
<constructor name=".ctor()" attrib="2182">
<parameters />
</constructor>
</constructors>
<methods>
<method name="ParseBuffer(System.String, System.String)" attrib="150" static="true" returntype="Glade.Interface">
<parameters>
<parameter name="buffer" position="0" attrib="0" type="System.String" />
<parameter name="domain" position="1" attrib="0" type="System.String" />
</parameters>
</method>
<method name="ParseFile(System.String, System.String)" attrib="150" static="true" returntype="Glade.Interface">
<parameters>
<parameter name="file" position="0" attrib="0" type="System.String" />
<parameter name="domain" position="1" attrib="0" type="System.String" />
</parameters>
</method>
</methods>
</class>
<class name="Property" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="Name" attrib="6" fieldtype="System.String" />
<field name="Value" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.Property" />
</fields>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.Property">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="SignalInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="Handler" attrib="6" fieldtype="System.String" />
<field name="Name" attrib="6" fieldtype="System.String" />
<field name="Object" attrib="6" fieldtype="System.String" />
<field name="Zero" attrib="22" fieldtype="Glade.SignalInfo" />
</fields>
<properties>
<property name="After" attrib="0" ptype="System.Boolean" params="">
<methods>
<method name="get_After()" attrib="2182" returntype="System.Boolean">
<parameters />
</method>
<method name="set_After(System.Boolean)" attrib="2182" returntype="System.Void">
<parameters>
<parameter name="value" position="0" attrib="0" type="System.Boolean" />
</parameters>
</method>
</methods>
</property>
</properties>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.SignalInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="Standard" type="class" base="System.Object" charset="Ansi" layout="Auto">
<constructors>
<constructor name=".ctor()" attrib="2182">
<parameters />
</constructor>
</constructors>
<methods>
<method name="BuildChildren(Glade.XML, Gtk.Widget, Glade.WidgetInfo)" attrib="150" static="true" returntype="System.Void">
<parameters>
<parameter name="self" position="0" attrib="0" type="Glade.XML" />
<parameter name="parent" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
<method name="BuildWidget(Glade.XML, GLib.GType, Glade.WidgetInfo)" attrib="150" static="true" returntype="Gtk.Widget">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="widget_type" position="1" attrib="0" type="GLib.GType" />
<parameter name="info" position="2" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
</methods>
</class>
<class name="WidgetAttribute" type="class" base="System.Attribute" charset="Ansi" layout="Auto">
<attributes>
<attribute name="System.AttributeUsageAttribute">
<properties>
<property name="AllowMultiple" value="False" />
<property name="Inherited" value="True" />
<property name="ValidOn" value="Field" />
</properties>
</attribute>
</attributes>
<interfaces>
<interface name="System.Runtime.InteropServices._Attribute" />
</interfaces>
<constructors>
<constructor name=".ctor()" attrib="2182">
<parameters />
</constructor>
<constructor name=".ctor(System.String)" attrib="2182">
<parameters>
<parameter name="name" position="0" attrib="0" type="System.String" />
</parameters>
</constructor>
</constructors>
<properties>
<property name="Name" attrib="0" ptype="System.String" params="">
<methods>
<method name="get_Name()" attrib="2182" returntype="System.String">
<parameters />
</method>
</methods>
</property>
<property name="Specified" attrib="0" ptype="System.Boolean" params="">
<methods>
<method name="get_Specified()" attrib="2182" returntype="System.Boolean">
<parameters />
</method>
</methods>
</property>
</properties>
</class>
<class name="WidgetInfo" type="struct" base="System.ValueType" sealed="true" charset="Ansi" layout="Sequential">
<fields>
<field name="Classname" attrib="6" fieldtype="System.String" />
<field name="NAccels" attrib="6" fieldtype="System.UInt32" />
<field name="Name" attrib="6" fieldtype="System.String" />
<field name="NAtkActions" attrib="6" fieldtype="System.UInt32" />
<field name="NAtkProps" attrib="6" fieldtype="System.UInt32" />
<field name="NChildren" attrib="6" fieldtype="System.UInt32" />
<field name="NProperties" attrib="6" fieldtype="System.UInt32" />
<field name="NRelations" attrib="6" fieldtype="System.UInt32" />
<field name="NSignals" attrib="6" fieldtype="System.UInt32" />
<field name="Zero" attrib="22" fieldtype="Glade.WidgetInfo" />
</fields>
<properties>
<property name="accels" attrib="0" ptype="Glade.AccelInfo" params="">
<methods>
<method name="get_accels()" attrib="2182" returntype="Glade.AccelInfo">
<parameters />
</method>
</methods>
</property>
<property name="atk_actions" attrib="0" ptype="Glade.AtkActionInfo" params="">
<methods>
<method name="get_atk_actions()" attrib="2182" returntype="Glade.AtkActionInfo">
<parameters />
</method>
</methods>
</property>
<property name="atk_props" attrib="0" ptype="Glade.Property" params="">
<methods>
<method name="get_atk_props()" attrib="2182" returntype="Glade.Property">
<parameters />
</method>
</methods>
</property>
<property name="children" attrib="0" ptype="Glade.ChildInfo" params="">
<methods>
<method name="get_children()" attrib="2182" returntype="Glade.ChildInfo">
<parameters />
</method>
</methods>
</property>
<property name="parent" attrib="0" ptype="Glade.WidgetInfo" params="">
<methods>
<method name="get_parent()" attrib="2182" returntype="Glade.WidgetInfo">
<parameters />
</method>
</methods>
</property>
<property name="properties" attrib="0" ptype="Glade.Property" params="">
<methods>
<method name="get_properties()" attrib="2182" returntype="Glade.Property">
<parameters />
</method>
</methods>
</property>
<property name="relations" attrib="0" ptype="Glade.AtkRelationInfo" params="">
<methods>
<method name="get_relations()" attrib="2182" returntype="Glade.AtkRelationInfo">
<parameters />
</method>
</methods>
</property>
<property name="signals" attrib="0" ptype="Glade.SignalInfo" params="">
<methods>
<method name="get_signals()" attrib="2182" returntype="Glade.SignalInfo">
<parameters />
</method>
</methods>
</property>
</properties>
<methods>
<method name="New(System.IntPtr)" attrib="150" static="true" returntype="Glade.WidgetInfo">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</method>
</methods>
</class>
<class name="XML" type="class" base="GLib.Object" charset="Ansi" layout="Auto">
<attributes>
<attribute name="System.Reflection.DefaultMemberAttribute">
<properties>
<property name="MemberName" value="Item" />
</properties>
</attribute>
</attributes>
<interfaces>
<interface name="GLib.IWrapper" />
<interface name="System.IDisposable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.IO.Stream, System.String, System.String)" attrib="2182">
<parameters>
<parameter name="s" position="0" attrib="0" type="System.IO.Stream" />
<parameter name="root" position="1" attrib="0" type="System.String" />
<parameter name="domain" position="2" attrib="0" type="System.String" />
</parameters>
</constructor>
<constructor name=".ctor(System.String, System.String)" attrib="2182">
<parameters>
<parameter name="resource_name" position="0" attrib="0" type="System.String" />
<parameter name="root" position="1" attrib="0" type="System.String" />
</parameters>
</constructor>
<constructor name=".ctor(System.Reflection.Assembly, System.String, System.String, System.String)" attrib="2182">
<parameters>
<parameter name="assembly" position="0" attrib="0" type="System.Reflection.Assembly" />
<parameter name="resource_name" position="1" attrib="0" type="System.String" />
<parameter name="root" position="2" attrib="0" type="System.String" />
<parameter name="domain" position="3" attrib="0" type="System.String" />
</parameters>
</constructor>
<constructor name=".ctor(System.String, System.Int32, System.String, System.String)" attrib="2182">
<parameters>
<parameter name="buffer" position="0" attrib="0" type="System.String" />
<parameter name="size" position="1" attrib="0" type="System.Int32" />
<parameter name="root" position="2" attrib="0" type="System.String" />
<parameter name="domain" position="3" attrib="0" type="System.String" />
</parameters>
</constructor>
<constructor name=".ctor(GLib.GType)" attrib="2180">
<attributes>
<attribute name="System.ObsoleteAttribute">
<properties>
<property name="Message" null="true" />
<property name="IsError" value="False" />
</properties>
</attribute>
</attributes>
<parameters>
<parameter name="gtype" position="0" attrib="0" type="GLib.GType" />
</parameters>
</constructor>
<constructor name=".ctor(System.IntPtr)" attrib="2182">
<parameters>
<parameter name="raw" position="0" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
<constructor name=".ctor(System.String, System.String, System.String)" attrib="2182">
<parameters>
<parameter name="fname" position="0" attrib="0" type="System.String" />
<parameter name="root" position="1" attrib="0" type="System.String" />
<parameter name="domain" position="2" attrib="0" type="System.String" />
</parameters>
</constructor>
</constructors>
<properties>
<property name="CustomHandler" attrib="0" ptype="Glade.XMLCustomWidgetHandler" params="Glade.XMLCustomWidgetHandler">
<methods>
<method name="set_CustomHandler(Glade.XMLCustomWidgetHandler)" attrib="2198" static="true" returntype="System.Void">
<parameters>
<parameter name="value" position="0" attrib="0" type="Glade.XMLCustomWidgetHandler" />
</parameters>
</method>
</methods>
</property>
<property name="Filename" attrib="0" ptype="System.String" params="">
<methods>
<method name="get_Filename()" attrib="2182" returntype="System.String">
<parameters />
</method>
</methods>
</property>
<property name="GType" attrib="0" ptype="GLib.GType" params="">
<methods>
<method name="get_GType()" attrib="2198" static="true" returntype="GLib.GType">
<parameters />
</method>
</methods>
</property>
<property name="Item" attrib="0" ptype="Gtk.Widget" params="System.String">
<methods>
<method name="get_Item(System.String)" attrib="2182" returntype="Gtk.Widget">
<parameters>
<parameter name="name" position="0" attrib="0" type="System.String" />
</parameters>
</method>
</methods>
</property>
<property name="Toplevel" attrib="0" ptype="Gtk.Window" params="Gtk.Window">
<methods>
<method name="set_Toplevel(Gtk.Window)" attrib="2182" returntype="System.Void">
<parameters>
<parameter name="value" position="0" attrib="0" type="Gtk.Window" />
</parameters>
</method>
</methods>
</property>
</properties>
<methods>
<method name="Autoconnect(System.Type)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="handler_class" position="0" attrib="0" type="System.Type" />
</parameters>
</method>
<method name="Autoconnect(System.Object)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="handler" position="0" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="BindFields(System.Type)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="type" position="0" attrib="0" type="System.Type" />
</parameters>
</method>
<method name="BindFields(System.Object)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="target" position="0" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="BuildWidget(Glade.WidgetInfo)" attrib="134" returntype="Gtk.Widget">
<parameters>
<parameter name="info" position="0" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
<method name="Construct(System.String, System.String, System.String)" attrib="134" returntype="System.Boolean">
<parameters>
<parameter name="fname" position="0" attrib="0" type="System.String" />
<parameter name="root" position="1" attrib="0" type="System.String" />
<parameter name="domain" position="2" attrib="0" type="System.String" />
</parameters>
</method>
<method name="ConstructFromBuffer(System.String, System.Int32, System.String, System.String)" attrib="134" returntype="System.Boolean">
<parameters>
<parameter name="buffer" position="0" attrib="0" type="System.String" />
<parameter name="size" position="1" attrib="0" type="System.Int32" />
<parameter name="root" position="2" attrib="0" type="System.String" />
<parameter name="domain" position="3" attrib="0" type="System.String" />
</parameters>
</method>
<method name="EnsureAccel()" attrib="134" returntype="Gtk.AccelGroup">
<parameters />
</method>
<method name="FromAssembly(System.String, System.String, System.String)" attrib="150" static="true" returntype="Glade.XML">
<parameters>
<parameter name="resource_name" position="0" attrib="0" type="System.String" />
<parameter name="root" position="1" attrib="0" type="System.String" />
<parameter name="domain" position="2" attrib="0" type="System.String" />
</parameters>
</method>
<method name="FromAssembly(System.Reflection.Assembly, System.String, System.String, System.String)" attrib="150" static="true" returntype="Glade.XML">
<parameters>
<parameter name="assembly" position="0" attrib="0" type="System.Reflection.Assembly" />
<parameter name="resource_name" position="1" attrib="0" type="System.String" />
<parameter name="root" position="2" attrib="0" type="System.String" />
<parameter name="domain" position="3" attrib="0" type="System.String" />
</parameters>
</method>
<method name="FromStream(System.IO.Stream, System.String, System.String)" attrib="150" static="true" returntype="Glade.XML">
<parameters>
<parameter name="stream" position="0" attrib="0" type="System.IO.Stream" />
<parameter name="root" position="1" attrib="0" type="System.String" />
<parameter name="domain" position="2" attrib="0" type="System.String" />
</parameters>
</method>
<method name="GetWidget(System.String)" attrib="134" returntype="Gtk.Widget">
<parameters>
<parameter name="name" position="0" attrib="0" type="System.String" />
</parameters>
</method>
<method name="GetWidgetName(Gtk.Widget)" attrib="150" static="true" returntype="System.String">
<parameters>
<parameter name="w" position="0" attrib="0" type="Gtk.Widget" />
</parameters>
</method>
<method name="GetWidgetPrefix(System.String)" attrib="134" returntype="Gtk.Widget[]">
<parameters>
<parameter name="name" position="0" attrib="0" type="System.String" />
</parameters>
</method>
<method name="GetWidgetTree(Gtk.Widget)" attrib="150" static="true" returntype="Glade.XML">
<parameters>
<parameter name="w" position="0" attrib="0" type="Gtk.Widget" />
</parameters>
</method>
<method name="HandleInternalChild(Gtk.Widget, Glade.ChildInfo)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="parent" position="0" attrib="0" type="Gtk.Widget" />
<parameter name="child_info" position="1" attrib="0" type="Glade.ChildInfo" />
</parameters>
</method>
<method name="HandleWidgetProp(Gtk.Widget, System.String, System.String)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="widget" position="0" attrib="0" type="Gtk.Widget" />
<parameter name="prop_name" position="1" attrib="0" type="System.String" />
<parameter name="value_name" position="2" attrib="0" type="System.String" />
</parameters>
</method>
<method name="RelativeFile(System.String)" attrib="134" returntype="System.String">
<parameters>
<parameter name="filename" position="0" attrib="0" type="System.String" />
</parameters>
</method>
<method name="SetCommonParams(Gtk.Widget, Glade.WidgetInfo)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="widget" position="0" attrib="0" type="Gtk.Widget" />
<parameter name="info" position="1" attrib="0" type="Glade.WidgetInfo" />
</parameters>
</method>
<method name="SetCustomHandler(Glade.XMLCustomWidgetHandler)" attrib="150" static="true" returntype="System.Void">
<attributes>
<attribute name="System.ObsoleteAttribute">
<properties>
<property name="Message" value="Replaced by CustomHandler property." />
<property name="IsError" value="False" />
</properties>
</attribute>
</attributes>
<parameters>
<parameter name="handler" position="0" attrib="0" type="Glade.XMLCustomWidgetHandler" />
</parameters>
</method>
<method name="SetPackingProperty(Gtk.Widget, Gtk.Widget, System.String, System.String)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="parent" position="0" attrib="0" type="Gtk.Widget" />
<parameter name="child" position="1" attrib="0" type="Gtk.Widget" />
<parameter name="name" position="2" attrib="0" type="System.String" />
<parameter name="value" position="3" attrib="0" type="System.String" />
</parameters>
</method>
<method name="SetValueFromString(System.IntPtr, System.String, GLib.Value)" attrib="134" returntype="System.Boolean">
<parameters>
<parameter name="pspec" position="0" attrib="0" type="System.IntPtr" />
<parameter name="str1ng" position="1" attrib="0" type="System.String" />
<parameter name="value" position="2" attrib="0" type="GLib.Value" />
</parameters>
</method>
<method name="SignalAutoconnect()" attrib="134" returntype="System.Void">
<parameters />
</method>
<method name="SignalAutoconnectFull(Glade.XMLConnectFunc)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="func" position="0" attrib="0" type="Glade.XMLConnectFunc" />
</parameters>
</method>
<method name="SignalConnectFull(System.String, Glade.XMLConnectFunc)" attrib="134" returntype="System.Void">
<parameters>
<parameter name="handler_name" position="0" attrib="0" type="System.String" />
<parameter name="func" position="1" attrib="0" type="Glade.XMLConnectFunc" />
</parameters>
</method>
</methods>
</class>
<class name="XMLConnectFunc" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(System.String, GLib.Object, System.String, System.String, GLib.Object, System.Boolean, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="handler_name" position="0" attrib="0" type="System.String" />
<parameter name="objekt" position="1" attrib="0" type="GLib.Object" />
<parameter name="signal_name" position="2" attrib="0" type="System.String" />
<parameter name="signal_data" position="3" attrib="0" type="System.String" />
<parameter name="connect_object" position="4" attrib="0" type="GLib.Object" />
<parameter name="after" position="5" attrib="0" type="System.Boolean" />
<parameter name="callback" position="6" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="7" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(System.String, GLib.Object, System.String, System.String, GLib.Object, System.Boolean)" attrib="454" virtual="true" returntype="System.Void">
<parameters>
<parameter name="handler_name" position="0" attrib="0" type="System.String" />
<parameter name="objekt" position="1" attrib="0" type="GLib.Object" />
<parameter name="signal_name" position="2" attrib="0" type="System.String" />
<parameter name="signal_data" position="3" attrib="0" type="System.String" />
<parameter name="connect_object" position="4" attrib="0" type="GLib.Object" />
<parameter name="after" position="5" attrib="0" type="System.Boolean" />
</parameters>
</method>
</methods>
</class>
<class name="XMLCustomWidgetHandler" type="delegate" base="System.MulticastDelegate" sealed="true" serializable="true" charset="Ansi" layout="Auto">
<interfaces>
<interface name="System.ICloneable" />
<interface name="System.Runtime.Serialization.ISerializable" />
</interfaces>
<constructors>
<constructor name=".ctor(System.Object, System.IntPtr)" attrib="2182">
<parameters>
<parameter name="object" position="0" attrib="0" type="System.Object" />
<parameter name="method" position="1" attrib="0" type="System.IntPtr" />
</parameters>
</constructor>
</constructors>
<methods>
<method name="BeginInvoke(Glade.XML, System.String, System.String, System.String, System.String, System.Int32, System.Int32, System.AsyncCallback, System.Object)" attrib="454" virtual="true" returntype="System.IAsyncResult">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="func_name" position="1" attrib="0" type="System.String" />
<parameter name="name" position="2" attrib="0" type="System.String" />
<parameter name="string1" position="3" attrib="0" type="System.String" />
<parameter name="string2" position="4" attrib="0" type="System.String" />
<parameter name="int1" position="5" attrib="0" type="System.Int32" />
<parameter name="int2" position="6" attrib="0" type="System.Int32" />
<parameter name="callback" position="7" attrib="0" type="System.AsyncCallback" />
<parameter name="object" position="8" attrib="0" type="System.Object" />
</parameters>
</method>
<method name="EndInvoke(System.IAsyncResult)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="result" position="0" attrib="0" type="System.IAsyncResult" />
</parameters>
</method>
<method name="Invoke(Glade.XML, System.String, System.String, System.String, System.String, System.Int32, System.Int32)" attrib="454" virtual="true" returntype="Gtk.Widget">
<parameters>
<parameter name="xml" position="0" attrib="0" type="Glade.XML" />
<parameter name="func_name" position="1" attrib="0" type="System.String" />
<parameter name="name" position="2" attrib="0" type="System.String" />
<parameter name="string1" position="3" attrib="0" type="System.String" />
<parameter name="string2" position="4" attrib="0" type="System.String" />
<parameter name="int1" position="5" attrib="0" type="System.Int32" />
<parameter name="int2" position="6" attrib="0" type="System.Int32" />
</parameters>
</method>
</methods>
</class>
</classes>
</namespace>
</namespaces>
</assembly>
</assemblies>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,39 @@
<?xml version="1.0"?>
<assemblies>
<assembly name="gtk-dotnet" version="2.12.0.0">
<attributes>
<attribute name="GLib.IgnoreClassInitializersAttribute" />
<attribute name="System.Reflection.AssemblyKeyFileAttribute">
<properties>
<property name="KeyFile" value="gtk-sharp.snk" />
</properties>
</attribute>
<attribute name="System.Reflection.AssemblyDelaySignAttribute">
<properties>
<property name="DelaySign" value="False" />
</properties>
</attribute>
</attributes>
<namespaces>
<namespace name="Gtk.DotNet">
<classes>
<class name="Graphics" type="class" base="System.Object" charset="Ansi" layout="Auto">
<methods>
<method name="FromDrawable(Gdk.Drawable, System.Boolean)" attrib="150" static="true" returntype="System.Drawing.Graphics">
<parameters>
<parameter name="drawable" position="0" attrib="0" type="Gdk.Drawable" />
<parameter name="double_buffered" position="1" attrib="0" type="System.Boolean" />
</parameters>
</method>
<method name="FromDrawable(Gdk.Drawable)" attrib="150" static="true" returntype="System.Drawing.Graphics">
<parameters>
<parameter name="drawable" position="0" attrib="0" type="Gdk.Drawable" />
</parameters>
</method>
</methods>
</class>
</classes>
</namespace>
</namespaces>
</assembly>
</assemblies>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,72 @@
// extract-missing.cs - grab missing api elements from api-diff files.
//
// Author: Mike Kestner <mkestner@novell.com>
//
// Copyright (c) 2005 Mike Kestner
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
namespace GtkSharp.Auditing {
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
public class ExtractMissing {
public static int Main (string[] args)
{
if (args.Length != 1 || !File.Exists (args [0])) {
Console.WriteLine ("Usage: extract-missing <filename>");
return 0;
}
XmlDocument doc = new XmlDocument ();
try {
Stream stream = File.OpenRead (args [0]);
doc.Load (stream);
stream.Close ();
} catch (XmlException e) {
Console.WriteLine ("Invalid apidiff file.");
Console.WriteLine (e);
return 1;
}
XPathNavigator nav = doc.CreateNavigator ();
XPathNodeIterator iter = nav.Select ("//*[@presence='missing']");
while (iter.MoveNext ()) {
XmlElement node = ((IHasXmlNode)iter.Current).GetNode () as XmlElement;
if (node.Name == "class")
Console.WriteLine ("Missing type: " + node.GetAttribute ("name"));
else if (node.ParentNode.ParentNode.Name == "class")
Console.WriteLine ("Missing " + node.Name + " " + (node.ParentNode.ParentNode as XmlElement).GetAttribute ("name") + "." + node.GetAttribute ("name"));
else if (node.Name == "attribute") {
if (node.ParentNode.ParentNode.Name == "class")
Console.WriteLine ("Missing attribute (" + (node as XmlElement).GetAttribute ("name") + ") on type: " + (node.ParentNode.ParentNode as XmlElement).GetAttribute ("name"));
else if (node.ParentNode.ParentNode.ParentNode.ParentNode.Name == "class")
Console.WriteLine ("Missing attribute (" + (node as XmlElement).GetAttribute ("name") + ") on " + (node.ParentNode.ParentNode.ParentNode.ParentNode as XmlElement).GetAttribute ("name") + "." + (node.ParentNode.ParentNode as XmlElement).GetAttribute ("name"));
else
Console.WriteLine ("oopsie: " + node.Name + " " + node.ParentNode.ParentNode.Name);
} else
Console.WriteLine ("oopsie: " + node.Name + " " + node.ParentNode.ParentNode.Name);
}
return 0;
}
}
}

View File

@@ -0,0 +1,73 @@
//
// gen-apidiff-html.cs - Converts a set of apidiff files to HTML by
// merging them and applying an XSL file.
//
// Author:
// Bertrand Lorentz (bertrand.lorentz@gmail.com)
//
// Copyright (C) 2013 Bertrand Lorentz
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
namespace Mono.AssemblyCompare
{
public class Driver
{
static int Main (string [] args)
{
if (args.Length != 2) {
Console.WriteLine ("Usage: mono gen-apidiff-html.exe <diff_dir> <html_file>");
return 1;
}
string diff_dir = args[0];
string out_file = args[1];
var all = new XmlDocument ();
all.AppendChild(all.CreateElement ("assemblies"));
foreach (string file in Directory.EnumerateFiles(diff_dir, "*.apidiff")) {
Console.WriteLine ("Merging " + file);
var doc = new XmlDocument ();
doc.Load (file);
foreach (XmlNode child in doc.GetElementsByTagName ("assembly")) {
XmlNode imported = all.ImportNode (child, true);
all.DocumentElement.AppendChild (imported);
}
}
var transform = new XslCompiledTransform ();
transform.Load ("mono-api.xsl");
var writer = new StreamWriter (out_file);
Console.WriteLine (String.Format ("Transforming to {0}...", out_file));
transform.Transform (all.CreateNavigator (), null, writer);
writer.Close ();
return 0;
}
}
}

View File

@@ -0,0 +1,43 @@
#!/usr/bin/perl
#
# get-apidiff.pl : gets apidiff files for the apiinfo files in
# base_dir that have corresponding files in revised_dir
#
# Authors: Mike Kestner <mkestner@novell.com>
#
# Copyright (c) 2005 Novell, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
die "Usage: get-apidiff.pl <base_dir> <revised_dir> <outdir>" if (@ARGV != 3);
$base_dir = $ARGV[0];
$revised_dir = $ARGV[1];
$outdir = $ARGV[2];
`mkdir -p $outdir`;
print "comparing api to base: ";
foreach $baseapi (`ls $base_dir/*.apiinfo`) {
chomp ($baseapi);
$baseapi =~ /$base_dir\/(.*)\.apiinfo/;
if (-e "$revised_dir/$1.apiinfo") {
print "*";
`mono mono-api-diff.exe $base_dir/$1.apiinfo $revised_dir/$1.apiinfo > $outdir/$1.apidiff`;
} else {
die "Warning: no $1 apiinfo file found in $revised_dir\n";
}
}
print " Completed\n\n";

View File

@@ -0,0 +1,43 @@
#!/usr/bin/perl
#
# get-apiinfo.pl : gets apiinfo files for the assemblies in a directory tree.
#
# Authors: Mike Kestner <mkestner@novell.com>
#
# Copyright (c) 2005 Novell, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
die "Usage: get-apiinfo.pl <root_dir> <outdir>" if (@ARGV != 2);
$root = $ARGV[0];
$outdir = $ARGV[1];
$cecildir = `pkg-config --variable=assemblies_dir mono-cecil`;
chomp ($cecildir);
`mkdir -p $outdir`;
`mkdir -p apitmp`;
`cp $root/*/*.dll apitmp`;
print "Getting api info: ";
foreach $assm (`ls apitmp/*.dll`) {
chomp ($assm);
$assm =~ /apitmp\/(.*)\.dll/;
print "*";
`MONO_PATH=$cecildir mono mono-api-info.exe $assm > $outdir/$1.apiinfo`;
}
`rm -rf apitmp`;
print " Completed\n\n";

View File

@@ -0,0 +1,39 @@
#!/usr/bin/perl
#
# get-missing.pl : scans apidiff files for missing api
#
# Authors: Mike Kestner <mkestner@novell.com>
#
# Copyright (c) 2005 Novell, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
die "Usage: get-missing.pl <diff_dir>" if (@ARGV != 1);
$diff_dir = $ARGV[0];
foreach $diff (`ls $diff_dir/*.apidiff`) {
chomp ($diff);
print "\nchecking for missing members in $diff\n";
@missing = `mono extract-missing.exe $diff`;
if (@missing) {
foreach $miss (@missing) {
print " - $miss";
}
} else {
print " - No missing api found\n";
}
}
print "\n";

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

View File

@@ -0,0 +1,213 @@
.y IMG
{
border: 0px;
padding: 0px;
margin: 0px;
margin-right: 4px;
vertical-align: middle;
}
.a, .a_,
.y, .y_,
.n, .n_,
.c, .c_,
.c, .c_,
.d, .d_,
.en, .en_,
.i, .i_,
.s, .s_,
.e, .e_,
.f, .f_,
.m, .m_,
.o, .o_,
.p, .p_,
.r, .r_,
.x, .x_,
.w, .w_
{
FONT: 12px 'Verdana';
margin-left: 20px;
}
.y_ .n,
.y_ .n_,
.n_ .c,
.n_ .c_,
.n_ .s,
.n_ .s_,
.n_ .d,
.n_ .d_,
.n_ .en,
.n_ .en_,
.n_ .i,
.n_ .i_,
.c_ .c,
.c_ .c_,
.c_ .d,
.c_ .d_,
.c_ .e,
.c_ .e_,
.c_ .f,
.c_ .f_,
.c_ .m,
.c_ .m_,
.c_ .o,
.c_ .o_,
.c_ .en,
.c_ .en_,
.c_ .p,
.c_ .p_,
.c_ .r,
.c_ .r_,
.c_ .x,
.c_ .x_,
.c_ .i,
.c_ .i_,
.c_ .w,
.c_ .w_,
.d_ .c,
.d_ .c_,
.d_ .e,
.d_ .e_,
.d_ .f,
.d_ .f_,
.d_ .i,
.d_ .i_,
.d_ .m,
.d_ .m_,
.d_ .o,
.d_ .o_,
.d_ .p,
.d_ .p_,
.d_ .r,
.d_ .r_,
.d_ .x,
.d_ .x_,
.d_ .w,
.d_ .w_,
.e_ .m,
.e_ .m_,
.en_ .c,
.en_ .c_,
.en_ .e,
.en_ .e_,
.en_ .f,
.en_ .f_,
.en_ .i,
.en_ .i_,
.en_ .m,
.en_ .m_,
.en_ .o,
.en_ .o_,
.en_ .p,
.en_ .p_,
.en_ .r,
.en_ .r_,
.en_ .x,
.en_ .x_,
.en_ .w,
.en_ .w_,
.i_ .c,
.i_ .c_,
.i_ .e,
.i_ .e_,
.i_ .f,
.i_ .f_,
.i_ .m,
.i_ .m_,
.i_ .o,
.i_ .o_,
.i_ .p,
.i_ .p_,
.i_ .r,
.i_ .r_,
.i_ .x,
.i_ .x_,
.i_ .w,
.i_ .w_,
.i_ .i,
.i_ .i_,
.s_ .c,
.s_ .c_,
.s_ .e,
.s_ .e_,
.s_ .f,
.s_ .f_,
.s_ .m,
.s_ .m_,
.s_ .o,
.s_ .o_,
.s_ .p,
.s_ .p_,
.s_ .r,
.s_ .r_,
.s_ .s,
.s_ .s_,
.s_ .x,
.s_ .x_,
.s_ .i,
.s_ .i_,
.s_ .w,
.s_ .w_,
.x_ .a,
.x_ .a_,
.m_ .a,
.m_ .a_,
.e_ .r,
.e_ .r_,
.e_ .o,
.e_ .o_,
.f_ .r,
.f_ .r_,
.f_ .o,
.f_ .o_,
.m_ .r,
.m_ .r_,
.m_ .o,
.m_ .o_,
.o_ .r,
.o_ .r_,
.o_ .o,
.o_ .o_,
.o_ .a_,
.p_ .r,
.p_ .r_,
.p_ .o,
.p_ .o_,
.r_ .r,
.r_ .r_,
.r_ .o,
.r_ .o_,
.x_ .r,
.x_ .r_,
.x_ .o,
.x_ .o_
.w_ .r,
.w_ .r_,
.w_ .o,
.w_ .o_
{
display: none;
}
.t
{
cursor: pointer;
margin-right: 8px;
}
.filter
{
cursor: pointer;
vertical-align: middle;
}
.st
{
margin-left: 20px;
}
.l
{
cursor: pointer;
}

View File

@@ -0,0 +1,584 @@
// FIXME:
// It still does not update icons previous to a type/member name when
// certain icon kinds are unchecked (when an item has "todo" and "missing",
// the default display is "missing" and when "missing" is unchecked it
// should turn into "todo").
function toggle (elt)
{
if (elt == null)
return;
var eltLink = firstElement (elt);
if (eltLink != null && eltLink.className == 't') // toggle
{
var ich = elt.className.indexOf ('_');
if (ich < 0)
{
eltLink.src = 'tp.gif';
elt.className += '_';
}
else
{
eltLink.src = 'tm.gif';
elt.className = elt.className.slice (0, ich);
}
}
}
function setView (elt, fView)
{
var eltLink = firstElement (elt);
if (eltLink != null && eltLink.className == 't') // toggle
{
var ich = elt.className.indexOf ('_');
if (ich < 0 && !fView)
{
eltLink.src = 'tp.gif';
elt.className += '_';
}
else if (ich >= 0 && fView)
{
eltLink.src = 'tm.gif';
elt.className = elt.className.slice (0, ich);
}
}
}
function firstElement (elt)
{
var c = elt.firstChild;
while (c != null) {
if (c.nodeType == 1) // Node.ELEMENT_NODE (IE6 does not recognize it)
return c;
c = c.nextSibling;
}
return null;
}
function trimSrc (strSrc)
{
return strSrc.slice (strSrc.lastIndexOf ('/') + 1, strSrc.lastIndexOf ('.'));
}
function getChildrenByTagName (elt, strTag)
{
strTag = strTag.toLowerCase ();
var rgChildren = new Array ();
var eltChild = firstElement (elt);
while (eltChild)
{
if (eltChild.tagName && eltChild.tagName.toLowerCase () == strTag)
rgChildren.push (eltChild);
eltChild = eltChild.nextSibling;
}
return rgChildren;
}
function viewAll (elt, dictTypes)
{
var fView = isShown (elt, dictTypes);
var aCounts = new Array (4);
for (i = 0; i < 4; i++)
aCounts [i] = 0;
var rgElts = getChildrenByTagName (elt, 'DIV');
for (iElt in rgElts) {
var aChildRet = viewAll (rgElts [iElt], dictTypes);
if (aChildRet != null) {
fView = true;
for (i = 0; i < 4; i++)
aCounts [i] += aChildRet [i];
}
}
elt.style.display = fView ? '' : 'none';
if (!fView)
return null;
rgShownDivs = getChildrenByTagName (elt, 'DIV');
for (i = 0; i < rgShownDivs.length; i++) {
var cDiv = rgShownDivs [i];
if (cDiv.style.display == 'none')
continue;
incrementCount (cDiv, aCounts, dictTypes);
}
// update the numbers
rgSpans = getChildrenByTagName (elt, 'SPAN');
for (iSpan in rgSpans) {
var cSpan = rgSpans [iSpan];
var cImage = firstElement (cSpan);
if (cImage == null)
continue;
switch (trimSrc (cImage.src)) {
case 'st': cSpan.lastChild.nodeValue = ": " + aCounts [0]; break;
case 'sm': cSpan.lastChild.nodeValue = ": " + aCounts [1]; break;
case 'sx': cSpan.lastChild.nodeValue = ": " + aCounts [2]; break;
case 'se': cSpan.lastChild.nodeValue = ": " + aCounts [3]; break;
}
}
return aCounts;
}
function isShown (elt, dictTypes)
{
if (!isShownMarkType (elt, dictTypes))
return false;
return true;
}
function isShownMarkType (elt, dictTypes)
{
var rgImages = getChildrenByTagName (elt, 'IMG');
var cImages = rgImages.length;
for (var iImage = 0; iImage < cImages; iImage++)
{
var strImage = trimSrc (rgImages [iImage].src);
if (dictTypes [strImage])
return true;
}
return false;
}
function incrementCount (cDiv, aCounts, dictTypes)
{
switch (cDiv.className) {
case 'y': case 'y_': // assembly
case 'n': case 'n_': // namespace
// types
case 'c': case 'c_': case 'i': case 'i_':
case 'en': case 'en_': case 'd': case 'd_':
// members
case 'r': case 'r_': case 'x': case 'x_': case 'm': case 'm_':
case 'f': case 'f_': case 'e': case 'e_': case 'p': case 'p_':
case 'o': case 'o_': case 'a': case 'a_':
var rgImgs = getChildrenByTagName (cDiv, 'IMG');
for (iImg = 0; iImg < rgImgs.length; iImg++) {
var cImg = rgImgs [iImg];
if (cImg.className != 't')
continue;
var stype = trimSrc (cImg.src);
if (!dictTypes [stype])
continue;
switch (stype) {
case "st": aCounts [0]++; break;
case "sm": aCounts [1]++; break;
case "sx": aCounts [2]++; break;
case "se": aCounts [3]++; break;
default:
continue;
}
break;
}
break;
}
}
/* just for debugging use now.
function firstInnerText (elt)
{
var s = elt.innerText;
if (s != null)
return s;
var n = elt.firstChild;
while (n != null) {
s = n.nodeValue;
if (s != null && s.replace (/^\s+/g, '') != '')
return s;
s = firstInnerText (n);
if (s != null)
return s;
n = n.nextSibling;
}
return s;
}
*/
function getView (elt)
{
var eltLink = firstElement (elt);
if (eltLink != null && eltLink.className == 't') // toggle
{
var ich = elt.className.indexOf ('_');
if (ich < 0)
return true;
}
return false;
}
function getParentDiv (elt)
{
if (elt)
{
do
{
elt = elt.parentNode;
}
while (elt && elt.tagName != 'DIV');
}
return elt;
}
function getName (elt)
{
var rgSpans = getChildrenByTagName (elt, 'SPAN');
for (var iSpan = 0; iSpan < rgSpans.length; iSpan ++)
{
var span = rgSpans [iSpan];
if (span.className == 'l') // label
{
if (span.innerText)
return span.innerText;
else
return span.firstChild.nodeValue;
}
}
return null;
}
function clickHandler (evt)
{
var elt;
if (document.layers)
elt = evt.taget;
else if (window.event && window.event.srcElement)
{
elt = window.event.srcElement;
evt = window.event;
}
else if (evt && evt.stopPropagation)
elt = evt.target;
if (!elt.className && elt.parentNode)
elt = elt.parentNode;
if (elt.className == 'l') // label
{
var strClass;
var strField;
var strNamespace;
var strAssembly;
var strFieldType;
elt = getParentDiv (elt);
var strEltClass = elt.className;
if (strEltClass.charAt (strEltClass.length - 1) == '_')
strEltClass = strEltClass.slice (0, strEltClass.length - 1);
if (strEltClass == 'x') // constructor
{
strField = 'ctor';
elt = getParentDiv (elt);
}
else
if (strEltClass == 'm' || // method
strEltClass == 'p' || // property
strEltClass == 'e' || // event
strEltClass == 'f') // field
{
strFieldType = strEltClass;
strField = getName (elt);
var match = strField.match ( /[\.A-Z0-9_]*/i );
if (match)
strField = match [0];
elt = getParentDiv (elt);
}
var strEltClass = elt.className;
if (strEltClass.charAt (strEltClass.length - 1) == '_')
strEltClass = strEltClass.slice (0, strEltClass.length - 1);
if (strEltClass == 'c' || // class
strEltClass == 's' || // struct
strEltClass == 'i' || // struct
strEltClass == 'd' || // delegate
strEltClass == 'en') // enum
{
strClass = getName (elt);
if (strEltClass == 'en')
strField = null;
elt = getParentDiv (elt);
}
var strEltClass = elt.className;
if (strEltClass.charAt (strEltClass.length - 1) == '_')
strEltClass = strEltClass.slice (0, strEltClass.length - 1);
if (strEltClass == 'n')
{
strNamespace = getName (elt);
elt = getParentDiv (elt);
}
var strEltClass = elt.className;
if (strEltClass.charAt (strEltClass.length - 1) == '_')
strEltClass = strEltClass.slice (0, strEltClass.length - 1);
if (strEltClass == 'y')
{
strAssembly = getName (elt);
}
if (evt.ctrlKey)
{
var strRoot = 'http://anonsvn.mono-project.com/viewcvs/trunk/mcs/class/';
var strExtra = '';
if (strAssembly)
{
if (strAssembly == 'mscorlib')
strAssembly = 'corlib';
else if (strAssembly == 'System.Xml')
strAssembly = 'System.XML';
strRoot = strRoot + strAssembly + '/';
if (strNamespace)
{
strRoot = strRoot + strNamespace + '/';
if (strClass)
{
strRoot += strClass + '.cs';
strExtra += '?view=markup';
}
}
window.open (strRoot + strExtra, 'CVS');
}
}
else if (strNamespace)
{
if (document.getElementById ('TargetMsdn1').checked)
{
var re = /\./g ;
strNamespace = strNamespace.toLowerCase ().replace (re, '');
if (strClass)
strNamespace += strClass.toLowerCase () + 'class';
if (strField)
strNamespace += strField;
if (strClass || strField)
strNamespace += 'topic';
window.open ('http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrf' + strNamespace + '.asp', 'MSDN');
}
else
{
if (strClass)
strNamespace += '.' + strClass;
if (strField)
strNamespace += '.' + strField;
if (document.getElementById ('TargetMonodoc').checked)
{
var category = null;
if (strClass == null)
category = "N:";
else if (strField == null)
category = "T:";
else {
switch (strFieldType) {
case 'f': category = "F:"; break;
case 'p': category = "P:"; break;
case 'm': category = "M:"; break;
case 'e': category = "E:"; break;
}
}
if (category != null)
window.open ('http://www.go-mono.com/docs/monodoc.ashx?link=' + category + strNamespace);
}
else
{
window.open ('http://msdn2.microsoft.com/library/' + strNamespace + '.aspx', 'MSDN');
}
}
}
}
else
{
if (elt.parentNode && elt.parentNode.className == 't') // toggle
elt = elt.parentNode;
else if (elt.className != 't') // toggle
return;
while (elt != null && elt.tagName != 'DIV')
elt = elt.parentNode;
if (evt.shiftKey)
{
var rgElts = getChildrenByTagName (elt, 'DIV');
var cElts = rgElts.length;
if (cElts != 0)
{
var fView = false;
var iElt;
for (iElt = 0; iElt < cElts; iElt ++)
{
if (getView (rgElts [iElt]))
{
fView = true;
break;
}
}
for (iElt = 0; iElt < cElts; iElt ++)
{
setView (rgElts [iElt], !fView);
}
}
}
else if (evt.ctrlKey)
{
setView (elt, true);
var eltParent = getParentDiv (elt);
while (eltParent)
{
var rgSiblings = getChildrenByTagName (eltParent, 'DIV');
var cSiblings = rgSiblings.length;
for (var iSibling = 0; iSibling < cSiblings; iSibling++)
{
var eltSibling = rgSiblings [iSibling];
if (eltSibling != elt)
{
setView (eltSibling, false);
}
}
elt = eltParent;
eltParent = getParentDiv (elt);
}
}
else
toggle (elt);
}
return false;
}
function filterTree ()
{
var eltMissing = document.getElementById ('missing');
var eltTodo = document.getElementById ('todo');
var eltExtra = document.getElementById ('extra');
var eltErrors = document.getElementById ('errors');
var eltStable = document.getElementById ('stable');
var dictTypes = new Object ();
if (eltMissing.checked)
dictTypes ['sm'] = true;
if (eltTodo.checked)
dictTypes ['st'] = true;
if (eltErrors.checked)
dictTypes ['se'] = true;
if (eltExtra.checked)
dictTypes ['sx'] = true;
if (eltStable.checked)
dictTypes ['sc'] = true;
viewAll (document.getElementById ('ROOT'), dictTypes);
}
function addAndFilter ()
{
var newInput = document.getElementById ('NewFilterTarget');
var newAttr = newInput.value;
if (newAttr.length > 0) {
var selection = document.getElementById ('FilteredAttributes');
var newElem = document.createElement ('option');
newElem.appendChild (document.createTextNode (newAttr));
selection.appendChild (newElem);
newInput.value = '';
filterTree ();
}
}
function removeAndFilter ()
{
var selection = document.getElementById ('FilteredAttributes');
if (selection.selectedIndex >= 0) {
var newInput = document.getElementById ('NewFilterTarget');
if (newInput.value.length == 0)
newInput.value = selection.options [selection.selectedIndex].firstChild.nodeValue;
selection.removeChild (selection.options [selection.selectedIndex]);
filterTree ();
}
}
function selectMissing ()
{
toggleFilter ('missing');
}
function selectTodo ()
{
toggleFilter ('todo');
}
function selectExtra ()
{
toggleFilter ('extra');
}
function selectErrors ()
{
toggleFilter ('errors');
}
function selectStable ()
{
toggleFilter ('stable');
}
function toggleAttributeFilter (attrName)
{
toggleFilter (attrName);
}
function toggleFilter (strFilter)
{
var eltTodo = document.getElementById ('todo');
var eltMissing = document.getElementById ('missing');
var eltExtra = document.getElementById ('extra');
var eltErrors = document.getElementById ('errors');
var eltToggle = document.getElementById (strFilter);
if (window && window.event && window.event.shiftKey)
{
eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = false;
eltToggle.checked = true;
}
else
if (!eltTodo.checked && !eltMissing.checked && !eltExtra.checked && !eltErrors.checked)
{
eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true;
eltToggle.checked = false;
}
filterTree ();
}
function onLoad ()
{
var eltMissing = document.getElementById ('missing');
var eltTodo = document.getElementById ('todo');
var eltExtra = document.getElementById ('extra');
var eltErrors = document.getElementById ('errors');
eltMissing.checked = eltTodo.checked = eltExtra.checked = eltErrors.checked = true;
filterTree ();
}
if (document.layers)
{
document.captureEvents (Event.MOUSEUP);
document.onmouseup = clickHandler;
}
else if (document.attachEvent)
{
document.attachEvent('onclick', clickHandler);
}
else if (document.addEventListener)
{
document.addEventListener('click', clickHandler, false);
}
else
document.onclick = clickHandler;

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 B

View File

@@ -0,0 +1,34 @@
MCS=dmcs
COMMON_SOURCES = \
AssemblyResolver.cs \
Util.cs \
WellFormedXmlWriter.cs
APIINFO_SOURCES = mono-api-info.cs $(COMMON_SOURCES)
all: extract-missing.exe mono-api-info.exe mono-api-diff.exe gen-apidiff-html.exe
check: all
rm -rf curr diff
./get-apiinfo.pl .. curr
./get-apidiff.pl base curr diff
./get-missing.pl diff
mono-api-diff.exe: mono-api-diff.cs
$(MCS) mono-api-diff.cs
mono-api-info.exe: $(APIINFO_SOURCES)
$(MCS) `pkg-config --libs mono-cecil` -out:$@ $^
extract-missing.exe: extract-missing.cs
$(MCS) extract-missing.cs
gen-apidiff-html.exe: gen-apidiff-html.cs
$(MCS) -out:$@ $^
clean:
rm -f *.exe
rm -rf curr
rm -rf diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,541 @@
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<!-- <xsl:output method="xml"/>-->
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>
Gtk# API Status
</TITLE>
<SCRIPT src="cormissing.js"></SCRIPT>
<LINK rel="stylesheet" type="text/css" href="cormissing.css"></LINK>
</HEAD>
<BODY onLoad="onLoad();">
<P>
<H1>Gtk# API Status</H1>
</P>
<table>
<tr>
<td> <input type="checkbox" ID="todo" onClick="selectTodo()" checked="checked"/> </td>
<td> <img src="st.gif"/> </td>
<td> TODO </td>
<td width="20"/>
<td> <input type="checkbox" ID="missing" onClick="selectMissing()" checked="checked"/> </td>
<td> <img src="sm.gif"/> </td>
<td> Removed </td>
</tr>
<tr>
<td> <input type="checkbox" ID="extra" onClick="selectExtra()" checked="checked"/> </td>
<td> <img src="sx.gif"/> </td>
<td> Added </td>
<td width="20"/>
<td> <input type="checkbox" ID="errors" onClick="selectErrors()" checked="checked"/> </td>
<td> <img src="se.gif"/> </td>
<td> Changed </td>
</tr>
<tr>
<td> <input type="checkbox" ID="stable" onClick="selectStable()"/> </td>
<td> <img src="sc.gif"/> </td>
<td> Stable </td>
</tr>
</table>
<p></p>
<div ID="ROOT">
<xsl:apply-templates/>
</div>
<p>
Legend :<br/>
<table>
<tr>
<td> <img src="y.gif"/> </td>
<td> Assembly </td>
<td width="20"/>
<td> <img src="n.gif"/> </td>
<td> Namespace </td>
<td width="20"/>
<td> <img src="c.gif"/> </td>
<td> Class </td>
<td width="20"/>
<td> <img src="s.gif"/> </td>
<td> Struct </td>
<tr>
</tr>
<td> <img src="i.gif"/> </td>
<td> Interface </td>
<td width="20"/>
<td> <img src="d.gif"/> </td>
<td> Delegate </td>
<td width="20"/>
<td> <img src="en.gif"/> </td>
<td> Enum </td>
<td width="20"/>
<td> <img src="m.gif"/> </td>
<td> Method </td>
</tr>
<tr>
<td> <img src="f.gif"/> </td>
<td> Field </td>
<td width="20"/>
<td> <img src="p.gif"/> </td>
<td> Property </td>
<td width="20"/>
<td> <img src="e.gif"/> </td>
<td> Event </td>
<td width="20"/>
<td> <img src="r.gif"/> </td>
<td> Attribute </td>
</tr>
</table>
</p>
</BODY>
</HTML>
</xsl:template>
<!-- assembly -->
<xsl:template match="/assemblies">
<xsl:apply-templates select="assembly">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="assembly">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">y</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- namespace -->
<xsl:template match="namespaces">
<xsl:apply-templates select="namespace">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="namespace">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">n</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<xsl:template match="namespace/classes">
<xsl:apply-templates />
</xsl:template>
<!-- class -->
<xsl:template match="class[@type='class']">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">c</xsl:with-param>
</xsl:call-template>
<xsl:if test="(@missing_total or @todo_total or @extra_total or @warning_total or @error) and not(@presence)">
<xsl:apply-templates select="attributes"/>
<xsl:apply-templates select="interfaces"/>
<xsl:apply-templates select="constructors"/>
<xsl:apply-templates select="./*[local-name() != 'attributes' and local-name() != 'constructors' and local-name() != 'interfaces']"/>
</xsl:if>
</div>
</xsl:template>
<!-- struct -->
<xsl:template match="class[@type='struct'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">s</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- interface types -->
<xsl:template match="class[@type='interface']">
<xsl:apply-templates select="class[@type='interface']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="class[@type='interface'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">i</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- interfaces implemented by Types -->
<xsl:template match="interface">
<xsl:apply-templates select="interface">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="interface[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">i</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- generic constraints -->
<xsl:template match="generic-type-constraints">
<xsl:apply-templates select="generic-type-constraint">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="generic-type-constraint[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">w</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- delegate -->
<xsl:template match="class[@type='delegate'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">d</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- enumeration -->
<xsl:template match="class[@type='enum'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">en</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- method -->
<xsl:template match="methods">
<xsl:apply-templates select="method">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="method[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">m</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- property -->
<xsl:template match="properties">
<xsl:apply-templates select="property">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="property[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">p</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- event -->
<xsl:template match="events">
<xsl:apply-templates select="event">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="event[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">e</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- constructor -->
<xsl:template match="constructors">
<xsl:apply-templates select="constructor">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="constructor[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">x</xsl:with-param>
<xsl:with-param name="image">m</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- field -->
<xsl:template match="fields">
<xsl:apply-templates select="field">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="field[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">f</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- accessor -->
<xsl:template match="property/methods">
<xsl:apply-templates select="method">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="property[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]/methods/method[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">o</xsl:with-param>
<xsl:with-param name="image">m</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- attribute -->
<xsl:template match="attributes">
<xsl:apply-templates select="attribute">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="attribute[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">r</xsl:with-param>
</xsl:call-template>
<xsl:if test="not(@presence)">
<xsl:apply-templates/>
</xsl:if>
</div>
</xsl:template>
<!-- nested classes -->
<xsl:template match="classes">
<xsl:apply-templates select="class[@type='interface']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<xsl:apply-templates select="class[@type='class']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<xsl:apply-templates select="class[@type='struct']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<xsl:apply-templates select="class[@type='delegate']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<xsl:apply-templates select="class[@type='enum']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:template>
<!-- support templates -->
<xsl:template name="ELEMENT">
<xsl:param name="class"/>
<xsl:param name="image"/>
<xsl:attribute name="class">
<xsl:value-of select="$class"/>
<xsl:if test="./node() and local-name() != 'assembly'">_</xsl:if>
</xsl:attribute>
<xsl:call-template name="toggle"/>
<xsl:choose>
<xsl:when test="@error and @error != 'todo'">
<xsl:element name="img">
<xsl:attribute name="src">se.gif</xsl:attribute>
<xsl:attribute name="class">t</xsl:attribute>
<xsl:attribute name="title"><xsl:call-template name="warning-hover" /></xsl:attribute>
</xsl:element>
</xsl:when>
<xsl:when test="@error = 'todo'">
<xsl:element name="img">
<xsl:attribute name="src">st.gif</xsl:attribute>
<xsl:attribute name="class">t</xsl:attribute>
<xsl:if test="@comment">
<xsl:attribute name="title"><xsl:value-of select="@comment"/></xsl:attribute>
</xsl:if>
<xsl:if test="not(@comment)">
<xsl:attribute name="title">No TODO description</xsl:attribute>
</xsl:if>
</xsl:element>
</xsl:when>
<xsl:when test="@presence = 'missing'">
<img src="sm.gif" class="t"/>
</xsl:when>
<xsl:when test="@presence = 'extra'">
<img src="sx.gif" class="t"/>
</xsl:when>
<xsl:otherwise>
<img src="sc.gif" class="t"/>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$image">
<img src="{$image}.gif" class="t"/>
</xsl:when>
<xsl:otherwise>
<img src="{$class}.gif" class="t"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="name"/>
<xsl:if test="not(@presence)">
<xsl:call-template name="status"/>
</xsl:if>
<xsl:call-template name="warning-text" />
<xsl:for-each select="parameters/parameter[warnings/warning]">
<div>
<xsl:call-template name="ELEMENT">
<xsl:with-param name="class">a</xsl:with-param>
<xsl:with-param name="image">tb</xsl:with-param>
</xsl:call-template>
</div>
</xsl:for-each>
</xsl:template>
<xsl:template name="status">
<xsl:if test="@complete_total and @complete_total != 0">
<span class="st">
<img src="sc.gif"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="@complete_total"/>
<xsl:text>%</xsl:text>
</span>
</xsl:if>
<xsl:if test="@todo_total">
<span class="st">
<img src="st.gif"/>: <xsl:value-of select="@todo_total"/>
</span>
</xsl:if>
<xsl:if test="@missing_total">
<span class="st">
<img src="sm.gif"/>: <xsl:value-of select="@missing_total"/>
</span>
</xsl:if>
<xsl:if test="@extra_total">
<span class="st">
<img src="sx.gif"/>: <xsl:value-of select="@extra_total"/>
</span>
</xsl:if>
<xsl:if test="@warning_total">
<span class="st">
<img src="se.gif"/>: <xsl:value-of select="@warning_total"/>
</span>
</xsl:if>
</xsl:template>
<xsl:template name="toggle">
<xsl:choose>
<xsl:when test="not(@presence) and .//*[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
<xsl:choose>
<xsl:when test="local-name() != 'assembly'">
<img src="tp.gif" class="t"/>
</xsl:when>
<xsl:otherwise>
<img src="tm.gif" class="t"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<img src="tb.gif"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="name">
<xsl:if test="@name">
<span class="l"><xsl:value-of select="@name"/></span>
</xsl:if>
</xsl:template>
<xsl:template name="warning-hover">
<xsl:for-each select="warnings/warning">
<xsl:text>WARNING: </xsl:text>
<xsl:value-of select="@text"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="warning-text">
<xsl:for-each select="warnings/warning">
<img src="tb.gif"/>
<xsl:value-of select="@text"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@@ -0,0 +1,28 @@
#!/usr/bin/env python3
import difflib
import sys
import shutil
import subprocess
reference_abi = subprocess.check_output(sys.argv[1]).decode().split("\n")
launcher = []
if shutil.which("mono"):
launcher = ["mono", "--debug"]
csharp_abi = subprocess.check_output(launcher + [sys.argv[2]]).decode().split("\n")
print("Comparing output of %s and %s" % (sys.argv[1], sys.argv[2]))
res = 0
for line in difflib.unified_diff(reference_abi, csharp_abi):
res = 1
print(line)
if res:
files = [(sys.argv[1] + ".res", reference_abi),
(sys.argv[2] + 'res', csharp_abi)]
for f, vals in files:
with open(f, "w") as _f:
print("Outputing results in " + f)
_f.write("\n".join(vals))
sys.exit(res)