package org.fandev.lang.fan.parsing.statements.typeDefinitions.typeDefs;
import com.intellij.lang.PsiBuilder;
import org.fandev.lang.fan.FanBundle;
import org.fandev.lang.fan.FanElementTypes;
import static org.fandev.lang.fan.FanTokenTypes.*;
import org.fandev.lang.fan.parsing.statements.typeDefinitions.blocks.PodBlock;
import org.fandev.lang.fan.parsing.util.ParserUtils;
/**
* pod metadata declaration grammar:<br/><pre>
* ** fandoc
* @ facets
* pod <podName>
* {
* <symbolName> := <symbolVal>
* ...
* }
* </pre>
*
* @author Fred Simon
* @date Jan 15, 2009 12:03:28 AM
*/
public class PodDefinition {
public static boolean parse(final PsiBuilder builder) {
if (!ParserUtils.getToken(builder, POD_KEYWORD)) {
builder.error(FanBundle.message("keywords.expected", POD_KEYWORD.toString()));
return false;
}
ParserUtils.removeNls(builder);
// Pod name can be one of the built in types in case of the Fan language sources
if (!IDENTIFIER_TOKENS_SET.contains(builder.getTokenType())) {
builder.error(FanBundle.message("identifier.expected"));
return false;
}
final PsiBuilder.Marker idMark = builder.mark();
builder.advanceLexer();
idMark.done(FanElementTypes.NAME_ELEMENT);
ParserUtils.removeNls(builder);
return PodBlock.parse(builder);
}
}