rstprocess.py 3.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# -*- coding: utf-8 -*-
# Copyright (C) 2017 Garth N. Wells
#
# This file is part of DOLFIN.
#
# DOLFIN is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DOLFIN is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.

import sys
import os
import shutil

def process():
    """Copy demo rst files (C++ and Python) from the DOLFIN source tree
    into the demo source tree, and process file with pylit.
    """

    # Check that we can find pylint.py for converting foo.py.rst to
    # foo.py
Jeremy BLEYER's avatar
Jeremy BLEYER committed
30
    pylit_parser = "../utils/pylit/pylit.py"
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
    if not os.path.isfile(pylit_parser):
        raise RuntimeError("Cannot find pylit.py")

    # Directories to scan
    subdirs = ["../examples"]

    # Iterate over subdirectories containing demos
    for subdir in subdirs:

        # Get list of demos (demo name , subdirectory)
        demos = [(dI, os.path.join(subdir, dI)) for dI in os.listdir(subdir) if os.path.isdir(os.path.join(subdir, dI))]

        # Iterate over demos
        for demo, path in demos:

            # Process C++ and Python versions
            for version in ("."):

                # Get path to demo source directory (cpp/python) and
                # check that it exists
                version_path = os.path.join(path, version)
                if not os.path.isdir(version_path):
                    continue

                # Build list of rst files in demo source directory
                rst_files = [f for f in os.listdir(version_path) if os.path.splitext(f)[1] == ".rst" ]

                # Create directory in documentation tree for demo
                demo_dir = os.path.join('./demo/', demo, version)
                if not os.path.exists(demo_dir):
                    os.makedirs(demo_dir)

                # Copy rst files into documentation demo directory and process with Pylit
                for f in rst_files:
                    shutil.copy(os.path.join(version_path, f), demo_dir)

                    # Run pylit on cpp.rst and py.rst files (file with 'double extensions')
                    if os.path.splitext(os.path.splitext(f)[0])[1] in (".py"):
                        rst_file = os.path.join(demo_dir, f)
                        command = pylit_parser + " " + rst_file
Jeremy BLEYER's avatar
Jeremy BLEYER committed
71
                        ret = os.system("python "+command)
72 73 74
                        if not ret == 0:
                            raise RuntimeError("Unable to convert rst file to a .py ({})".format(f))

Jeremy BLEYER's avatar
Jeremy BLEYER committed
75
                png_files = [f for f in os.listdir(version_path) if os.path.splitext(f)[1] in [".png",".gif"] ]
76 77 78 79
                for f in png_files:
                    source = os.path.join(version_path, f)
                    print("Copying {} to {}".format(source, demo_dir)) 
                    shutil.copy(source, demo_dir)