# -*- coding: utf-8 -*-

"""
This macro shows a list of wiki page, exclude wiki-default pages.

$Id: MyTitleIndex.py 4 2006-03-22 03:47:58Z takayama $
"""

import time, re
import string
from StringIO import StringIO

wiki_pages = [
 "CamelCase",        "RecentChanges",
 "TitleIndex",       "TracAccessibility",
 "TracAdmin",        "TracBackup",
 "TracBrowser",      "TracCgi",
 "TracChangeset",    "TracEnvironment",
 "TracFastCgi",      "TracGuide",
 "TracImport",       "TracIni",
 "TracInstall",      "TracInterfaceCustomization",
 "TracLinks",        "TracLogging",
 "TracModPython",    "TracNotification",
 "TracPermissions",  "TracPlugins",
 "TracQuery",        "TracReports",
 "TracRoadmap",      "TracRss",
 "TracSearch",       "TracStandalone",
 "TracSupport",      "TracSyntaxColoring",
 "TracTickets",      "TracTicketsCustomFields",
 "TracTimeline",     "TracUnicode",
 "TracUpgrade",      "TracWiki",
 "WikiDeletePage",   "WikiFormatting",
 "WikiHtml",         "WikiMacros",
 "WikiNewPage",      "WikiPageNames",
 "WikiProcessors",   "WikiRestructuredText",
 "WikiRestructuredTextLinks"
]

def execute(hdf, args, env):
   db = env.get_db_cnx()
   cursor = db.cursor()

   sql = 'SELECT DISTINCT name FROM wiki ORDER BY name'
   cursor.execute(sql)

   buf = StringIO()
   buf.write('<ul>')

   while 1:
      row = cursor.fetchone()
      if row == None:
         break
      if row[0] in wiki_pages:
         continue

      (linktext,title,desc) = getInfo(db,row[0])
      link = env.href.wiki(row[0])

      buf.write('<li><a title="%s" href="%s">' % (title,link))
      buf.write(linktext)
      buf.write('</a>')
      if desc != '':
         buf.write(' -- %s' % desc)
      buf.write('</li>\n')

   buf.write('</ul>')

   return buf.getvalue()

def getInfo(db,name):
   cs = db.cursor()
   desc = name
   # Get the latest revision only.
   cs.execute('SELECT text from wiki where name = \'%s\' order by version desc limit 1' % name)
   csrow = cs.fetchone()
   prefix = ''

   if csrow != None:
      text = csrow[0]
      m  = re.search('=+\s([^=]*)=+',text)
      if m != None:
         desc = string.strip(m.group(1))
   else:
      prefix = "Create "

   title = StringIO()
   title.write("%s%s"%(prefix, desc))
   if prefix != '' or desc == name:
      desc = ''

   return (name,title.getvalue(),desc)

