/*
* Copyright (C) 2010 Medo <smaxein@googlemail.com>
*
* This file is part of GmkSplitter.
* GmkSplitter is free software and comes with ABSOLUTELY NO WARRANTY.
* See LICENSE for details.
*/
package com.ganggarrison.gmdec.files;
import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.lateralgm.file.GmFile;
import org.lateralgm.resources.Script;
import org.lateralgm.resources.Script.PScript;
import com.ganggarrison.gmdec.DeferredReferenceCreatorNotifier;
import com.ganggarrison.gmdec.FileTools;
import com.ganggarrison.gmdec.GmkSplitter;
import com.ganggarrison.gmdec.ResourceTreeEntry;
import com.ganggarrison.gmdec.GmkSplitter.IdPreservation;
public class ScriptFormat extends ResourceFormat<Script> {
@Override
public Script read(File path, ResourceTreeEntry entry, DeferredReferenceCreatorNotifier drcn) throws IOException {
File scriptFile = new File(path, baseFilename(entry) + ".gml");
Script script = new Script();
script.setName(entry.name);
StringBuilder code = new StringBuilder(FileTools.readFileAsString(scriptFile));
Pattern pattern = Pattern.compile("/\\* !scriptId=(\\d+) \\*/\r\n");
Matcher matcher = pattern.matcher(code);
if (matcher.find()) {
if (GmkSplitter.preserveIds == IdPreservation.ALL) {
script.setId(Integer.valueOf(matcher.group(1)));
}
code.delete(matcher.start(), matcher.end());
}
script.put(PScript.CODE, code.toString());
return script;
}
@Override
public void write(File path, Script script, GmFile gmf) throws IOException {
File scriptFile = new File(path, baseFilename(script) + ".gml");
StringBuilder code = new StringBuilder(script.getCode());
if (GmkSplitter.preserveIds == IdPreservation.ALL) {
code.insert(0, "/* !scriptId=" + script.getId() + " */\r\n");
}
FileTools.writeFile(scriptFile, code.toString());
}
}