From 497ca3371ac504df46d716f45b2e88efdede4fd0 Mon Sep 17 00:00:00 2001
From: Martyn Gigg <martyn.gigg@stfc.ac.uk>
Date: Fri, 20 Jun 2014 12:06:13 +0100
Subject: [PATCH] Write out index.html pages for a pre-defined set of
 categories.

Refs #9678
---
 .../inc/MantidCurveFitting/Lorentzian1D.h     |  2 +-
 .../inc/MantidCurveFitting/UserFunction1D.h   |  2 +-
 .../mantiddoc/directives/categories.py        | 28 +++++++++++++++----
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/Lorentzian1D.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/Lorentzian1D.h
index 003c3ed8af3..f1c07330a35 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/Lorentzian1D.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/Lorentzian1D.h
@@ -65,7 +65,7 @@ namespace Mantid
       /// Algorithm's version for identification overriding a virtual method
       virtual int version() const { return (1);}
       /// Algorithm's category for identification overriding a virtual method
-      virtual const std::string category() const { return "Optimization\\FitFunctions";}
+      virtual const std::string category() const { return "Optimization\\FitAlgorithms";}
 
     private:
       
diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/UserFunction1D.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/UserFunction1D.h
index a2fbf12379e..b22a528d06b 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/UserFunction1D.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/UserFunction1D.h
@@ -75,7 +75,7 @@ namespace Mantid
           /// Algorithm's version for identification overriding a virtual method
           virtual int version() const { return (1);}
           /// Algorithm's category for identification overriding a virtual method
-          virtual const std::string category() const { return "Optimization\\FitFunctions";}
+          virtual const std::string category() const { return "Optimization\\FitAlgorithms";}
           ///Summary of algorithms purpose
           virtual const std::string summary() const {return "Fits a histogram from a workspace to a user defined function.";}
       protected:
diff --git a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py
index 43238d5bd0d..893bb3b6b4e 100644
--- a/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py
+++ b/Code/Mantid/docs/sphinxext/mantiddoc/directives/categories.py
@@ -10,10 +10,15 @@ from base import AlgorithmBaseDirective, algorithm_name_and_version
 
 import os
 
-CATEGORY_INDEX_TEMPLATE = "category.html"
+CATEGORY_PAGE_TEMPLATE = "category.html"
 # relative to the directory containing the source file
 CATEGORIES_DIR = "categories"
 
+# List of category names that are considered the index for everything in that type
+# When this category is encountered an additional index.html is written to both the
+# directory of the document and the category directory
+INDEX_CATEGORIES = ["Algorithms", "FitFunctions"]
+
 class LinkItem(object):
     """
     Defines a linkable item with a name and html reference
@@ -96,7 +101,7 @@ class Category(LinkItem):
           name (str): The name of the category
           docname (str): Relative path to document from root directory
         """
-        dirpath, filename = os.path.split(docname) 
+        dirpath, filename = os.path.split(docname)
         html_dir = os.path.join(dirpath, CATEGORIES_DIR)
         self.html_path = os.path.join(html_dir, name + ".html")
 
@@ -279,19 +284,32 @@ def create_category_pages(app):
 
     env = app.builder.env
     # jinja2 html template
-    template = CATEGORY_INDEX_TEMPLATE
+    template = CATEGORY_PAGE_TEMPLATE
 
     categories = env.categories
     for name, category in categories.iteritems():
         context = {}
+        # First write out the named page
         context["title"] = category.name
-        # sort subcategories & pages by first letter
+        # sort subcategories & pages alphabetically
         context["subcategories"] = sorted(category.subcategories, key = lambda x: x.name)
         context["pages"] = sorted(category.pages, key = lambda x: x.name)
         context["outloc"] = os.path.dirname(category.html_path)
 
         #jinja appends .html to output name
-        yield (os.path.splitext(category.html_path)[0], context, template)
+        category_html_path = os.path.splitext(category.html_path)[0]
+        yield (category_html_path, context, template)
+
+        # Now any additional index pages if required
+        if category.name in INDEX_CATEGORIES:
+            # index in categories directory
+            category_html_dir = os.path.dirname(category_html_path)
+            context["outloc"] = category_html_dir
+            yield (category_html_dir + "/index", context, template)
+            # index in document directory
+            document_dir = os.path.dirname(category_html_dir)
+            context["outloc"] = document_dir
+            yield (document_dir + "/index", context, template)
 # enddef
 
 #-----------------------------------------------------------------------------------------------------------
-- 
GitLab