You've already forked linux-packaging-mono
Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
parent
e49d6f06c0
commit
536cd135cc
153
external/api-doc-tools/monodoc/Monodoc/providers/simple-provider.cs
vendored
Normal file
153
external/api-doc-tools/monodoc/Monodoc/providers/simple-provider.cs
vendored
Normal file
@ -0,0 +1,153 @@
|
||||
//
|
||||
// The simple provider is an example provider
|
||||
//
|
||||
// Author:
|
||||
// Miguel de Icaza (miguel@ximian.com)
|
||||
//
|
||||
// Use like this:
|
||||
// mono assembler.exe --simple DIRECTORY --out name
|
||||
//
|
||||
// Then create a .source file in your sources directory, and copy
|
||||
// name.tree and name.zip to the sources directory.
|
||||
//
|
||||
// To view the tree generated, use:
|
||||
// mono dump.exe name.tree
|
||||
//
|
||||
namespace Monodoc {
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
//
|
||||
// The simple provider generates the information source
|
||||
//
|
||||
public class SimpleProvider : Provider {
|
||||
string basedir;
|
||||
|
||||
public SimpleProvider (string base_directory)
|
||||
{
|
||||
basedir = base_directory;
|
||||
if (!Directory.Exists (basedir))
|
||||
throw new FileNotFoundException (String.Format ("The directory `{0}' does not exist", basedir));
|
||||
}
|
||||
|
||||
public override void PopulateTree (Tree tree)
|
||||
{
|
||||
Node top = tree.LookupNode ("Directory at: " + basedir, "simple:");
|
||||
|
||||
foreach (string dir in Directory.GetDirectories (basedir)){
|
||||
string url = Path.GetFileName (dir);
|
||||
Node n = top.LookupNode ("Dir: " + url, url);
|
||||
PopulateDir (n, dir);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning disable 219
|
||||
void PopulateDir (Node me, string dir)
|
||||
{
|
||||
Console.WriteLine ("Adding: " + dir);
|
||||
foreach (string child_dir in Directory.GetDirectories (dir)){
|
||||
string url = Path.GetFileName (child_dir);
|
||||
Node n = me.LookupNode ("Dir: " + url, "simple-directory:" + url);
|
||||
PopulateDir (me, child_dir);
|
||||
}
|
||||
|
||||
foreach (string file in Directory.GetFiles (dir)){
|
||||
Console.WriteLine (" File: " + file);
|
||||
string file_code = me.tree.HelpSource.PackFile (file);
|
||||
|
||||
//
|
||||
// The url element encoded for the file is:
|
||||
// originalfilename#CODE
|
||||
//
|
||||
// The code is assigned to us after the file has been packaged
|
||||
// We use the original-filename later to render html or text files
|
||||
//
|
||||
Node n = me.LookupNode (Path.GetFileName (file), file + "#" + file_code);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public override void CloseTree (HelpSource hs, Tree tree)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// The HelpSource is used during the rendering phase.
|
||||
//
|
||||
|
||||
public class SimpleHelpSource : HelpSource {
|
||||
Encoding enc;
|
||||
|
||||
public SimpleHelpSource (string base_file, bool create) : base (base_file, create)
|
||||
{
|
||||
enc = new UTF8Encoding (false, false);
|
||||
}
|
||||
|
||||
public override string GetText (string url, out Node match_node)
|
||||
{
|
||||
match_node = null;
|
||||
|
||||
string c = GetCachedText (url);
|
||||
if (c != null)
|
||||
return c;
|
||||
|
||||
if (url.StartsWith ("simple:") || url.StartsWith ("simple-directory:"))
|
||||
return GetTextFromUrl (url);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
string GetTextFromUrl (string url)
|
||||
{
|
||||
// Remove "simple:" prefix
|
||||
url = url.Substring (7);
|
||||
|
||||
if (url.StartsWith ("simple-directory:"))
|
||||
return String.Format ("<html>This is a directory entry point: {0} </html>",
|
||||
url.Substring (17));
|
||||
|
||||
// Otherwise the last element of the url is the file code we got.
|
||||
int pound = url.LastIndexOf ("#");
|
||||
string code;
|
||||
if (pound == -1)
|
||||
code = url;
|
||||
else
|
||||
code = url.Substring (pound+1);
|
||||
|
||||
|
||||
Stream s = GetHelpStream (code);
|
||||
if (s == null)
|
||||
return String.Format ("<html>No stream for this node: {0} </html>", url);
|
||||
|
||||
//
|
||||
// Now, get the file type
|
||||
//
|
||||
int slash = url.LastIndexOf ("/");
|
||||
string fname = url.Substring (slash + 1, pound - slash - 1).ToLower ();
|
||||
|
||||
if (fname.EndsWith (".html") || fname.EndsWith (".htm")){
|
||||
TextReader r = new StreamReader (s, enc);
|
||||
return r.ReadToEnd ();
|
||||
}
|
||||
|
||||
if (fname.EndsWith (".png") || fname.EndsWith (".jpg") ||
|
||||
fname.EndsWith (".jpeg") || fname.EndsWith (".gif")){
|
||||
return "<html>Image file, have not implemented rendering this yet</html>";
|
||||
}
|
||||
|
||||
// Convert text to HTML
|
||||
StringBuilder result = new StringBuilder ("<html>");
|
||||
TextReader reader = new StreamReader (s, enc);
|
||||
string line;
|
||||
|
||||
while ((line = reader.ReadLine ()) != null){
|
||||
result.Append (line);
|
||||
result.Append ("<br>");
|
||||
}
|
||||
result.Append ("<html>");
|
||||
return result.ToString ();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user