1.1 --- a/moinformat/output/directory.py Mon Aug 06 00:11:08 2018 +0200
1.2 +++ b/moinformat/output/directory.py Mon Aug 06 00:12:38 2018 +0200
1.3 @@ -21,7 +21,7 @@
1.4
1.5 from moinformat.output.common import Output
1.6 from moinformat.utils.directory import Directory
1.7 -from os.path import join, split
1.8 +from os.path import extsep, join, split, splitext
1.9
1.10 class DirectoryOutput(Output):
1.11
1.12 @@ -39,7 +39,9 @@
1.13 Output.__init__(self, parameters)
1.14 self.dir = Directory(parameters["filename"])
1.15 self.dir.ensure()
1.16 - self.index_name = parameters and parameters.get("index_name") or "index"
1.17 +
1.18 + self.index_name = self.parameters.get("index_name") or "index.html"
1.19 + self.page_suffix = self.parameters.get("page_suffix") or "%shtml" % extsep
1.20
1.21 # Convenience methods.
1.22
1.23 @@ -58,15 +60,22 @@
1.24
1.25 "Return the filename corresponding to 'pagename'."
1.26
1.27 - return pagename
1.28 + return "%s%s" % (pagename, self.page_suffix)
1.29
1.30 def to_pagename(self, filename):
1.31
1.32 "Return the pagename corresponding to 'filename'."
1.33
1.34 - # Take the leafname as the pagename from an arbitrary filename.
1.35 + # Take the leafname as the pagename from an arbitrary filename, removing
1.36 + # any file extension.
1.37 +
1.38 + return splitext(split(filename)[-1])[0]
1.39
1.40 - return split(filename)[-1]
1.41 + def to_parent_filename(self, pagename):
1.42 +
1.43 + "Return the parent page filename corresponding to 'pagename'."
1.44 +
1.45 + return pagename
1.46
1.47 # Serialisation methods.
1.48
1.49 @@ -94,32 +103,37 @@
1.50 """
1.51
1.52 dir = self.dir
1.53 -
1.54 - filename = self.to_filename(pagename)
1.55 - parent = split(filename)[0]
1.56 + parent = self.parent(pagename)
1.57
1.58 # The page may have a parent.
1.59
1.60 - if parent and parent != filename:
1.61 + if parent:
1.62 + parentfile = self.to_filename(parent)
1.63 + parentdir = self.to_parent_filename(parent)
1.64
1.65 # Relocate any file for the parent to an index file within a page
1.66 # directory.
1.67
1.68 - if dir.isfile(parent):
1.69 - parent_tmp = "%s.tmp" % parent
1.70 - dir.rename(parent, parent_tmp)
1.71 - dir.makedirs(parent)
1.72 - dir.rename(parent_tmp, join(parent, self.index_name))
1.73 + if dir.isfile(parentfile):
1.74 + parent_tmp = "%s.tmp" % parentfile
1.75 + dir.rename(parentfile, parent_tmp)
1.76 + if not dir.exists(parentdir):
1.77 + dir.makedirs(parentdir)
1.78 + dir.rename(parent_tmp, join(parentdir, self.index_name))
1.79
1.80 # Or make a directory for the parent.
1.81
1.82 - elif not dir.exists(parent):
1.83 - dir.makedirs(parent)
1.84 + elif not dir.exists(parentdir):
1.85 + dir.makedirs(parentdir)
1.86
1.87 # Write to an index filename within any existing directory.
1.88
1.89 - if dir.isdir(filename):
1.90 - filename = join(filename, self.index_name)
1.91 + dirname = self.to_parent_filename(pagename)
1.92 +
1.93 + if dir.isdir(dirname):
1.94 + filename = join(dirname, self.index_name)
1.95 + else:
1.96 + filename = self.to_filename(pagename)
1.97
1.98 self.writefile(text, filename, encoding)
1.99