package com.github.czyzby.lml.parser.impl.tag.macro; import com.badlogic.gdx.scenes.scene2d.ui.Cell; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.tag.LmlTag; /** Tables utility. Allows to set column defaults for a selected column. For example: * * <blockquote> * * <pre> * <table> * <:column 2 pad=3 grow=true /> * </table> * </pre> * * </blockquote>This will set cell defaults of column with 2 index. * * <p> * This macro cannot parse text between its tags. Strict parser will throw an exception if you attempt to do so. * * <p> * This macro supports named attributes:<blockquote> * * <pre> * <table> * <:column column="2" pad="3" grow="true" /> * </table> * </pre> * * </blockquote> * * @author MJ */ public class TableColumnLmlMacroTag extends TableCellLmlMacroTag { private static final String COLUMN_ATTRIBUTE = "column"; public TableColumnLmlMacroTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected boolean supportsNamedAttributes() { return false; } @Override protected boolean supportsOptionalNamedAttributes() { return true; } @Override protected void processCellWithNoAttributes(final Table table) { getParser().throwErrorIfStrict("Column macro needs at least one attribute: column number."); } @Override protected Cell<?> extractCell(final Table table) { return table.columnDefaults(getColumnId()); } /** @return parsed value of the attribute that represents column ID. */ protected int getColumnId() { return getParser().parseInt(getColumnAttribute(), getTable()); } /** @return unparsed value of attribute that represents column ID. */ protected String getColumnAttribute() { if (hasAttribute(COLUMN_ATTRIBUTE)) { return getAttribute(COLUMN_ATTRIBUTE); } return getAttributes().first(); } @Override protected boolean isInternalMacroAttribute(final String key) { return COLUMN_ATTRIBUTE.equals(key); } @Override public String[] getExpectedAttributes() { return new String[] { COLUMN_ATTRIBUTE }; } }