/*=============================================================================# # Copyright (c) 2014-2016 Stephan Wahlbrink (WalWare.de) and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Stephan Wahlbrink - initial API and implementation #=============================================================================*/ package de.walware.docmlet.wikitext.internal.core.model; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import de.walware.jcommons.string.InternStringCache; import de.walware.ecommons.ltk.IProblemRequestor; import de.walware.ecommons.ltk.ast.IEmbeddingAstNode; import de.walware.ecommons.ltk.core.SourceContent; import de.walware.ecommons.text.core.input.StringParserInput; import de.walware.docmlet.tex.core.TexCore; import de.walware.docmlet.tex.core.ast.LtxParser; import de.walware.docmlet.tex.core.ast.SourceComponent; import de.walware.docmlet.tex.core.commands.TexCommandSet; import de.walware.docmlet.tex.core.model.TexModel; import de.walware.docmlet.wikitext.core.ast.Embedded; import de.walware.docmlet.wikitext.core.markup.IMarkupLanguage; import de.walware.docmlet.wikitext.core.model.EmbeddingReconcileItem; import de.walware.docmlet.wikitext.core.model.IWikidocModelInfo; import de.walware.docmlet.wikitext.core.model.IWikidocSuModelContainerEmbeddedExtension; public class LtxReconcilerExtension implements IWikidocSuModelContainerEmbeddedExtension { private final StringParserInput raInput= new StringParserInput(0x1000); private final LtxParser raParser; public LtxReconcilerExtension() { this.raParser= new LtxParser(null, new InternStringCache(0x20)); } @Override public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list, final IMarkupLanguage markupLanguage, final int level, final IProgressMonitor monitor) { this.raInput.reset(content.getText()); final TexCommandSet commandSet= TexCore.getWorkbenchAccess().getTexCommandSet(); for (final IEmbeddingAstNode embeddingNode : list) { if (embeddingNode.getForeignTypeId() != TexModel.LTX_TYPE_ID) { continue; } final SourceComponent component= this.raParser.parse( this.raInput.init(embeddingNode.getOffset(), embeddingNode.getEndOffset()), embeddingNode, commandSet ); embeddingNode.setForeignNode(component); } } @Override public void reconcileEmbeddedModel(final SourceContent content, final IWikidocModelInfo wikitextModel, final List<EmbeddingReconcileItem> list, final int level, final IProgressMonitor monitor) { } @Override public void reportEmbeddedProblems(final SourceContent content, final IWikidocModelInfo wikitextModel, final IProblemRequestor problemRequestor, final int level, final IProgressMonitor monitor) { } }