/*=============================================================================#
# Copyright (c) 2009-2016 Stephan Wahlbrink (WalWare.de) 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:
# Stephan Wahlbrink - initial API and implementation
#=============================================================================*/
package de.walware.docmlet.tex.core.commands;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import com.ibm.icu.text.Collator;
import com.ibm.icu.text.RuleBasedCollator;
public class TexCommand implements Comparable<TexCommand> {
public static final int MASK_MAIN = 0xf;
public static final int MASK_C2 = 0xff;
public static final int MASK_C3 = 0xfff;
public static final int GENERICENV = 0x1;
public static final int C2_GENERICENV_BEGIN = GENERICENV | 0x10;
public static final int C2_GENERICENV_END = GENERICENV | 0x20;
public static final int ENV = 0x2;
public static final int C2_ENV_MATH_BEGIN = ENV | 0x10;
public static final int C3_ENV_MATH_INLINE_BEGIN = C2_ENV_MATH_BEGIN | 0x100;
public static final int C3_ENV_MATH_DISPLAY_BEGIN = C2_ENV_MATH_BEGIN | 0x200;
public static final int C2_ENV_DOCUMENT_BEGIN = ENV | 0x20;
public static final int C2_ENV_VERBATIM_BEGIN = ENV | 0x30;
public static final int C2_ENV_COMMENT_BEGIN = ENV | 0x40;
public static final int C2_ENV_ELEMENT_BEGIN = ENV | 0x70;
public static final int C3_ENV_ELEMENT_QUOTE_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x100;
public static final int C3_ENV_ELEMENT_LISTS_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x300;
public static final int C3_ENV_ELEMENT_TABLES_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x400;
public static final int C3_ENV_ELEMENT_IMAGES_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x500;
public static final int C3_ENV_ELEMENT_FLOATS_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x700;
public static final int C3_ENV_ELEMENT_ALIGN_BEGIN = C2_ENV_ELEMENT_BEGIN | 0x800;
public static final int C2_ENV_MATHCONTENT_BEGIN = ENV | 0x80;
public static final int C2_ENV_OTHER_BEGIN = ENV | 0xf0;
public static final int VERBATIM_INLINE = 0x3;
public static final int PREAMBLE = 0x4;
public static final int C2_PREAMBLE_DOCDEF = PREAMBLE | 0x10;
public static final int C2_PREAMBLE_PACKAGE = PREAMBLE | 0x20;
public static final int C2_PREAMBLE_CONTROLDEF = PREAMBLE | 0x30;
public static final int C3_PREAMBLE_CONTROLDEF_COMMAND = C2_PREAMBLE_CONTROLDEF | 0x100;
public static final int C3_PREAMBLE_CONTROLDEF_ENV = C2_PREAMBLE_CONTROLDEF | 0x200;
public static final int C2_PREAMBLE_MISC = PREAMBLE | 0x60;
public static final int DOCUMENT = 0x5;
public static final int C2_DOCUMENT_INCLUDE = DOCUMENT | 0x10;
public static final int C2_DOCUMENT_ELEMENT = DOCUMENT | 0x20;
public static final int C3_DOCUMENT_ELEMENT_LISTS = C2_DOCUMENT_ELEMENT | 0x300;
public static final int C3_DOCUMENT_ELEMENT_TABLES = C2_DOCUMENT_ELEMENT | 0x400;
public static final int C3_DOCUMENT_ELEMENT_IMAGES = C2_DOCUMENT_ELEMENT | 0x500;
public static final int C2_DOCUMENT_CONTENTLISTS = DOCUMENT | 0x30;
public static final int C3_DOCUMENT_CONTENTLISTS_DEF = C2_DOCUMENT_CONTENTLISTS | 0x100;
public static final int C3_DOCUMENT_CONTENTLISTS_GEN = C2_DOCUMENT_CONTENTLISTS | 0x300;
public static final int C2_DOCUMENT_INDEX = DOCUMENT | 0x40;
public static final int C3_DOCUMENT_INDEX_DEF = C2_DOCUMENT_INDEX | 0x100;
public static final int C3_DOCUMENT_INDEX_GEN = C2_DOCUMENT_INDEX | 0x300;
public static final int C2_DOCUMENT_LAYOUT = DOCUMENT | 0x70;
public static final int SECTIONING = 0x6;
public static final int PART_LEVEL = 1;
public static final int CHAPTER_LEVEL = 2;
public static final int SECTION_LEVEL = 3;
public static final int SUBSECTION_LEVEL = 4;
public static final int SUBSUBSECTION_LEVEL = 5;
public static final int C2_SECTIONING_PART = SECTIONING | (PART_LEVEL << 4);
public static final int C3_SECTIONING_PART_APPENDIX = C2_SECTIONING_PART | 0x200;
public static final int C2_SECTIONING_CHAPTER = SECTIONING | (CHAPTER_LEVEL << 4);
public static final int C2_SECTIONING_SECTION = SECTIONING | (SECTION_LEVEL << 4);
public static final int C2_SECTIONING_SUBSECTION = SECTIONING | (SUBSECTION_LEVEL << 4);
public static final int C2_SECTIONING_SUBSUBSECTION = SECTIONING | (SUBSUBSECTION_LEVEL << 4);
public static final int LABEL = 0x7;
public static final int C2_LABEL_REFLABEL = LABEL | 0x10;
public static final int C3_LABEL_REFLABEL_DEF = C2_LABEL_REFLABEL | 0x100;
public static final int C3_LABEL_REFLABEL_REF = C2_LABEL_REFLABEL | 0x700;
public static final int C2_LABEL_COUNTER = LABEL | 0x70;
public static final int C3_LABEL_COUNTER_DEF = C2_LABEL_COUNTER | 0x100;
public static final int C3_LABEL_COUNTER_REF = C2_LABEL_COUNTER | 0x700;
public static final int STYLE = 0x8;
// public static final int C2_STYLE_COMMON = STYLE | 0x10;
public static final int C2_STYLE_TEXT = STYLE | 0x30;
public static final int C3_STYLE_TEXT_FONT_O = C2_STYLE_TEXT | 0x100;
public static final int C3_STYLE_TEXT_FONT_B = C2_STYLE_TEXT | 0x200;
public static final int C3_STYLE_TEXT_SIZE_O = C2_STYLE_TEXT | 0x300;
public static final int C2_STYLE_MATH = STYLE | 0x50;
public static final int SYMBOL = 0xA;
public static final int C2_SYMBOL_COMMON = SYMBOL | 0x10;
public static final int C2_SYMBOL_CHAR = SYMBOL | 0x20;
public static final int C2_SYMBOL_TEXT = SYMBOL | 0x30;
public static final int MATHSYMBOL = 0xB;
public static final int C2_MATHSYMBOL_GREEK = MATHSYMBOL | 0x10;
public static final int C3_MATHSYMBOL_GREEK_UPPER = C2_MATHSYMBOL_GREEK | 0x100;
public static final int C3_MATHSYMBOL_GREEK_LOWER = C2_MATHSYMBOL_GREEK | 0x200;
public static final int C2_MATHSYMBOL_OP = MATHSYMBOL | 0x50;
public static final int C3_MATHSYMBOL_OP_BIN = C2_MATHSYMBOL_OP | 0x100;
public static final int C3_MATHSYMBOL_OP_ROOTFRAC = C2_MATHSYMBOL_OP | 0x200;
public static final int C3_MATHSYMBOL_OP_RELSTD = C2_MATHSYMBOL_OP | 0x300;
public static final int C3_MATHSYMBOL_OP_RELARROW = C2_MATHSYMBOL_OP | 0x400;
public static final int C3_MATHSYMBOL_OP_RELMISC = C2_MATHSYMBOL_OP | 0x600;
public static final int C3_MATHSYMBOL_OP_LARGE = C2_MATHSYMBOL_OP | 0x700;
public static final int C3_MATHSYMBOL_OP_NAMED = C2_MATHSYMBOL_OP | 0xB00;
public static final int C2_MATHSYMBOL_MISC = MATHSYMBOL | 0x60;
public static final int C3_MATHSYMBOL_MISC_ALPHA = C2_MATHSYMBOL_MISC | 0x100;
public static final int C3_MATHSYMBOL_MISC_ORD = C2_MATHSYMBOL_MISC | 0x200;
public static final int C3_MATHSYMBOL_DOTS = C2_MATHSYMBOL_MISC | 0x600;
public static final int C3_MATHSYMBOL_ACCENTS_ = C2_MATHSYMBOL_MISC | 0x700;
public static final int C2_MATHSYMBOL_BRACKETS = MATHSYMBOL | 0x70;
public static final int C3_MATHSYMBOL_BRACKETS_ = C2_MATHSYMBOL_OP | 0x000;
public static final int BIB = 0xD;
public static final int C2_BIB_DEF = BIB | 0x10;
public static final int C2_BIB_REF = BIB | 0x20;
public static final int C2_BIB_INCLUDE = BIB | 0x30;
private static final List<Argument> NO_ARGUMENTS = Collections.emptyList();
private static final Collator COLLATOR = Collator.getInstance(Locale.ENGLISH);
static {
((RuleBasedCollator) COLLATOR).setUpperCaseFirst(true);
}
private final int fType;
private final String fWord;
private final boolean fSupportAserisk;
private final List<Argument> fArguments;
private final String fDescription;
public TexCommand(final int type,
final String word, final boolean asterisk, final List<Argument> arguments,
final String description) {
fType = type;
fWord = word;
fSupportAserisk = asterisk;
fArguments = arguments;
fDescription = description;
}
public TexCommand(final int type, final String word, final String description) {
fType = type;
fWord = word;
fSupportAserisk = false;
fArguments = NO_ARGUMENTS;
fDescription = description;
}
public int getType() {
return fType;
}
public String getControlWord() {
return fWord;
}
public boolean supportAsterisk() {
return fSupportAserisk;
}
public List<Argument> getArguments() {
return fArguments;
}
public String getDescription() {
return fDescription;
}
@Override
public int compareTo(final TexCommand other) {
return COLLATOR.compare(fWord, other.fWord);
}
@Override
public String toString() {
return fWord;
}
}