Switched to certik's Python rewrite

This commit is contained in:
mpj
2009-11-15 16:12:35 +00:00
parent 6a28e580c6
commit 704fb7f115
2 changed files with 73 additions and 34 deletions
+19 -12
View File
@@ -2,7 +2,7 @@
Sphinx to GitHub
================
A basic shell script for preparing the html output of the sphinx documentation
A Python script for preparing the html output of the sphinx documentation
system for github pages.
It renames any top level folders which start with an underscore and edits any
@@ -19,24 +19,31 @@ start of folder names for static content.
How?
----
The script should be run from the top level of the html output, ie. from within
the folder which contains ``index.html`` and the offending underscore folders.
Run the script with the path to the ``html`` output directory as the first
argument.
Requirements
------------
To uses:
* bash
* sed
Might make sense to have a pure python script but ``sed`` makes it so easy.
The script uses ``/usr/bin/env`` and ``python``.
Note
----
This has been written and tested for a very basic project. If you find
complications within more involved setups please let me know and/or patch up the
code a little.
The first incarnation of this script was written in bash using ``find`` and
``sed``. It was delightfully old school but not very portable and not very fast.
It is available as ``sphinx-to-github.legacy`` because the author isn't ready to
let go yet.
Credits
-------
Thank you to:
* `mikejs <http://github.com/mikejs>`
* `certik <http://github.com/certik>`
For their contributions, to Georg Brandl for `Sphinx <http://sphinx.pocoo.org/>`
and the github crew for the pages functionality.
+54 -22
View File
@@ -1,23 +1,55 @@
#!/bin/bash
sed=`which gsed || which sed`
for underscore_folder in _*
do
echo "Processing matches for: " $underscore_folder
folder_without_underscore=`echo -n $underscore_folder | $sed 's/^.//'`
for underscore_file in $( find $underscore_folder -type f )
do
file_without_underscore=`echo -n $underscore_file | $sed 's/^.//'`
for file in $( find . -type f -name "*.html" )
do
$sed -i "s/${underscore_file//\//\/}/${file_without_underscore//\//\/}/g" $file
done
done
mv $underscore_folder $folder_without_underscore
done
#! /usr/bin/env python
import os
import sys
import re
dir = sys.argv[1]
def convert_file(file, convert_dict):
print "Converting: %s" % file
text = open(file).read()
for old_link in convert_dict:
new_link = convert_dict[old_link]
text = text.replace(old_link, new_link)
open(file, "w").write(text)
def remove_underscores(path):
i = path.find("_")
if i != -1:
path = path[:i] + path[i+1:]
return remove_underscores(path)
else:
return path
def strip_beginning_dotslash(path):
if "./" == path[:2]:
path = path[2:]
return path
# build up the global dictionary with files we need to convert:
d = {}
for old_root, dirs, files in os.walk(dir):
if "_" in old_root:
new_root = remove_underscores(old_root)
assert new_root != old_root
os.mkdir(new_root)
for file in files:
old_path = os.path.join(old_root, file)
new_path = os.path.join(new_root, file)
os.rename(old_path, new_path)
new_path = strip_beginning_dotslash(new_path)
old_path = strip_beginning_dotslash(old_path)
d[old_path] = new_path
# delete the old "_" directories
for old_root, dirs, files in os.walk(dir, topdown=False):
if "_" in old_root:
os.rmdir(old_root)
# convert all html files:
for root, dirs, files in os.walk(dir):
for file in files:
if file.endswith(".html"):
convert_file(os.path.join(root, file), d)