/******************************************************************************* * Copyright (c) 2008, 2011 IBM Corporation 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.ide.core_text; import melnorme.lang.ide.core.TextSettings_Actual; import melnorme.lang.ide.core.utils.EclipseUtils; import melnorme.lang.ide.ui.LangUIPlugin_Actual; import melnorme.utilbox.misc.ArrayUtil; import org.eclipse.core.filebuffers.IDocumentSetupParticipant; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentExtension3; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.rules.IPartitionTokenScanner; public class LangDocumentPartitionerSetup implements IDocumentSetupParticipant { public static final String[] LEGAL_CONTENT_TYPES = ArrayUtil.remove(TextSettings_Actual.PARTITION_TYPES, IDocument.DEFAULT_CONTENT_TYPE); protected static LangDocumentPartitionerSetup instance = new LangDocumentPartitionerSetup(); public static LangDocumentPartitionerSetup getInstance() { return instance; } public LangDocumentPartitionerSetup() { } @Override public void setup(IDocument document) { setupDocument(document); } public FastPartitioner setupDocument(IDocument document) { return setupDocumentPartitioner(document, TextSettings_Actual.PARTITIONING_ID); } public FastPartitioner createDocumentPartitioner() { IPartitionTokenScanner scanner = LangUIPlugin_Actual.createPartitionScanner(); return new FastPartitioner(scanner, LEGAL_CONTENT_TYPES); } protected FastPartitioner setupDocumentPartitioner(IDocument document, String partitioning) { FastPartitioner partitioner = createDocumentPartitioner(); EclipseUtils.setupDocumentPartitioner(document, partitioning, partitioner); return partitioner; } public void setupPartitioningIfNotSet(IDocument document) { if(document instanceof IDocumentExtension3) { IDocumentExtension3 extension3 = (IDocumentExtension3) document; String partitioning = TextSettings_Actual.PARTITIONING_ID; if(extension3.getDocumentPartitioner(partitioning) == null) { IDocumentPartitioner partitioner = createDocumentPartitioner(); partitioner.connect(document); extension3.setDocumentPartitioner(partitioning, partitioner); } } } }