/******************************************************************************* * Copyright (c) 2010 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: IBM Corporation - initial API and * implementation *******************************************************************************/ package org.eclipse.wst.sse.ui.internal.comment; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IRegion; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; /** * <p> * Represents a Line Comment commenting strategy * </p> */ public class LineCommentingStrategy extends CommentingStrategy { /** the prefix of the line comment associated with this strategy */ private String fPrefix; /** * @param prefix the prefix of the line comment associated with this strategy */ public LineCommentingStrategy(String prefix) { super(); this.fPrefix = prefix; } /** * <p> * Assumes that the given offset is at the begining of a line and adds the line comment prefix * there * </p> * * @see org.eclipse.wst.sse.ui.internal.comment.CommentingStrategy#apply(org.eclipse.wst.sse.core.internal.provisional.IStructuredModel, * int, int) */ public void apply(IStructuredDocument document, int offset, int length) throws BadLocationException { document.replace(offset, 0, this.fPrefix + " "); } /** * <p> * Assumes that the given offset is at the beginning of a line that is commented and removes the * comment prefix from the beginning of the line, leading whitespace on the line will not prevent * this method from finishing correctly * </p> * * @see org.eclipse.wst.sse.ui.internal.comment.CommentingStrategy#remove(org.eclipse.wst.sse.core.internal.provisional.IStructuredModel, * int, int, boolean) */ public void remove(IStructuredDocument document, int offset, int length, boolean removeEnclosing) throws BadLocationException { String content = document.get(offset, length); int innerOffset = content.indexOf(this.fPrefix); if (innerOffset > 0) { offset += innerOffset; } uncomment(document, offset, this.fPrefix, -1, null); } /** * <p> * A region is already commented if it begins with the the associated prefix ignoring any leading * whitespace * </p> * * @see org.eclipse.wst.sse.ui.internal.comment.CommentingStrategy#alreadyCommenting(org.eclipse.jface.text.IDocument, * org.eclipse.jface.text.IRegion) */ public boolean alreadyCommenting(IStructuredDocument document, IRegion region) throws BadLocationException { String regionContent = document.get(region.getOffset(), region.getLength()).trim(); return regionContent.startsWith(this.fPrefix); } /** * @see org.eclipse.wst.sse.ui.internal.comment.CommentingStrategy#clone() */ public Object clone() { return new LineCommentingStrategy(this.fPrefix); } }