001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     bstefanescu
011 *
012 * $Id$
013 */
014
015package org.nuxeo.ecm.platform.rendering.wiki;
016
017import java.io.IOException;
018import java.io.Reader;
019import java.io.Writer;
020import java.util.ArrayList;
021import java.util.HashMap;
022import java.util.List;
023import java.util.Map;
024
025import org.apache.commons.logging.Log;
026import org.apache.commons.logging.LogFactory;
027import org.wikimodel.wem.WikiParserException;
028import org.wikimodel.wem.common.CommonWikiParser;
029
030/**
031 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
032 */
033public class WikiSerializer {
034
035    public static final Log log = LogFactory.getLog(WikiSerializer.class);
036
037    protected final CommonWikiParser parser;
038
039    protected final Map<String, WikiMacro> macros = new HashMap<String, WikiMacro>();
040
041    protected final List<WikiFilter> filters = new ArrayList<WikiFilter>();
042
043    public WikiSerializer() {
044        parser = new CommonWikiParser();
045        registerMacro(new TocMacro());
046    }
047
048    public void registerMacro(WikiMacro macro) {
049        macros.put(macro.getName(), macro);
050    }
051
052    public void addFilter(WikiFilter filter) {
053        filters.add(filter);
054    }
055
056    public void serialize(Reader reader, Writer writer) throws IOException, WikiParserException {
057        WikiSerializerHandler serializer = new WikiSerializerHandler(this);
058        parser.parse(reader, serializer);
059        serializer.getWriter().writeTo(serializer, writer);
060        writer.flush();
061    }
062
063}