FileNotFoundException {
if (file == null) throw new IllegalArgumentException("file is null.");
if (isDebugEnabled()) debug("build: " + file.getAbsolutePath());
XhtmlTemplate template = new XhtmlTemplate(templateName);
template.setTimeStamp(file.lastModified());
XhtmlStruct struct = parse(file, charset);
// extendsの処理
if (struct.getBaseTemplate() != null) {
try {
// 継承テンプレート
// block部分を抽出する(this.blocksに格納される)
XhtmlTemplate subTemplate = new XhtmlTemplate(templateName);
buildTemplate(subTemplate, struct, null, charset);
// TODO 相対パスの解決
File baseFile = loader.toFile(struct.getBaseTemplate(), templateName);
// ベースのテンプレート
XhtmlStruct baseStruct = parse(baseFile, charset);
buildTemplate(template, baseStruct, blocks, charset);
template.components.addAll(subTemplate.components);
for (String name : subTemplate.functions.keySet()) {
template.functions.put(name, subTemplate.functions.get(name));
}