2010-06-11  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: Reduce memory requirements when assembling
	  ECMA documentation.  The problem was that we parse all the XML files
	  in order to extract //summary and //remarks members, and then stored
	  the XmlNodes for these members.  XmlNode keeps a ref to the creating
	  XmlDocument, thus keeping the XmlNode around requires keeping the
	  entire XmlDocument around; result: ~350+MB RAM is needed to assemble
	  netdocs.zip (in ../../docs).  To fix, import the XmlNodes that we
	  actually care about into an otherwise empty XmlDocument, so that we 
	  only save the nodes we need. Result: ~32MB RAM is needed.
	  Fixes #602560.

2010-04-25  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: Support the full set of possible operator
	  names within EcmaHelpSource.MakeOperatorSignature() (where "full" is
	  "whatever is included in ECMA-335 §10.3.1 through §10.3.3").
	  Fixes InvalidOperationException reported to mono-docs-list.

2010-02-28  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Add
	  RootTree.LoadTree(string,string,IEnumerable) for compatibility with
	  Mono 2.6's monodoc.dll.

2010-02-26  Jonathan Pryor  <jpryor@novell.com>

	* Makefile: Add a System.Core.dll reference; embed monodoc.xml as a
	  resource.
	* Monodoc/provider.cs: Add a
	  RootTree.LoadTree(string,XmlDocument,IEnumerable<string>) method.
	  This is so 'mdoc export-html-webdoc' doesn't need to rely on the
	  system-wide .source files (allowing execution w/o changing/replacing
	  the system-wide .source files) and so MonoDevelop can support
	  multiple .source files spread throughout the system sanely.
	* Monodoc/ecma-provider.cs: Always add the extension methods contained
	  in the current EcmaHelpSource, instead of implicitly requiring that
	  the current EcmaHelpSource also be contained within
	  RootTree.HelpSources.  This simplifies logic in 'mdoc'.

2010-01-13  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs, Monodoc/ecma-provider.cs: Improve cache support
	  by having EcmaHelpSource.GetTextFromUrl() look for cached contents.
	  This greatly speeds up type member listings (e.g. T:...List`1/*),
	  e.g. from ~2.0s to 0.06s.

2010-01-13  Jonathan Pryor  <jpryor@novell.com>

	* Mono.Documentation/XmlDocUtils.cs: XmlDocUtils.AddExtensionMethods()
	  wasn't adding extension methods which matched *interfaces* of base
	  classes.  Result: Mono.Options.OptionSet (which inherits
	  System.Collections.ObjectModel.KeyedCollection`2 which inherits from
	  System.Collections.ObjectModel.Collection`1 which implements
	  System.Collections.Generic.IEnumerable`1) wasn't getting any of the
	  LINQ extension methods (which is bad).  Fix this.

2010-01-13  Jonathan Pryor  <jpryor@novell.com>

	* Resources/mdoc-html-utils.xsl: Fix regression caused by 2009-12-02
	  commit adding GetLinkTargetHtml().  The problem was that when
	  running within ASP.NET/monodoc ~all extension method links would be
	  'javascript:alert("...")M:Foo.Method(...)', which is clearly wrong.
	  This occurred because $linkid's generation would always call
	  GetLinkTargetHtml() with a $cref value of '', thus the monodoc
	  GetLinkTarget() would return '', so GetLinkTargetHtml() would return
	  the javascript "not found" alert.  Thus, we can't expect
	  GetLinkTargetHtml() with $cref='' to work under monodoc, but it's
	  ~required to work sanely under 'mdoc export-html'.
	  Solution is to not call GetLinkTargetHtml() here UNLESS we're doing
	  'mdoc export-html' generation, which we assume to be the case if
	  $html-anchor is true.

2009-12-30  Jonathan Pryor  <jpryor@novell.com>

	* Lucene.Net/Lucene.Net/QueryParser/QueryParser.cs: Fix crash when 
	  searching for "()".  Fixes #423853.  
	  Thanks to Benoît Tuduri <bento78@gmail.com>.

2009-12-03  Jonathan Pryor  <jpryor@novell.com>

	* Resources/mdoc-html-utils.xsl: Add support for generating namespace
	  links via <see cref="N:..." />

