/**
 * D Documentation Generator
 * Copyright: © 2014 Economic Modeling Specialists, Intl.
 * Authors: Brian Schott
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt Boost License 1.0)
 */
module macros;

import std.regex;
import std.file;
import std.array;
import std.string;
import std.stdio;

/**
 * Reads macros from the file with the given name and stores them in the given
 * AA.
 */
void readMacroFile(string fileName, ref string[string] macros)
{
	if (!exists(fileName))
	{
		throw new Exception("Could not read macro definitions from " ~ fileName
			~ " because it does not exist.");
	}
	string currentMacroName;
	foreach (line; File(fileName, "r").byLine(KeepTerminator.no))
	{
		if (line.strip.length == 0)
			continue;
		auto m = line.matchAll(`^([\w_]+)\s*=\s*(.+)?`);
		if (m.empty)
		{
			macros[currentMacroName] = format("%s\n%s", macros[currentMacroName], line);
			continue;
		}
		else
		{
			currentMacroName = m.front[1].idup;
			macros[currentMacroName] = m.front.length > 1 ? m.front[2].idup : "";
		}
	}
}