/******************************************************************************* * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.recipeeditor; 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.IPredicateRule; import org.eclipse.jface.text.rules.RuleBasedPartitionScanner; import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.Token; import org.eclipse.ui.editors.text.FileDocumentProvider; public class RecipeDocumentProvider extends FileDocumentProvider { /** * The recipe partitioning. It contains two partition types: {@link #RECIPE_CODE} and * {@link #RECIPE_COMMENT}. */ public static final String RECIPE_PARTITIONING= "org.recipeeditor.recipepartitioning"; //$NON-NLS-1$ /** * The identifier of the comment body type. */ public static final String RECIPE_CODE= IDocument.DEFAULT_CONTENT_TYPE; /** * The identifier of the comment partition type. */ public static final String RECIPE_COMMENT= "RECIPE_COMMENT"; //$NON-NLS-1$ private static final String[] CONTENT_TYPES= { RECIPE_CODE, RECIPE_COMMENT }; protected void setupDocument(Object element,IDocument document) { if (document instanceof IDocumentExtension3) { IDocumentExtension3 ext= (IDocumentExtension3) document; IDocumentPartitioner partitioner= createRecipePartitioner(); ext.setDocumentPartitioner(RECIPE_PARTITIONING, partitioner); partitioner.connect(document); } } private IDocumentPartitioner createRecipePartitioner() { IPredicateRule[] rules= { new SingleLineRule("#", null, new Token(RECIPE_COMMENT), (char) 0, true, false) }; //$NON-NLS-1$ RuleBasedPartitionScanner scanner= new RuleBasedPartitionScanner(); scanner.setPredicateRules(rules); return new FastPartitioner(scanner, CONTENT_TYPES); } }