2009-12-03  Jonathan Pryor  <jpryor@novell.com>

	* Resources/mdoc-html-utils.xsl: Fix link-id generation of conversion
	  operators.

2009-12-02  Jonathan Pryor  <jpryor@novell.com>

	* Mono.Documentation/ManifestResourceResolver.cs:
	  Assembly.GetManifestResourceStream() throws an exception if the
	  resource isn't present (instead of returning null), so don't just
	  call it to see if the resource exists.
	* Resources/mdoc-html-utils.xsl: .NET compatibility fixes (so that
	  mdoc can run under .NET w/o bundling Mono's System.Xml):
	  - Use msxsl:node-set() when required.
	  - Use <xsl:variable/> not <xsl:param/> when a variable is needed.
	  - Change semantics of GetLinkTarget(): instead of returning
	    javascript code (previous behavior) or '--not-available--' (did
	    this ever happen), return "" if the target can't be found.
	  - Add GetLinkTargetHtml() to wrap GetLinkTarget() and return the
	    previous javascript if the target couldn't be found.

2009-11-24  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: Use XslCompiledTransform instead of
	  XslTransform, as XslCompiledTransform is *significantly* faster
	  under .NET (3m7s -> 1.7s for some tests).

2009-10-02  Jonathan Pryor  <jpryor@novell.com>

	* Mono.Documentation/XmlDocUtils.cs: GetInterfaces() can throw if the
	  type we're trying to load can't be found (e.g. if a type implements
	  an internal interface, there won't be an XML file for that internal
	  interface).  Ignore the exception.

2009-09-25  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: Don't return 'null' from GetPublicUrl(),
	  but instead provide a decent URL even if the url isn't to a single
	  member, but instead to show all members, e.g. T:System.String/*.
	* Monodoc/provider.cs: Obsolete Node.URL.  It's too variable for sane
	  use; use Node.PublicUrl.

2009-09-09  Jonathan Pryor  <jpryor@novell.com>

	* Mono.Documentation/ManifestResourceResolver.cs: Allow it to lookup
	  files located in multiple directories.  Needed so that 'mdoc
	  export-html' can properly deal with multiple source directories.

2009-08-13  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Add a RootTree.AddSource(string) method, so that 
	  additional directories can be checked for .source file loading.

2009-08-13  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Make RootTree.LoadTree() just call
	  RootTree.LoadTree(null), and move the .config-file parsing into
	  .LoadTree(string) (for when basedir==null).  This will simplify the
	  logic of monodoc, as we want to add the ability to monodoc to use
	  any arbitrary directory, and this will remove the need to do 
	  `if (d==null) RootTree.LoadTree(); else RootTree.LoadTree(d)`.
	  This also conforms to FxDG guidelines.

2009-08-12  Jonathan Pryor  <jpryor@novell.com>

	* Resources/mdoc-html-format: Added; XSLT file to match
	  "//format[@type='text/html']//*", to support "pass-through"
	  semantics.  This allows you to use actual HTML within your
	  documentation and have it visible to HTML-supporting output formats.
	  WARNING: Use as a "last resort" -- this is primarily intended for
	  importing existing HTML w/o needing lots of extra logic to convert
	  into mdoc format XML first (with a corresponding loss of fidelity).
	  However, it means that if (when) we get non-HTML output format
	  support, the <format type="text/html" /> blocks WILL be skipped for
	  that non-HTML output format.

	  For example, the forever-on-the-back-burner ROFF output support --
	  to remove the use of lynx, as no one ever has it installed --
	  wouldn't be able to support HTML format, so it would skip these
	  <format type="text/html"/> blocks.

	  Consider <format /> the moral equivalent of Perl POD's 
	  '=begin formatname' block; see perlpod(1).
	* Resources/mdoc-html-utils.xsl: <xsl:import/> mdoc-html-format.xsl.
	  It *must* be imported (NOT included) so that it will have a lower
	  priority than other <template/>s, thus allowing the HTML formatter
	  to <xsl:apply-templates/> which then use the "normal" rules.  This
	  allows:
		<format type="text/html">
			<p><see cref="T:System.String" /></p>
		</format>
	  to work as expected.
	* Makefile: Add mdoc-html-format.xsl as a resource.

2009-04-16  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/man-provider.cs: NEVER return a non-null string from
	  HelpSource.GetText() unless *useful* content is being returned, as
	  when non-null is returned RootTree.RenderUrl() assumes that the url
	  was handled and won't try any other HelpSources.  In this case, we
	  can (and do) have multiple ManHelpSources present, but since
	  ManHelpSource.GetText() was returning "<html>url was null</html>",
	  RootTree thought it was handled...when it wasn't.  Fix.

2009-04-16  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Overview: MonoDevelop loads monodoc.dll into
	  it's own process, and spawns monodoc GUI into a separate process,
	  then sends Node.URL values (obtained from the MonoDevelop process)
	  to load the documentation into the monodoc GUI.  Problem:
	  occasionally the requested documentation isn't loaded, but instead
	  some completely unrelated documentation is shown instead.  This is
	  because the Node.URL value contains HelpSource-dependent data, e.g.
	  a Node.URL value of "ecma:0#Foo/" will specify the 1st file
	  within...whatever HelpSource is first consulted by monodoc (which
	  can vary between monodoc runs, the phase of the moon, etc.).
	  Solution: Add a Node.PublicUrl property which returns _stable_ URLs
	  which aren't specific to a given HelpSource.
	  - Add Node.PublicUrl property, which delegates to
	    Provider.GetPublicUrl(string), so that a Provider can generate a
	    Provider-independent URL (if possible).
	  - Print PublicUrl from Node.PrintTree().
	  - Add RootTree.GetSupportedFormats(), RootTree.GetProvider()
	    methods.
	  - Make RootTree.GetHelpSource() public.
	* Monodoc/ecma-provider.cs: Add EcmaDoc.GetCref() method (generates an
	  XML documentation //see/@cref value), override
	  Provider.GetPublicUrl() (which will return cref's if possible).

2009-04-15  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: EcmaHelpSource.GetText() doesn't need to
	  call GetCachedText() twice.

2009-04-15  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Correct UseWebdocCache logic.
	* Monodoc/xhtml-provider.cs: Use GetCachedText().

2009-04-15  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: UseWebdocCache is a better name that
	  IgnoreCache (considering that cache is disabled by default).

2009-04-15  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs:
	  - Add HelpSource.IgnoreCache field, so that if the cache is present 
	    it will be ignored.  (Required by 'mdoc export-html-webdoc' so it 
	    gets "fresh" content to generate the cache, and by monodoc GUI as 
	    it can't use the cache'd HTML; cache'd HTML is for ASP.NET 
	    webdoc only.)
	  - Alter the cache directory from e.g. sources/netdocs to 
	    sources/cache/netdocs (as defined by 
	    XmlDocUtils.GetCacheDirectory()).
	  - Add HelpSource.GetCachedText() method which will return the 
	    contents of the cache for an id.
	* Monodoc/addins-provider.cs, Monodoc/ecma-provider.cs, 
	  Monodoc/error-provider.cs, Monodoc/man-provider.cs, 
	  Monodoc/simple-provider.cs: Use GetCachedText().
	* Mono.Documentation/XmlDocUtils.cs: Add GetCacheDirectory(),
	  GetCacheFileName() methods.

2009-04-14  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/provider.cs: Fix NullReferenceException in 'mdoc dump-tree'.

2009-04-09 Gonzalo Paniagua Javier <gonzalo@novell.com>

	* ecma-provider.cs: remove 'using'.
	* provider.cs: if there's a directory with the base name, read the
	files from there instead of from the .zip file.

2009-03-01  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: Viewing type members (plural, e.g. the
	  Fields sub-node) would result in a stack overflow within
	  Resources/mdoc-html-utils.xsl:GetInheritedMembers(), because the
	  document() XSLT function was being used to obtain the base type's
	  documentation.  It stack overflowed because the XmlUrlResolver was
	  being used, which when given e.g. file:///DocAttribute.xml, would
	  return file:///DocAttribute.xml (which makes sense), but it was
	  non-terminating.  (I find this troubling as it should have been
	  trying to resolve e.g. System.Attribute, not DocAttribute; it must
	  be some XmlTransform-fu that was substituting documents.)
	  The fix is for EcmaUncompiledHelpSource to provide an alternate
	  document XmlResolver, one which always returns null from
	  XmlResolver.ResolveUri(), thus preventing endless recursion.

2009-03-01  Jonathan Pryor  <jpryor@novell.com>

	* Mono.Documentation/XmlDocUtils.cs: It's possible for the `loader'
	  delegate to return `null' if no further base types are found, so
	  stop processing if we find a null base type.
	* Monodoc/provider.cs: 
	  - Make GetHelpStream() virtual so that EcmaUncompiledHelpSource can
	    override it, as the default zip-based behavior is inappropriate.
	  - Make GetHelpXmlWithChanges() virtual so that
	    EcmaUncompiledHelpSource can override it, as the default zip-based
	    behavior is inappropriate.
	  - When initializing UncompiledHelpSources, set the
	    HelpSource.RootTree property (avoids an NRE from
	    EcmaHelpSource.GetTextFromUrl() when it reads RootTree.HelpSources).
	* Monodoc/ecma-provider.cs: 
	  - Within the XmlDocUtils.AddExtensionMethods() call, don't always 
	    prefix the type with "T:", as sometimes the type will already start 
	    with "T:", which is the case with EcmaUncompiledHelpSource ids.  
	  - Add EcmaUncompiledHelpSource.GetHelpStream() and
	    EcmaUncompiledHelpSource.GetHelpXmlWithChanges(), which Do The
	    Right Thing for the file-based backend.

2009-03-01  Jonathan Pryor  <jpryor@novell.com>

	* Monodoc/ecma-provider.cs: For some reason,
	  EcmaHelpSource.GetNamespaceDocument() wasn't being used anymore,
	  which is what EcmaUncompiledHelpSource overrides to permit loading
	  of local files.  Result: an exception when trying to view namespaces
	  of local (non-assembled) directories.  Oops.  "Fixes" 443508.

2009-02-26  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/provider.cs: Revert; Don't check for Tree.Nodes == null, as it
	  happens in numerous places.  Instead, take a page out of the "I
	  never should have invented `null'" book, and ensure that Tree.Nodes
	  can never be null.  This fixes the "HelpSource has 0 items" issue
	  and several other related ones.

2009-02-26  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/provider.cs: It's possible for a HelpSource to have 0
	  elements (which can be done by e.g. running `mdoc assemble' on an 
	  empty directory), in which case HelpSource.Tree.Nodes will be null.
	  Make sure that we don't get a NullReferenceException.
	  Patch thanks to Theerud Lawtrakul.  Fixes #443699.

2009-02-25  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: 
	  - s/TEST_FILES/MAN_TEST_FILES/g: $(TEST_FILES) is used by the normal
	    build process, so the local definition is lost (and thus ignored).
	    Result: Test/* isn't actually copied.  Oops.  Changing to
	    MAN_TEST_FILES allows things to be copied.
	  - Fix the filenames within $(MAN_TEST_FILES) so `make dist-local'
	    works without error.
	  - Fixes #479753.

2009-02-09  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Don't include mono-ecma-css.js as a resource.
	* Monodoc/ecma-provider.cs: Insert helper.js, not mono-ecma-css.js.
	* Monodoc/provider.cs: Surround the contents of `helper.js' with a
	  <script/> block so that valid HTMl is generated.
	* Resources/helper.js: Remove <script/> block, so that `helper.js' is an
	  actual JavaScript file, not an SGML file w/ JavaScript content.
	* Resources/mono-ecma-css.js: Remove; use Resources/helper.js instead.

2009-01-05  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Fix $(the_lib) dependencies so that monodoc.dll is rebuilt
	  when one of Resources/* is modified.
	* Resources/mdoc-html-utils.xsl: Rework the Requirements block so that
	  it doesn't require //AssemblyInfo or //AssemblyVersion.  This allows
	  `mdoc update -fno-assembly-versions ...`-produced XML to still
	  produce HTML with a Requirements section (skipping the Assembly
	  Versions block but generating the Namespace and Assembly blocks).
	  Change the behavior of //since generation so that instead of
	  printing out a note before the method summary, a Since block is added
	  to the Requirements section, and the Since block contains the
	  //since/@version text.  All this to make Mike Kestner happier. :-)

2008-10-29  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/xhtml-provider.cs: Use HelpSource.Message(), not 
	  Console.WriteLine().

2008-10-28  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/provider.cs: Add HelpSource.InlineCss and
	  HelpSource.InlineJavaScript virtual properties, so that the help
	  source can provide specific CSS and JavaScript to be included into
	  the generated HTML document.  This is used by the ASP.NET front-end,
	  as it needs to insert the CSS & JavaScript separately (as it also
	  inserts its own CSS & JavaScript).
	* Monodoc/ecma-provider.cs, Monodoc/ecmaspec-provider.cs,
	  Monodoc/error-provider.cs: Override InlineCss & InlineJavaScript, as
	  appropriate.

2008-10-24  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/addins-provider.cs, Monodoc/ecma-provider.cs,
	  Monodoc/ecmaspec-provider.cs, Monodoc/error-provider.cs,
	  Monodoc/man-provider.cs, Monodoc/monohb-provider.cs,
	  Monodoc/provider.cs: Remove Console.WriteLine() spew; helps cleanup
	  `make` output in mcs/docs (from `mdoc assemble`, which indirectly
	  invokes most of the *-provider files).  We solve this problem by
	  providing a TraceLevel-based message system, so that messages are
	  only generated if they are less than or equal to the requested
	  output level (thus skipping the more verbose "every file" messages
	  from ecma-provider.cs & error-provider.cs).
	* provider.cs: Change Node.CompareTo() to use a "natural sorting"
	  algorithm -- this allows the C# Language Specification nodes to
	  continue being displayed in the correct order.

2008-10-21  Jonathan Pryor  <jonpryor@vt.edu>

	* Monodoc/provider.cs: 
	  - Fix Node.Sort() so that it doesn't NRE if nodes == null.
	  - Fix Node.CompareTo() so that it can sort Nodes that haven't been
	    loaded yet.
	  - Add "libraries" as an alias for "root", so that .source files can
	    refer to the parent "libraries" (which would allow us to change
	    the location of "libraries" in the future, should we want to).
	  - If a /monodoc/source/@path refers to a nonexistant node, then
	    insert the contents under Various instead of ignoring it.
	  - Sort the top-level nodes.
	  - Sort the `parent` node after inserting children under it.  This
	    allows multiple different .source files to insert nodes under the
	    same parent node and still have the child nodes sorted as most
	    mortals would expect.
	  - Support a //node/@parent attribute, which allows for creating
	    nodes underneath the specified parent node.  This allows multiple
	    different .source files to contribute to the tree and depend upon
	    each other.  Thus, instead of having a single monodoc.xml file
	    that needs to know the entire tree in advance, the entire tree can
	    be spread across multiple .source files and filled at runtime.

2008-10-18  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile $(LIBRARY_PACKAGE): Set to `monodoc`, as we historically
	  have had a monodoc package (and thus should preserve it).

2008-10-17  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Distribute monodoc.dll.config.in.

2008-10-17  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Generate a monodoc.dll.config (installed by gacutil), so
	  that monodoc.dll can find the documentation sources.

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Mono.Documentation/ManifestResourceResolver.cs, 
	  Mono.Documentation/XmlDocUtils.cs: Make types public so that they
	  can be used from ../mdoc/mdoc.exe.

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Update $(thisdir).

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Assmbly/AssemblyInfo.cs: Change location of mono.snk (since the 
	  monodoc directory was moved from mcs/class to mcs/tools).

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Improve `make clean` support.

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Makefile: Add EXTRA_DISTFILES; monodoc.dll should depend upon
	  Makefile (in case the /resource: lines change); shorten the .gif
	  resource names.

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* Test (svn:ignore): Ignore generated files.
	* Makefile: Add tests for man-provider.

2008-10-16  Jonathan Pryor  <jonpryor@vt.edu>

	* ChangeLog: Added/Started.
	* Makefile: Added; build monodoc.dll.

