// Path: src/com/kstenschke/shifter/utils/UtilsFile.java
// public class UtilsFile {
// 
//     public static String extractFileExtension(@Nullable String filename) {
//         return extractFileExtension(filename, false);
//     }
// 
//     /**
//      * @param  filename         Filename from which to extract the extension
//      * @param  toLowerCase      Convert extension to lower case?
//      * @return The extension    Everything after the last "." in the full filename
//      */
//     public static String extractFileExtension(@Nullable String filename, boolean toLowerCase) {
//         if (null == filename ||
//             filename.isEmpty() ||
//             filename.length() < 3 ||
//             !filename.contains(".")
//         ) {
//             return "";
//         }
//         filename = getBasename(filename);
//         if ("".equals(filename)) {
//             return filename;
//         }
// 
//         return toLowerCase
//                 ? filename.substring(filename.lastIndexOf('.') + 1).toLowerCase()
//                 : filename.substring(filename.lastIndexOf('.') + 1);
//     }
// 
//     private static String getBasename(@Nullable String filename) {
//         if (null == filename) {
//             return "";
//         }
//         if (filename.contains("/")) {
//             filename = filename.substring(filename.lastIndexOf("/") + 1);
//         }
//         if (filename.contains("\\")) {
//             filename = filename.substring(filename.lastIndexOf("\\") + 1);
//         }
//         return filename;
//     }
// 
//     private static boolean filenameEndsWithExtension(@Nullable String filename) {
//         filename = getBasename(filename);
//         if (null == filename || filename.isEmpty() || !filename.contains(".")) {
//             return false;
//         }
// 
//         String[] parts = filename.split("\\.");
// 
//         return parts.length > 1 && parts[0].length() > 0 && parts[1].length() >= 2;
//     }
// 
//     public static boolean isPhpFile(@Nullable String filename) {
//         filename = getBasename(filename).toLowerCase();
//         return filenameEndsWithExtension(filename) && extractFileExtension(filename).matches("(php|phtml)");
//     }
// 
//     public static boolean isCssFile(@Nullable String filename) {
//         filename = getBasename(filename).toLowerCase();
//         return filenameEndsWithExtension(filename) && extractFileExtension(filename).matches("(css|scss|sass|less|styl)");
//     }
// 
//     public static boolean isJavaScriptFile(@Nullable String filename, boolean allowTypeScript) {
//         filename = getBasename(filename).toLowerCase();
//         if (!filenameEndsWithExtension(filename)) {
//             return false;
//         }
// 
//         return extractFileExtension(filename).matches(allowTypeScript ? "(js|ts)" : "(js)");
//     }
// 
//     /**
//      * @param  is       Input stream
//      * @return String   Full contents of given stream as string
//      */
//     public static String getFileStreamAsString(java.io.InputStream is) {
//         java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
// 
//         return s.hasNext() ? s.next() : "";
//     }
// }
// 
// Path: src/com/kstenschke/shifter/models/ShiftableSelection.java
// static final String ACTION_TEXT_SHIFT_SELECTION = "Shift Selection";
// 
// Path: src/com/kstenschke/shifter/models/ShiftableTypes.java
// public enum Type {
//     UNKNOWN,
// 
//     // Dictionaric types
//     ACCESS_TYPE,
//     DICTIONARY_WORD_EXT_SPECIFIC,
//     DICTIONARY_WORD_GLOBAL,
// 
//     // Numeric types
//     NUMERIC_VALUE,
//     NUMERIC_POSTFIXED,
//     ROMAN_NUMERAL,
// 
//     // Generic shiftable types
//     QUOTED_STRING,
//     PARENTHESIS,
//     HTML_ENCODABLE,
//     CAMEL_CASED,
//     SEPARATED_PATH,
//     WORDS_TUPEL,
// 
//     // Operators (<, >, +, -, etc.) and expressions
//     OPERATOR_SIGN,
//     LOGICAL_OPERATOR,
//     MONO_CHARACTER,
//     TERNARY_EXPRESSION,
// 
//     RGB_COLOR,
// 
//     // CSS unit (%, cm, em, in, pt, px, rem, vw, vh, vmin, vmax)
//     CSS_UNIT,
// 
//     // DOC comment related
//     DOC_COMMENT_TAG,
//     DOC_COMMENT_DATA_TYPE,
// 
//     // PHP specific
//     PHP_VARIABLE_OR_ARRAY,
// 
//     // JavaScript specific
//     JS_VARIABLES_DECLARATIONS,
//     SIZZLE_SELECTOR,
//     JQUERY_OBSERVER,
// 
//     TRAILING_COMMENT
// }


