diff --git a/audit/gen-apidiff-html.cs b/audit/gen-apidiff-html.cs new file mode 100644 index 000000000..b04e0c9b0 --- /dev/null +++ b/audit/gen-apidiff-html.cs @@ -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 "); + 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; + } + } +} + diff --git a/audit/html/c.gif b/audit/html/c.gif new file mode 100644 index 000000000..02c347efd Binary files /dev/null and b/audit/html/c.gif differ diff --git a/audit/html/cormissing.css b/audit/html/cormissing.css new file mode 100644 index 000000000..5a78c306f --- /dev/null +++ b/audit/html/cormissing.css @@ -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; +} diff --git a/audit/html/cormissing.js b/audit/html/cormissing.js new file mode 100644 index 000000000..64397b5ff --- /dev/null +++ b/audit/html/cormissing.js @@ -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; + diff --git a/audit/html/d.gif b/audit/html/d.gif new file mode 100644 index 000000000..c9735952f Binary files /dev/null and b/audit/html/d.gif differ diff --git a/audit/html/e.gif b/audit/html/e.gif new file mode 100644 index 000000000..1137246bf Binary files /dev/null and b/audit/html/e.gif differ diff --git a/audit/html/en.gif b/audit/html/en.gif new file mode 100644 index 000000000..00026b773 Binary files /dev/null and b/audit/html/en.gif differ diff --git a/audit/html/f.gif b/audit/html/f.gif new file mode 100644 index 000000000..f78a2f53b Binary files /dev/null and b/audit/html/f.gif differ diff --git a/audit/html/i.gif b/audit/html/i.gif new file mode 100644 index 000000000..56cd032a5 Binary files /dev/null and b/audit/html/i.gif differ diff --git a/audit/html/m.gif b/audit/html/m.gif new file mode 100644 index 000000000..75fe3586d Binary files /dev/null and b/audit/html/m.gif differ diff --git a/audit/html/n.gif b/audit/html/n.gif new file mode 100644 index 000000000..f6fa74630 Binary files /dev/null and b/audit/html/n.gif differ diff --git a/audit/html/p.gif b/audit/html/p.gif new file mode 100644 index 000000000..b79d0dd7e Binary files /dev/null and b/audit/html/p.gif differ diff --git a/audit/html/r.gif b/audit/html/r.gif new file mode 100644 index 000000000..a3ef0f38e Binary files /dev/null and b/audit/html/r.gif differ diff --git a/audit/html/s.gif b/audit/html/s.gif new file mode 100644 index 000000000..f2fd5c8ae Binary files /dev/null and b/audit/html/s.gif differ diff --git a/audit/html/sc.gif b/audit/html/sc.gif new file mode 100644 index 000000000..b02afd9b2 Binary files /dev/null and b/audit/html/sc.gif differ diff --git a/audit/html/se.gif b/audit/html/se.gif new file mode 100644 index 000000000..1c46eaa58 Binary files /dev/null and b/audit/html/se.gif differ diff --git a/audit/html/sm.gif b/audit/html/sm.gif new file mode 100644 index 000000000..0c7194786 Binary files /dev/null and b/audit/html/sm.gif differ diff --git a/audit/html/st.gif b/audit/html/st.gif new file mode 100644 index 000000000..067582cb3 Binary files /dev/null and b/audit/html/st.gif differ diff --git a/audit/html/sx.gif b/audit/html/sx.gif new file mode 100644 index 000000000..2c8ca5479 Binary files /dev/null and b/audit/html/sx.gif differ diff --git a/audit/html/tb.gif b/audit/html/tb.gif new file mode 100644 index 000000000..ee68c5a35 Binary files /dev/null and b/audit/html/tb.gif differ diff --git a/audit/html/tm.gif b/audit/html/tm.gif new file mode 100644 index 000000000..3c8f18aec Binary files /dev/null and b/audit/html/tm.gif differ diff --git a/audit/html/tp.gif b/audit/html/tp.gif new file mode 100644 index 000000000..8b7435361 Binary files /dev/null and b/audit/html/tp.gif differ diff --git a/audit/html/w.gif b/audit/html/w.gif new file mode 100644 index 000000000..0b7dc7693 Binary files /dev/null and b/audit/html/w.gif differ diff --git a/audit/html/y.gif b/audit/html/y.gif new file mode 100644 index 000000000..08f00d4ea Binary files /dev/null and b/audit/html/y.gif differ diff --git a/audit/makefile b/audit/makefile index ffaa3ce44..a726e2ab5 100644 --- a/audit/makefile +++ b/audit/makefile @@ -7,7 +7,7 @@ COMMON_SOURCES = \ APIINFO_SOURCES = mono-api-info.cs $(COMMON_SOURCES) -all: extract-missing.exe mono-api-info.exe mono-api-diff.exe +all: extract-missing.exe mono-api-info.exe mono-api-diff.exe gen-apidiff-html.exe check: all rm -rf curr diff @@ -24,6 +24,9 @@ mono-api-info.exe: $(APIINFO_SOURCES) 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 diff --git a/audit/mono-api.xsl b/audit/mono-api.xsl new file mode 100644 index 000000000..b3be16540 --- /dev/null +++ b/audit/mono-api.xsl @@ -0,0 +1,541 @@ + + + + + + + + + + + + Gtk# API Status + + + + + +

+

Gtk# API Status

+

+ + + + + + + + + + + + + + + + + + + + + + + +
TODO + Removed
Added + Changed
Stable
+

+ +
+ +
+

+ Legend :
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Assembly + Namespace + Class + Struct
Interface + Delegate + Enum + Method
Field + Property + Event + Attribute
+ +

+ + +
+ + + + + + + + + + + +
+ + y + + + + +
+
+ + + + + + + + + + +
+ + n + + + + +
+
+ + + + + + + +
+ + c + + + + + + + +
+
+ + + + +
+ + s + + + + +
+
+ + + + + + + + + + + +
+ + i + + + + +
+
+ + + + + + + + + +
+ + i + + + + +
+
+ + + + + + + + + + +
+ + w + + + + +
+
+ + + + +
+ + d + + + + +
+
+ + + + +
+ + en + + + + +
+
+ + + + + + + + + + +
+ + m + + + + +
+
+ + + + + + + + + + +
+ + p + + + + +
+
+ + + + + + + + + + +
+ + e + + + + +
+
+ + + + + + + + + + +
+ + x + m + + + + +
+
+ + + + + + + + + + +
+ + f + + + + +
+
+ + + + + + + + + +
+ + o + m + + + + +
+
+ + + + + + + + + + +
+ + r + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + _ + + + + + + se.gif + t + + + + + + st.gif + t + + + + + No TODO description + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + a + tb + +
+
+
+ + + + + + : + + % + + + + + : + + + + + : + + + + + : + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WARNING: + + + + + + + + + + + +