package com.bitbakery.plugin.arc.formatting;
/*
* Copyright (c) Kurt Christensen, 2009
*
* Licensed under the Artistic License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at:
*
* http://www.opensource.org/licenses/artistic-license-2.0.php
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License..
*/
import com.bitbakery.plugin.arc.lexer.ArcTokenTypes;
import static com.bitbakery.plugin.arc.lexer.ArcTokenTypes.*;
import com.bitbakery.plugin.arc.psi.ArcElementTypes;
import com.intellij.formatting.Block;
import com.intellij.formatting.Spacing;
import com.intellij.lang.ASTNode;
import com.intellij.psi.tree.IElementType;
/**
* Created by IntelliJ IDEA.
* User: kurtc
* Date: Mar 1, 2009
* Time: 10:03:26 PM
* To change this template use File | Settings | File Templates.
*/
public class ArcSpacingProcessor {
private static final Spacing NO_SPACING = Spacing.createSpacing(0, 0, 0, false, 0);
private static final Spacing NO_SPACING_WITH_NEWLINE = Spacing.createSpacing(0, 0, 0, true, 1);
private static final Spacing COMMON_SPACING = Spacing.createSpacing(1, 1, 0, true, 100);
public static Spacing getSpacing(Block left, Block right) {
if (!(left instanceof ArcBlock) || !(right instanceof ArcBlock)) return null;
IElementType leftType = ((ArcBlock) left).getNode().getElementType();
IElementType rightType = ((ArcBlock) right).getNode().getElementType();
if (MACRO_MODIFIERS.contains(leftType)) {
return NO_SPACING;
}
String leftText = ((ArcBlock) left).getNode().getText();
String rightText = ((ArcBlock) right).getNode().getText();
if (leftText.trim().startsWith(",") || rightText.trim().startsWith(",")) {
return null;
}
if (BRACES.contains(leftType) || BRACES.contains(rightType)) {
return NO_SPACING_WITH_NEWLINE;
}
return COMMON_SPACING;
}
}