/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved. * * Oracle and Java are registered trademarks of Oracle and/or its affiliates. * Other names may be trademarks of their respective owners. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the GPL Version 2 section of the License file that * accompanied this code. If applicable, add the following below the * License Header, with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * Contributor(s): * * The Original Software is NetBeans. The Initial Developer of the Original * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun * Microsystems, Inc. All Rights Reserved. * * If you wish your version of this file to be governed by only the CDDL * or only the GPL Version 2, indicate your decision by adding * "[Contributor] elects to include this software in this distribution * under the [CDDL or GPL Version 2] license." If you do not indicate a * single choice of license, a recipient has the option to distribute * your version of this file under either the CDDL, the GPL Version 2 or * to extend the choice of license to its licensees as provided above. * However, if you add GPL Version 2 code and therefore, elected the GPL * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ package org.netbeans.lib.lexer.test.dump; import java.util.Collection; import java.util.EnumSet; import java.util.Set; import org.netbeans.api.lexer.Language; import org.netbeans.api.lexer.TokenId; import org.netbeans.spi.lexer.LanguageHierarchy; import org.netbeans.spi.lexer.Lexer; import org.netbeans.spi.lexer.LexerRestartInfo; /** * Ids for parsing of the input file of a particular language * for the token dump check. * <br/> * The text of the special tokens is interlarded with dots * to eliminate the possibility that the particular special token will clash * with the target language. * * @author mmetelka */ public enum TokenDumpTokenId implements TokenId { /** Single line of text without newline. */ TEXT(null), /** Unicode character as line containing ".\.u.XXXX." only where XXXX * is sequence of (lowercase or uppercase) hex digits. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the character. */ UNICODE_CHAR("character"), /** Line containing ".\.b." only defines \b char in the input. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the \b character. */ BACKSPACE_CHAR("character"), /** Line containing ".\.f." only defines \f char in the input. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the \f character. */ FORM_FEED_CHAR("character"), /** Line containing ".\.b." only defines \b char in the input. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the \b character. */ CR_CHAR("character"), /** Line containing ".\.r." only defines \r char in the input. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the \r character. */ NEWLINE_CHAR("character"), /** Line containing ".\.t." only defines \t char in the input. * <code>(Character)Token.getProperty({@link UNICODE_CHAR_TOKEN_PROPERTY}))</code> * gives the \t character. */ TAB_CHAR("character"), /** EOF mark as line containing ".e.o.f." only. * It helps to separate tests and test lexer's behavior at the end of buffer. */ EOF_VIRTUAL(null), /** Test name as line starting with ".t.e.s.t." to help debugging * where a possible problem occurred. It should be used at begining * or inside a test between virtual eofs. */ TEST_NAME(null), /** Newline '\r', '\n' or '\r\n'. * <br/> * The test itself will replace this with '\n' because otherwise the output * of the token dump would contain the particular line separator depending on the platform * where the file would be checked out which would break the test. * <br/> * To test specific line separators the {@link #CR_CHAR} or {@link #NEWLINE_CHAR} may be used. */ NEWLINE(null); private String primaryCategory; private TokenDumpTokenId(String primaryCategory) { this.primaryCategory = primaryCategory; } public String primaryCategory() { return primaryCategory; } private static final Language<TokenDumpTokenId> lang = new LanguageHierarchy<TokenDumpTokenId>() { @Override protected String mimeType() { return "text/x-eof-mark"; } @Override protected Collection<TokenDumpTokenId> createTokenIds() { return EnumSet.allOf(TokenDumpTokenId.class); } @Override protected Lexer<TokenDumpTokenId> createLexer(LexerRestartInfo<TokenDumpTokenId> info) { return new TokenDumpLexer(info); } }.language(); public static Language<TokenDumpTokenId> language() { return lang; } private static Set<TokenDumpTokenId> charLiterals; public static boolean isCharLiteral(TokenDumpTokenId id) { Set<TokenDumpTokenId> catMembers = charLiterals; if (catMembers == null) { catMembers = language().tokenCategoryMembers("character"); charLiterals = catMembers; } return catMembers.contains(id); } /** * Token property giving the unicode character value. */ public static final String UNICODE_CHAR_TOKEN_PROPERTY = "unicode-char"; }