import com.kstenschke.shifter.models.shiftable_types.*;
import com.kstenschke.shifter.utils.UtilsFile;
import org.jetbrains.annotations.Nullable;
import static com.kstenschke.shifter.models.ShiftableSelection.ACTION_TEXT_SHIFT_SELECTION;
import static com.kstenschke.shifter.models.ShiftableTypes.Type.*;

    String getShiftedWord(ActionContainer actionContainer, @Nullable Integer moreCount) {
        wordType = getWordType(actionContainer.selectedText, "", "", false, actionContainer);

        return getShiftedWord(actionContainer, actionContainer.selectedText, wordType, moreCount);
    }

    String getActionText() {
        switch (wordType) {
            case CSS_UNIT:
                return CssUnit.ACTION_TEXT;
            case HTML_ENCODABLE:
                return HtmlEncodable.ACTION_TEXT;
            case JS_VARIABLES_DECLARATIONS:
                return JsVariablesDeclarations.ACTION_TEXT;
            case LOGICAL_OPERATOR:
                return LogicalOperator.ACTION_TEXT;
            case MONO_CHARACTER:
                return MonoCharacter.ACTION_TEXT;
            case NUMERIC_VALUE:
                return NumericValue.ACTION_TEXT;
            case RGB_COLOR:
                return RgbColor.ACTION_TEXT;
            case TERNARY_EXPRESSION:
                return TernaryExpression.ACTION_TEXT;
            case TRAILING_COMMENT:
                return TrailingComment.ACTION_TEXT;
            case WORDS_TUPEL:
                return Tupel.ACTION_TEXT;
            default:
// Path: src/com/kstenschke/shifter/utils/UtilsFile.java
// public class UtilsFile {
// 
//     public static String extractFileExtension(@Nullable String filename) {
//         return extractFileExtension(filename, false);
//     }
// 
//     /**
//      * @param  filename         Filename from which to extract the extension
//      * @param  toLowerCase      Convert extension to lower case?
//      * @return The extension    Everything after the last "." in the full filename
//      */
//     public static String extractFileExtension(@Nullable String filename, boolean toLowerCase) {
//         if (null == filename ||
//             filename.isEmpty() ||
//             filename.length() < 3 ||
//             !filename.contains(".")
//         ) {
//             return "";
//         }
//         filename = getBasename(filename);
//         if ("".equals(filename)) {
//             return filename;
//         }
// 
//         return toLowerCase
//                 ? filename.substring(filename.lastIndexOf('.') + 1).toLowerCase()
//                 : filename.substring(filename.lastIndexOf('.') + 1);
//     }
// 
//     private static String getBasename(@Nullable String filename) {
//         if (null == filename) {
//             return "";
//         }
//         if (filename.contains("/")) {
//             filename = filename.substring(filename.lastIndexOf("/") + 1);
//         }
//         if (filename.contains("\\")) {
//             filename = filename.substring(filename.lastIndexOf("\\") + 1);
//         }
//         return filename;
//     }
// 
//     private static boolean filenameEndsWithExtension(@Nullable String filename) {
//         filename = getBasename(filename);
//         if (null == filename || filename.isEmpty() || !filename.contains(".")) {
//             return false;
//         }
// 
//         String[] parts = filename.split("\\.");
// 
//         return parts.length > 1 && parts[0].length() > 0 && parts[1].length() >= 2;
//     }
// 
//     public static boolean isPhpFile(@Nullable String filename) {
//         filename = getBasename(filename).toLowerCase();
//         return filenameEndsWithExtension(filename) && extractFileExtension(filename).matches("(php|phtml)");
//     }
// 
//     public static boolean isCssFile(@Nullable String filename) {
//         filename = getBasename(filename).toLowerCase();
//         return filenameEndsWithExtension(filename) && extractFileExtension(filename).matches("(css|scss|sass|less|styl)");
//     }
// 
//     public static boolean isJavaScriptFile(@Nullable String filename, boolean allowTypeScript) {
//         filename = getBasename(filename).toLowerCase();
//         if (!filenameEndsWithExtension(filename)) {
//             return false;
//         }
// 
//         return extractFileExtension(filename).matches(allowTypeScript ? "(js|ts)" : "(js)");
//     }
// 
//     /**
//      * @param  is       Input stream
//      * @return String   Full contents of given stream as string
//      */
//     public static String getFileStreamAsString(java.io.InputStream is) {
//         java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
// 
//         return s.hasNext() ? s.next() : "";
//     }
// }
// 
// Path: src/com/kstenschke/shifter/models/ShiftableSelection.java
// static final String ACTION_TEXT_SHIFT_SELECTION = "Shift Selection";
// 
// Path: src/com/kstenschke/shifter/models/ShiftableTypes.java
// public enum Type {
//     UNKNOWN,
// 
//     // Dictionaric types
//     ACCESS_TYPE,
//     DICTIONARY_WORD_EXT_SPECIFIC,
//     DICTIONARY_WORD_GLOBAL,
// 
//     // Numeric types
//     NUMERIC_VALUE,
//     NUMERIC_POSTFIXED,
//     ROMAN_NUMERAL,
// 
//     // Generic shiftable types
//     QUOTED_STRING,
//     PARENTHESIS,
//     HTML_ENCODABLE,
//     CAMEL_CASED,
//     SEPARATED_PATH,
//     WORDS_TUPEL,
// 
//     // Operators (<, >, +, -, etc.) and expressions
//     OPERATOR_SIGN,
//     LOGICAL_OPERATOR,
//     MONO_CHARACTER,
//     TERNARY_EXPRESSION,
// 
//     RGB_COLOR,
// 
//     // CSS unit (%, cm, em, in, pt, px, rem, vw, vh, vmin, vmax)
//     CSS_UNIT,
// 
//     // DOC comment related
//     DOC_COMMENT_TAG,
//     DOC_COMMENT_DATA_TYPE,
// 
//     // PHP specific
//     PHP_VARIABLE_OR_ARRAY,
// 
//     // JavaScript specific
//     JS_VARIABLES_DECLARATIONS,
//     SIZZLE_SELECTOR,
//     JQUERY_OBSERVER,
// 
//     TRAILING_COMMENT
// }


// Path: src/com/kstenschke/shifter/models/ShiftableTypesManager.java
import com.kstenschke.shifter.models.shiftable_types.*;
import com.kstenschke.shifter.utils.UtilsFile;
import org.jetbrains.annotations.Nullable;
import static com.kstenschke.shifter.models.ShiftableSelection.ACTION_TEXT_SHIFT_SELECTION;
import static com.kstenschke.shifter.models.ShiftableTypes.Type.*;


    String getShiftedWord(ActionContainer actionContainer, @Nullable Integer moreCount) {
        wordType = getWordType(actionContainer.selectedText, "", "", false, actionContainer);

        return getShiftedWord(actionContainer, actionContainer.selectedText, wordType, moreCount);
    }

    String getActionText() {
        switch (wordType) {
            case CSS_UNIT:
                return CssUnit.ACTION_TEXT;
            case HTML_ENCODABLE:
                return HtmlEncodable.ACTION_TEXT;
            case JS_VARIABLES_DECLARATIONS:
                return JsVariablesDeclarations.ACTION_TEXT;
            case LOGICAL_OPERATOR:
                return LogicalOperator.ACTION_TEXT;
            case MONO_CHARACTER:
                return MonoCharacter.ACTION_TEXT;
            case NUMERIC_VALUE:
                return NumericValue.ACTION_TEXT;
            case RGB_COLOR:
                return RgbColor.ACTION_TEXT;
            case TERNARY_EXPRESSION:
                return TernaryExpression.ACTION_TEXT;
            case TRAILING_COMMENT:
                return TrailingComment.ACTION_TEXT;
            case WORDS_TUPEL:
                return Tupel.ACTION_TEXT;
            default:
                return ACTION_TEXT_SHIFT_SELECTION;