/*=============================================================================# # 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.core.source.extdoc; import de.walware.ecommons.ltk.core.SourceContent; import de.walware.docmlet.wikitext.core.source.BlockWeaveParticipant; public class YamlBlockWeaveParticipant extends BlockWeaveParticipant { private SourceContent sourceContent; private int start; private int startMarker; public YamlBlockWeaveParticipant() { } @Override public String getForeignTypeId() { return IExtdocMarkupLanguage.EMBEDDED_YAML; } @Override public int getEmbedDescr() { return IExtdocMarkupLanguage.EMBEDDED_YAML_METADATA_CHUNK_DESCR; } @Override public void reset(final SourceContent content) { this.sourceContent= content; this.start= -1; } @Override public boolean checkStartLine(final int beginOffset, final int endOffset) { final String text= this.sourceContent.getText(); int offset= beginOffset; switch (endOffset - beginOffset) { case 1: if (text.charAt(offset) == '\n') { offset++; break; } return false; case 2: if (text.charAt(offset) == '\r' && text.charAt(offset + 1) == '\n') { offset+= 2; break; } return false; default: if (beginOffset == 0 && this.sourceContent.getBeginOffset() == 0) { break; } return false; } if (text.regionMatches(offset, "---", 0, 3)) { //$NON-NLS-1$ this.start= beginOffset; this.startMarker= offset; return true; } return false; } @Override public int getStartOffset() { return this.start; } @Override public boolean checkEndLine(final int beginOffset, final int endOffset) { if (beginOffset <= this.startMarker) { return false; } final String text= this.sourceContent.getText(); return text.regionMatches(beginOffset, "---", 0, 3) //$NON-NLS-1$ || text.regionMatches(beginOffset, "...", 0, 3); //$NON-NLS-1$ } @Override protected void appendReplacement(final StringBuilder sb, final String source, final int beginOffset, final int endOffset) { sb.append("\n\n"); //$NON-NLS-1$ } @Override protected int getTextLength() { return 0; } }