Mercurial > projects > mde
view mde/file/mergetag/MTTagWriter.d @ 151:e785e98d3b78
Updated for compatibility with tango 0.99.8.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 04 Apr 2009 17:32:18 +0200 |
parents | 9f035cd139c6 |
children | 1cbde9807293 |
line wrap: on
line source
/* LICENSE BLOCK Part of mde: a Modular D game-oriented Engine Copyright © 2007-2008 Diggory Hardy This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /****************************************************************************** * This module contains a simpler, easier to use, mergetag writer. *****************************************************************************/ module mde.file.mergetag.MTTagWriter; import mde.file.mergetag.internal; import mde.file.mergetag.exception; import tango.io.device.File; import tango.io.stream.Buffered; import tango.util.log.Log : Log, Logger; private Logger logger; static this() { logger = Log.getLogger ("mde.file.mergetag.MTTagWriter"); } MTTagWriter getMTTagWriter (char[] path) { if (path.length > 4 && path[$-4..$] == ".mtt") return new MTTTagWriter (path); else if (path.length > 4 && path[$-4..$] == ".mtb") return new MTBTagWriter (path); else { logger.error ("Unable to determine writing format: text or binary"); throw new MTFileFormatException; } } abstract class MTTagWriter { /// Set the current section void sectionTag (char[] section); /// Write a data tag void dataTag (char[] type, char[] id, char[] data); /// Change the section if necessary and write a data tag void writeTag (char[] section, char[] type, char[] id, char[] data) { if (section != sec) sectionTag (section); dataTag (type, id, data); } /// Close the file void close (); protected: char[] sec; // current section } class MTTTagWriter : MTTagWriter { /** Opens the file path for writing. Call close() when done! */ this (char[] path) { buffer = new BufferedOutput (new File (path, File.WriteCreate)); buffer.append ("{" ~ CurrentVersionString ~ "}" ~ Eol); } void sectionTag (char[] section) { sec = section; buffer.append ("{" ~ section ~ "}" ~ Eol); } void dataTag (char[] type, char[] id, char[] data) { buffer.append ("<" ~ type ~ "|" ~ id ~"=" ~ data ~ ">" ~ Eol); } void close () { buffer.flush; buffer.close; } private: scope BufferedOutput buffer; } class MTBTagWriter : MTTagWriter { this (char[] path) { throw new MTNotImplementedException; } void sectionTag (char[] section) {} void dataTag (char[] type, char[] id, char[] data) {} void close () {} }