Move macros in sys/
[geekigeeki_data.git] / sys / macros / WordIndex.py
diff --git a/sys/macros/WordIndex.py b/sys/macros/WordIndex.py
new file mode 100644 (file)
index 0000000..635ef6b
--- /dev/null
@@ -0,0 +1,33 @@
+#acl bernie:read,write All:read
+
+def _macro_WordIndex(*args, **kvargs):
+    s = make_index_key()
+    pages = list(page_list())
+    map = {}
+    word_re = re.compile('[A-Z][a-z]+')
+    for name in pages:
+        for word in word_re.findall(name):
+            try:
+                map[word].append(name)
+            except KeyError:
+                map[word] = [name]
+
+    all_words = list(map.keys())
+    all_words.sort()
+    last_letter = None
+    # set title
+    for word in all_words:
+        letter = word[0].lower()
+        if letter != last_letter:
+            s += '<a name="%s"><h3>%s</h3></a>' % (letter, letter)
+            last_letter = letter
+
+        s += '<b>%s</b><ul>' % word
+        links = map[word]
+        links.sort()
+        last_page = None
+        for name in links:
+            if name == last_page: continue
+            s += '<li>' + link_tag(name) + '</li>'
+        s += '</ul>'
+    return s