/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.editor.php.formatter; import com.aptana.core.util.StringUtil; import com.aptana.formatter.FormatterContext; import com.aptana.formatter.nodes.IFormatterContainerNode; import com.aptana.formatter.nodes.IFormatterNode; /** * A PHP formatter context. * * @author Shalom Gibly <sgibly@aptana.com> */ public class PHPFormatterContext extends FormatterContext { /** * @param indent */ public PHPFormatterContext(int indent) { super(indent); } /** * Returns true only if the given node is a container node (of type {@link IFormatterContainerNode}). * * @param node * An {@link IFormatterNode} * @return True only if the given node is a container node; False, otherwise. * @see com.aptana.formatter.FormatterContext#isCountable(com.aptana.formatter.nodes.IFormatterNode) */ protected boolean isCountable(IFormatterNode node) { return node instanceof IFormatterContainerNode; } /** * Check if the char sequence starts with a /* sequence, a /**, # or a // sequence. If so, return the length of the * sequence; Otherwise, return 0. * * @see com.aptana.formatter.IFormatterContext#getCommentStartLength(CharSequence, int) */ public int getCommentStartLength(CharSequence chars, int offset) { int sequenceLength = chars.length(); if (sequenceLength > offset) { char c = chars.charAt(offset); if (c == '*' || c == '#') { return 1; } if (c == '/') { if (sequenceLength > offset + 1) { char secondChar = chars.charAt(offset + 1); if (secondChar == '/') { // we have a single line comment return 2; } else if (secondChar == '*') { // we have a multi-line comment, but we still need to determine its nature if (sequenceLength > offset + 2 && chars.charAt(offset + 2) == '*') { return 3; } return 2; } } } } return 0; } /* * (non-Javadoc) * @see com.aptana.formatter.IFormatterContext#getWrappingCommentPrefix(java.lang.String) */ public String getWrappingCommentPrefix(String text) { if (text != null) { if (text.startsWith("*") || text.startsWith("/*")) //$NON-NLS-1$ //$NON-NLS-2$ { return " * "; //$NON-NLS-1$ } if (text.startsWith("//")) //$NON-NLS-1$ { return "// "; //$NON-NLS-1$ } if (text.startsWith("#")) //$NON-NLS-1$ { return "# "; //$NON-NLS-1$ } } return StringUtil.EMPTY; } }