#!/usr/bin/env python
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See http://swift.org/LICENSE.txt for license information
# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors

import argparse
import os
import re
import sys

parser = argparse.ArgumentParser(
    description="""
Take the file at <path> and write it to multiple files, switching to a new file
every time an annotation of the form "// BEGIN file1.swift" is encountered. If
<dir> is specified, place the files in <dir>; otherwise, put them in the
current directory.
""")
parser.add_argument(
    "-o", dest="out_dir", default=".", metavar="<dir>",
    help="directory path where the output files are placed in. "
         "(defaults to current directory)")
parser.add_argument(
    "input", type=argparse.FileType("r"), nargs="?", default=sys.stdin,
    metavar="<path>",
    help="input file. (defaults to stdin)")
args = parser.parse_args()

fp_out = None

for line in args.input:
    m = re.match(r'^//\s*BEGIN\s+([^\s]+)\s*$', line)
    if m:
        if fp_out:
            fp_out.close()
        fp_out = open(os.path.join(args.out_dir, m.group(1)), 'w')
    elif fp_out:
        fp_out.write(line)

args.input.close()
if fp_out:
    fp_out.close()
