master 74a11a047782 cached
717 files
2.6 MB
742.7k tokens
2360 symbols
1 requests
Download .txt
Showing preview only (3,024K chars total). Download the full file or copy to clipboard to get everything.
Repository: raydac/java-comment-preprocessor
Branch: master
Commit: 74a11a047782
Files: 717
Total size: 2.6 MB

Directory structure:
gitextract_jyzsnnek/

├── .gitattributes
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       └── run-maven-tests.yml
├── .gitignore
├── .projectKnowledge/
│   ├── JCPreprocessor.mmd
│   └── documap.mmd
├── LICENSE
├── README.md
├── changelog.txt
├── jcp/
│   ├── pom.xml
│   └── src/
│       ├── assemble/
│       │   └── bundle.xml
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── igormaznitsa/
│       │   │           └── jcp/
│       │   │               ├── InfoHelper.java
│       │   │               ├── JcpPreprocessor.java
│       │   │               ├── ant/
│       │   │               │   └── PreprocessTask.java
│       │   │               ├── cmdline/
│       │   │               │   ├── ActionPreprocessorExtensionHandler.java
│       │   │               │   ├── AllowMergeBlockLineHandler.java
│       │   │               │   ├── AllowWhitespaceDirectiveHandler.java
│       │   │               │   ├── CareForLastEolHandler.java
│       │   │               │   ├── ClearTargetHandler.java
│       │   │               │   ├── CommandLineHandler.java
│       │   │               │   ├── DestinationDirectoryHandler.java
│       │   │               │   ├── DontOverwriteSameContentHandler.java
│       │   │               │   ├── ExcludeFoldersHandler.java
│       │   │               │   ├── ExcludedFileExtensionsHandler.java
│       │   │               │   ├── FileExtensionsHandler.java
│       │   │               │   ├── GlobalVariableDefiningFileHandler.java
│       │   │               │   ├── GlobalVariableHandler.java
│       │   │               │   ├── HelpHandler.java
│       │   │               │   ├── InCharsetHandler.java
│       │   │               │   ├── KeepAttributesHandler.java
│       │   │               │   ├── KeepCommentsHandler.java
│       │   │               │   ├── KeepLineHandler.java
│       │   │               │   ├── OutCharsetHandler.java
│       │   │               │   ├── PreserveIndentDirectiveHandler.java
│       │   │               │   ├── RemoveCommentsHandler.java
│       │   │               │   ├── SourceDirectoryHandler.java
│       │   │               │   ├── UnknownAsFalseHandler.java
│       │   │               │   └── VerboseHandler.java
│       │   │               ├── containers/
│       │   │               │   ├── FileInfoContainer.java
│       │   │               │   ├── PreprocessingFlag.java
│       │   │               │   └── TextFileDataContainer.java
│       │   │               ├── context/
│       │   │               │   ├── CommentRemoverType.java
│       │   │               │   ├── CommentTextProcessor.java
│       │   │               │   ├── EnvironmentVariableProcessor.java
│       │   │               │   ├── ExecutionAllowable.java
│       │   │               │   ├── JCPSpecialVariableProcessor.java
│       │   │               │   ├── PreprocessingState.java
│       │   │               │   ├── PreprocessorContext.java
│       │   │               │   ├── PreprocessorContextAware.java
│       │   │               │   └── SpecialVariableProcessor.java
│       │   │               ├── directives/
│       │   │               │   ├── AbortDirectiveHandler.java
│       │   │               │   ├── AbstractDirectiveHandler.java
│       │   │               │   ├── ActionDirectiveHandler.java
│       │   │               │   ├── AfterDirectiveProcessingBehaviour.java
│       │   │               │   ├── BreakDirectiveHandler.java
│       │   │               │   ├── CommentNextLineDirectiveHandler.java
│       │   │               │   ├── ContinueDirectiveHandler.java
│       │   │               │   ├── DefineDirectiveHandler.java
│       │   │               │   ├── DefinelDirectiveHandler.java
│       │   │               │   ├── DirectiveArgumentType.java
│       │   │               │   ├── EchoDirectiveHandler.java
│       │   │               │   ├── ElseDirectiveHandler.java
│       │   │               │   ├── EndDirectiveHandler.java
│       │   │               │   ├── EndIfDirectiveHandler.java
│       │   │               │   ├── ErrorDirectiveHandler.java
│       │   │               │   ├── ExcludeIfDirectiveHandler.java
│       │   │               │   ├── ExitDirectiveHandler.java
│       │   │               │   ├── ExitIfDirectiveHandler.java
│       │   │               │   ├── FlushDirectiveHandler.java
│       │   │               │   ├── GlobalDirectiveHandler.java
│       │   │               │   ├── GlobalElseDirectiveHandler.java
│       │   │               │   ├── GlobalEndIfDirectiveHandler.java
│       │   │               │   ├── GlobalIfDirectiveHandler.java
│       │   │               │   ├── IfDefDirectiveHandler.java
│       │   │               │   ├── IfDefinedDirectiveHandler.java
│       │   │               │   ├── IfDirectiveHandler.java
│       │   │               │   ├── IfNDefDirectiveHandler.java
│       │   │               │   ├── IncludeDirectiveHandler.java
│       │   │               │   ├── LocalDirectiveHandler.java
│       │   │               │   ├── MsgDirectiveHandler.java
│       │   │               │   ├── NoAutoFlushHandler.java
│       │   │               │   ├── OutDisabledDirectiveHandler.java
│       │   │               │   ├── OutEnabledDirectiveHandler.java
│       │   │               │   ├── OutNameDirectiveHandler.java
│       │   │               │   ├── OutdirDirectiveHandler.java
│       │   │               │   ├── PostfixDirectiveHandler.java
│       │   │               │   ├── PrefixDirectiveHandler.java
│       │   │               │   ├── UndefDirectiveHandler.java
│       │   │               │   ├── WarningDirectiveHandler.java
│       │   │               │   └── WhileDirectiveHandler.java
│       │   │               ├── exceptions/
│       │   │               │   ├── FilePositionInfo.java
│       │   │               │   └── PreprocessorException.java
│       │   │               ├── expression/
│       │   │               │   ├── Expression.java
│       │   │               │   ├── ExpressionItem.java
│       │   │               │   ├── ExpressionItemPriority.java
│       │   │               │   ├── ExpressionItemType.java
│       │   │               │   ├── ExpressionParser.java
│       │   │               │   ├── ExpressionTree.java
│       │   │               │   ├── ExpressionTreeElement.java
│       │   │               │   ├── Value.java
│       │   │               │   ├── ValueType.java
│       │   │               │   ├── Variable.java
│       │   │               │   ├── functions/
│       │   │               │   │   ├── AbstractFunction.java
│       │   │               │   │   ├── AbstractStrConverter.java
│       │   │               │   │   ├── FunctionABS.java
│       │   │               │   │   ├── FunctionBINFILE.java
│       │   │               │   │   ├── FunctionDefinedByUser.java
│       │   │               │   │   ├── FunctionESC.java
│       │   │               │   │   ├── FunctionEVALFILE.java
│       │   │               │   │   ├── FunctionIS.java
│       │   │               │   │   ├── FunctionISSUBSTR.java
│       │   │               │   │   ├── FunctionROUND.java
│       │   │               │   │   ├── FunctionSTR2CSV.java
│       │   │               │   │   ├── FunctionSTR2GO.java
│       │   │               │   │   ├── FunctionSTR2INT.java
│       │   │               │   │   ├── FunctionSTR2JAVA.java
│       │   │               │   │   ├── FunctionSTR2JS.java
│       │   │               │   │   ├── FunctionSTR2JSON.java
│       │   │               │   │   ├── FunctionSTR2WEB.java
│       │   │               │   │   ├── FunctionSTR2XML.java
│       │   │               │   │   ├── FunctionSTRLEN.java
│       │   │               │   │   ├── FunctionTRIMLINES.java
│       │   │               │   │   └── xml/
│       │   │               │   │       ├── AbstractXMLFunction.java
│       │   │               │   │       ├── FunctionXML_ATTR.java
│       │   │               │   │       ├── FunctionXML_GET.java
│       │   │               │   │       ├── FunctionXML_LIST.java
│       │   │               │   │       ├── FunctionXML_NAME.java
│       │   │               │   │       ├── FunctionXML_OPEN.java
│       │   │               │   │       ├── FunctionXML_ROOT.java
│       │   │               │   │       ├── FunctionXML_SIZE.java
│       │   │               │   │       ├── FunctionXML_TEXT.java
│       │   │               │   │       ├── FunctionXML_XELEMENT.java
│       │   │               │   │       ├── FunctionXML_XLIST.java
│       │   │               │   │       └── NodeContainer.java
│       │   │               │   └── operators/
│       │   │               │       ├── AbstractOperator.java
│       │   │               │       ├── OperatorADD.java
│       │   │               │       ├── OperatorAND.java
│       │   │               │       ├── OperatorDIV.java
│       │   │               │       ├── OperatorEQU.java
│       │   │               │       ├── OperatorGREAT.java
│       │   │               │       ├── OperatorGREATEQU.java
│       │   │               │       ├── OperatorLESS.java
│       │   │               │       ├── OperatorLESSEQU.java
│       │   │               │       ├── OperatorMOD.java
│       │   │               │       ├── OperatorMUL.java
│       │   │               │       ├── OperatorNOT.java
│       │   │               │       ├── OperatorNOTEQU.java
│       │   │               │       ├── OperatorOR.java
│       │   │               │       ├── OperatorSUB.java
│       │   │               │       └── OperatorXOR.java
│       │   │               ├── extension/
│       │   │               │   ├── LogPreprocessorExtension.java
│       │   │               │   └── PreprocessorExtension.java
│       │   │               ├── gradle/
│       │   │               │   ├── JcpGradlePlugin.java
│       │   │               │   └── JcpTask.java
│       │   │               ├── logger/
│       │   │               │   ├── PreprocessorLogger.java
│       │   │               │   └── SystemOutLogger.java
│       │   │               ├── maven/
│       │   │               │   ├── MavenPropertiesImporter.java
│       │   │               │   └── PreprocessMojo.java
│       │   │               ├── removers/
│       │   │               │   ├── AbstractCommentRemover.java
│       │   │               │   ├── CStyleCommentRemover.java
│       │   │               │   ├── JcpCommentLineRemover.java
│       │   │               │   └── JustCopyRemover.java
│       │   │               └── utils/
│       │   │                   ├── AntPathMatcher.java
│       │   │                   ├── ArrayUtils.java
│       │   │                   ├── GetUtils.java
│       │   │                   ├── IOUtils.java
│       │   │                   ├── PreprocessorUtils.java
│       │   │                   └── ResettablePrinter.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── gradle-plugins/
│       │       │       └── com.igormaznitsa.jcp.properties
│       │       ├── com/
│       │       │   └── igormaznitsa/
│       │       │       └── jcp/
│       │       │           └── ant/
│       │       │               ├── antlib.xml
│       │       │               └── tasks.properties
│       │       └── jcpversion.properties
│       ├── site/
│       │   ├── markdown/
│       │   │   ├── examples/
│       │   │   │   └── hello-world.md
│       │   │   ├── index.md
│       │   │   └── usage.md
│       │   └── site.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── igormaznitsa/
│           │           └── jcp/
│           │               ├── AbstractMockPreprocessorContextTest.java
│           │               ├── AbstractSpyPreprocessorContextTest.java
│           │               ├── JCPreprocessorTest.java
│           │               ├── TestUtils.java
│           │               ├── ant/
│           │               │   └── PreprocessTaskTest.java
│           │               ├── cmdline/
│           │               │   ├── AbstractCommandLineHandlerTest.java
│           │               │   ├── ActionPreprocessorExtensionHandlerTest.java
│           │               │   ├── AllowMergeBlockLineHandlerTest.java
│           │               │   ├── AllowWhitespaceDirectiveHandlerTest.java
│           │               │   ├── CareForLastEolHandlerTest.java
│           │               │   ├── ClearTargetFolderHandlerTest.java
│           │               │   ├── CommentRemoverTypeHandlerTest.java
│           │               │   ├── DestinationDirectoryHandlerTest.java
│           │               │   ├── DontOverwriteSameContentHandlerTest.java
│           │               │   ├── ExcludeFoldersHandlerTest.java
│           │               │   ├── ExcludedFileExtensionsHandlerTest.java
│           │               │   ├── FileExtensionsHandlerTest.java
│           │               │   ├── GlobalVariableDefiningFileHandlerTest.java
│           │               │   ├── GlobalVariableHandlerTest.java
│           │               │   ├── HelpHandlerTest.java
│           │               │   ├── InCharsetHandlerTest.java
│           │               │   ├── KeepLineHandlerTest.java
│           │               │   ├── OutCharsetHandlerTest.java
│           │               │   ├── PreserveIndentDirectiveHandlerTest.java
│           │               │   ├── RemoveCommentsHandlerTest.java
│           │               │   ├── SourceDirectoryHandlerTest.java
│           │               │   ├── UnknownAsFalseHandlerTest.java
│           │               │   └── VerboseHandlerTest.java
│           │               ├── context/
│           │               │   ├── EnvironmentVariableProcessorTest.java
│           │               │   ├── JCPSpecialVariableProcessorTest.java
│           │               │   ├── PreprocessorContextTest.java
│           │               │   └── ProcessContentWithSpacesAndWithoutTest.java
│           │               ├── directives/
│           │               │   ├── AbortDirectiveHandlerTest.java
│           │               │   ├── AbstractDirectiveHandlerAcceptanceTest.java
│           │               │   ├── AbstractDirectiveHandlerTest.java
│           │               │   ├── ActionDirectiveHandlerTest.java
│           │               │   ├── CommentNextLineDirectiveHandlerTest.java
│           │               │   ├── DefineDirectiveHandlerTest.java
│           │               │   ├── DefinelDirectiveHandlerTest.java
│           │               │   ├── EchoDirectiveHandlerTest.java
│           │               │   ├── ErrorDirectiveHandlerTest.java
│           │               │   ├── ExcludeIfDirectiveHandlerTest.java
│           │               │   ├── ExitDirectiveHandlerTest.java
│           │               │   ├── ExitIfDirectiveHandlerTest.java
│           │               │   ├── FlushDirectiveHandlerTest.java
│           │               │   ├── GlobalDirectiveHandlerTest.java
│           │               │   ├── GlobalIfElseEndifTest.java
│           │               │   ├── IfDefDirectiveHandlerTest.java
│           │               │   ├── IfDefinedDirectiveHandlerTest.java
│           │               │   ├── IfElseEndifDirectiveHandlerTest.java
│           │               │   ├── IfElseEndifDirectiveWithKeepLinesHandlerTest.java
│           │               │   ├── IfNDefDirectiveHandlerTest.java
│           │               │   ├── IncludeDirectiveHandlerTest.java
│           │               │   ├── LinesNotMatchException.java
│           │               │   ├── LocalDirectiveHandlerTest.java
│           │               │   ├── MsgDirectiveHandlerTest.java
│           │               │   ├── NoAutoFlushDirectiveHandlerTest.java
│           │               │   ├── OnlySpacesTest.java
│           │               │   ├── OutDisabledDirectiveHandlerTest.java
│           │               │   ├── OutEnabledDirectiveHandlerTest.java
│           │               │   ├── OutNameDirectiveHandlerTest.java
│           │               │   ├── OutdirDirectiveHandlerTest.java
│           │               │   ├── PrefixPostfixDirectiveHandlerTest.java
│           │               │   ├── SpecVarsROTest.java
│           │               │   ├── SpecialDirectivesBlockTest.java
│           │               │   ├── SpecialDirectivesTest.java
│           │               │   ├── UndefDirectiveHandlerTest.java
│           │               │   ├── VariablePair.java
│           │               │   ├── WarningDirectiveHandlerTest.java
│           │               │   └── WhileContinueBreakEndDirectiveHandlerTest.java
│           │               ├── exceptions/
│           │               │   └── PreprocessorExceptionTest.java
│           │               ├── expression/
│           │               │   ├── ExpressionParserTest.java
│           │               │   ├── ExpressionTest.java
│           │               │   ├── ExpressionTreeTest.java
│           │               │   ├── functions/
│           │               │   │   ├── AbstractFunctionTest.java
│           │               │   │   ├── FunctionABSTest.java
│           │               │   │   ├── FunctionBINFILETest.java
│           │               │   │   ├── FunctionDefinedByUserTest.java
│           │               │   │   ├── FunctionESCTest.java
│           │               │   │   ├── FunctionEVALFILETest.java
│           │               │   │   ├── FunctionISSUBSTRTest.java
│           │               │   │   ├── FunctionISTest.java
│           │               │   │   ├── FunctionROUNDTest.java
│           │               │   │   ├── FunctionSTR2CSVTest.java
│           │               │   │   ├── FunctionSTR2GOTest.java
│           │               │   │   ├── FunctionSTR2INTTest.java
│           │               │   │   ├── FunctionSTR2JAVATest.java
│           │               │   │   ├── FunctionSTR2JSONTest.java
│           │               │   │   ├── FunctionSTR2JSTest.java
│           │               │   │   ├── FunctionSTR2WEBTest.java
│           │               │   │   ├── FunctionSTR2XMLTest.java
│           │               │   │   ├── FunctionSTRLENTest.java
│           │               │   │   ├── FunctionTRIMLINESTest.java
│           │               │   │   └── xml/
│           │               │   │       ├── AbstractFunctionXMLTest.java
│           │               │   │       ├── FunctionXML_ATTRTest.java
│           │               │   │       ├── FunctionXML_GETTest.java
│           │               │   │       ├── FunctionXML_LISTTest.java
│           │               │   │       ├── FunctionXML_NAMETest.java
│           │               │   │       ├── FunctionXML_OPENTest.java
│           │               │   │       ├── FunctionXML_ROOTTest.java
│           │               │   │       ├── FunctionXML_SIZETest.java
│           │               │   │       ├── FunctionXML_TEXTTest.java
│           │               │   │       ├── FunctionXML_XELEMENTTest.java
│           │               │   │       └── FunctionXML_XLISTTest.java
│           │               │   └── operators/
│           │               │       ├── AbstractOperatorTest.java
│           │               │       ├── OperatorADDTest.java
│           │               │       ├── OperatorANDTest.java
│           │               │       ├── OperatorDIVTest.java
│           │               │       ├── OperatorEQUTest.java
│           │               │       ├── OperatorGREATEQUTest.java
│           │               │       ├── OperatorGREATTest.java
│           │               │       ├── OperatorLESSEQUTest.java
│           │               │       ├── OperatorLESSTest.java
│           │               │       ├── OperatorMODTest.java
│           │               │       ├── OperatorMULTest.java
│           │               │       ├── OperatorNOTEQUTest.java
│           │               │       ├── OperatorNOTTest.java
│           │               │       ├── OperatorORTest.java
│           │               │       ├── OperatorSUBTest.java
│           │               │       └── OperatorXORTest.java
│           │               ├── maven/
│           │               │   ├── MavenPropertiesImporterTest.java
│           │               │   └── PreprocessMojoTest.java
│           │               ├── removers/
│           │               │   ├── AbstractCommentRemoverTest.java
│           │               │   ├── CStyleCommentsRemoverTest.java
│           │               │   ├── JcpCommentLineRemoverTest.java
│           │               │   └── JustCopyCommentsRemoverTest.java
│           │               ├── usecases/
│           │               │   ├── AbortTest.java
│           │               │   ├── AbstractUseCaseTest.java
│           │               │   ├── BinFileTest.java
│           │               │   ├── DefUndefTest.java
│           │               │   ├── EvalFileTest.java
│           │               │   ├── ExternalGlobalDefFileTest.java
│           │               │   ├── GenerationTest.java
│           │               │   ├── IncludeAndExitTest.java
│           │               │   ├── InsidePreprocessingTest.java
│           │               │   ├── PrefixPostfixTest.java
│           │               │   ├── PreserveIndentOffTest.java
│           │               │   ├── PreserveIndentOnTest.java
│           │               │   ├── SimpleTest.java
│           │               │   ├── SpacesBeforeDirectivesNotAllowedTest.java
│           │               │   ├── SpacesBeforeDirectivesTest.java
│           │               │   ├── StaticSiteTest.java
│           │               │   ├── Str2JavaTest.java
│           │               │   ├── StringDirectiveTest.java
│           │               │   ├── TextBufferVariablesTest.java
│           │               │   ├── UnknownVarAsFalseTest.java
│           │               │   ├── UsePrefixAsMultilineTest.java
│           │               │   └── UserFunctionTest.java
│           │               └── utils/
│           │                   ├── PreprocessorUtilsTest.java
│           │                   └── antpathmatcher/
│           │                       └── AntPathMatcherTest.java
│           └── resources/
│               └── com/
│                   └── igormaznitsa/
│                       └── jcp/
│                           ├── cmdline/
│                           │   └── global_variable_def.txt
│                           ├── context/
│                           │   ├── spacedFile.txt
│                           │   └── standardFile.txt
│                           ├── directives/
│                           │   ├── directive_abort.txt
│                           │   ├── directive_action.txt
│                           │   ├── directive_comment_next_line.txt
│                           │   ├── directive_define.txt
│                           │   ├── directive_definel.txt
│                           │   ├── directive_echo.txt
│                           │   ├── directive_error.txt
│                           │   ├── directive_excludeif.txt
│                           │   ├── directive_exit.txt
│                           │   ├── directive_exitif.txt
│                           │   ├── directive_global.txt
│                           │   ├── directive_globalifelseendif.txt
│                           │   ├── directive_globalifelseendif2.txt
│                           │   ├── directive_if_else_endif.txt
│                           │   ├── directive_if_else_endif_with_keptlines.txt
│                           │   ├── directive_ifdef.txt
│                           │   ├── directive_ifdefined.txt
│                           │   ├── directive_ifndef.txt
│                           │   ├── directive_include.txt
│                           │   ├── directive_include2.txt
│                           │   ├── directive_include3.txt
│                           │   ├── directive_local.txt
│                           │   ├── directive_msg.txt
│                           │   ├── directive_outdir.txt
│                           │   ├── directive_outdisabled.txt
│                           │   ├── directive_outenabled.txt
│                           │   ├── directive_outname.txt
│                           │   ├── directive_prefixpostfix.txt
│                           │   ├── directive_special.txt
│                           │   ├── directive_special_block.txt
│                           │   ├── directive_undef.txt
│                           │   ├── directive_warning.txt
│                           │   ├── directive_while_continue_break_end.txt
│                           │   ├── only_spaces.txt
│                           │   └── specvars_ro.txt
│                           ├── exceptions/
│                           │   ├── wrong_bracket.txt
│                           │   ├── wrong_bracket_closing.txt
│                           │   └── wrong_bracket_include.txt
│                           ├── expression/
│                           │   └── functions/
│                           │       ├── eval/
│                           │       │   ├── TestBin.txt
│                           │       │   ├── TestBinLong.txt
│                           │       │   ├── TestEval.java
│                           │       │   └── TestEvalWithIncluded.java
│                           │       └── xml/
│                           │           ├── noxml.txt
│                           │           └── test.xml
│                           ├── global_error_at.txt
│                           ├── global_ok.txt
│                           ├── maven/
│                           │   └── test.pom.xml
│                           ├── removers/
│                           │   └── java/
│                           │       ├── etalon.etl
│                           │       └── test_java.ppp
│                           ├── usecases/
│                           │   ├── AbortTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── text.txt
│                           │   │       ├── text1.txt
│                           │   │       ├── text2.txt
│                           │   │       └── text3.txt
│                           │   ├── BinFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── DefUndefTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── EvalFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── newfolder/
│                           │   │   │       ├── file1.txt
│                           │   │   │       └── file2.txt
│                           │   │   └── src/
│                           │   │       ├── _file1.txt
│                           │   │       ├── _file2.txt
│                           │   │       └── text.txt
│                           │   ├── ExternalGlobalDefFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── test.txt
│                           │   │   ├── list.cfg
│                           │   │   └── src/
│                           │   │       └── test.txt
│                           │   ├── GenerationTest/
│                           │   │   ├── etl/
│                           │   │   │   ├── file1.ttt
│                           │   │   │   ├── file2.ttt
│                           │   │   │   └── file3.ttt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── IncludeAndExitTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── text.txt
│                           │   │       ├── text1.txt
│                           │   │       └── text2.txt
│                           │   ├── InsidePreprocessingTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── some.txt
│                           │   │       └── text.txt
│                           │   ├── PrefixPostfixTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── PreserveIndentOffTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── PreserveIndentOnTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── SimpleTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── SpacesBeforeDirectivesNotAllowedTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── SpacesBeforeDirectivesTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── StaticSiteTest/
│                           │   │   ├── etl/
│                           │   │   │   ├── cmn/
│                           │   │   │   │   ├── sendfeedback.phtml
│                           │   │   │   │   ├── styles.css
│                           │   │   │   │   └── styles2.css
│                           │   │   │   ├── eng/
│                           │   │   │   │   ├── end.txt
│                           │   │   │   │   ├── gpage_airaggression.htm
│                           │   │   │   │   ├── gpage_airboil.htm
│                           │   │   │   │   ├── gpage_aneks_ny2006.htm
│                           │   │   │   │   ├── gpage_blazinggears.htm
│                           │   │   │   │   ├── gpage_caspianmonster.htm
│                           │   │   │   │   ├── gpage_castleassault.htm
│                           │   │   │   │   ├── gpage_cockroach.htm
│                           │   │   │   │   ├── gpage_coconutsfall.htm
│                           │   │   │   │   ├── gpage_conecone.htm
│                           │   │   │   │   ├── gpage_copterbomber.htm
│                           │   │   │   │   ├── gpage_drunkman.htm
│                           │   │   │   │   ├── gpage_firingline.htm
│                           │   │   │   │   ├── gpage_fisher.htm
│                           │   │   │   │   ├── gpage_fruitmania.htm
│                           │   │   │   │   ├── gpage_hardday.htm
│                           │   │   │   │   ├── gpage_hunt.htm
│                           │   │   │   │   ├── gpage_icegifts.htm
│                           │   │   │   │   ├── gpage_ironstream.htm
│                           │   │   │   │   ├── gpage_kalah.htm
│                           │   │   │   │   ├── gpage_kickkick.htm
│                           │   │   │   │   ├── gpage_lifesaver.htm
│                           │   │   │   │   ├── gpage_livebridge.htm
│                           │   │   │   │   ├── gpage_mobilechase.htm
│                           │   │   │   │   ├── gpage_mobilesheriff.htm
│                           │   │   │   │   ├── gpage_mtvpaparazzo.htm
│                           │   │   │   │   ├── gpage_mtvpillow.htm
│                           │   │   │   │   ├── gpage_mtvpuzzle.htm
│                           │   │   │   │   ├── gpage_mtvstage.htm
│                           │   │   │   │   ├── gpage_nimble.htm
│                           │   │   │   │   ├── gpage_opthunderclap.htm
│                           │   │   │   │   ├── gpage_oysterbank.htm
│                           │   │   │   │   ├── gpage_papaninsquest.htm
│                           │   │   │   │   ├── gpage_ravenscheese.htm
│                           │   │   │   │   ├── gpage_searoad.htm
│                           │   │   │   │   ├── gpage_searovers.htm
│                           │   │   │   │   ├── gpage_slider_alpop.htm
│                           │   │   │   │   ├── gpage_smashingkick.htm
│                           │   │   │   │   ├── gpage_smscat.htm
│                           │   │   │   │   ├── gpage_spiders.htm
│                           │   │   │   │   ├── gpage_starharbor.htm
│                           │   │   │   │   ├── gpage_strangehunt.htm
│                           │   │   │   │   ├── gpage_tastydish.htm
│                           │   │   │   │   ├── gpage_vineyard.htm
│                           │   │   │   │   ├── gpage_waterway.htm
│                           │   │   │   │   ├── gpage_wildballs.htm
│                           │   │   │   │   ├── gpage_wildroad.htm
│                           │   │   │   │   ├── menu1_about.htm
│                           │   │   │   │   ├── menu1_contacts.htm
│                           │   │   │   │   ├── menu1_job.htm
│                           │   │   │   │   ├── menu1_news.htm
│                           │   │   │   │   ├── menu1_partnership.htm
│                           │   │   │   │   ├── menu2_all.htm
│                           │   │   │   │   ├── menu2_arcade.htm
│                           │   │   │   │   ├── menu2_clientserver.htm
│                           │   │   │   │   ├── menu2_erotic.htm
│                           │   │   │   │   ├── menu2_fighting.htm
│                           │   │   │   │   ├── menu2_gambling.htm
│                           │   │   │   │   ├── menu2_logic.htm
│                           │   │   │   │   ├── menu2_multiplayer.htm
│                           │   │   │   │   ├── menu2_quest.htm
│                           │   │   │   │   ├── menu2_racing.htm
│                           │   │   │   │   ├── menu2_shooter.htm
│                           │   │   │   │   ├── menu2_sport.htm
│                           │   │   │   │   ├── menu3_appsall.htm
│                           │   │   │   │   ├── send_error.html
│                           │   │   │   │   └── send_ok.html
│                           │   │   │   ├── games/
│                           │   │   │   │   └── games2003_2006.html
│                           │   │   │   ├── index.htm
│                           │   │   │   ├── loadpages/
│                           │   │   │   │   ├── muzon_AirBoil.htm
│                           │   │   │   │   └── muzon_StarHarbor.htm
│                           │   │   │   ├── rus/
│                           │   │   │   │   ├── gpage_airaggression.htm
│                           │   │   │   │   ├── gpage_airboil.htm
│                           │   │   │   │   ├── gpage_aneks_ny2006.htm
│                           │   │   │   │   ├── gpage_blazinggears.htm
│                           │   │   │   │   ├── gpage_caspianmonster.htm
│                           │   │   │   │   ├── gpage_castleassault.htm
│                           │   │   │   │   ├── gpage_cockroach.htm
│                           │   │   │   │   ├── gpage_coconutsfall.htm
│                           │   │   │   │   ├── gpage_conecone.htm
│                           │   │   │   │   ├── gpage_copterbomber.htm
│                           │   │   │   │   ├── gpage_drunkman.htm
│                           │   │   │   │   ├── gpage_firingline.htm
│                           │   │   │   │   ├── gpage_fisher.htm
│                           │   │   │   │   ├── gpage_fruitmania.htm
│                           │   │   │   │   ├── gpage_hardday.htm
│                           │   │   │   │   ├── gpage_hunt.htm
│                           │   │   │   │   ├── gpage_icegifts.htm
│                           │   │   │   │   ├── gpage_ironstream.htm
│                           │   │   │   │   ├── gpage_kalah.htm
│                           │   │   │   │   ├── gpage_kickkick.htm
│                           │   │   │   │   ├── gpage_lifesaver.htm
│                           │   │   │   │   ├── gpage_livebridge.htm
│                           │   │   │   │   ├── gpage_mobilechase.htm
│                           │   │   │   │   ├── gpage_mobilesheriff.htm
│                           │   │   │   │   ├── gpage_mtvpaparazzo.htm
│                           │   │   │   │   ├── gpage_mtvpillow.htm
│                           │   │   │   │   ├── gpage_mtvpuzzle.htm
│                           │   │   │   │   ├── gpage_mtvstage.htm
│                           │   │   │   │   ├── gpage_nimble.htm
│                           │   │   │   │   ├── gpage_opthunderclap.htm
│                           │   │   │   │   ├── gpage_oysterbank.htm
│                           │   │   │   │   ├── gpage_papaninsquest.htm
│                           │   │   │   │   ├── gpage_ravenscheese.htm
│                           │   │   │   │   ├── gpage_searoad.htm
│                           │   │   │   │   ├── gpage_searovers.htm
│                           │   │   │   │   ├── gpage_slider_alpop.htm
│                           │   │   │   │   ├── gpage_smashingkick.htm
│                           │   │   │   │   ├── gpage_smscat.htm
│                           │   │   │   │   ├── gpage_spiders.htm
│                           │   │   │   │   ├── gpage_starharbor.htm
│                           │   │   │   │   ├── gpage_strangehunt.htm
│                           │   │   │   │   ├── gpage_tastydish.htm
│                           │   │   │   │   ├── gpage_vineyard.htm
│                           │   │   │   │   ├── gpage_waterway.htm
│                           │   │   │   │   ├── gpage_wildballs.htm
│                           │   │   │   │   ├── gpage_wildroad.htm
│                           │   │   │   │   ├── menu1_about.htm
│                           │   │   │   │   ├── menu1_contacts.htm
│                           │   │   │   │   ├── menu1_job.htm
│                           │   │   │   │   ├── menu1_news.htm
│                           │   │   │   │   ├── menu1_partnership.htm
│                           │   │   │   │   ├── menu2_all.htm
│                           │   │   │   │   ├── menu2_arcade.htm
│                           │   │   │   │   ├── menu2_clientserver.htm
│                           │   │   │   │   ├── menu2_erotic.htm
│                           │   │   │   │   ├── menu2_fighting.htm
│                           │   │   │   │   ├── menu2_gambling.htm
│                           │   │   │   │   ├── menu2_logic.htm
│                           │   │   │   │   ├── menu2_multiplayer.htm
│                           │   │   │   │   ├── menu2_quest.htm
│                           │   │   │   │   ├── menu2_racing.htm
│                           │   │   │   │   ├── menu2_shooter.htm
│                           │   │   │   │   ├── menu2_sport.htm
│                           │   │   │   │   ├── menu3_appsall.htm
│                           │   │   │   │   ├── send_error.html
│                           │   │   │   │   └── send_ok.html
│                           │   │   │   └── wap/
│                           │   │   │       ├── index.wml
│                           │   │   │       └── logo.wbmp
│                           │   │   └── src/
│                           │   │       ├── about.htm
│                           │   │       ├── channels.xml
│                           │   │       ├── cmn/
│                           │   │       │   ├── sendfeedback.phtml
│                           │   │       │   ├── styles.css
│                           │   │       │   └── styles2.css
│                           │   │       ├── contacts.htm
│                           │   │       ├── devices.xml
│                           │   │       ├── eng/
│                           │   │       │   ├── send_error.html
│                           │   │       │   └── send_ok.html
│                           │   │       ├── gamelist.htm
│                           │   │       ├── gameref.htm
│                           │   │       ├── games/
│                           │   │       │   └── games2003_2006.html
│                           │   │       ├── games.htm
│                           │   │       ├── games.xml
│                           │   │       ├── hotnews.htm
│                           │   │       ├── hotnews.xml
│                           │   │       ├── index.htm
│                           │   │       ├── job.htm
│                           │   │       ├── loadpages/
│                           │   │       │   ├── muzon_AirBoil.htm
│                           │   │       │   └── muzon_StarHarbor.htm
│                           │   │       ├── main.htm
│                           │   │       ├── news.htm
│                           │   │       ├── news.xml
│                           │   │       ├── partnership.htm
│                           │   │       ├── rus/
│                           │   │       │   ├── send_error.html
│                           │   │       │   └── send_ok.html
│                           │   │       ├── site.xml
│                           │   │       └── wap/
│                           │   │           ├── index.wml
│                           │   │           └── logo.wbmp
│                           │   ├── Str2JavaTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── body.txt
│                           │   │       ├── str.txt
│                           │   │       └── text.txt
│                           │   ├── StringDirectiveTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── TextBufferVariablesTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── UnknownVarAsFalseTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── UsePrefixAsMultilineTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   └── UserFunctionTest/
│                           │       ├── etl/
│                           │       │   └── text.txt
│                           │       └── src/
│                           │           └── text.txt
│                           └── utils/
│                               └── somefile.txt
├── jcp-tests/
│   ├── extlibs/
│   │   └── gradle-tooling-api-5.1.jar
│   ├── jcp-test-android/
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── android/
│   │   │       │           └── it/
│   │   │       │               └── igormaznitsa/
│   │   │       │                   └── com/
│   │   │       │                       └── jcpandroid/
│   │   │       │                           └── ExampleInstrumentedTest.java
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── java/
│   │   │       │   │   └── android/
│   │   │       │   │       └── it/
│   │   │       │   │           └── igormaznitsa/
│   │   │       │   │               └── com/
│   │   │       │   │                   └── jcpandroid/
│   │   │       │   │                       ├── MainActivity.java
│   │   │       │   │                       └── utils/
│   │   │       │   │                           └── Utils.java
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── ic_launcher_background.xml
│   │   │       │       ├── drawable-v24/
│   │   │       │       │   └── ic_launcher_foreground.xml
│   │   │       │       ├── layout/
│   │   │       │       │   ├── activity_main.xml
│   │   │       │       │   └── content_main.xml
│   │   │       │       ├── menu/
│   │   │       │       │   └── menu_main.xml
│   │   │       │       ├── mipmap-anydpi-v26/
│   │   │       │       │   ├── ic_launcher.xml
│   │   │       │       │   └── ic_launcher_round.xml
│   │   │       │       └── values/
│   │   │       │           ├── colors.xml
│   │   │       │           ├── dimens.xml
│   │   │       │           ├── strings.xml
│   │   │       │           └── styles.xml
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── android/
│   │   │                   └── it/
│   │   │                       └── igormaznitsa/
│   │   │                           └── com/
│   │   │                               └── jcpandroid/
│   │   │                                   ├── ExampleUnitTest.java
│   │   │                                   └── utils/
│   │   │                                       └── UtilsTest.java
│   │   ├── build.gradle
│   │   ├── gradle.properties
│   │   ├── local.properties
│   │   ├── pom.xml
│   │   └── settings.gradle
│   ├── jcp-test-ant/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── igormaznitsa/
│   │           │           └── jcp/
│   │           │               └── it/
│   │           │                   └── ant/
│   │           │                       └── TestAntTaskResult.java
│   │           └── resources/
│   │               ├── build.xml
│   │               ├── config.cfg
│   │               └── src/
│   │                   └── com/
│   │                       └── igormaznitsa/
│   │                           └── dummyproject/
│   │                               └── main.java
│   ├── jcp-test-gradle-6/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-7/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-8/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-9/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-javassist/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── test/
│   │       │                           ├── JavassistMain.java
│   │       │                           ├── Javassistable.java
│   │       │                           └── Main.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── test/
│   │                                   └── JavassistableTest.java
│   ├── jcp-test-jep238/
│   │   ├── pom.jdk9.xml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── assembly/
│   │       │   └── assembly.xml
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── tests/
│   │       │                   ├── JDK9APIClass.java
│   │       │                   ├── Main.java
│   │       │                   └── OldJavaClass.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── tests/
│   │                           ├── JDK9APIClassTest.java
│   │                           └── OldJavaClassTest.java
│   ├── jcp-test-maven/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── maven/
│   │       │                           └── Main.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── maven/
│   │                                   └── TestMain.java
│   ├── jcp-test-maven-action/
│   │   ├── jcp-test-maven-action-action/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── igormaznitsa/
│   │   │                       └── jcp/
│   │   │                           └── it/
│   │   │                               └── CustomPreprocessorExtension.java
│   │   ├── jcp-test-maven-action-plugin-call/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── igormaznitsa/
│   │   │       │               └── jcp/
│   │   │       │                   └── it/
│   │   │       │                       └── Main.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── igormaznitsa/
│   │   │                       └── jcp/
│   │   │                           └── it/
│   │   │                               └── MainTest.java
│   │   └── pom.xml
│   ├── jcp-test-static-site/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── resources/
│   │       │       ├── about.htm
│   │       │       ├── channels.xml
│   │       │       ├── cmn/
│   │       │       │   ├── sendfeedback.phtml
│   │       │       │   ├── styles.css
│   │       │       │   └── styles2.css
│   │       │       ├── contacts.htm
│   │       │       ├── devices.xml
│   │       │       ├── eng/
│   │       │       │   ├── send_error.html
│   │       │       │   └── send_ok.html
│   │       │       ├── gamelist.htm
│   │       │       ├── gameref.htm
│   │       │       ├── games/
│   │       │       │   └── games2003_2006.html
│   │       │       ├── games.htm
│   │       │       ├── games.xml
│   │       │       ├── hotnews.htm
│   │       │       ├── hotnews.xml
│   │       │       ├── index.htm
│   │       │       ├── job.htm
│   │       │       ├── loadpages/
│   │       │       │   ├── muzon_AirBoil.htm
│   │       │       │   └── muzon_StarHarbor.htm
│   │       │       ├── main.htm
│   │       │       ├── news.htm
│   │       │       ├── news.xml
│   │       │       ├── partnership.htm
│   │       │       ├── rus/
│   │       │       │   ├── send_error.html
│   │       │       │   └── send_ok.html
│   │       │       ├── site.xml
│   │       │       └── wap/
│   │       │           ├── index.wml
│   │       │           └── logo.wbmp
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── test/
│   │                                   └── TestSite.java
│   └── pom.xml
└── pom.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
* text=false
* -crlf

================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "maven"
    directory: "/"
    schedule:
      interval: "daily"
    rebase-strategy: "disabled"


================================================
FILE: .github/workflows/run-maven-tests.yml
================================================
name: Run maven tests

on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

jobs:
  test:
    name: Run tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven
      - name: Maven test
        run: mvn test


================================================
FILE: .gitignore
================================================
**/.gradle/
**/build/
**/target/
/nbproject/
**/dependency-reduced-pom.xml
*.iml
/.idea/
/.idea/libraries
/jcp-tests/jcp-test-jep238/build.log
/jcp-tests/jcp-test-gradle/.buildProfile/report/
/jcp/.flattened-pom.xml


================================================
FILE: .projectKnowledge/JCPreprocessor.mmd
================================================
Mind Map generated by NB MindMap plugin   
> __version__=`1.0`,showJumps=`true`
---

# Java Comment<br/>preprocessor
- LINK
<pre>https://github.com/raydac/java-comment-preprocessor</pre>

## Current
> fillColor=`#FFFF99`


## Issues
> fillColor=`#FF9999`,topicLinkUID=`15150167A1AA`

- LINK
<pre>https://github.com/raydac/java-comment-preprocessor/issues</pre>

## Backlog
> fillColor=`#99FF99`


## Changelog
> leftSide=`true`

- FILE
<pre>changelog.txt</pre>


================================================
FILE: .projectKnowledge/documap.mmd
================================================
[Scia Reto](https://sciareto.org) mind map   
> __version__=`1.1`,showJumps=`true`
---

# Java Comment Preprocessor<br/>v 7\.2\.0

## 
> fillColor=`#FFFFFF`,mmd.image=`iVBORw0KGgoAAAANSUhEUgAAAL4AAAAwCAYAAACvzsA1AAAQkElEQVR42u1dB1gVxxZeiS3RGI2xRtm93MstXBBUwK5YUey9xl4TC1gAsYBdH6Im6osleWqKL7EbSWKPiVhATSyxIAjYEH02LBdszJtZBoPXe3dmdheSl7fn+863IDPnzM78c+bMOTMrx2mkkUZUVBVyTci1CGyCXFpFvWUge1HorY3bqJFGqlF/yICBf1dJbwXIOQx6n2tDpZGa9JgR+IhLqqD3LKNOmzZUGqlF78oAPeK6CvX6yNB5XRsujdQik0zgD1Sg0wXyIxk6T2rDpZFa1EIm8D9RoNNfps5F2nBppBYtkgnC3Qp0PpOps7E2XBqpRRdlgvCMTH09ZeoD2lBppCbJBeFtmfruy9SX9lfuxNQoQUPS/xDVVAB8ORY4XIGuHX+1znu4TD/gwceG1MwY/fIbkdVLqi3/yXJeQ2gB0TCFwLcw6rujQNcsFd63GOQ3Ib8FuRR+ot+L40gTE2WtckuxfaoHj5YaQOZCve3OXF2xW4tqKm7k45W5gL+zzMMle6Vu2KOlus0PFrmXUCCyJH7f0viJ3rnon4S5IpBL4DbkjUFx/O/OqCzkcpjRz2/jn/OoHJZFTSsUAn9AIWyi87iNzI72hLwd8j0uN4SajYwp5Kf4iX5HCbwHkM9DHkEr2LZK/xiC/1nWSj14vAyCP0YfqhY6Hn/NudhW6m9mrYKyl+uR7JuMItwgr8SuZRZ+32f4mY374jDkOgqaiQAXCLkt5taQPSTK/wv3sw23IW8MbNgoznZSLwbyC8jHIYdAzsCYQJNGh3+ex9Lw4wrBuIJBl02hrjIMugyQ92Kwy9GFjlHsxFbJCXXmIDAB5EwEzgdL9KduhhvBncnmEkpB/2iVmx+Um43kQs6x/RPKX2wA9xfoq1NUnw75KuP7XoLclLGZIRLyZuQrh1aZAwxteQi5h5O9aDG8MtvwhPGGfAFPbN/C2NiyJpRiFOp5zGCBtqvwXnmMrKLDXeu9OYbG0BLfta3W38tcZLh0M8wIEPDTJ5sa/qRgo5sRrm/3nynuSWhSZYmTys2G3KmHSwzgXrReJ1E1CPIthe/Lkpu5ISFnDS4zRkFb8oO/Mrb4eW4b+vtnkFMgr8e/V6ZtuF4FYNwm+GaIyhNkZFLo2UzxPjpsBYDKjKzLG/bKroe598gIhWCPMGxCz4xJkCeYwPUQ00dyQX99tKlTxkSTOIEer3BLt610u5O1WlxVwMOPoSsV7VbOQTVkAVep+L7LKf100mFCpWNxP5++UZDj8M/olO6vkHvhcqXyuT1UNI6g+AX216TKPKDYJC0myKhKsTQPJ+hgOW+Ug9+N5VRogL3C9BD3/unjzCB9rDkhfYwZXB9tBtc+tIBrIyyfs4A9qbtVfF4dam59daRFlHMj2GiDK0hSRrgx7WaYIRFOhNO3Jrv/7EREcgFM9rGEZrcuAJ2OuBPW9w4eYw5vhN/Ck+89jD+m8Nduji4ze1uiTBbeoUtZYZoOvksoV09Cx1uU+4dovOGrgDusIh5Amrr77ZWmDbf0uTrcAq4Ms8RdGeoBrgz2AJcHQu5vPcBq6RO7Wb3T+lnBlUEe4Oowy91rH5ku3ggxiasIsv6IMyKMtRxYelrXBvXvZQbApRCavLCQgL+9IMJKFwhK/XC5nwjWU2IDyH1B0FEcuxGkDqhCiBRI1T2E3S0pSiPIOPVawqqvRxcE1tQ+1iNpfeGztydI6Qm5myfTXYWLXT0rJnfyzLnU3RPK8nySNsBj7dXhHuLqAVcT0X3KCDNeFP3/qSaW8UOZ9Sbc65eGquLNp5LjIXspV1b0/BRyI2yVK2AvIoz7E0/jPqBMTpH8x1pO5POEei1xueYKEmUkHXco+2IeQc4G+wopPaxNL3X1BMmdPZMh30ru6AWSOniBi+29Np6qUbPpSaO3pMLUuvW4k/UtpS+0qJGTGOQt1k3u4rkqtbcVrhpwBRkCrf8I0fV5cT3Y1T6itYTQ3mkU70yy2lKBiysUY4YmpquEjKYU7uYttUFfgqAwf8w4mFB2qhMdBzm64wcRBPl7Jd6jF2GD5UXZH6SMch/7CqdbelkvBtUAiYE1nie2rrExsZU3uNDCG5ypVSv1N2vtWCllCULuYnrC3Tf+XGMfcL65N0hsWWNFUnuv7EtdvcSVA60mous01H2wbfWg/NVJp2mHqZRQtEns30igz8ShR9IG+QZBTrrawB/M0R9AI3V0nAP5lRh89rWEskMJnTcUJz7G4vAZeg6i6HiWpfsd+wrHmniWOR/gAxBwzzXymXO2kQ846VX73Am9H4AsuiY/iOmEVykqr77O70tU9pR37RNnG9S8fb6Z94kLgd7gYtsaILmTF0CuT0ov6wLGzexpRhxskJD1xEmkpDFFUKQcpf54gqzv1Qb+PoZ4bmVGVwSBMVWi7FG78kcV+Pdq0ACC/mzO7polAPG5Ftvg9wJa93OnfWvO/9Xke/W4mx/IZf9LTl0cj1ZcvJv/+GNu/qgcZN/0M3V8NkHwAzSR0KqR2AauJJ290D1o7nIvD5a2vsn47sskZKEs79sO6iylSIaplUCdoOZAu3DkO7ZNGZe2UnapcqmyJoaM7lMnna8GITfoS4p3u+coji+OmpvfIwTeY4LfZgTkPE4Q/JPieb+GDk1cFf/yCTr/58d0uLzOf+wJg++NE0a/9N/Mvhlw1cg45VX7zCmfmp/JCF12YXh/N0JU6LkTy006xt6boQ2pBFmV1RzwUhTJhddyK4Ty1Sk3PmsY4+9ZnPzDVMVwu+pD7oCTIMjCHWYMqTmN0kDgpuWC1y9FBDLkBMyHq9V6ZYLH8XW5X6tZi8QL/vcThDpiGThhDsE6mcfzrH+umwSg7w9+1tUuneFbh2VfpjYj4Jd1sJrf5tQ5sYtkZRBWWlXpPcJu+oqDOj8SXjYvhEG6Umjv9A6XCzon8XxkxdFhuP+oCICpTjepOv9jGOhpCbo6LyCDeAjqo0KdaxDgW+Mqvbq3juPrhx4R6oll4nn/p7DMpAQ8Yf5wfSDw3Xy7O1A3v5CB/4R7/cSjC16FndU5x+h5PJSQlag28DsQXvgHB3VmEuoE4XJSGdglDuTuJMgNp+zALxkzsSysd6b4KF9nuwhioc5D+PM3R4W6AAH7sFAfHBIaPIRAF4867xYCuAN8E/MvQmMQJzQU/36Er7sE1X1p/XMn0MVjOl/xdCgEv7267EIGfhbOs+Qn0jGXbQw4JOVvdqsN/H8TFDo63tmNUAf5nnsIZRx9fe0Soc77hHcZUsCAeOo8HGLlDgt1J2OQgzi+Qb84oRE4KHJj8LPQBOyqVvdlNGgf3/zYT0JT+O8B8O8NYw8J9RPQJEGTRZwAOnEC3NnP+5Y6IvjYqyuNoyWFCXxHK3+kggicPTXjCv7+xSv0nKCwg4M6/go7cZSTttxX4OMtYGwDOti0Dq8i7SEbITcg1EmSasCB6g28Ech/gSCHFn3BASHgGQL3fqEZ5OZgH99ssOgn8q267BZagb1CC/FvB/iARfmtPwL/Ud5/91FXX+90aytHqmi/OHcD+81yOO+uwm0c3n1Hxub6PQYcrlGQOWamchSd5yi9X1UB6J3dzS3KyT8vQnNzLAWn5o0ScooqXW73i0CHIBea394rtLy1R2gJ9kCQ7xYCwU4hUPwcyg9C2ws7hTZgl9Aa7OZbRMKy93KtfxNxdTgEJ8ARvt4zCTWuhHamctJnptSgYhR7AhYifVdJVSLdsZX6NqVc4A9xIq+HjMRY3gCQDpatpuyPIIKcKJKAPXzLXQjku4TAFzv51pcRwH8UggAEO4jl2y7Z6tqp7XdCRxArtEP/fheWOYjKw0mSa/2h64Os/0G+YZAC4H/IFTxVIbRhH4Os0lwhf1iABDapVPtdGaBPkJC3g1B3ppN6nxDqrWHojzMMGWaHFMu3GYVA/r3QLidWaB8DGewQOgAE9m2uHadtEbr+vk3oDLYLncAO13ZdYdkcNDkQ+NHKsE90f5oeQbIOujZ0poZ0ynV8IQDfqqJPLhBkfa1241dz8s9hr5MBfCk/jZRL8HdQpzgn/0CbHLdPktBysNW1rSsCuQh0vuNABPKtQhewBfLXFQPLbBR6gM1CN/R7HPz79Vzr3x6uCEG5rg9yi6q0JF2iqErw8VfLtODoiMfHOOKGDq2Fcc4vbX+kYvKMdOxhtNrAJ134aCRRty8j6KWWvrcpohTOso1SdQ4w9AXpOmQSraAtfNcjWyC4N/HdEjYJ3c9tgmDfKPS8v0g/Lma90Ddng9ATbHLtNhZaf4AmBgI/WhVi+XZZsdXbVqJQUZbQX6wX0YfLMH6kqJ07g/6FXCFubGn8dKljpGZG4JskZL1PsGDOkhd+MnIQckJpAK9wVPSNa88aCNzfCr0Rb1unGwjWCQOmRxvGg7W6gU/W830Wfyv0yoSTQbT+W+EE2C50vLStekdhBx9Em+V8SGjvfMqcRyQhfFtSJnZYKIUgq6yaoK+rsPFVGJJEpJszpE3leif1OlLoLkoAUEvKdxhH27GRLn2KLDIEX/hC+CDrK/6DpZ/rhtyaawwF840TwRL92Mtf8X2XrBf6gW+E3k/hBHm8ke/WU8b4jaVo8wq8mhbN974oUYQOr7WhGD9fCUMlVe8Ew3u4qBwdIlKwwsaXoUyiPKeYsaQY7gSZFj/vUJmjREoX7BLQTt5Amk6do8udH/Pdx7kucJ8I5ruPj5xtCgczTZPBHGMYmKuf0D/aEJwUYwjeFeM+pk+MMaTPQkPIqWghWC9jDGku5j/DocL7mB9wdBe/pb6RFEioO53hHbxlGj3Z9AWn7AhoUUrgL6VoC+l0aIDEJo/18yCZnLwwbC3ajp2tC6k8xxi6dLYpDMwyhiVHmqfER5ojwAxjBIgyT96GJgH6G1oF5hkn7ZvrNul9mWM4iiuYLG0EQe8kju6aKg31U3GTTEUnCAp1FDIyOPKlZqUxXMBJH0W+yxVOyr46awdHGkI7RZmmPIswT9s41TINTLeE95hunmqLMk8BMyD4Z5nCz841h3ZfYJjyhoJx/FTl96Q58x6rYl+Rrk0a1AZ+NmF5pPlS2QZCo2k+oUc6/nCfIgyp5EAaOrl5VOHke436lx/GTTFObT/ZEpkZboncF2aOTIbPtRGW6cenmaedhKvA/hnmCHT5m5tnDVE6lotVAPw17o9TtSQibaxZPpibwDHedivIiA7tbfZ6HP3NKmdEulw+hkIGsjBZjAOdbeeLkqyYLAq1RLWb6DFzykTLjHERQhQfaplVoYASSj7YlWMxAjkYxJ1VxM4aRllS/+Hf6YLoqGo4jBeAGVmfDnjWs9xP1WM/rAeOkARgN4lWhgsOmwY4YIGj/2ox0tea0JF3cMwYtc/+LAtyN9BhtZ523IaTeetrnDFK/OhRsMfsl/uccPPMIlzBEZL9Lg5RXuOkrwOiLy+U52R8FZrL/QZRW7t+CpTplqAVu52Dfm/IiEON8Ma7Ip5QiCtxhfwZ7DGGKPE50hpdebTn/MjRXvPm/Qn9gCZ3BRwEqFQQboNGGjmkEV7Ri8Wn5z9iRlqii2g9otH/BXX3iBK/8tvFOt2tq+c8l7GGN7RO0ejvTTWNI797ufM0jipjNQzppPWKRn9bcnfPTXrq9f0b5P93k3HQRq13NPpbEwT5J+76AcWrVfvjAwkm98HekN/Veqfw6L8MpcrkyHZvbQAAAABJRU5ErkJggg==`


### goals
> fillColor=`#FF3700`,textColor=`#DBDBDB`


#### preprocess
> fillColor=`#FF3700`,textColor=`#DBDBDB`


##### sources
> fillColor=`#FFFF00`


###### Source root folders for preprocessing,<br/>if it is empty then project provided folders will be used\.
> fillColor=`#49EFB6`


####### \<sources\><br/>  \<src\>$\{basedir\}/src\</src\><br/>  \<src\>$\{basedir\}/res\</src\><br/>\</sources\>
> align=`left`,fillColor=`#FFB600`


##### eol
> fillColor=`#FFFF00`


###### End of line string to be used in reprocessed results\.<br/>It supports java escaping chars\.
> fillColor=`#49EFB6`


####### $\{line\.separator\}

######## \<eol\>\\r\\n\</eol\>
> fillColor=`#FFB600`


##### keepAttributes
> fillColor=`#FFFF00`


###### Keep attributes for preprocessing file<br/>and copy them to result one\.
> fillColor=`#49EFB6`


####### false

######## \<keepAttributes\>true\</keepAttributes\>
> fillColor=`#FFB600`


##### target
> fillColor=`#FFFF00`


######  Target folder to place preprocessing result<br/>in regular source processing phase\.
> fillColor=`#49EFB6`


####### \<target\>$\{project\.build\.directory\}/generated\-sources/preprocessed\</target\>
> fillColor=`#FFB600`


##### targetTest
> fillColor=`#FFFF00`


###### Target folder to place preprocessing result<br/>in test source processing phase\.
> fillColor=`#49EFB6`


####### \<targetTest\>$\{project\.build\.directory\}/generated\-test\-sources/preprocessed\</targetTest\>
> fillColor=`#FFB600`


##### sourceEncoding
> fillColor=`#FFFF00`


###### Encoding for text read operations\.
> fillColor=`#49EFB6`


####### UTF\-8

######## \<sourceEncoding\>US\-ASCII\</sourceEncoding\>
> fillColor=`#FFB600`


##### targetEncoding
> fillColor=`#FFFF00`


###### Encoding for text write operations\.
> fillColor=`#49EFB6`


####### UTF\-8

######## \<targetEncoding\>US\-ASCII\</targetEncoding\>
> fillColor=`#FFB600`


##### ignoreMissingSources
> fillColor=`#FFFF00`


###### Flag to ignore missing source folders,<br/>if false then mojo fail for any missing source folder,<br/>if true then missing folder will be ignored\.
> fillColor=`#49EFB6`


####### false

######## \<ignoreMissingSources\>true\</ignoreMissingSources\>
> fillColor=`#FFB600`


##### excludeExtensions
> fillColor=`#FFFF00`


###### List of file extensions to be excluded from preprocessing\.
> fillColor=`#49EFB6`


####### xml

######## \<excludeExtensions\><br/>  \<ext\>png\</ext\><br/>  \<ext\>xml\</ext\><br/>  \<ext\>txt\</ext\><br/>\</excludeExtensions\>
> align=`left`,fillColor=`#FFB600`


##### extensions
> fillColor=`#FFFF00`


######  List of file extensions to be included into preprocessing\.
> fillColor=`#49EFB6`


####### java, txt, htm, html

######## \<extensions\><br/>  \<ext\>cpp\</ext\><br/>  \<ext\>frt\</ext\><br/>\</extensions\>
> align=`left`,fillColor=`#FFB600`


##### unknownVarAsFalse
> fillColor=`#FFFF00`


######  Recognize a unknown variable as containing boolean FALSE flag\.
> fillColor=`#49EFB6`


####### false

######## \<unknownVarAsFalse\>true\</unknownVarAsFalse\>
> fillColor=`#FFB600`


##### dryRun
> fillColor=`#FFFF00`


###### Dry run, making preprocessing but without output
> fillColor=`#49EFB6`


####### false

######## \<dryRun\>true\</dryRun\>
> fillColor=`#FFB600`


##### verbose
> fillColor=`#FFFF00`


###### Verbose mode
> fillColor=`#49EFB6`


####### false

######## \<verbose\>true\</verbose\>
> fillColor=`#FFB600`


##### clearTarget
> fillColor=`#FFFF00`


###### Clear target folder if it exists\.
> fillColor=`#49EFB6`


####### false

######## \<clearTarget\>true\</clearTarget\>
> fillColor=`#FFB600`


##### baseDir
> fillColor=`#FFFF00`


###### Set base directory which will be used for relative source paths\.
> fillColor=`#49EFB6`


####### $\{project\.basedir\}

######## \<baseDir\>$\{project\.basedir\}/src\</baseDir\>
> fillColor=`#FFB600`


##### careForLastEol
> fillColor=`#FFFF00`


###### Carefully reproduce last EOL in result files\.
> fillColor=`#49EFB6`


####### false

######## \<careForLastEol\>true\</careForLastEol\>
> fillColor=`#FFB600`


##### replaceSources
> fillColor=`#FFFF00`


###### Replace source root folders in maven project<br/>after preprocessing for following processing\.
> fillColor=`#49EFB6`


####### true

######## \<replaceSources\>false\</replaceSources\>
> fillColor=`#FFB600`


##### keepComments
> fillColor=`#FFFF00`


###### Keep comments in result files\.
> fillColor=`#49EFB6`


####### true

######## \<keepComments\>REMOVE\_JCP\_ONLY\</keepComments\>
> fillColor=`#FFB600`


##### vars
> fillColor=`#FFFF00`


###### List of variables to be registered<br/>in preprocessor as global ones\.
> fillColor=`#49EFB6`


####### \<vars\><br/>    \<glob\_var1\>SOME TEXT\</glob\_var1\><br/>    \<glob\_var2\>12345\</glob\_var2\><br/>\</vars\>
> align=`left`,fillColor=`#FFB600`


##### excludeFolders
> fillColor=`#FFFF00`


###### List of patterns of folder paths to be excluded from preprocessing,<br/>It uses ANT path pattern format\.
> fillColor=`#49EFB6`


####### \<excludeFolders\><br/>   \<folder\>\*\*/folder1\</folder\><br/>   \<folder\>/some/\*\*/folder2\</folder\><br/>\</excludeFolder\>
> align=`left`,fillColor=`#FFB600`


##### configFiles
> fillColor=`#FFFF00`


###### List of external files containing variable definitions\.
> fillColor=`#49EFB6`


####### \<configFiles\><br/>  \<file\>$\{basedir\}/config1\.txt\</file\><br/>  \<file\>$\{basedir\}/config2\.txt\</file\><br/>\</configFiles\>
> align=`left`,fillColor=`#FFB600`


##### keepLines
> fillColor=`#FFFF00`


###### Keep preprocessing directives in result files as commented ones,<br/>it is useful to not break line numeration in result files\.
> fillColor=`#49EFB6`


####### true

######## \<keepLines\>false\</keepLines\>
> fillColor=`#FFB600`


##### allowWhitespaces
> fillColor=`#FFFF00`


###### Turn on support of white spaces<br/>in preprocessor directives between '//' and the '\#'\.
> fillColor=`#49EFB6`


####### false

######## \<allowWhitespaces\>true\</allowWhitespaces\>
> fillColor=`#FFB600`


##### allowBlocks
> fillColor=`#FFFF00`


###### Enable merging of text lines for //$""" and //$$"""
> fillColor=`#49EFB6`


####### false

######## \<allowBlocks\>true\</allowBlocks\>
> fillColor=`#FFB600`


##### preserveIndents
> fillColor=`#FFFF00`


###### Preserve indents in lines marked by '//$' and '//$$' directives\.<br/>Directives will be replaced by white spaces chars\.
> fillColor=`#49EFB6`


####### false

######## \<preserveIndents\>true\</preserveIndents\>
> fillColor=`#FFB600`


##### useTestSources
> fillColor=`#FFFF00`


###### Turn on test sources root use\.
> fillColor=`#49EFB6`


####### false

######## \<useTestSources\>true\</useTestSources\>
> fillColor=`#FFB600`


##### skip
> fillColor=`#FFFF00`


###### Skip preprocessing\.
> fillColor=`#49EFB6`


####### false

######## \<skip\>true\</skip\>
> fillColor=`#FFB600`


####### activated by

######## jcp\.preprocess\.skip
> fillColor=`#FFB600`


##### dontOverwriteSameContent
> fillColor=`#FFFF00`


###### Turn on check of content body compare with existing result file to prevent overwriting,<br/>if content is the same then preprocessor will not be writing new result content\.
> fillColor=`#49EFB6`


####### false

######## \<dontOverwriteSameContent\>true\</dontOverwriteSameContent\>
> fillColor=`#FFB600`


##### actionPreprocessorExtension
> fillColor=`#FFFF00`


###### Provide a class as the preprocessor extension through its full class name\.<br/>The class must have the default constructor\.
> fillColor=`#49EFB6`


####### null
> fillColor=`#FFFFFF`


######## \<actionPreprocessorExtension\>com\.igormaznitsa\.jcp\.extension\.LogPreprocessorExtension\</actionPreprocessorExtension\>
> fillColor=`#FFB600`


## 
> fillColor=`#FFFFFF`,mmd.image=`iVBORw0KGgoAAAANSUhEUgAAAE4AAAAwCAYAAAC/gkysAAAOyUlEQVR42u1aB1QU1xrGksTEHo2JCqwtKpZYYiwxmjxN4ovJM5pEE9t7JjFGfSemgh17jw2DvYJ0kCYggjRBBGmiCCwgICIIClIFEf73/Xdn1wUWWBHfieWe852ZvXPnzr3f/H1WR+cJauUlZZV+p3vFd7tqG2kesytgms7zprkVpOSozomo8Q0f+eCwJa6Jdt1X0elP9zo9Z0hDyw5JUSftxeseVz4L/MGq0OK1xWTdeRk5GKxNSveKHcbXM/zkzwkDSToT1X4XXstpkWwbOd/78/0kSNNdLoiz77mmxGfK4V3PGdPQbgZdbS8/HLz95MjtZPn6EgVpEmz0jclp0KZoEN2Jx5bm3X12iaooK1dJ3TXXy11idvi5n+izjqw6Lq1EmlLqHHqvzQ2cbWn0TEtXUfodJWlNku0i344wdotlgqw6LatOmiBuOdl2XUmQRj+2gUrCn6l2KzxNSVqzq1bhE4J+tMm17LBYkKORNAlMqkOfdenhS0+K0OTsd8efHUfgN8NMed5Gfij4J+9JBx84gbrATuLN1XTqY1PrZ8p7qjxnep4u7Nl299E7qjmBusBS59h/Q1zC0fOjea7Ms4lPMWkVD0jLOpfUL3LNKRfHtzZodgJaSB2cRJnX5/u3PdWSdjerQHWe4hA1JvQPx4ts5Gt0AtpAz5ich2wJyQpJ7s7zlhWWPl2k5VxMV6rpC/EHz80I+NYiw6qzQmrqTZqkrif6rs/3m3HM8KmzZwgxlOevXtrqs8hrwr5iq47L6vSc2qmrKjRxZyfzVIQm6hvAebcIY/fdbqN3KlSzIUhTSh3so+PAjTeCf7afzs+KXHXq6SAt+8K1YefmWrs4Ddz4aPasFidh12M1uY/ZdYSD6CeWtNKcItV5jInfhKi1nmF+046SbZeVj2zTarN1cBJXLq4/PUbKdZ8wz5ldoKqhxe8PmpvqGJ0S+rsjpbnF0BkEuJyg8yYt31jasMQpQhM6PX7vxidONYFGfF58K7917uWM1fkJWTlx+wLp5Hvb6XbUdYI0CJWy7b6KXEdsFSTWZbuOv7qQLDssqeYQaroH855FQNyX13G/SgX5b0laefE9lROgiopD5XfLSq7aRJDbqB1k3sqQ7sTdpCTLcOEBozd6UarzJUFijaRBIh37raewRS7kNWE/WbRbJAjkuZhMs5aKo7rkikzirQ0lPpMP//Kkec7hgAdQnnAslFze2SLSKPuea6go/Q5l+CYIO5cdmkIIVMkeqqXJ0Fu0X0QnR23HeDnIDiP54fPkOnwreX6yh1KdoinN4wr6gun8Lw7kMvRPOt52oSrzsNFfwS/rRO7lGx3/dqEJVKVaX1ZIysTcmIyIdM9YCoFNO9F/g8KWgTiPMbvo7s0CygpOFlIG20dIvcjBYF011WSEgJDs0FQqSstlg09XTPzFvVnnk0nZKsorCJmIMAGX/jwj5uICAceHeGG3zn5v+Q2vK3ypq2LNutXXbK1LwLL/A2EaHh4816YlNrYAapl6bp4NqwrSIAUJTNpxqJjPV4eoNLeY0txjBHEXDJ3E5p0Hb1KRxqUkxwEbhUQxIdxKc4rp3FwbCvnNUWKrgjS18pIySjS/wAm/kFY2Bx4f/rUHl5pXWX8jYCAwCWhX274eC2k2shU9zdsY7cRbDkl2iIouKyq9XZiaQ1etw8nrX/sEYbwBt/d3ktPATeQ3/Rjdy7tLsaYBUNUVFDzfVmzYHdeZZLZfZyYdoJzodCFJD8SKBImF13KorlZxvxzPjxDks+1zHbEtPtTI+T1p7eOAbcBeYAewAlgDfAmo4j4bPWMdeOeGI0xJGjbZAlgKm5LkMnRLCRN1v/ieapP85vMSsijBLJQy/ORUdD2XskNS6PzPDoK4gG+PC1UKmHUcwlNBpz4yFaQF/WgtbOCjNiYd4Q8kebPwvDARJ5zf3rwY0v8f7KE/0A3QAzoAHYFhwAJgMghrWpd21UvScOwJOGOjpZ4fm1JmQFKNqoMwQHWtKD2PkJ8K4hKOhhB/F/X6dC/dv1tGSRZhINWeim/kacGK9uRl+CVQMjx6quPFqHPzbMf/rNP7xRr29gLQFhgKrAV+B9prY6K0I03PuBMM/REOB/ymHaM8eVYtK6+oRmLJ7SJxnn/1FlcyKGaHL5WX3hfXmNDaGl9nZ1OTet7L13x/wrEQYSq8Jx2Yo4mAKudNgTbAEGAr4AOsf2R1hb1iG1HGKldyq7DWjTKp6adjEW6UVLt2xfQshS93UxFZVysvu0/hy1yFh2YTUInQghK6tMWbv+pTXnz1F5lsH8XfJMht9E67NNfL+jWFJlUIbAK0BEYDvkAcMKZepG3SmfAKFm6MfFNISZ2bhRRFb/Im36+PVJPM4J/sKdM/UUiKNiqXdvKyCITZ6/rPNKeKsvJK1xOPXxBB8aXNZ6rdfysijTzH7SanwZsKfKcenSQEoJWhVs4P542BV4AfgFxgltZBbdRaRWnmhk98F7xtr/J75VpJCQesToM2wbMtoszAJNF3YaEzFSImY+K1IU0RihSJoBeejrwnHqCLyDbuxGZWGlOSXUhx+4JAYGi1+9nL+880I0vEdrCpJuhq/bDRgySB7FQ2P1QmkO4V1yMzIPHM3cx8rTbLG/H95qiQAg4JWC3LISUhv5+g+APnHnhgTYRDegQxMJGcMVza5ks3g65SGe5hstkLI+wRzxASp5Q+9FcKYaRWkHxbhEGcVSCTSAqcbSU+6GSHX3tYp8ixX9NaB5eXPkiKsejhsGkJ3p8foLKCEq2Ii1zpTojxRNrEWQMHohzZZ19IpcjVHiJOUzqDwmu5lOpyCaRUCHvo0HMtxe0/p3AiidmV5uVYLmyhi5gbaidIZOMfhICbVVJTY2l3H2Misgn+jHhm0sGFD1urq9ObIr1Rl7im1z2vTDz7nUU+vy02vtqEC5z22GGB6oVKzgbOfHGQ7t0ppsA51hSx0gPnCuLu3swX8ZwIXTgY/sBE3M+hC6u1sJelZUL1HQzWink5G+Hc9Fb4NWE/ObjmJJ9VOmKFG2WeTRJOg9vtyOvi2bwGvg8xXVDYYpf+DZagR284/eD3/YrmybaRC7gawerGhpn/9JLhn1AjYSwNnEIp62xVk3ZOuYL/a0tKdRcqBom5vN1XZBG3II2snpxxeEG6YR4IOa+I8TzH76lcUuLvC7gnVApPYnb4QRWNRL+ixrdEIfGwi1xVSfeKJx84Kf7N1Wekfv/WZJLqXdXgBpVqJz983kT930FcHOSANWqdpypuUtqTYkgMqxZSG7LosLjOuhrX5Lgex3aH5xTekjcMhC1xFc6gHPOzJHI4w47Ef7qZyquql5t4jXfiMhGiZGNezR+yrUCiE9Kv4AX2dHGDF3mM/Ytfjn38/iARmlza7P3wpIEAdQIbpXvGymJ2+nlwhaHqh2FeKFcoWBXZ/XOFgnNHqDKZtzbU+huCslIi5u9c5StVt5WiTARVEuc8lu0fP4ftZKVye2eF7WRPLQLdI+fJGuM1FkW5RAUbx4WHZLsIit0beC9wjtU/6yVpRTfuqJPWBAt8O2KFe5xS3GvaNHtJ9/dNKMXhIoLSk1DBhQ34sWW52KCQHIlUliR2GtGbvav9n4TJ55CHSWNHwvU5z3Gm1SvFEjgf9pl8mNK945AqJu6AELSVtKxeqtos5UTUZ/BM+XX90YUXyolz7O6zCDa9ReWjIT/vaYINbBnbQc5UOAOo+lL5t3kbI3IGgVwDvGoboSpoCkeiPr6zgrwbPnL2ttfxMobVS+ruFZS2RtA4n72ORfvFWn0EYSmLRoojnMZj+lJVVQo5r+XYLsbEX/GyNIxjr8lmg52KN5waV53Z7rLHVai5YpxZK0MRS/K4RPPQ31Kdol8SZquiQjvS0txiOl3ZFbDTbdTOGkVbHRwKhPx6Qhh25dt87KSp/WXVf4YZ5cXdFAVQjc/GS2RPykIQtz9IFEKvn4ol2GzxvYM9rXpoFAfyQo2co7y/OGjwUNIG1pfB29yAPZFjwpoQL456xhl4WCq8ajykTG7VcVlt9zQ88Ew4i3gk80kIYHOx5ljN45bLQYzcvLURYCi377VG7jF2lxxOQQ6yVeN4z8i75a4jtl4/Nc703Yci7oDOfAPEPv0wUU3oA/QFPgVmm7X8Y6ypzqzeCDT7Westr+2+xwJoRd89OrOHQlVXQgKHo8+grntg6/odfenXfrBrWLNxpWsgt69ZS8MB2FdrnYZuUl1qqovu2lZ/lw9EkZ33trLRNX6vIee0012pY1WfjzXdZV0aKc/bytq/MFI2yOCwrtFMG93lFra6K4Zwfw9Z154Yx2irdt+LQGegtfRb2d8K6AO8ATSW+poBekATqb+t8rk46kpzGyjnqtp6ybo30pV1btFP1rO7pe6y3iBvEPc37vJyc6ytkzRvB6ClNCfP3wt4E+gGtKhh7/UirAfwFW9I+t2ki0x/9ACZgf8SvZlBkLSpEmn9cc0O+BNYyMRI44cAlsAstTnbAL8Be4D1QHepvzewu5tM1h5HY+BrJl66xmM3A0ZAX00bk17St7jf8h/67wxw1F39lYXu0vEj9QdN7irTP4R1f4jr84CPpPHDgMOANbCGSZT6RwGfAO3qRR4GTwfspUV3kfpaSA+7gIXYqY0dAxQDwUAQIJP6maA8YJ8aQRMBf2kT89QW/C5wTSKTj6uBl6VrqcApYDtLSA3EtQOiAD+Qt4reyG8O4n6doj/2KPqov6xXGPr55X4vjWepNgHCgflKTcHxS8AKOAb0q4+0GUqL5ePrahJ4k6Wrm2Jz+lL/B8AdaSFTpL6ugC0QDwQCM9QW5gFMBqYqicBxOJAImErErVAjTi7NYVlV4qTrjaWXd1+SIPEPxXV6c5uM0x+xrpesW+FgWV8mNJkFQu2+KZJwDFTrG8GSD3jyeb2MIm58S5Ka3tLieLOXpT53YI40brQkaerizeLuJhHAi1gn9b8qLewCEMKSJvW/I0ksS/Vx4A814kIBb8Ac+FjDOptJEsrPWyLNM5yv6cl0p/GLgrqOxDFM+WKl+3g/ZsBgtT42Td8Dr9VHVf8HIjGNJEgJIG8AAAAASUVORK5CYII=`


### tasks
> fillColor=`#FF00FF`


#### preprocess
> fillColor=`#FF00FF`


##### sources
> fillColor=`#FFFF00`


###### paths

####### path

######## \<sources\><br/>   \<path\>\./src\</path\><br/>\</sources\>
> align=`left`,fillColor=`#FFB600`


##### eol
> fillColor=`#FFFF00`


###### eol="\\r\\n"
> fillColor=`#FFB600`


##### keepAttributes
> fillColor=`#FFFF00`


###### keepAttributes="true"
> fillColor=`#FFB600`


##### target
> fillColor=`#FFFF00`


###### target="$\{jcp\.target\.folder\}"
> fillColor=`#FFB600`


##### sourceEncoding
> fillColor=`#FFFF00`


###### sourceEncoding="UTF\-8"
> fillColor=`#FFB600`


##### targetEncoding
> fillColor=`#FFFF00`


###### targetEncoding="UTF\-8"
> fillColor=`#FFB600`


##### ignoreMissingSources
> fillColor=`#FFFF00`


###### ignoreMissingSources="false"
> fillColor=`#FFB600`


##### excludeExtensions
> fillColor=`#FFFF00`


###### extension
> fillColor=`#FFDB00`


####### \<excludeExtensions\><br/>   \<extension\>cpp\</extension\><br/>   \<extension\>xml\</extension\><br/>\</excludeExtensions\>
> align=`left`,fillColor=`#FFB600`


##### extensions
> fillColor=`#FFFF00`


###### extension
> fillColor=`#FFDB00`


####### \<extensions\><br/>   \<extension\>java\</extension\><br/>\</extensions\>
> align=`left`,fillColor=`#FFB600`


##### unknownVarAsFalse
> fillColor=`#FFFF00`


###### unknownVarAsFalse="true"
> fillColor=`#FFB600`


##### dryRun
> fillColor=`#FFFF00`


###### dryRun="false"
> fillColor=`#FFB600`


##### verbose
> fillColor=`#FFFF00`


###### verbose="true"
> fillColor=`#FFB600`


##### clearTarget
> fillColor=`#FFFF00`


###### clearTarget="true"
> fillColor=`#FFB600`


##### careForLastEol
> fillColor=`#FFFF00`


###### careForLastEol="true"
> fillColor=`#FFB600`


##### keepComments
> fillColor=`#FFFF00`


###### keepComments="REMOVE\_JCP\_ONLY"
> fillColor=`#FFB600`


##### vars
> fillColor=`#FFFF00`


###### var

####### \<vars\><br/>   \<var name="globalvar"\>antdefined\</var\><br/>\</vars\>
> align=`left`,fillColor=`#FFB600`


##### excludeFolders
> fillColor=`#FFFF00`


###### folder

#######  \<excludeFolders\><br/>   \<folder\>\*\*/excluded1\</folder\><br/>   \<folder\>\*\*/excluded2\</folder\><br/>\</excludeFolders\>
> align=`left`,fillColor=`#FFB600`


##### configFiles
> fillColor=`#FFFF00`


###### paths

####### path

######## \<configFiles\><br/>   \<path\>\./config\.cfg\</path\><br/>\</configFiles\>
> align=`left`,fillColor=`#FFB600`


##### keepLines
> fillColor=`#FFFF00`


###### keepLines="true"
> fillColor=`#FFB600`


##### allowWhitespaces
> fillColor=`#FFFF00`


###### allowWhiteSpaces="true"
> fillColor=`#FFB600`


##### allowBlocks
> fillColor=`#FFFF00`


###### allowBlocks="true"
> fillColor=`#FFB600`


##### preserveIndents
> fillColor=`#FFFF00`


###### preserveIndents="true"
> fillColor=`#FFB600`


##### dontOverwriteSameContent
> fillColor=`#FFFF00`


###### dontOverwriteSameContent="true"
> fillColor=`#FFB600`


##### actionPreprocessorExtension
> fillColor=`#FFFF00`


###### actionPreprocessorExtension="com\.igormaznitsa\.jcp\.extension\.LogPreprocessorExtension"
> fillColor=`#FFB600`


## 
> fillColor=`#FFFFFF`,mmd.image=`iVBORw0KGgoAAAANSUhEUgAAAKwAAAAwCAYAAACMlZHgAAAL2klEQVR42u2dCZAWxRXH9yAuYXddYCFAEOQQDUmQc48Zli1RCWUOAaMRE9AyGMTdnYHlDtFSUSHImooXIlki0SRUzFGxkiorIEVhtEyElMGgQU0CiBhEFANIybl5r6fnm+Pra47v4yPpqfrXbrE9Pd3Tv37z+vWboago7mGb7s8uoAGgBlAraB1oI2gbaCvoZdDToBWga0FDQT2K9KGPvB+2eR9oB+gIqCOC9oA2gKZmTQB96COHwE6KCCpLH4GuAZXpG3pWxrAE1BXU3afqItsoDZSzSLnqUDlU6bnSUffnhhSg7aCWeqq2tnkfx96gndRwuDoNwF4aAnYg/PuZULn3QcMKqj+zXry4GCXo8HjQyZSgRT2embUa3HwA2we0L3scjJEhYAczxuo4aEShgOr+XAaaJOn0b1IEtoMu1AZqaPNmYfee08D6YH0E1AF6BdTF/XeGW4A6kTK07xOfSUOrgVWE1oXV1VQ/zAxom1MGFnUINFhTpYGVWdaFIVhRx4ULMNvsDBoFqokgjA4cVViMlWsrq4HlwTqSAaurp3Jww36pYGmf0mRpYFnQop96RADsx6ChWW5Bsht2nqJ70Krp0sBmrCvVKgGsrh5L8Wa5P29SAHY/qFdqroGlUM+smGPRUs/va6z7ZKTXjnMBWMtQArYrtaAiWE+Crkp5hrv+7w4FaJckHvxmuBmtY53fbyPW/XpQG+hJUDtoMfHF3WNOY5K+TaI5FPez/z7OXxZzMe4A/Rj0E9D3nfPdv0Ob7fp4g26btaDvgtbSfmLdV9O/VeUNWP+42eZo0CLa31+AHgPdAu2uEoLr810fVrCuf4rUqCjWxTa/oegaFKdg0XFL8VEFi341cVlU+tDa4K97Waiuf7LbYeBEvVkhF+MuUIVSO9xBdlytr9HwoKjuVaD3cgqsd98/RSfxu5I2PQ396M8FF0CsVIAVNVAZVNv8NKhnJHBt8w8KwC6NCWsx/XkL3VZUDa09D+qvCMk09q6R+RajPcNB2yO0Awf5y8L76LbDMi6AMn9MFlJMCVgP1r6glyK04WPuWAOI8xVgXSqJw6K60Rl7PHTxP4OuDJRldw6t0yeSjrwD6hQT2rkxB3AfQNCb6U96lnU63Wvv4ALr9tsCGOT95OkGoQ9uGXgPjyWPgacArFXn3psBCdqyGnzxEj+sJaDnJbC+S31ckU/SpnBxBPdSjkV2rKBt/kBh5o2K7MfiQDvnn4l547ZzF0O2WSc591++dpTTSRd3AE+SGDarLc6E353Kpo1l1iUGdnYDTiB80r6RsD0zM4wAhJ8BvS0Bdr4Ehm0RG9AgqKvCyRYSnj8t4qKujPOodoXXe436raLrrsmuvxb9ssOS8zb52rNFIVd4p2RivcqZ9PdK6sbF1d8VgTUSAduSmcz3SJ6Wi0mWnm0+JBn3fq6FHQI6LYD1LYlvsizGjHmb5GDy6/ym5Py1arDWu/XN59Szi1wr2Ia+dMXKKv8B6IKAW8DfkkY/+dZMn2bjKt+sF0yY5cRCZga8DvNPZ7EXRETXBaMfZM3Au18Pk/BVsJ/owhzIGbDOORWc+o8z4+p2fRl9Y4V1znoX2AkS63oJ03d1On1+AjO/UhBVQNdgImgKQ9eQgY/mDpzgLGL6B2KWrQ3+cxZw2j3FV6aUu1C0fDkQ2Ees3wlxseqcEXiMBge9huOThiMPSzh1NwUWZf7JZhk9uJY8DWD5a4bbGRET/3lrOMalB4LYIoD1V6BS7s6WbT6YyDdJY9NBXm445/qLFSIKrzDO+5EzgLVu6OgQo8ycrIWRA/dmRtnNmTgrvz2PM87DHIzP+sqw/MR/kDay4pleZOPGHAL7LOfef52GDFnCsNdXGYtSfApdgsDeKwB2kMQdOJLQmU53E0K82AoPSLXCuQuYubreI4z1yDvGzDDDyAZ7QTTRsfBjRDtdfRnnfZJZfF03qJguRtlPMW69xE0ZxJx0iX1Y0t9tRelm712BwK7mwHon1xXwgsBJG7AgD8DOimXdyeOT+HnZjyavTD/OhkMfDrAHGeW/KN2KdM4Pn4duzuV04pRz3IabFertxd7pCi2MowLrxOG3pwqsBcZHAOwECbCdUmjE/DwAO41z7QqFc2czznvDtxJmxRf/LQCWBcZ4hZyA7hxYnH3jpjGlHGCXKkzK/uzFlzGcEd9lhdiu5DwV0KD9JWULe73IJTgaY9ZH1fQ8AFsrjO21hKxbMyyOVk13z31OaGGjAYtQvcAo/3Np0ott3i0E1imzhzu5RNvl6Jax7k8zAKc23isE19jIKH8KnggjoG81EQXjWF+FwFoCH/Y+iQ+7KSGwPZNkmEWA9jQTPMuo4GZD2eZt3FBYLGAN9DN/yKnz2uyNmAysgzhxXgfY5tFuueVsOKhRYC3qnE2M/cyk+bkN3mRuzoQHf8tph7MrNrcxXP8iTn+/lSS18HIBsAdA1YKw1qgEsG5izUxfMs400P0MrQTdqtS5pszW4Ep+kN7o41i/+mL6jn4ZxxVg+bB9lIF12jGBQsTyR6eQdYFllDhhvbHQJmOwIFaKoFzmcxsqBW2eAf0rceomE6cTWRjyN0ruZvrVuOjhX2MyjZqU+gxaV05ZXKx/AfpYnD2pjXLhtw7oxsEpAbTrJDkEz8aAFW/25wWZY0MkseE1Ed2CKk74ydVzNLXwpwo7Qbt8N7hXJGCdtmwV1P1Xmv63libdiNrhLbq8ENUqQfmdtH/t9Ml4WrD1eyHH38XPUr0uuMZrNIZa6eNjuaD8r0EWDWfdSFMNj1FLzn5rmm7N7pUAMk4wABfGeGP2TlEsFa63S9KeG2KkFM5NyfH3A9tbGVgrk/hSybGyUeUB6/UVs7Q+TJj08h3J/RwjqWN35m1nb3NJlktwhtO/LzkJRuOKwskvWySAvAwqE1jZoWR/W+0mL5K4KDMkbTlK3zuLswBbnQdg3wsE9NnB+okpQJsNrFP3uATx8TZnt80UT36LJL2fUgLWg/yDmG26vaiptjgMyUKF9MKJCsm5LYJHzYbAVijDd6WT4k1JO97BSRYJVA+UEsFCIC1gD5B8BLnFH8ZIw0wG7Oyxbt0Xc2K+Isvq7PzNGy9+NcjKtP8yJWDXT3fP60Hdkih9/BuM3fksq9ZFAdiDkk8W+X83Qd+myR+TSZ6sYEtV8no5My831uGB20i3SUV5o/gYezEGsIeEwAahRffgCUkm2UES+mInzFyRvdCs8b9x8Agn3OXf3t1ALCAvWiJsP9npaw9dY1/W51Sbab33jHVDdLJ1ws7Ak9i/AIz4ikx7rvb+cRtY5a2HxHHZjBUyOtHvSuHe9QMkG8iBZx61flV00mXvz3vAVtJMqJU+3UXOlU6ewARH62PQd7qepIAuo98t60nLvEAXuK5+R/Ik5MajG9mNcp4s62g/2+hCpy95MkbJzQiH3Zxzq0mesxMKXETCZeI24X27iJZvp33B1/2/R9taFUhKYlk4UDfQMQkwh0GfSzOuT6+NH5z7vQKwSyLHYFUsLn+SseKmWwKpi6lsbhjiFMk543PXx1QGMeKLs5bk3jXVKEGDelABmp+lCo1T1wjQGcl194N6pvpNBFHi8cxRJZyEkhVF+iiMg/qyhxWgHZ3ydXcoXLMlZx1vHhO2Sp1pTJTlXzVqUgoDVvfnSAV4doM6p2HtFBdaa3N+A6y6Urq6tkFv8t+UQL+1TgNTKNBSLZQ8ovFvM6lFLk+gAaB9ElhfpWVz23nbGKIQZrlJU1K48LZJQDoB+jChZO7HXm4SefrAXiSB9SFSbk6DhqOA3YMHFD+wkQshrJVpL/BiAvsMSRjJx4pbH4mhveMswPoSugt5g5UP7CHhu1/6KFh4axVitGkJQ2vn5RXWbB/2P2QP2zLK8xrP1EeqlrY7aD1+iTtHoGJoa3LeQfWA7UL25sPf0dKgntPQovrh5kGKoOKGwFcwTHbWYGW9sapB/d8Bl/7ej/7HHa+DPooAKH5jdg9oo2tRzxqo+vi/hBg3EAaDGkHzQE+ANoG2Upg3g56h/9/XFNAw3GLVd04f+tCHPvShj0I6/gtjopxeR4k2EgAAAABJRU5ErkJggg==`


### plug\-in
> fillColor=`#12ED12`


#### com\.igormaznitsa\.jcp
> fillColor=`#12ED12`


##### task
> fillColor=`#12ED12`


###### preprocess

####### sources
> fillColor=`#FFFF00`


######## sources = \['src/main/java'\]
> fillColor=`#FFC800`


####### eol
> fillColor=`#FFFF00`


######## eol = '\\r\\n'
> fillColor=`#FFC800`


####### keepAttributes
> fillColor=`#FFFF00`


######## keepAttributes=true
> fillColor=`#FFC800`


####### target
> fillColor=`#FFFF00`


######## target = file\('build/preprocessed/java'\)
> fillColor=`#FFC800`


####### sourceEncoding
> fillColor=`#FFFF00`


######## sourceEncoding='UTF\-8'
> fillColor=`#FFC800`


####### targetEncoding
> fillColor=`#FFFF00`


######## targetEncoding='UTF\-8'
> fillColor=`#FFC800`


####### ignoreMissingSources
> fillColor=`#FFFF00`


######## ignoreMissingSources=false
> fillColor=`#FFC800`


####### excludeExtensions
> fillColor=`#FFFF00`


######## excludeExtensions=\['txt','xml'\]
> fillColor=`#FFC800`


####### extensions
> fillColor=`#FFFF00`


######## extensions=\['java'\]
> fillColor=`#FFC800`


####### unknownVarAsFalse
> fillColor=`#FFFF00`


######## unknownVarAsFalse=false
> fillColor=`#FFC800`


####### dryRun
> fillColor=`#FFFF00`


######## dryRun=false
> fillColor=`#FFC800`


####### verbose
> fillColor=`#FFFF00`


######## verbose=true
> fillColor=`#FFC800`


####### clearTarget
> fillColor=`#FFFF00`


######## clearTarget=true
> fillColor=`#FFC800`


####### baseDir
> fillColor=`#FFFF00`


######## baseDir = file\('build/someBase'\)
> fillColor=`#FFC800`


####### careForLastEol
> fillColor=`#FFFF00`


######## careForLastEol=true
> fillColor=`#FFC800`


####### keepComments
> fillColor=`#FFFF00`


######## keepComments='keep\_all'
> fillColor=`#FFC800`


####### vars
> fillColor=`#FFFF00`


######## vars = \['someVar': 'Some Test Value'\]
> fillColor=`#FFC800`


####### excludeFolders
> fillColor=`#FFFF00`


######## excludeFolders=\['\*\*/some1','\*\*/some2'\]
> fillColor=`#FFC800`


####### configFiles
> fillColor=`#FFFF00`


######## configFiles=\['\./configFile\.txt'\]
> fillColor=`#FFC800`


####### keepLines
> fillColor=`#FFFF00`


######## keepLines=true
> fillColor=`#FFC800`


####### allowWhitespaces
> fillColor=`#FFFF00`


######## allowWhitespaces=true
> fillColor=`#FFC800`


####### allowBlocks
> fillColor=`#FFFF00`


######## allowBlocks=true
> fillColor=`#FFB600`


####### preserveIndents
> fillColor=`#FFFF00`


######## preserveIndents=true
> fillColor=`#FFC800`


####### skip
> fillColor=`#FFFF00`


######## skip=true
> fillColor=`#FFC800`


####### dontOverwriteSameContent
> fillColor=`#FFFF00`


######## dontOverwriteSameContent=false
> fillColor=`#FFC800`


####### actionPreprocessorExtension
> fillColor=`#FFFF00`


######## actionPreprocessorExtension="com\.igormaznitsa\.jcp\.extension\.LogPreprocessorExtension"
> fillColor=`#FFB600`


####### outcomingFiles
> fillColor=`#00A4FF`


######## read only
> fillColor=`#FF71CC`


######### set of files touched during preprocessing
> fillColor=`#FFFF00`


####### incomingFiles
> fillColor=`#00A4FF`


######## read only
> fillColor=`#FF71CC`


######### set of generated result files
> fillColor=`#FFFF00`


## External config files
> fillColor=`#00B6FF`


### multi\-line text files
> fillColor=`#00B6FF`


#### line starts with
> fillColor=`#00B6FF`


##### /

###### can contain CLi key
> fillColor=`#49EFB6`


####### /V

##### \#
> leftSide=`true`


###### recognized as comment
> fillColor=`#49EFB6`


####### \# some ignored comment

##### @

###### throws preprocessor error
> fillColor=`#49EFB6`


####### @ error string

##### any other non\-empty

###### interpret as global variable definition
> fillColor=`#49EFB6`


####### \<VAR NAME\>=\<EXPRESSION\>

######## globalVar="Hello world"
> fillColor=`#FFC800`


#### empty line
> fillColor=`#00B6FF`


##### ignored
> fillColor=`#49EFB6`


## Command Line
> fillColor=`#00DBFF`,leftSide=`true`


### /H,/h,/?,\-H\.\-?
> fillColor=`#00DBFF`


#### print help information
> fillColor=`#49EFB6`


### /T:
> fillColor=`#00DBFF`,leftSide=`true`


#### set input encoding
> fillColor=`#49EFB6`


##### /T:UTF\-8
> fillColor=`#FFC800`


### /TT:
> fillColor=`#00DBFF`


#### set output encoding
> fillColor=`#49EFB6`


##### /TT:UTF\-8
> fillColor=`#FFC800`


### /C
> fillColor=`#00DBFF`,leftSide=`true`


#### clear target folder before preprocessing
> fillColor=`#49EFB6`


### /I:
> fillColor=`#00DBFF`,leftSide=`true`


#### define source folder for preprocessing
> fillColor=`#49EFB6`


##### /I:\./src
> fillColor=`#FFC800`


### /O:
> fillColor=`#00DBFF`,leftSide=`true`


#### define result folder
> fillColor=`#49EFB6`


##### /O:\./preprocess
> fillColor=`#FFC800`


### /F:
> fillColor=`#00DBFF`,leftSide=`true`


#### comma separated list of preprocessed extensions
> fillColor=`#49EFB6`


##### /F:java,txt,html
> fillColor=`#FFC800`


### /EF:
> fillColor=`#00DBFF`,leftSide=`true`


#### comma separated list of excluded extensions
> fillColor=`#49EFB6`


##### /EF:xml,png
> fillColor=`#FFC800`


### /EA:
> fillColor=`#00DBFF`,leftSide=`true`


#### preprocessor extension class name
> fillColor=`#49EFB6`


##### /EA:com\.igormaznitsa\.jcp\.extension\.LogPreprocessorExtension
> fillColor=`#FFB600`


### /ES
> fillColor=`#00DBFF`,leftSide=`true`


#### turn on support of white spaces betwee // and \# in directives
> fillColor=`#49EFB6`


### /R
> fillColor=`#00DBFF`,leftSide=`true`


#### remove all Java like comments from result files
> fillColor=`#49EFB6`


### /K
> fillColor=`#00DBFF`,leftSide=`true`


#### prevent line numeration in result files
> fillColor=`#49EFB6`


### /Z
> fillColor=`#00DBFF`,leftSide=`true`


#### disable override result file if exists and has same content
> fillColor=`#49EFB6`


### /V
> fillColor=`#00DBFF`,leftSide=`true`


#### turn on verbose mode
> fillColor=`#49EFB6`


### @\<file\_name\>
> fillColor=`#00DBFF`,leftSide=`true`


#### read global variables from a file
> fillColor=`#49EFB6`


### @@\<expression\>
> fillColor=`#00DBFF`,leftSide=`true`


#### read global variables from file which path defined by expression
> fillColor=`#49EFB6`


### /P:
> fillColor=`#00DBFF`,leftSide=`true`


#### define global variable value
> fillColor=`#49EFB6`


##### /P:DEBUG=true
> fillColor=`#FFC800`


### /N
> fillColor=`#00DBFF`,leftSide=`true`


#### carefully reproduce last EOL in result file
> fillColor=`#49EFB6`


### /PI
> fillColor=`#00DBFF`,leftSide=`true`


#### turn on indent preserving for //$ and //$$ directives
> fillColor=`#49EFB6`


### /ED:
> fillColor=`#00DBFF`,leftSide=`true`


#### folders to be excluded from preprocessing<br/>ANT matcher is allowed, system path separator as delimiter
> fillColor=`#49EFB6`


##### /ED:/\*\*/test:/\*\*/test\*/some
> fillColor=`#FFC800`


### /A
> fillColor=`#00DBFF`,leftSide=`true`


#### keep original source attributes for result files
> fillColor=`#49EFB6`


### /U
> fillColor=`#00DBFF`,leftSide=`true`


#### turn on FALSE as unknown variable value
> fillColor=`#49EFB6`


### /B
> fillColor=`#00DBFF`,leftSide=`true`


#### Enable sulpport of multiline merging for //$ and //$$
> fillColor=`#49EFB6`


### /M:
> fillColor=`#00DBFF`,leftSide=`true`


#### allows select keep comment processor<br/>to remove selected kind of commented lines
> fillColor=`#49EFB6`


##### /M:remove\_jcp\_only
> fillColor=`#FFC800`


##### allowed values
> fillColor=`#FFCC71`


###### true
> fillColor=`#FFCC71`


####### same as keep\_all
> fillColor=`#49EFB6`,topicLinkUID=`18C52A4D054A`

- TOPIC
<pre>18C52A4EDD2A</pre>

###### false
> fillColor=`#FFCC71`


####### same as remove\_c\_style
> fillColor=`#49EFB6`

- TOPIC
<pre>18C52A5933DA</pre>

###### keep\_all
> fillColor=`#FFCC71`,topicLinkUID=`18C52A4EDD2A`


####### to not remove comments
> fillColor=`#49EFB6`


###### remove\_c\_style
> fillColor=`#FFCC71`,topicLinkUID=`18C52A5933DA`


####### remove all comments in C style
> fillColor=`#49EFB6`


###### remove\_jcp\_only
> fillColor=`#FFCC71`


####### remove only comment lines related to JCP
> fillColor=`#49EFB6`


## DSL
> leftSide=`true`


### Directives
> fillColor=`#00FFFF`


#### //\#local \<var name\>=\<expression\>
> fillColor=`#00FFFF`


##### define local variable
> fillColor=`#49EFB6`


###### //\#local somevar="Hello world"
> fillColor=`#FFC800`


#### //\#if \<bool expression\>\.\.//\#else\.\.//\#endif
> fillColor=`#00FFFF`


##### conditional execution<br/>needs boolean expression
> fillColor=`#49EFB6`


###### //\#if boovar<br/>\.\.\.<br/>//\#else<br/>\.\.\.<br/>//\#endif
> align=`left`,fillColor=`#FFC800`


#### //\#ifdefined \<variable name\>\.\.\.//\#else\.\.//\#endif
> fillColor=`#00FFFF`,leftSide=`true`


##### conditional execution<br/>checks that a variable is defined
> fillColor=`#49EFB6`


###### //\#ifdefined <br/>\.\.\.<br/>//\#else<br/>\.\.\.<br/>//\#endif
> align=`left`,fillColor=`#FFC800`


##### //\#ifdef\.\.\.//\#else\.\.\.//\#endif
> fillColor=`#FFDB00`


#### //\#ifndef \<variable name\>\.\.//\#else\.\.//\#endif
> fillColor=`#00FFFF`,leftSide=`true`


##### conditional execution<br/>checks that a variable is not defined
> fillColor=`#49EFB6`


###### //\#ifndef  svar<br/>\.\.\.<br/>//\#else<br/>\.\.\.<br/>//\#endif
> align=`left`,fillColor=`#FFC800`


#### //\#while \<bool expression\>\.\.//\#break\.\.//\#continue\.\.//\#end
> fillColor=`#00FFFF`,leftSide=`true`


##### conditional execution<br/>while expression result is TRUE
> fillColor=`#49EFB6`


###### //\#while a\>0<br/>\.\.\.<br/>//\#break<br/>\.\.\.<br/>//\#continue<br/>\.\.\.<br/>//\#end
> align=`left`,fillColor=`#FFC800`


#### //\#exitif \<bool expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### conditional end of current file preprocessing<br/>return to calling file if presented
> fillColor=`#49EFB6`


###### //\#exitif avar="hello"
> fillColor=`#FFC800`


#### //\#exit
> fillColor=`#00FFFF`,leftSide=`true`


##### end of current file preprocessing<br/>return to calling file if presented
> fillColor=`#49EFB6`


#### //\#outdir \<str expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### set output directory for preprocessing file
> fillColor=`#49EFB6`


###### //\#outdir "some/folder"
> fillColor=`#FFC800`


#### //\#\[\+|\-\]
> fillColor=`#00FFFF`,leftSide=`true`


##### turn on \(\+\) and turn off \(\-\) preprocessing
> fillColor=`#49EFB6`


###### preprocessed<br/>//\#\-<br/>non preprocessed<br/>//\#\+<br/>preprocessed
> align=`left`,fillColor=`#FFC800`


#### //\#outname \<str expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### set result name for preprocessing file
> fillColor=`#49EFB6`


###### //\#outname "some\.java"
> fillColor=`#FFC800`


#### //\#//
> fillColor=`#00FFFF`,leftSide=`true`


##### comment next line
> fillColor=`#49EFB6`


###### //\#//<br/>line to be commented
> align=`left`,fillColor=`#FFC800`


#### //\#definel \<var name\>
> fillColor=`#00FFFF`,leftSide=`true`


##### define a local boolean variable as TRUE
> fillColor=`#49EFB6`


###### //\#definel newvar
> fillColor=`#FFC800`


#### //\#define \<var name\>
> fillColor=`#00FFFF`,leftSide=`true`


##### define a global boolean variable as TRUE
> fillColor=`#49EFB6`


###### //\#define newglobal
> fillColor=`#FFC800`


#### //\#undef \<var name\>
> fillColor=`#00FFFF`,leftSide=`true`


##### remove variable if exists
> fillColor=`#49EFB6`


###### //\#undef newvar
> fillColor=`#FFC800`


#### //\#flush
> fillColor=`#00FFFF`,leftSide=`true`


##### force flushing of current buffer states to disk<br/>and clear internal buffers
> fillColor=`#49EFB6`


#### //\#include \<str expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### include preprocess result of defined file into position
> fillColor=`#49EFB6`


###### //\#include "some\.java"
> fillColor=`#FFC800`


#### //\#action
> fillColor=`#00FFFF`,leftSide=`true`


##### make call to user extension<br/>with comma separated arguments\.<br/>Its logic can be tuned through a preprocessor extennsion class 
> fillColor=`#49EFB6`


###### //\#action 1000,"hello",123
> fillColor=`#FFC800`


####### It requires a preprocessor extension
> fillColor=`#FF3700`,mmd.emoticon=`error`,textColor=`#FFFFFF`


#### //\#postfix\[\+|\-\]
> fillColor=`#00FFFF`,leftSide=`true`


##### turn on \(\+\) or turn off \(\-\) output into postfix section
> fillColor=`#49EFB6`


###### some text<br/>//\#postfix\+<br/>it will be in the end<br/>//\#postfix\-<br/>other text
> align=`left`,fillColor=`#FFC800`


#### //\#prefix\[\+|\-\]
> fillColor=`#00FFFF`,leftSide=`true`


##### turn on \(\+\) or turn off \(\-\) output into prefix section
> fillColor=`#49EFB6`


###### some text<br/>//\#prefix\+<br/>it will be in the beginning<br/>//\#prefix\-<br/>other text
> align=`left`,fillColor=`#FFC800`


#### //\#global \<var name\>=\<expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### define a global variable value
> fillColor=`#49EFB6`


###### //\#global debug=true
> fillColor=`#FFC800`


#### //\#\_if\.\.//\#\_else\.\.//\#\_endif
> fillColor=`#00FFFF`,leftSide=`true`


##### special condition to be checked during 1st preprocessing pass<br/>works with global variables
> fillColor=`#49EFB6`


###### //\#\_if debug<br/>\.\.\.<br/>//\#\_else<br/>\.\.\.<br/>//\#\_endif
> align=`left`,fillColor=`#FFC800`


#### //\#excludeif \<bool expression\>
> fillColor=`#00FFFF`,leftSide=`true`


##### exclude file from preprocessing<br/>if boolean expression returns true
> fillColor=`#49EFB6`


###### //\#excludeif debug
> fillColor=`#FFC800`


#### //\#error \<text\>
> fillColor=`#00FFFF`,leftSide=`true`


##### stop work and generate exception with notification<br/>macroses allowed
> fillColor=`#49EFB6`


###### //\#error unexpected value /\*$var1$\*/
> fillColor=`#FFC800`


#### //\#warning \<text\>
> fillColor=`#00FFFF`,leftSide=`true`


##### log text as warning<br/>macroses allowed
> fillColor=`#49EFB6`


###### //\#warning be careful with /\*$var4$\*/
> fillColor=`#FFC800`


#### //\#echo \<text\>
> fillColor=`#00FFFF`,leftSide=`true`


##### log text as info<br/>macroses allowed
> fillColor=`#49EFB6`


###### //\#echo the line /\*$\_\_line\_\_$\*/
> fillColor=`#FFC800`


#### //\#msg \<text\>
> fillColor=`#00FFFF`,leftSide=`true`


##### log text as info<br/>macroses allowed, if verbose mode then stack will be printed
> fillColor=`#49EFB6`


###### //\#msg some info
> fillColor=`#FFC800`


#### //\#noautoflush
> fillColor=`#00FFFF`,leftSide=`true`


##### turn off autoflush for EOF
> fillColor=`#49EFB6`


#### //\#abort \<text\>
> fillColor=`#00FFFF`,leftSide=`true`


##### abort preprocessing and show message<br/>macroses allowed
> fillColor=`#49EFB6`


###### //\#abort thats all\!
> fillColor=`#FFC800`


#### //$
> fillColor=`#00FFFF`,leftSide=`true`


##### remove comment and print result with macross processing
> fillColor=`#49EFB6`


###### //$ some line with /\*$var$\*/
> fillColor=`#FFC800`


####### Special case //$""" means merging of text lines<br/>before providing them to an external processor
> fillColor=`#FFC800`


#### //$$
> fillColor=`#00FFFF`,leftSide=`true`


##### remove comment and print result, macroses ignored
> fillColor=`#49EFB6`


###### //$$ some line with /\*$nonprocessed macroses$\*/
> fillColor=`#FFC800`


####### Special case //$$""" means merging of text lines<br/>before providing them to an external processor
> fillColor=`#FFC800`


#### /\*\-\*/
> fillColor=`#00FFFF`,leftSide=`true`


##### drop tail of line
> fillColor=`#49EFB6`


###### some line/\*\-\*/dropped part
> fillColor=`#FFC800`


### Data types
> fillColor=`#FFC800`,leftSide=`true`


#### boolean
> fillColor=`#FFC800`


##### true
> fillColor=`#FFC800`


##### false
> fillColor=`#FFC800`,leftSide=`true`


#### integer
> fillColor=`#FFC800`,leftSide=`true`


##### signed 64 bit

###### 234567, 0x56FE
> fillColor=`#FFC800`


#### float
> fillColor=`#FFC800`,leftSide=`true`


##### signed 32 bit

###### 0\.745
> fillColor=`#FFC800`


#### string
> fillColor=`#FFC800`,leftSide=`true`


##### "hello world"
> fillColor=`#FFC800`


### Operators
> fillColor=`#FFFF00`,leftSide=`true`


#### ==, \>, \>=, \<, \<=, \!= 
> fillColor=`#FFFF00`


#### \+,\-,\*,/,%
> fillColor=`#FFFF00`,leftSide=`true`


#### \!, &&, ||, ^
> fillColor=`#FFFF00`,leftSide=`true`


### Functions
> fillColor=`#FFC67D`,leftSide=`true`


#### INT|FLOAT abs\(INT|FLOAT\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


#### INT round\(INT|FLOAT\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


#### BOOL is\(STR,ANY\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


#### STR evalfile\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


#### STR binfile\(STR, STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


#### string processing
> fillColor=`#FFCC71`


##### BOOL issubstr\(STR,STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### INT strlen\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR trimlines\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR esc\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### INT str2int\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2web\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2csv\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2js\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2json\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2xml\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2java\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### STR str2go\(STR\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


#### xml functions
> fillColor=`#FFCC71`,leftSide=`true`


##### STR xml\_get\(STR, INT\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


##### INT xml\_size\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_attr\(STR, STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_root\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_name\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_list\(STR, STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_text\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_open\(STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_xlist\(STR, STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


##### STR xml\_xelement\(STR, STR\)
> fillColor=`#00B6FF`,leftSide=`true`,textColor=`#FFFFFF`


#### User defined functions
> fillColor=`#FFC67D`,leftSide=`true`


##### $\<function\_name\>\(\.\.\.\)
> fillColor=`#00B6FF`,textColor=`#FFFFFF`


###### It requires a preprocessor extension
> fillColor=`#FF3700`,mmd.emoticon=`error`,textColor=`#FFFFFF`


### special variables
> fillColor=`#5BEBA4`,leftSide=`true`


#### jcp\.version
> fillColor=`#5BEBA4`


##### preprocessor version

##### read only
> fillColor=`#FF0000`,textColor=`#FFFFFF`


#### jcp\.src\.path
> fillColor=`#5BEBA4`,leftSide=`true`


##### full path to preprocessing source file

##### \_\_file\_\_

##### read only
> fillColor=`#FF0000`,leftSide=`true`,textColor=`#FFFFFF`


#### jcp\.src\.dir
> fillColor=`#5BEBA4`,leftSide=`true`


##### Preprocessing file folder

##### \_\_filefolder\_\_

##### read only
> fillColor=`#FF0000`,textColor=`#FFFFFF`


#### jcp\.src\.name
> fillColor=`#5BEBA4`,leftSide=`true`


##### Preprocessing file name

##### \_\_filename\_\_

##### read only
> fillColor=`#FF0000`,leftSide=`true`,textColor=`#FFFFFF`


#### \_\_line\_\_
> fillColor=`#5BEBA4`,leftSide=`true`


##### number of preprocessing line

##### read only
> fillColor=`#FF0000`,leftSide=`true`,textColor=`#FFFFFF`


#### jcp\.dst\.path
> fillColor=`#5BEBA4`,leftSide=`true`


##### destination file path

##### read only
> fillColor=`#FF0000`,leftSide=`true`,textColor=`#FFFFFF`


#### jcp\.dst\.dir
> fillColor=`#5BEBA4`,leftSide=`true`


##### destination folder

#### jcp\.dst\.name
> fillColor=`#5BEBA4`,leftSide=`true`


##### destination file name

#### \_\_time\_\_
> fillColor=`#5BEBA4`,leftSide=`true`


##### current time<br/>HH:mm:ss

#### \_\_date\_\_
> fillColor=`#5BEBA4`,leftSide=`true`


##### current date<br/>MMM dd yyyy

#### \_\_timestamp\_\_
> fillColor=`#5BEBA4`,leftSide=`true`


##### source file timestamp<br/>EEE MMM dd HH:mm:ss yyyy


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0

   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.


================================================
FILE: README.md
================================================
![Logo](assets/banner.png)

[![License Apache 2.0](https://img.shields.io/badge/license-Apache%20License%202.0-green.svg)](http://www.apache.org/licenses/LICENSE-2.0)
[![Maven central](https://img.shields.io/badge/maven%20central-7.3.0-green.svg)](https://search.maven.org/#artifactdetails|com.igormaznitsa|jcp|7.3.0|jar)
[![Java 11+](https://img.shields.io/badge/java-11%2b-green.svg)](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
[![Maven 3.0+](https://img.shields.io/badge/maven-3.0%2b-green.svg)](https://maven.apache.org/)
[![Gradle 6.0+](https://img.shields.io/badge/gradle-6.0%2b-green.svg)](https://gradle.org/)
[![Ant 1.8.2+](https://img.shields.io/badge/ant-1.8.2%2b-green.svg)](http://ant.apache.org/)   
[![Arthur's acres sanctuary donation](assets/arthur_sanctuary_banner.png)](https://www.arthursacresanimalsanctuary.org/donate)

# Changelog

__7.3.0 (11-okt-2025)__

- added way to manipulate current JCP text buffers as string variables: `jcp.text.buffer.all`,`jcp.text.buffer.middle`,
  `jcp.text.buffer.prefix` and `jcp.text.buffer.postfix`
- added way to find `PreprocessorExtension` and `SpecialVariableProcessor` among Java services
- refactoring of API for `SpecialVariableProcessor` and `CommentTextProcessor`
- replaced single string property `actionPreprocessorExtension` by string list `actionPreprocessorExtensions` to provide
  way for many preprocessor extensions.
- internal refactoring mainly to provide way for multiple external services implementing extensions

__7.2.1 (21-jul-2025)__

- refactoring of CommentTextProcessor call
- refactoring

[Full changelog](https://github.com/raydac/java-comment-preprocessor/blob/master/changelog.txt)

# Introduction

Originally developed in 2002, the preprocessor tool emerged from the need to manage diverse sources for J2ME devices efficiently. It aimed to streamline altering specific calls' positions across different devices, optimizing the development process. With Java as the primary technology, the tool was fine-tuned for C/Java family languages, capitalizing on their import sections and C-comment style.

Initially a closed project, it transitioned to an open-source initiative in 2011. Today, it stands out as a potent two-pass Java preprocessor, adept at understanding document structure (prefix, body, and postfix), incorporating loops, and utilizing XML files as data sources. Its capabilities extend to generating static websites.

The preprocessor now exists as a comprehensive uber-jar bundled with interface code for Maven, ANT, and Gradle, seamlessly integrating with these tools. It requires a minimum JDK of version 1.8.

Moreover, various Linux repositories offer the preprocessor as a package, commonly named `libcomment-preprocessor-java`, simplifying its accessibility for users.


# Mind map with all options

![Mind map of preprocessor options](assets/documap.png)

# How to use

The Preprocessor can work as:
  - CLI tool
  - Java JAR-library
  - [Maven goal](jcp-tests/jcp-test-maven) [_(generated Maven mojo site)_](https://raydac.github.io/jcp-maven-plugin-site/index.html)
  - [ANT task](jcp-tests/jcp-test-ant)
  - [Gradle task](jcp-tests/jcp-test-gradle)

The preprocessor has been published in [the Maven Central](https://search.maven.org/artifact/com.igormaznitsa/jcp).
```
    <build>
        <plugins>
...
           <plugin>
                <groupId>com.igormaznitsa</groupId>
                <artifactId>jcp</artifactId>
                <version>7.3.0</version>
                <executions>
                    <execution>
                        <id>preprocessSources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>preprocess</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
...
        </plugins>
    </build>    
```

# How to use from command line
The uber-jar can be started directly under Java through CLI interface. Let's take a look at short example below how to start it in command line under Linux:
```
java -jar jcp-7.3.0.jar  --i:./test --o:./result
```
The example above just preprocessing files from ./test folder (which extensions allowed to be preprocessed by default), and placing result files into ./result folder. Keep in your mind that the preprocessor processing not all files, for instance XML files will not be preprocessed by default. Files which extension not marked for preprocessing will be just copied (of course if the extensions is not in the excluded extension list)

More complex example:
```
java -jar jcp-7.3.0.jar  --c --r --v --f:java,xml --ef:none --i:./test --o:./result  '--p:HelloWorld=$Hello world$'
```
- --c clear the destination folder before work
- --r remove all Java-style comments from preprocessed result files
- --v show verbose log about preprocessing process
- --f include .java and .xml files into preprocessing (by default the preprocessor doesn't preprocess XNL files and the extension should to be defined explicitly)
- --ef don't exclude any extension from preprocessing
- --i use ./test as source folder
- --o use ./result as destination folder
- --p define named global variable HelloWorld? with the 'Hello world' content
- --z turn on checking of file content before replacement, if the same content then preprocessor will not replace the file  
- --es allow whitespace between comment and directive (by default it is turned off)

# Some examples
- [Prepare sources for Javassist](jcp-tests/jcp-test-javassist)
- [Make multi-versioned JAR  for JEP-238](jcp-tests/jcp-test-jep238)
- [Generate static file from XML sources](jcp-tests/jcp-test-static-site)
- [Simple Android Gradle-based project](jcp-tests/jcp-test-android)

# Example of Java sources with directives
In Java the only allowed way to inject directives and to not break work of tools and compilers - is to use commented space, so that the preprocessor uses it.
```Java
//#local TESTVAR="TEST LOCAL VARIABLE"
//#echo TESTVAR=/*$TESTVAR$*/
//#include "./test/_MainProcedure.java"

public static final void testproc()
{
 System.out.println(/*$VARHELLO$*/);
 System.out.println("// Hello commentaries");
 //#local counter=10
        //#while counter!=0
        System.out.println("Number /*$counter$*/");
        //#local counter=counter-1
        //#end
 System.out.println("Current file name is /*$SRV_CUR_FILE$*/");
 System.out.println("Output dir is /*$SRV_OUT_DIR$*/");
 //#if issubstr("Hello","Hello world")
 System.out.println("Substring found");
 //#endif
}
```

# Multi-sectioned documents
In opposite a regular document, a Java document has as minimum two sections - prefix (where situated import and special information) and body. For access to such sections there are special preprocessing directives `//#prefix[-|+]`, `//#postfix[-|+]`. They allow turning on or off output into prefix and postfix sections.
```Java
//#prefix+
 import java.lang.*;
 //#prefix-
 public class Main {
  //#prefix+
  import java.util.*;
  //#prefix-
  public static void main(String ... args){}
 }
```
# How to remove all comments from sources
Sometimes it is very useful to remove totally all comments from sources, such possibility included into JCP and can be activated with either a special flag or command line switcher. The example below shows how to remove all comments with CLI use:
```
java -jar ./jcp-7.3.0.jar --i:/sourceFolder --o:/resultFolder -ef:none --r
``` 



================================================
FILE: changelog.txt
================================================
__7.3.0 (11-okt-2025)__

- added way to manipulate current JCP text buffers as string variables: `jcp.text.buffer.all`,`jcp.text.buffer.middle`,`jcp.text.buffer.prefix` and `jcp.text.buffer.postfix`
- added way to find `PreprocessorExtension` and `SpecialVariableProcessor` among Java services
- refactoring of API for `SpecialVariableProcessor` and `CommentTextProcessor`
- replaced single string property `actionPreprocessorExtension` by string list `actionPreprocessorExtensions` to provide way for many preprocessor extensions.
- internal refactoring mainly to provide way for multiple external services implementing extensions

__7.2.1 (21-jul-2025)__

- refactoring of CommentTextProcessor call
- refactoring

__7.2.0 (13-jul-2025)__

- minimum JDK version 11
- added support for external processors calls during uncommenting actions `//$` and `//$$`, processors can be provided as services
- removed support of Gradle 5
- updated dependencies

__7.1.2 (08-jun-2024)__

- added way to define a preprocessor extension class through CLI (as `/EA:<class.name>`) and in plugins (as `actionPreprocessorExtension`). The class should be provided in the clas path.[#48](https://github.com/raydac/java-comment-preprocessor/issues/48)
- updated some dependencies

__7.1.1 (13-jan-2024)__

- fixed NPE for empty or null global variable value in Maven and Gradle [#47](https://github.com/raydac/java-comment-preprocessor/issues/47)
- updated dependencies

__7.1.0 (10-dec-2023)__

- refactoring of internal API
- updated dependencies
- improved keep comments processing, added `/M:<type>` CLI option [#46](https://github.com/raydac/java-comment-preprocessor/issues/46)

__7.0.5 (11-dec-2021)__

 - fixed compatibility with Gradle 7.x
 - added support of build under JDK 16
 - updated dependencies

7.0.4 (26-sep-2020)
 - fixed default flag state `keep comments` for start in CLI mode [#24](https://github.com/raydac/java-comment-preprocessor/issues/24)
 - fixed working directory detection in CLI mode

7.0.3 (13-sep-2020)
 - added way to get info about all input and produced files from preprocessor context
 - reworked Gradle plug-in, removed extension and now properties should be directly provided for task [#21](https://github.com/raydac/java-comment-preprocessor/issues/21)
 - refactoring, removed some auxiliary plugins from build process and extra code

7.0.2 (15-jul-2019)
 - fixed leaks of system scoped dependencies in generated pom.xml

7.0.1 (19-apr-2019)
 - minor refactoring

7.0.0 (31-mar-2019)
 - reworked some parameters for Maven and ANT plug-ins
 - added embedded Gradle plugin `com.igormaznitsa.jcp`
 - removed maven `clear` goal
 - removed maven `preprocessTest` goal (use flag `useTestSources` instead)
 - added function `STR esc(STR)`
 - fixed build under JDK 9+
 - XML functions work through embedded [Apache Xalan](https://xalan.apache.org/) and [Apache Xerces](http://xerces.apache.org/)
 - minimal needed Java version changed to 1.8
 - refactoring

6.1.4 (16-jun-2018)
 - removed dependencies to meta packages (their sources moved into project) #19

6.1.3 (29-apr-2018)
 - added automatic module name `igormaznitsa.jcp`
 - CORE: added `/U` key to turn on mode to interpret unknown variables as FALSE (in Maven and ANT `unknownVarAsFalse`), [#17](https://github.com/raydac/java-comment-preprocessor/issues/17)

6.1.2 (02-apr-2017)
 - CORE: added STR TRIMLINES(STR) function to trim lines represented as string and removing empty lines
 - CORE: added `/A` command line option (`copyFileAttributes` in Maven and ANT) to copy file attributes
 - CORE: added `/ED:` command line option to exclude sub-folders from preprocessing (`excludedFolders` in Maven and ANT) with ANT pattern support.
 - CORE: added `/PI` command line flag (`preserveIndent` in Maven and ANT), turn on mode to preserve indent when removing `//$` and `//$$`, thanks to @jamuir
 - CORE: comma in split lines in BINFILE function moved from the start of line to the end of the previous line (to increase compatibility with Go)

6.1.1 (11-feb-2017)
 - MAVEN: information about imported maven properties will be shown only in either verbose mode or debug mode
 - MAVEN: added auxiliary goal `preprocessTests` which provides flag `useTestSources` as true and activated by default in GENERATE_TEST_SOURCES phase #14
 - MAVEN: added 'ignoreMissingSources' boolean parameter, allows to skip preprocessing if source folders not found or not provided #12
 - MAVEN: added 'skip'boolean parameter, it allows to skip execution, also it is possible to use `-Djcp.preprocess.skip=true` #13
 -  CORE: added function `BOOL is(STR,ANY)` to check existence of variable for its name and compare its value with etalon (through string conversion, it will ensure true for `true` and `"true"` case), #10
 -  CORE: added `STR str2go(STR)` function to escape strings to be represented in Golang sources
 -  CORE: improved the BINFILE function, it allows `base64|byte[]|uint8[]|int8` and modifiers `s|d|ds|sd` where s - means splitting to lines and d - means deflate compression

6.1.0 (03-jul-2016)
- implemented request #9, added support of whitespace between directive and comment, in command line it is `--es` option and in MAVEN and ANT it is boolean parameter `allowWhitespace`, by default it is turned off
- added function STR binfile(STR,STR) to load a bin file as encoded base64 or java byte array string
- changes in Preprocessor API, removed usage of null instead of PreprocessorContext or PreprocessingState as argument for many methods, improved tests
- fixed #8 issue, fixed work with absolute paths in //#include and evalfile(), added tests
- refactoring

6.0.1
- improved the MAVEN plugin to hide content of potentially sensitive properties from printing into Maven log (issue #2)
- added --z option ('compareDestination' in MAVEN and ANT) to check content of existing result file and to not replace it if content equals (issue #1), by default turned off because makes some overhead
- fixed --c argument usage in CLI, now by default the preprocessor started in CLI doesn't clear its output folder, use --c to turn it on
- improved tests
- minor bug-fixing

6.0.0
- bugfixing and log improvement
- RENAMED DIRECTIVE! //#assert renamed to appropriate name //#echo
- RENAMED FUNCTIONS! renamed XML functions to more appropriate and short names
- xml_getRoot to xml_root
- xml_elementAt to xml_get
- xml_elementsNumber to xml_size
- xml_getAttribute to xml_attr
- xml_getElementName to xml_name
- xml_getElementsForName to xml_list
- xml_getElementText to xml_text
- fixed //#exit and //#exitif behavior to prevent total exit and return level up in include stack
- added //#abort directive to provide possibility to stop preprocessing immediately without errors
- added function 'STR evalfile(STR)' for local preprocessing of a file body and return it as a string
- added predefined variables 'line','filename','filefolder' and 'file' which allow to get name and path parameters for the current preprocessing file path
- added predefined variables 'time','date' and 'timestamp' which work similar C++ predefined macroses
- added function 'STR str2java(STR,BOOL)' to escape and split string to be presented as java sources
- added functions 'STR str2js(STR)', 'STR str2json(STR)','STR str2xml(STR)' and 'STR str2csv(STR)'
- added functions 'STR xml_xlist(STR,STR)' and 'STR xml_xelement(STR,STR)' which allow to use xpath to get element lists an elements
- apache common-io and common-lang libraries have been packed into the jar and hidden
- added the short variant '//#ifdef BOOL' for '//#ifdefined BOOL'
- added '//#ifndef BOOL' to check that a variable is undefined
- added '//#definel NAME' and '//#define NAME' to define local and global variables, they can use not only the default TRUE value for defined variables, but also result of expression (example: //#define ten 2*5)
- added '//#undef NAME' to remove a variable definition from context
- added '//#error EXPR' and '//#warning EXPR' directives to throw exception and log warnings
- added support of custom line separator through the 'jcp.line.separator' system property
- added '//#noautoflush' to prevent auto saving text buffers after file preprocessing

5.3.4
- added support of test source folder preprocessing for maven projects
- added the "clear" maven goal to clear created preprocessing folders or any defined folders and files
- by default the maven plugin trying to keep numeration of lines in preprocessed files (the 'keepLines' is true by default)

5.3.3
- fixed the bug in the comment removing (multiple stars before closing slash)
- fixed the exception if there is not any organization tag in a project pom.xml
- added support for '-' and '--' prefixes in CLI arguments
- improved CLI argument error messaging
- the license has been changed to Apache 2.0

5.3.2
- very minor refactoring.
- fixed issue (ID 5) "Removing strings contain only spaces"
- the first version published in the maven central

5.3.1
- very minor bug-fixing, added the main-class attribute in the preprocessor JAR Manifest 

5.3
- Added feature to keep non-executing lines as commented ones (/k command line key), all non-executing lines will be saved in the output as commented ones

5.2
- Fixed issue (ID 3). The default charset was used to read text files.

5.1
- Fixed issue (ID 1). Inaccessible functionality both "load a file with global variables" and "define global variable" through a command line call. 

5.0 
- The initial published version of totally reworked preprocessor


================================================
FILE: jcp/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.igormaznitsa</groupId>
        <artifactId>jcp-pom</artifactId>
        <version>7.3.0</version>
    </parent>

    <artifactId>jcp</artifactId>
    <packaging>maven-plugin</packaging>

    <name>Java Comment Preprocessor</name>
    <description>Powerful multi-pass preprocessor to process directives situated in C-styled commentaries</description>

    <repositories>
        <repository>
            <id>gradle-releases-repository</id>
            <url>https://repo.gradle.org/gradle/libs-releases-local/</url>
        </repository>
    </repositories>

    <properties>
        <gradle.api.version>6.0</gradle.api.version>
    </properties>

    <profiles>
        <profile>
            <id>site</id>
            <properties>
                <mojo.site.dir>${project.basedir}/../mojo-doc-site</mojo.site.dir>
            </properties>
            <reporting>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-plugin-report-plugin</artifactId>
                    </plugin>
                </plugins>
            </reporting>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-clean-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>delete-project-site</id>
                                <goals>
                                    <goal>clean</goal>
                                </goals>
                                <phase>clean</phase>
                                <configuration>
                                    <excludeDefaultDirectories>true</excludeDefaultDirectories>
                                    <failOnError>true</failOnError>
                                    <filesets>
                                        <fileset>
                                            <directory>${mojo.site.dir}</directory>
                                        </fileset>
                                    </filesets>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-site-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>generate-project-site</id>
                                <goals>
                                    <goal>site</goal>
                                </goals>
                                <phase>verify</phase>
                                <configuration>
                                    <outputDirectory>${mojo.site.dir}</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>publish</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>make-bundle</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <descriptors>
                                        <descriptor>src/assemble/bundle.xml</descriptor>
                                    </descriptors>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>generate-javadoc</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <!--<failOnError>false</failOnError>-->
                                    <source>${maven.compiler.release}</source>
                                    <legacyMode>true</legacyMode>
                                    <failOnError>false</failOnError>
                                    <sourceFileExcludes>
                                        <exclude>**/HelpMojo.java</exclude>
                                    </sourceFileExcludes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>generate-sources</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>net.nicoulaj.maven.plugins</groupId>
                        <artifactId>checksum-maven-plugin</artifactId>
                        <version>1.11</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>files</goal>
                                </goals>
                                <configuration>
                                    <fileSets>
                                        <fileSet>
                                            <directory>${project.build.directory}</directory>
                                            <includes>
                                                <include>*.jar</include>
                                                <include>*.pom</include>
                                            </includes>
                                        </fileSet>
                                    </fileSets>
                                    <algorithms>
                                        <algorithm>SHA-1</algorithm>
                                        <algorithm>MD5</algorithm>
                                    </algorithms>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.10.15</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>${min.maven.api}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>${min.maven.api}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>${min.maven.api}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.shared</groupId>
            <artifactId>file-management</artifactId>
            <version>3.2.0</version>
            <scope>provided</scope>
            <exclusions>
                <exclusion>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.14.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.19.0</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.12.2</version>
        </dependency>
        <dependency>
            <groupId>xalan</groupId>
            <artifactId>xalan</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.38</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-compat</artifactId>
            <version>${min.maven.api}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-artifact</artifactId>
            <version>${min.maven.api}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-artifact-manager</artifactId>
            <version>2.2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-testing</groupId>
            <artifactId>maven-plugin-testing-harness</artifactId>
            <version>2.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.9</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-core</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-core-api</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-model-core</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-logging</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-base-services</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-base-services-groovy</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-plugins</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gradle</groupId>
            <artifactId>gradle-tooling-api</artifactId>
            <version>${gradle.api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>2.5.14</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <excludes>
                    <exclude>/jcpversion.properties</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/jcpversion.properties</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>jcp-check-enforce-rules</id>
                        <configuration>
                            <rules>
                                <banDuplicatePomDependencyVersions/>
                                <enforceBytecodeVersion>
                                    <maxJdkVersion>${maven.compiler.release}</maxJdkVersion>
                                    <ignoredScopes>
                                        <scope>test</scope>
                                        <scope>provided</scope>
                                    </ignoredScopes>
                                </enforceBytecodeVersion>
                                <banCircularDependencies>
                                    <ignoredScopes>
                                        <scope>test</scope>
                                        <scope>provided</scope>
                                    </ignoredScopes>
                                </banCircularDependencies>
                                <reactorModuleConvergence>
                                    <ignoreModuleDependencies>true</ignoreModuleDependencies>
                                </reactorModuleConvergence>
                                <requireJavaVersion>
                                    <version>[${maven.compiler.release},)</version>
                                </requireJavaVersion>
                                <requireMavenVersion>
                                    <version>[${min.maven.api},)</version>
                                </requireMavenVersion>
                                <banDuplicateClasses>
                                    <scopes>
                                        <scope>compile</scope>
                                    </scopes>
                                    <findAllDuplicates>true</findAllDuplicates>
                                    <ignoreWhenIdentical>true</ignoreWhenIdentical>
                                </banDuplicateClasses>
                            </rules>
                        </configuration>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>extra-enforcer-rules</artifactId>
                        <version>1.10.0</version>
                    </dependency>
                </dependencies>
            </plugin>

            <plugin>
                <groupId>com.igormaznitsa</groupId>
                <artifactId>uber-pom</artifactId>
                <version>1.0.3</version>
                <configuration>
                    <removeDependencies>
                        <dependency>
                            <systemPath>*</systemPath>
                        </dependency>
                    </removeDependencies>
                    <remove>
                        <section>parent</section>
                        <section>modules</section>
                        <section>profiles/profile/modules</section>
                    </remove>
                    <removeSiblingDuplications>true</removeSiblingDuplications>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>upom</goal>
                        </goals>
                        <configuration>
                            <enforceInjecting>true</enforceInjecting>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-maven-plugin</artifactId>
                <version>1.18.20.0</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>delombok</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <configuration>
                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
                </configuration>
                <executions>
                    <execution>
                        <id>mojo-descriptor</id>
                        <goals>
                            <goal>descriptor</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>help-goal</id>
                        <goals>
                            <goal>helpmojo</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <relocations>
                                <relocation>
                                    <pattern>javax.xml</pattern>
                                    <shadedPattern>hidden.jcp.javax.xml</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.commons</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.commons</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>license</pattern>
                                    <shadedPattern>hidden.jcp.license</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.xml</pattern>
                                    <shadedPattern>hidden.jcp.org.xml</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.xpath</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.xpath</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.xml</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.xml</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.wml</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.wml</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.regexp</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.regexp</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.html</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.html</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.bcel</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.bcel</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.xerces</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.xerces</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.apache.xalan</pattern>
                                    <shadedPattern>hidden.jcp.org.apache.xalan</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.w3c</pattern>
                                    <shadedPattern>hidden.jcp.org.w3c</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>java_cup</pattern>
                                    <shadedPattern>hidden.jcp.java_cup</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>trax</pattern>
                                    <shadedPattern>hidden.jcp.trax</shadedPattern>
                                </relocation>
                                <relocation>
                                    <pattern>org.springframework</pattern>
                                    <shadedPattern>hidden.jcp.org.springframework</shadedPattern>
                                </relocation>
                            </relocations>
                            <artifactSet>
                                <includes>
                                    <include>org.springframework:*</include>
                                    <include>commons-io:*</include>
                                    <include>commons-codec:*</include>
                                    <include>commons-text:*</include>
                                    <include>org.apache.commons:*</include>
                                    <include>xerces:*</include>
                                    <include>xalan:*</include>
                                    <include>com.igormaznitsa:*</include>
                                    <include>xml-apis:*</include>
                                </includes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/LICENSE.txt</exclude>
                                        <exclude>META-INF/NOTICE.txt</exclude>
                                        <exclude>META-INF/MANIFEST.MF</exclude>
                                        <exclude>META-INF/MANIFEST.txt</exclude>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                        <exclude>META-INF/services/javax.xml.*</exclude>
                                        <exclude>META-INF/services/org.apache.*</exclude>
                                        <exclude>META-INF/services/org.w3c.*</exclude>
                                        <exclude>META-INF/services/org.xml.*</exclude>
                                        <exclude>META-INF/versions/9/module-info.class</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.igormaznitsa.jcp.JcpPreprocessor</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.igormaznitsa.jcp.JcpPreprocessor</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Automatic-Module-Name>igormaznitsa.jcp</Automatic-Module-Name>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    <release>${maven.compiler.release}</release>
                    <excludes>
                        <exclude>
                            **${file.separator}JCPreprocessor${file.separator}src${file.separator}test${file.separator}resources${file.separator}com${file.separator}igormaznitsa${file.separator}jcp${file.separator}it${file.separator}maven${file.separator}dummy_maven_project${file.separator}**${file.separator}*.java
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <systemPropertyVariables>
                        <test.folder>${project.build.testOutputDirectory}</test.folder>
                    </systemPropertyVariables>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>


================================================
FILE: jcp/src/assemble/bundle.xml
================================================
<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>bundle</id>

    <includeBaseDirectory>false</includeBaseDirectory>
    <includeSiteDirectory>false</includeSiteDirectory>

    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/com/igormaznitsa/${project.artifactId}/${project.version}</outputDirectory>
            <includes>
                <include>*.jar</include>
                <include>*.jar.asc</include>
                <include>*.jar.sha1</include>
                <include>*.jar.md5</include>
                <include>*.pom</include>
                <include>*.pom.asc</include>
                <include>*.pom.sha1</include>
                <include>*.pom.md5</include>
            </includes>
            <excludes>
                <exclude>original*.*</exclude>
                <exclude>*.zip</exclude>
            </excludes>
        </fileSet>
    </fileSets>
</assembly>

================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/InfoHelper.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp;

import static com.igormaznitsa.jcp.context.JCPSpecialVariableProcessor.getReference;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;

import com.igormaznitsa.jcp.cmdline.CommandLineHandler;
import com.igormaznitsa.jcp.context.JCPSpecialVariableProcessor;
import com.igormaznitsa.jcp.directives.AbstractDirectiveHandler;
import com.igormaznitsa.jcp.expression.ValueType;
import com.igormaznitsa.jcp.expression.functions.AbstractFunction;
import com.igormaznitsa.jcp.expression.operators.AbstractOperator;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;

public final class InfoHelper {

  public static final String DELIMITER = "-------------------------------------------------";
  public static final String SHORT_DELIMITER = "----------------------";

  public static final String VERSION;
  public static final String URL;
  public static final int YEAR;

  static {
    final String path = "/jcpversion.properties";
    try (final InputStream stream = InfoHelper.class.getResourceAsStream(path)) {
      final Properties props = new Properties();
      props.load(stream);
      VERSION = requireNonNull(props.getProperty("version"));
      URL = requireNonNull(props.getProperty("url"));
      YEAR = Integer.parseInt(requireNonNull(props.getProperty("year")).trim());
    } catch (IOException ex) {
      throw new IllegalStateException("Can't read resource: " + path, ex);
    }
  }

  private InfoHelper() {
  }

  public static String getVersion() {
    return "v" + VERSION;
  }


  public static String getCopyright() {
    return "Copyright (C) 2002-" + YEAR + " Igor A. Maznitsa (https://www.igormaznitsa.com)";
  }


  public static String getSite() {
    return "Project page: " + URL;
  }


  public static String getProductName() {
    return "Java Comment Preprocessor";
  }


  public static List<String> makeTextForHelpInfo() {
    final List<String> result = new ArrayList<>();

    result.add(JcpPreprocessor.class.getCanonicalName() + " [@cfgFile] [cliCommands]");
    result.add("");

    result.add("Command line");
    result.add(SHORT_DELIMITER);
    result.add("allowed '/','-' and '--' prefixes, '--' doesn't support multiple commands at once");
    result.add(makeColumns("@cfgFile", "file contains global definition list", 14));
    result.addAll(JcpPreprocessor.getCommandLineHandlers().stream()
        .map(InfoHelper::makeCommandLineKeyReference).collect(toList()));
    result.add(DELIMITER);

    result.add("Directives");
    result.add(SHORT_DELIMITER);
    for (final AbstractDirectiveHandler handler : AbstractDirectiveHandler.findAllDirectives()) {
      result.add(makeDirectiveReference(handler));
    }
    result.add(DELIMITER);
    result.add("Special directives");
    result.add(SHORT_DELIMITER);
    result
        .add(makeSpecialDirectiveReference("//$", "uncomment and process all following macroses"));
    result.add(makeSpecialDirectiveReference("//$$", "like //$ but macroses ignored"));
    result.add(makeSpecialDirectiveReference("/*-*/", "truncate line"));

    result.add("Operators");
    result.add(SHORT_DELIMITER);
    for (final AbstractOperator handler : AbstractOperator.getAllOperators()) {
      result.add(makeOperatorReference(handler));
    }
    result.add(DELIMITER);
    result.add("Functions");
    result.add(SHORT_DELIMITER);
    for (final AbstractFunction handler : AbstractFunction.findAllFunctions()) {
      result.add(makeFunctionReference(handler));
    }
    result.add(DELIMITER);
    result.add("Allowed types");
    result.add(SHORT_DELIMITER);
    result.add(" BOOL: true,false");
    result.add("  INT: 2374,0x56FE (signed 64 bit)");
    result.add("  STR: \"Hello World!\" (or $Hello World!$ if in CLI)");
    result.add("FLOAT: 0.745 (signed 32 bit)");
    result.add(DELIMITER);
    result.add("Special variables");
    result.add(SHORT_DELIMITER);
    result.addAll(
        getReference().stream().map(InfoHelper::makeSpecialVariableReference).collect(toList()));
    return result;
  }


  private static String makeSpecialVariableReference(
      final JCPSpecialVariableProcessor.NameReferencePair p) {
    final String name = p.getName();
    final String ref = p.getReference();
    return makeColumns(name, ref, 24);
  }


  private static String makeCommandLineKeyReference(final CommandLineHandler handler) {
    return makeColumns(handler.getKeyName(), handler.getDescription(), 14);
  }


  private static String makeDirectiveReference(final AbstractDirectiveHandler directive) {
    final StringBuilder activityPasses = new StringBuilder();
    int i = 0;
    if (directive.isGlobalPhaseAllowed()) {
      i++;
      activityPasses.append("1st");
    }
    if (directive.isPreprocessingPhaseAllowed()) {
      if (i > 0) {
        activityPasses.append(',');
      }
      activityPasses.append("2th");
      i++;
    }
    activityPasses.append(i > 1 ? "passes" : " pass");

    final String directiveName = directive.getFullName();
    final String descr =
        (directive.isDeprecated() ? "{DEPRECATED} " : "") + directive.getReference() + " (" +
            activityPasses + ')';
    return makeColumns(directiveName, descr, 16);
  }


  private static String makeSpecialDirectiveReference(final String name, final String reference) {
    return makeColumns(name, reference, 14);
  }


  private static String makeOperatorReference(final AbstractOperator operator) {
    return makeColumns(operator.getKeyword(), operator.getReference(), 14);
  }


  private static String makeFunctionReference(final AbstractFunction func) {
    final String funcName = func.getName();
    final String description = func.getReference();

    final StringBuilder variants = new StringBuilder("  [");
    final String result = func.getResultType().getSignature().toUpperCase(Locale.ROOT);

    int variantIndex = 0;
    for (final List<ValueType> signature : func.getAllowedArgumentTypes()) {
      if (variantIndex > 0) {
        variants.append(" | ");
      }
      variants.append(result).append(' ').append(funcName).append(" (");
      for (int i = 0; i < signature.size(); i++) {
        if (i > 0) {
          variants.append(',');
        }
        variants.append(signature.get(i).getSignature().toUpperCase(Locale.ROOT));
      }
      variants.append(')');
      variantIndex++;
    }
    variants.append(']');
    return makeColumns(funcName, description, 24) + variants;
  }


  private static String makeColumns(final String name, final String reference,
                                    final int firstColumnWidth) {
    final int spaces = firstColumnWidth - name.length();
    final StringBuilder result = new StringBuilder(name);
    result.append(" ".repeat(Math.max(0, spaces)));
    result.append(reference);
    return result.toString();
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/JcpPreprocessor.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp;

import static com.igormaznitsa.jcp.InfoHelper.makeTextForHelpInfo;
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.readWholeTextFileIntoArray;
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.throwPreprocessorException;

import com.igormaznitsa.jcp.cmdline.ActionPreprocessorExtensionHandler;
import com.igormaznitsa.jcp.cmdline.AllowMergeBlockLineHandler;
import com.igormaznitsa.jcp.cmdline.AllowWhitespaceDirectiveHandler;
import com.igormaznitsa.jcp.cmdline.CareForLastEolHandler;
import com.igormaznitsa.jcp.cmdline.ClearTargetHandler;
import com.igormaznitsa.jcp.cmdline.CommandLineHandler;
import com.igormaznitsa.jcp.cmdline.DestinationDirectoryHandler;
import com.igormaznitsa.jcp.cmdline.DontOverwriteSameContentHandler;
import com.igormaznitsa.jcp.cmdline.ExcludeFoldersHandler;
import com.igormaznitsa.jcp.cmdline.ExcludedFileExtensionsHandler;
import com.igormaznitsa.jcp.cmdline.FileExtensionsHandler;
import com.igormaznitsa.jcp.cmdline.GlobalVariableDefiningFileHandler;
import com.igormaznitsa.jcp.cmdline.GlobalVariableHandler;
import com.igormaznitsa.jcp.cmdline.HelpHandler;
import com.igormaznitsa.jcp.cmdline.InCharsetHandler;
import com.igormaznitsa.jcp.cmdline.KeepAttributesHandler;
import com.igormaznitsa.jcp.cmdline.KeepCommentsHandler;
import com.igormaznitsa.jcp.cmdline.KeepLineHandler;
import com.igormaznitsa.jcp.cmdline.OutCharsetHandler;
import com.igormaznitsa.jcp.cmdline.PreserveIndentDirectiveHandler;
import com.igormaznitsa.jcp.cmdline.RemoveCommentsHandler;
import com.igormaznitsa.jcp.cmdline.SourceDirectoryHandler;
import com.igormaznitsa.jcp.cmdline.UnknownAsFalseHandler;
import com.igormaznitsa.jcp.cmdline.VerboseHandler;
import com.igormaznitsa.jcp.containers.FileInfoContainer;
import com.igormaznitsa.jcp.context.PreprocessingState;
import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.context.PreprocessorContextAware;
import com.igormaznitsa.jcp.directives.ExcludeIfDirectiveHandler;
import com.igormaznitsa.jcp.exceptions.FilePositionInfo;
import com.igormaznitsa.jcp.exceptions.PreprocessorException;
import com.igormaznitsa.jcp.expression.Expression;
import com.igormaznitsa.jcp.expression.Value;
import com.igormaznitsa.jcp.expression.ValueType;
import com.igormaznitsa.jcp.utils.AntPathMatcher;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import lombok.Data;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;

/**
 * The main class implements the Java Comment Preprocessor, it has the main
 * method and can be started from a command string
 * Base directory for preprocessing can be provided through System property 'jcp.base.dir'
 * if it is not provided then current work directory will be recognized as base one.
 */
public final class JcpPreprocessor {

  static final CommandLineHandler[] COMMAND_LINE_HANDLERS = new CommandLineHandler[] {
      new HelpHandler(),
      new InCharsetHandler(),
      new OutCharsetHandler(),
      new ClearTargetHandler(),
      new SourceDirectoryHandler(),
      new DestinationDirectoryHandler(),
      new FileExtensionsHandler(),
      new ExcludedFileExtensionsHandler(),
      new AllowWhitespaceDirectiveHandler(),
      new RemoveCommentsHandler(),
      new KeepCommentsHandler(),
      new KeepLineHandler(),
      new DontOverwriteSameContentHandler(),
      new VerboseHandler(),
      new GlobalVariableDefiningFileHandler(),
      new GlobalVariableHandler(),
      new CareForLastEolHandler(),
      new PreserveIndentDirectiveHandler(),
      new ExcludeFoldersHandler(),
      new KeepAttributesHandler(),
      new ActionPreprocessorExtensionHandler(),
      new AllowMergeBlockLineHandler(),
      new UnknownAsFalseHandler()
  };
  private static final String PROPERTY_JCP_BASE_DIR = "jcp.base.dir";
  private final PreprocessorContext context;

  public JcpPreprocessor(final PreprocessorContext context) {
    Objects.requireNonNull(context, "Configurator is null");
    this.context = context;
  }


  public static List<CommandLineHandler> getCommandLineHandlers() {
    return Arrays.asList(COMMAND_LINE_HANDLERS);
  }

  public static void main(final String... args) {
    printHeader();

    final String[] normalizedStrings = PreprocessorUtils
        .replaceStringPrefix(new String[] {"--", "-"}, "/",
            PreprocessorUtils.replaceChar(args, '$', '\"'));

    PreprocessorContext preprocessorContext = null;

    final File baseDir = getBaseDir();
    System.out.println("Base directory: " + baseDir);

    try {
      preprocessorContext = processCommandLine(baseDir, args, normalizedStrings);
    } catch (Exception ex) {
      System.err.println("Error during CLI processing: " + ex.getMessage());
      System.exit(1);
    }

    final JcpPreprocessor preprocessor = new JcpPreprocessor(preprocessorContext);

    try {
      preprocessor.execute();
    } catch (Exception unexpected) {
      System.err.println(PreprocessorException.referenceAsString(' ', unexpected));
      System.exit(1);
    }

    System.exit(0);
  }


  private static File getBaseDir() {
    final String baseDirInProperties = System
        .getProperty(PROPERTY_JCP_BASE_DIR,
            System.getProperty("user.dir", new File("").getAbsolutePath())
        );
    return new File(baseDirInProperties);
  }


  private static PreprocessorContext processCommandLine(final File baseDir,
                                                        final String[] originalStrings,
                                                        final String[] normalizedStrings) {
    final PreprocessorContext result = new PreprocessorContext(baseDir);

    for (int i = 0; i < normalizedStrings.length; i++) {
      final String arg = normalizedStrings[i];
      boolean processed = false;
      for (final CommandLineHandler processor : getCommandLineHandlers()) {
        if (processor.processCommandLineKey(arg, result)) {
          processed = true;
          if (processor instanceof HelpHandler) {
            help();
            System.exit(2);
          }
          break;
        }
      }

      if (!processed) {
        System.err.println("Can't process CLI argument, see manual: " + originalStrings[i]);
        System.out.println();
        help();
        System.exit(1);
      }
    }

    fillContextByFoundServices(result);

    return result;
  }

  private static void printHeader() {
    System.out.println(InfoHelper.getProductName() + ' ' + InfoHelper.getVersion());
    System.out.println(InfoHelper.getSite());
    System.out.println(InfoHelper.getCopyright());
  }

  private static void help() {
    System.out.println();

    makeTextForHelpInfo().forEach(System.out::println);
  }


  public PreprocessorContext getContext() {
    return this.context;
  }

  public Statistics execute() throws IOException {
    final long timeStart = System.currentTimeMillis();
    this.context.getActivatedConfigFiles().addAll(processConfigFiles());

    this.context.logInfo(String
        .format("File extensions: %s excluded %s", this.context.getExtensions(),
            this.context.getExcludeExtensions()));
    final List<PreprocessorContext.SourceFolder> srcFolders = this.context.getSources();
    this.context.logDebug("Source folders: " + srcFolders);

    if (srcFolders.isEmpty()) {
      this.context.logWarning("Source folder list is empty!");
    }

    final Collection<FileInfoContainer> filesToBePreprocessed =
        collectFilesToPreprocess(srcFolders, this.context.getExcludeFolders());
    this.context.addAllPreprocessedResources(filesToBePreprocessed);

    final List<PreprocessingState.ExcludeIfInfo> excludedIf =
        processGlobalDirectives(filesToBePreprocessed);

    processFileExclusion(excludedIf);
    if (!this.context.isDryRun()) {
      createTargetFolder();
    } else {
      this.context.logInfo("Dry run mode is ON");
    }
    final Statistics stat = this.preprocessFiles(filesToBePreprocessed, true);

    final long elapsedTime = System.currentTimeMillis() - timeStart;
    this.context.logInfo("-----------------------------------------------------------------");
    this.context.logInfo(String
        .format("Preprocessed %d files, copied %d files, ignored %d files, elapsed time %d ms",
            stat.getPreprocessed(), stat.getCopied(), stat.getExcluded(), elapsedTime));
    return stat;
  }

  private void processFileExclusion(final List<PreprocessingState.ExcludeIfInfo> foundExcludeIf) {
    final String DIRECTIVE_NAME = new ExcludeIfDirectiveHandler().getFullName();

    for (final PreprocessingState.ExcludeIfInfo item : foundExcludeIf) {
      final String condition = item.getCondition();
      final File file = item.getFileInfoContainer().getSourceFile();

      Value val;

      if (context.isVerbose()) {
        context.logForVerbose(String
            .format("Processing condition '%s' for file '%s'", condition, file.getAbsolutePath()));
      }

      try {
        val = Expression.evalExpression(condition, this.context);
      } catch (PreprocessorException ex) {
        throw new PreprocessorException(
            ex.getMessage(),
            condition,
            new FilePositionInfo[] {new FilePositionInfo(file, item.getStringIndex())},
            ex.getCause()
        );
      } catch (IllegalArgumentException ex) {
        throw new PreprocessorException("Wrong expression at " + DIRECTIVE_NAME,
            condition,
            new FilePositionInfo[] {new FilePositionInfo(file, item.getStringIndex())},
            ex);
      }

      if (val.getType() != ValueType.BOOLEAN) {
        throw new PreprocessorException("Expression at " + DIRECTIVE_NAME + " is not a boolean one",
            condition, new FilePositionInfo[] {new FilePositionInfo(file, item.getStringIndex())},
            null);
      }

      if (val.asBoolean()) {
        item.getFileInfoContainer().setExcluded(true);
        if (context.isVerbose()) {
          context.logForVerbose(String
              .format("File '%s' excluded for active '%s' condition", file.getAbsolutePath(),
                  condition));
        }
      }
    }
  }


  private List<PreprocessingState.ExcludeIfInfo> processGlobalDirectives(
      final Collection<FileInfoContainer> files) throws IOException {
    final List<PreprocessingState.ExcludeIfInfo> result = new ArrayList<>();
    for (final FileInfoContainer fileRef : files) {
      if (!(fileRef.isExcludedFromPreprocessing() || fileRef.isCopyOnly())) {
        final long startTime = System.currentTimeMillis();
        result.addAll(fileRef.processGlobalDirectives(context, null));
        final long elapsedTime = System.currentTimeMillis() - startTime;
        if (context.isVerbose()) {
          context.logForVerbose(String
              .format("Global phase completed for file '%s', elapsed time %d ms ",
                  PreprocessorUtils.getFilePath(fileRef.getSourceFile()), elapsedTime));
        }
      }
    }
    return result;
  }


  private Statistics preprocessFiles(final Collection<FileInfoContainer> files,
                                     final boolean notifyProcessors) throws IOException {
    if (notifyProcessors) {
      final List<PreprocessorContextAware> successfullyNotified = new ArrayList<>();
      try {
        context.fireNotificationStart(successfullyNotified);
      } catch (final Exception ex) {
        context.logError("Error during init of context aware processors: " + ex.getMessage());
        successfullyNotified.forEach(x -> {
          try {
            x.onContextStopped(context, ex);
          } catch (Exception err) {
            context.logError("Error: " + err.getMessage());
          }
        });
        throw new IllegalStateException("Exception during notification of context aware listeners",
            ex);
      }
    }

    int preprocessedCounter = 0;
    int copiedCounter = 0;
    int excludedCounter = 0;

    Throwable error = null;
    try {
      for (final FileInfoContainer fileRef : files) {
        if (fileRef.isExcludedFromPreprocessing()) {
          excludedCounter++;
        } else if (fileRef.isCopyOnly()) {
          if (!context.isDryRun()) {
            final File destinationFile =
                this.context.createDestinationFileForPath(fileRef.makeTargetFilePathAsString());
            boolean doCopy = true;

            if (this.context.isDontOverwriteSameContent() &&
                PreprocessorUtils.isFileContentEquals(fileRef.getSourceFile(), destinationFile)) {
              doCopy = false;
              if (this.context.isVerbose()) {
                this.context.logForVerbose(String
                    .format("Copy skipped because same content: %s -> {dst} %s",
                        PreprocessorUtils.getFilePath(fileRef.getSourceFile()),
                        fileRef.makeTargetFilePathAsString()));
              }
            }

            if (doCopy) {
              if (this.context.isVerbose()) {
                this.context.logForVerbose(String.format("Copy file %s -> {dst} %s",
                    PreprocessorUtils.getFilePath(fileRef.getSourceFile()),
                    fileRef.makeTargetFilePathAsString()));
              }
              PreprocessorUtils.copyFile(fileRef.getSourceFile(), destinationFile,
                  this.context.isKeepAttributes());
              fileRef.getGeneratedResources().add(destinationFile);
              copiedCounter++;
            }
          }
        } else {
          final long startTime = System.currentTimeMillis();
          fileRef.preprocessFileWithNotification(this.context, null, false);
          final long elapsedTime = System.currentTimeMillis() - startTime;
          if (this.context.isVerbose()) {
            this.context.logForVerbose(String
                .format("File preprocessing completed  '%s', elapsed time %d ms",
                    PreprocessorUtils.getFilePath(fileRef.getSourceFile()), elapsedTime));
          }
          preprocessedCounter++;
        }
      }
    } catch (Throwable err) {
      error = err;
      if (error instanceof IOException) {
        throw (IOException) error;
      }
      if (error instanceof RuntimeException) {
        throw (RuntimeException) error;
      }
      if (error instanceof Error) {
        throw (Error) error;
      }
    } finally {
      context.fireNotificationStop(error);
    }

    return new Statistics(
        preprocessedCounter,
        copiedCounter,
        excludedCounter
    );
  }

  private void createTargetFolder() throws IOException {
    final File target = context.getTarget();

    final boolean targetExists = target.isDirectory();

    if (context.isClearTarget() && targetExists) {
      this.context.logForVerbose("Cleaning target folder: " + target);
      try {
        FileUtils.cleanDirectory(target);
      } catch (IOException ex) {
        throw new IOException("Can't clean folder: " + PreprocessorUtils.getFilePath(target), ex);
      }
    }

    if (!targetExists && !target.mkdirs()) {
      throw new IOException("Can't make folder: " + PreprocessorUtils.getFilePath(target));
    }

    this.context.logForVerbose("Target folder has been prepared: " + target);
  }


  private Collection<FileInfoContainer> collectFilesToPreprocess(
      final List<PreprocessorContext.SourceFolder> sources, final List<String> excluded)
      throws IOException {
    final Collection<FileInfoContainer> result = new ArrayList<>();

    final AntPathMatcher antPathMatcher = new AntPathMatcher();

    for (final PreprocessorContext.SourceFolder sourceFolder : sources) {
      String canonicalSourcePath = sourceFolder.getAsFile().getCanonicalPath();

      this.context.logDebug("Processing folder: " + sourceFolder);

      if (!canonicalSourcePath.endsWith(File.separator)) {
        canonicalSourcePath += File.separator;
      }

      for (final File file : findAllFiles(canonicalSourcePath, sourceFolder.getAsFile(),
          antPathMatcher, excluded)) {
        if (this.context.isFileExcludedByExtension(file)) {
          this.context
              .logForVerbose(String.format("File '%s' excluded by its extension", file.getPath()));
        } else {
          final String canonicalFilePath = file.getCanonicalPath();
          final String canonicalRelativePath =
              canonicalFilePath.substring(canonicalSourcePath.length());
          final FileInfoContainer reference = new FileInfoContainer(file, canonicalRelativePath,
              !this.context.isFileAllowedForPreprocessing(file));
          result.add(reference);
          this.context.logDebug("File added to preprocess list: " + reference);
        }
      }
    }

    return result;
  }


  private Set<File> findAllFiles(
      final String sourceCanonicalPath,
      final File dir,
      final AntPathMatcher antPathMatcher,
      final List<String> excludedFolderPatterns
  ) throws IOException {

    final Set<File> result = new HashSet<>();

    this.context.logDebug("Looking for files in folder: " + dir);

    final File[] allowedFiles = dir.listFiles();
    if (allowedFiles == null) {
      this.context.logWarning("Can't find files in folder: " + dir);
    } else {
      final String normalizedBasePath = FilenameUtils.normalize(sourceCanonicalPath, true);

      for (final File file : allowedFiles) {
        if (file.isDirectory()) {
          final String folderPath = file.getCanonicalPath();
          String excludedFolderPattern = null;

          if (!excludedFolderPatterns.isEmpty()) {
            final String subPathInBase = folderPath.substring(normalizedBasePath.length());

            for (final String pattern : excludedFolderPatterns) {
              if (antPathMatcher.match(pattern, subPathInBase)) {
                excludedFolderPattern = pattern;
                break;
              }
            }
          }

          if (excludedFolderPattern == null) {
            result.addAll(
                findAllFiles(sourceCanonicalPath, file, antPathMatcher, excludedFolderPatterns));
          } else {
            this.context.logForVerbose(
                String.format("Folder '%s' excluded by '%s'", folderPath, excludedFolderPattern));
          }
        } else {
          result.add(file);
        }
      }
    }
    return result;
  }

  List<File> processConfigFiles() throws IOException {

    final List<File> processedConfigFileList = new ArrayList<>();

    for (final File file : context.getConfigFiles()) {
      processedConfigFileList.add(file);

      final String[] lines = readWholeTextFileIntoArray(file, StandardCharsets.UTF_8, null);

      int readStringIndex = -1;
      for (final String curString : lines) {
        final String trimmed = curString.trim();
        readStringIndex++;

        if (trimmed.isEmpty() || trimmed.charAt(0) == '#') {
          // do nothing
        } else if (trimmed.charAt(0) == '@') {
          throwPreprocessorException("Config file doesn't allow have lines started with '@'",
              trimmed, file, readStringIndex, null);
        } else if (trimmed.charAt(0) == '/') {
          // a command line argument
          boolean processed = false;
          try {
            for (CommandLineHandler handler : getCommandLineHandlers()) {
              if (context.isVerbose()) {
                context.logForVerbose(String
                    .format("Processing сonfig file key '%s' at %s:%d", trimmed, file.getName(),
                        readStringIndex + 1));
              }
              if (handler.processCommandLineKey(trimmed, context)) {
                processed = true;
                break;
              }
            }
          } catch (Exception unexpected) {
            throwPreprocessorException("Exception during directive processing", trimmed, file,
                readStringIndex, unexpected);
          }

          if (!processed) {
            throwPreprocessorException("Unsupported or disallowed directive", trimmed, file,
                readStringIndex, null);
          }
        } else {
          // a global variable
          final String[] split = PreprocessorUtils.splitForEqualChar(trimmed);
          if (split.length != 2) {
            throwPreprocessorException("Wrong variable definition", trimmed, file, readStringIndex,
                null);
          }
          final String name = split[0].trim().toLowerCase(Locale.ROOT);
          final String expression = split[1].trim();
          if (name.isEmpty()) {
            throwPreprocessorException("Empty variable name detected", trimmed, file,
                readStringIndex, null);
          }

          try {
            final Value result = Expression.evalExpression(expression, this.context);
            this.context.setGlobalVariable(name, result);

            if (this.context.isVerbose()) {
              this.context.logForVerbose(String
                  .format("Registering global variable '%s' = '%s' (%s:%d)", name,
                      result, file.getName(), readStringIndex + 1));
            }
          } catch (Exception unexpected) {
            throwPreprocessorException("Can't process the global variable definition", trimmed,
                file, readStringIndex, unexpected);
          }
        }
      }
    }
    return processedConfigFileList;
  }

  @Data
  public static final class Statistics {
    private final int preprocessed;
    private final int copied;
    private final int excluded;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/ant/PreprocessTask.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.ant;

import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;

import com.igormaznitsa.jcp.JcpPreprocessor;
import com.igormaznitsa.jcp.context.CommentRemoverType;
import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.context.SpecialVariableProcessor;
import com.igormaznitsa.jcp.exceptions.PreprocessorException;
import com.igormaznitsa.jcp.expression.Value;
import com.igormaznitsa.jcp.logger.PreprocessorLogger;
import com.igormaznitsa.jcp.utils.GetUtils;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.text.StringEscapeUtils;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;

/**
 * The class implements an ANT task to allow calls for preprocessing from ANT build scripts. Also it allows to out messages from preprocessor directives into the ANT log and read
 * ANT properties as global variables (with the "ant." prefix)
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class PreprocessTask extends Task implements PreprocessorLogger, SpecialVariableProcessor {
  private Sources sources = null;
  private String eol = null;
  private boolean keepAttributes = false;
  private String target = null;
  private String sourceEncoding = null;
  private String targetEncoding = null;
  private boolean ignoreMissingSources = false;
  private ExcludeExtensions excludeExtensions = null;
  private Extensions extensions = null;
  private boolean unknownVarAsFalse = false;
  private boolean dryRun = false;
  private boolean allowBlocks = false;
  private boolean verbose = false;
  private boolean clearTarget = false;
  private boolean careForLastEol = false;
  private String keepComments = CommentRemoverType.REMOVE_C_STYLE.name();
  private Vars vars = null;
  private ExcludeFolders excludeFolders = null;
  private ConfigFiles configFiles = null;
  private boolean keepLines = true;
  private boolean allowWhitespaces = false;
  private boolean preserveIndents = false;
  private boolean dontOverwriteSameContent = false;
  private String actionPreprocessorExtensions = "";
  private Map<String, Value> antVariables = new HashMap<>();

  private void registerConfigFiles(final PreprocessorContext context) {
    if (this.getConfigFiles() != null) {
      for (final Sources.Path f : this.getConfigFiles().getPaths()) {
        log("Registering config file: " + f.getValue());
        context.registerConfigFile(
            new File(Objects.requireNonNull(f, "File must not be null").getValue().trim()));
      }
    }
  }

  private void fillGlobalVars(final PreprocessorContext context) {
    if (this.getVars() != null) {
      for (final Vars.Var g : this.getVars().getListVars()) {
        context.setGlobalVariable(Objects.requireNonNull(g.getName(), "Name must not be null"),
            Value.recognizeRawString(
                Objects.requireNonNull(g.getValue(), "Value must not be null")));
      }
    }
  }

  PreprocessorContext makePreprocessorContext() {
    fillAntVariables();

    final PreprocessorContext context = new PreprocessorContext(getProject().getBaseDir());
    context.setPreprocessorLogger(this);
    context.registerSpecialVariableProcessor(this);

    if (this.getTarget() != null) {
      context.setTarget(new File(this.getTarget()));
    }

    if (this.getSources() != null) {
      context.setSources(this.getSources().getPaths()
          .stream()
          .map(Sources.Path::getValue)
          .collect(Collectors.toList())
      );
    }

    if (this.getExcludeExtensions() != null) {
      context.setExcludeExtensions(this.getExcludeExtensions().listExtensions
          .stream()
          .map(x -> x.name.trim())
          .filter(x -> !x.isEmpty())
          .collect(Collectors.toList())
      );
    }
    if (this.getExtensions() != null) {
      context.setExtensions(this.getExtensions().listExtensions
          .stream()
          .map(x -> x.name.trim())
          .filter(x -> !x.isEmpty())
          .collect(Collectors.toList())
      );
    }

    if (this.getSourceEncoding() != null) {
      context.setSourceEncoding(Charset.forName(this.getSourceEncoding()));
    }

    if (this.getTargetEncoding() != null) {
      context.setTargetEncoding(Charset.forName(this.getTargetEncoding()));
    }

    context.setDontOverwriteSameContent(this.isDontOverwriteSameContent());
    context.setClearTarget(this.isClearTarget());
    context.setDryRun(this.isDryRun());
    context.setAllowsBlocks(this.isAllowBlocks());
    context.setKeepComments(PreprocessorUtils.findCommentRemoverForId(this.getKeepComments()));
    context.setVerbose(this.isVerbose());
    context.setKeepLines(this.isKeepLines());
    context.setCareForLastEol(this.isCareForLastEol());
    context.setAllowWhitespaces(this.isAllowWhitespaces());
    context.setPreserveIndents(this.isPreserveIndents());
    context.setKeepAttributes(this.isKeepAttributes());
    context.setUnknownVariableAsFalse(this.isUnknownVarAsFalse());

    if (this.getEol() != null) {
      context.setEol(StringEscapeUtils.unescapeJava(this.getEol()));
    }

    if (this.getExcludeFolders() != null) {
      context.setExcludeFolders(
          this.getExcludeFolders().getFolders()
              .stream()
              .map(ExcludeFolders.Folder::getPath)
              .collect(Collectors.toList())
      );
    }

    if (!this.getActionPreprocessorExtensions().isEmpty()) {
      info("Instantiating action preprocessor extensions: " +
          this.getActionPreprocessorExtensions());
      Arrays.stream(this.getActionPreprocessorExtensions().split(","))
          .filter(x -> !x.trim().isEmpty())
          .forEach(x -> context.addPreprocessorExtension(
              PreprocessorUtils.findAndInstantiatePreprocessorExtensionForClassName(
                  x.trim())));
    }

    this.registerConfigFiles(context);
    this.fillGlobalVars(context);

    fillContextByFoundServices(context);

    return context;
  }

  @Override
  public void execute() throws BuildException {
    PreprocessorContext context;
    JcpPreprocessor preprocessor;

    this.antVariables.clear();
    this.antVariables.putAll(fillAntVariables());

    try {
      context = makePreprocessorContext();
    } catch (Exception unexpected) {
      final PreprocessorException pp =
          PreprocessorException.extractPreprocessorException(unexpected);
      throw new BuildException(pp == null ? unexpected.getMessage() : pp.toString(),
          pp == null ? unexpected : pp);
    }

    preprocessor = new JcpPreprocessor(context);

    try {
      preprocessor.execute();
    } catch (Exception unexpected) {
      final PreprocessorException pp =
          PreprocessorException.extractPreprocessorException(unexpected);
      throw new BuildException(pp == null ? unexpected.getMessage() : pp.toString(),
          pp == null ? unexpected : pp);
    }
  }

  @Override
  public void error(final String message) {
    log(message, Project.MSG_ERR);
  }

  @Override
  public void info(final String message) {
    log(message, Project.MSG_INFO);
  }

  @Override
  public void debug(final String message) {
    log(message, Project.MSG_DEBUG);
  }

  @Override
  public void debug(final Supplier<String> supplier) {
    if (supplier != null) {
      final String text = supplier.get();
      if (text != null) {
        log(text, Project.MSG_DEBUG);
      }
    }
  }

  @Override
  public void warning(final String message) {
    log(message, Project.MSG_WARN);
  }

  private Map<String, Value> fillAntVariables() {
    final Project theProject = getProject();

    final Map<String, Value> result;

    if (theProject == null) {
      result = Collections.emptyMap();
    } else {
      result = new HashMap<>();

      for (final Object key : getProject().getProperties().keySet()) {
        final String keyStr = key.toString();
        final String value = theProject.getProperty(keyStr);
        if (value != null) {
          result.put("ant." + keyStr.toLowerCase(Locale.ROOT), Value.valueOf(value));
        }
      }
    }
    return result;
  }

  @Override
  public Set<String> getVariableNames() {
    final Set<String> result;
    if (this.antVariables == null) {
      result = Set.of();
    } else {
      result = this.antVariables.keySet();
    }
    return result;
  }

  @Override
  public Value getVariable(final String varName, final PreprocessorContext context) {
    if (antVariables == null) {
      throw context.makeException("Non-initialized ANT property map detected", null);
    }
    final Value result = this.antVariables.get(varName);

    if (result == null) {
      throw context.makeException("Request for unsupported Ant property '" + varName + '\'', null);
    }
    return result;
  }

  @Override
  public void setVariable(final String varName, final Value value,
                          final PreprocessorContext context) {
    throw context.makeException(
        "Request to change ANT property '" + varName + "'. NB! ANT properties are read only!",
        null);
  }

  public Extensions createExtensions() {
    this.extensions = new Extensions();
    return this.extensions;
  }

  public ExcludeExtensions createExcludeExtensions() {
    this.excludeExtensions = new ExcludeExtensions();
    return this.excludeExtensions;
  }

  public ExcludeFolders createExcludeFolders() {
    this.excludeFolders = new ExcludeFolders();
    return this.excludeFolders;
  }

  public Sources createSources() {
    this.sources = new Sources();
    return this.sources;
  }

  public ConfigFiles createConfigFiles() {
    this.configFiles = new ConfigFiles();
    return this.configFiles;
  }

  public Vars createVars() {
    this.vars = new Vars();
    return this.vars;
  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class Sources {

    protected List<Path> paths = new ArrayList<>();

    public Path createPath() {
      final Path result = new Path();
      paths.add(result);
      return result;
    }

    @Data
    public static class Path {
      private String value = "";

      public void addText(final String text) {
        this.value += GetUtils.ensureNonNull(text, "");
      }
    }

  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class ConfigFiles extends Sources {

  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class ExcludeFolders {

    private List<Folder> folders = new ArrayList<>();

    public Folder createFolder() {
      final Folder result = new Folder();
      this.folders.add(result);
      return result;
    }

    @Data
    public static class Folder {
      private String path = "";

      public void addText(final String text) {
        this.path = GetUtils.ensureNonNull(text, "");
      }
    }
  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class ExcludeExtensions extends Extensions {

  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class Extensions {
    protected final List<Extension> listExtensions = new ArrayList<>();

    public Extension createExtension() {
      final Extension result = new Extension();
      this.listExtensions.add(result);
      return result;
    }

    @Data
    public static class Extension {
      private String name = "";

      public void addText(final String text) {
        this.name += GetUtils.ensureNonNull(text, "");
      }
    }
  }

  @Data
  @EqualsAndHashCode(callSuper = false)
  public static class Vars {
    private List<Var> listVars = new ArrayList<>();

    public Var createVar() {
      final Var result = new Var();
      this.listVars.add(result);
      return result;
    }

    @Data
    @EqualsAndHashCode(callSuper = false)
    public static class Var {
      private String name = "";
      private String value = "";

      public void addText(final String text) {
        this.value += text;
      }
    }
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ActionPreprocessorExtensionHandler.java
================================================
package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.extension.PreprocessorExtension;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.util.Locale;

public class ActionPreprocessorExtensionHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/EA:";

  @Override
  public String getDescription() {
    return "class for action directives (must be in classpath with default constructor)";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String tail = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!tail.isEmpty()) {
        final PreprocessorExtension preprocessorExtension =
            PreprocessorUtils.findAndInstantiatePreprocessorExtensionForClassName(tail);
        context.addPreprocessorExtension(preprocessorExtension);
      }
      result = true;
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowMergeBlockLineHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * Enable merging of text lines found in //$""" and //$$""" into single text block
 * for processing by external processors.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 * @since 7.2.0
 */
public class AllowMergeBlockLineHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/B";

  @Override
  public String getDescription() {
    return "treat //$\"\"\" and //$$\"\"\" prefixed lines as single text block";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setAllowsBlocks(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowWhitespaceDirectiveHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * Allow spaces between comment and directive.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class AllowWhitespaceDirectiveHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/ES";

  @Override
  public String getDescription() {
    return "enable whitespace-tolerant mode between // and #";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setAllowWhitespaces(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CareForLastEolHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

public class CareForLastEolHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/N";

  @Override
  public String getDescription() {
    return "preserve last line EOL in output";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setCareForLastEol(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ClearTargetHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * The handler to process the key signals that the preprocessor must clear the
 * destination directory before preprocessing
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class ClearTargetHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/C";

  @Override
  public String getDescription() {
    return "clear target folder before preprocessing";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;
    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setClearTarget(true);
      result = true;
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CommandLineHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * The interface describes a command line key handler. It is not just a handler,
 * but it will be called for all met keys to recognize one to be processed.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public interface CommandLineHandler {

  /**
   * Get the key name for the handler
   *
   * @return the key name as a String, must not be null
   */
  String getKeyName();

  /**
   * Get the description of the key (it will be printed into the help text)
   *
   * @return the description as a String
   */
  String getDescription();

  /**
   * Process a command line key
   *
   * @param key     the command line key to be processed, must not be null
   * @param context the preprocessor context, must not be null
   * @return true if the key has been recognized and processed else false
   */
  boolean processCommandLineKey(String key, PreprocessorContext context);
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DestinationDirectoryHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;
import java.util.Locale;

/**
 * The handler for the output directory command line key
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class DestinationDirectoryHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/O:";

  @Override
  public String getDescription() {
    return "set destination folder (default " +
        PreprocessorContext.DEFAULT_DEST_DIRECTORY + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String name = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);
      if (!name.isEmpty()) {
        final String path = PreprocessorUtils.extractTail(ARG_NAME, key);
        context.setTarget(new File(path));
        result = true;
      }
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DontOverwriteSameContentHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * the Handler processes command to disable overriding of existing file if content the same.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 * @since 6.0.1
 */
public class DontOverwriteSameContentHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/Z";

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

  @Override
  public String getDescription() {
    return "skip writing target file if content unchanged";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setDontOverwriteSameContent(true);
      result = true;
    }

    return result;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludeFoldersHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;
import java.util.Locale;

/**
 * The Handler of subfolder names to be excluded from preprocessing, allows ANT pattern matching.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class ExcludeFoldersHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/ED:";

  @Override
  public String getDescription() {
    return "folders to exclude (ANT pattern, delimited by system path separator)";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String tail = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!tail.isEmpty()) {
        context.setExcludeFolders(PreprocessorUtils.splitForChar(tail, File.pathSeparatorChar));
        result = true;
      }
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludedFileExtensionsHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.util.Arrays;
import java.util.Locale;
import java.util.stream.Collectors;

/**
 * The handler for the excluded extension list (with comma)
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class ExcludedFileExtensionsHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/EF:";

  @Override
  public String getDescription() {
    return
        "comma-separated file extensions to exclude (default: " +
            String.join(",", PreprocessorContext.DEFAULT_EXCLUDED_EXTENSIONS) + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String extensions = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);
      if (!extensions.isEmpty()) {
        context.setExcludeExtensions(
            Arrays.stream(extensions.split(",")).map(String::trim).collect(Collectors.toList()));
        result = true;
      }
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/FileExtensionsHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.util.Arrays;
import java.util.Locale;
import java.util.stream.Collectors;

/**
 * The handler for the preprocessing file extension list (with comma)
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class FileExtensionsHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/F:";

  @Override
  public String getDescription() {
    return "comma-separated allowed extensions (default: " +
        String.join(",", PreprocessorContext.DEFAULT_PROCESSING_EXTENSIONS) + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String extensions = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!extensions.isEmpty()) {
        context.setExtensions(
            Arrays.stream(extensions.split("\\,")).map(String::trim).collect(Collectors.toList()));
        result = true;
      }
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableDefiningFileHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.expression.Expression;
import com.igormaznitsa.jcp.expression.Value;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;

/**
 * The handler for '@' prefixed files in the command string
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class GlobalVariableDefiningFileHandler implements CommandLineHandler {

  private static final String ARG_NAME = "@";

  @Override
  public String getDescription() {
    return "load global variables from file (path or @@expression)";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.charAt(0) == '@') {
      String stringRest = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (stringRest.isEmpty()) {
        throw context.makeException("Empty string", null);
      }

      File file;

      if (stringRest.charAt(0) == '@') {
        stringRest = PreprocessorUtils.extractTrimmedTail("@", stringRest);

        if (context.isVerbose()) {
          context.logForVerbose(
              "Global parameter file defined through expression '" + stringRest + '\'');
        }

        final Value resultValue = Expression.evalExpression(stringRest, context);

        final String fileName = resultValue.toString();
        file = new File(fileName);
      } else {
        file = new File(stringRest);
      }

      if (context.isVerbose()) {
        context.logForVerbose(
            "Reading global definition file [" + PreprocessorUtils.getFilePath(file) + "]  '" +
                stringRest + '\'');
      }
      if (file.isFile()) {
        context.registerConfigFile(file);
      } else {
        throw context.makeException(
            "Can't find the global definition file '" + PreprocessorUtils.getFilePath(file) + '\'',
            null);
      }

      result = true;
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.expression.Expression;
import com.igormaznitsa.jcp.expression.Value;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.util.Locale;

/**
 * The handler for global variables, it adds met global variables into the
 * internal storage
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class GlobalVariableHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/P:";

  @Override
  public String getDescription() {
    return "define global variable (e.g., /P:DEBUG=true; use $ for \" in CLI)";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {

      final String nameAndExpression = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!nameAndExpression.isEmpty()) {

        final String[] split = PreprocessorUtils.splitForEqualChar(nameAndExpression);
        if (split.length != 2) {
          throw context.makeException(
              "Illegal expression for directive '" + ARG_NAME + "' [" + nameAndExpression + ']',
              null);
        }

        final String value = split[0];
        final String expression = split[1];

        if (context.containsGlobalVariable(value)) {
          throw context.makeException("Duplicated global definition [" + value + ']', null);
        }

        final Value resultVal = Expression.evalExpression(expression, context);
        context.setGlobalVariable(value, resultVal);
        result = true;
      }
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/HelpHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import java.util.Locale;

/**
 * The handler processes a help command from the command string
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class HelpHandler implements CommandLineHandler {

  private static final String[] ARG_NAMES = new String[] {"/H", "/?", "-H", "-?"};

  @Override
  public String getDescription() {
    return "display preprocessor usage and directives info";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;
    if (!key.isEmpty()) {

      final String argUpperCase = key.trim().toUpperCase(Locale.ROOT);

      for (final String str : ARG_NAMES) {
        if (str.equals(argUpperCase)) {
          result = true;
          break;
        }
      }
    }
    return result;
  }

  @Override
  public String getKeyName() {
    final StringBuilder result = new StringBuilder();
    for (int li = 0; li < ARG_NAMES.length; li++) {
      if (li > 0) {
        result.append(',');
      }
      result.append(ARG_NAMES[li]);
    }
    return result.toString();
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/InCharsetHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.nio.charset.Charset;
import java.util.Locale;

/**
 * To set the input text character encoding
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class InCharsetHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/T:";

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

  @Override
  public String getDescription() {
    return "set input text file encoding (default: " +
        PreprocessorContext.DEFAULT_CHARSET + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {

    boolean result = false;

    if (key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String value = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!value.isEmpty() && Charset.isSupported(value)) {
        context.setSourceEncoding(Charset.forName(value));
        result = true;
      }
    }
    return result;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepAttributesHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * The handler keep file attributes of copied or generated files.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class KeepAttributesHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/A";

  @Override
  public String getDescription() {
    return "preserve original file attributes";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setKeepAttributes(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepCommentsHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import static com.igormaznitsa.jcp.context.CommentRemoverType.makeListOfAllRemoverIds;

import com.igormaznitsa.jcp.context.CommentRemoverType;
import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.util.Locale;

/**
 * The handler allows to choose keep comments mode.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 * @since 7.1.0
 */
public class KeepCommentsHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/M:";

  @Override
  public String getDescription() {
    return "set comment handling mode (e.g., /M:remove_c_style; allowed: true,false," +
        makeListOfAllRemoverIds() + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String tail = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      final CommentRemoverType mode;
      try {
        mode = PreprocessorUtils.findCommentRemoverForId(tail);
      } catch (IllegalArgumentException ex) {
        throw context.makeException(
            "Illegal keep comments mode '" + tail + "' in " + ARG_NAME +
                ", expected one of: true,false," +
                makeListOfAllRemoverIds(), null);
      }

      context.setKeepComments(mode);

      result = true;
    }
    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepLineHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * The handler processing the flag tells the preprocessor to be try to keep
 * non-executing lines of code as commented ones
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class KeepLineHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/K";

  @Override
  public String getDescription() {
    return "preserve line numbers, print unprocessed lines as comments";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setKeepLines(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/OutCharsetHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.nio.charset.Charset;
import java.util.Locale;

/**
 * To set the output text character encoding
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class OutCharsetHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/TT:";

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

  @Override
  public String getDescription() {
    return "set output text file encoding (default: " +
        PreprocessorContext.DEFAULT_CHARSET + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {

    boolean result = false;

    if (key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String value = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);

      if (!value.isEmpty()) {
        if (Charset.isSupported(value)) {
          context.setTargetEncoding(Charset.forName(value));
          result = true;
        }
      }
    }
    return result;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/PreserveIndentDirectiveHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * Preserve indent when removing line-prefixes "//$" and "//$$"
 */
public class PreserveIndentDirectiveHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/PI";

  @Override
  public String getDescription() {
    return "preserve indentation when removing //$ and //$$";
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(key)) {
      context.setPreserveIndents(true);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }

}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/RemoveCommentsHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import com.igormaznitsa.jcp.context.CommentRemoverType;
import com.igormaznitsa.jcp.context.PreprocessorContext;

/**
 * Processes the flag that clears all source files from the destination directory, stripping them even from within comments.
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class RemoveCommentsHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/R";

  @Override
  public String getDescription() {
    return "strip all comments in result files";
  }

  @Override
  public boolean processCommandLineKey(final String argument,
                                       final PreprocessorContext configurator) {
    boolean result = false;

    if (ARG_NAME.equalsIgnoreCase(argument)) {
      configurator.setKeepComments(CommentRemoverType.REMOVE_C_STYLE);
      result = true;
    }

    return result;
  }

  @Override
  public String getKeyName() {
    return ARG_NAME;
  }
}


================================================
FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/SourceDirectoryHandler.java
================================================
/*
 * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

package com.igormaznitsa.jcp.cmdline;

import static com.igormaznitsa.jcp.utils.PreprocessorUtils.extractTail;

import com.igormaznitsa.jcp.context.PreprocessorContext;
import com.igormaznitsa.jcp.utils.PreprocessorUtils;
import java.io.File;
import java.util.Arrays;
import java.util.Locale;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * The handler processing the key to set the source directory
 *
 * @author Igor Maznitsa (igor.maznitsa@igormaznitsa.com)
 */
public class SourceDirectoryHandler implements CommandLineHandler {

  private static final String ARG_NAME = "/I:";

  @Override
  public String getDescription() {
    return "set source folder for preprocessing (default: " +
        PreprocessorContext.DEFAULT_SOURCE_DIRECTORY + ')';
  }

  @Override
  public boolean processCommandLineKey(final String key, final PreprocessorContext context) {
    boolean result = false;

    if (!key.isEmpty() && key.toUpperCase(Locale.ROOT).startsWith(ARG_NAME)) {
      final String tail = PreprocessorUtils.extractTrimmedTail(ARG_NAME, key);
      if (!tail.isEmpty()) {
        context.setSources(
            Arrays.stream(extractTail(ARG_NAME, key).split(Pattern.quote(File.pathSep
Download .txt
gitextract_jyzsnnek/

├── .gitattributes
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       └── run-maven-tests.yml
├── .gitignore
├── .projectKnowledge/
│   ├── JCPreprocessor.mmd
│   └── documap.mmd
├── LICENSE
├── README.md
├── changelog.txt
├── jcp/
│   ├── pom.xml
│   └── src/
│       ├── assemble/
│       │   └── bundle.xml
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── igormaznitsa/
│       │   │           └── jcp/
│       │   │               ├── InfoHelper.java
│       │   │               ├── JcpPreprocessor.java
│       │   │               ├── ant/
│       │   │               │   └── PreprocessTask.java
│       │   │               ├── cmdline/
│       │   │               │   ├── ActionPreprocessorExtensionHandler.java
│       │   │               │   ├── AllowMergeBlockLineHandler.java
│       │   │               │   ├── AllowWhitespaceDirectiveHandler.java
│       │   │               │   ├── CareForLastEolHandler.java
│       │   │               │   ├── ClearTargetHandler.java
│       │   │               │   ├── CommandLineHandler.java
│       │   │               │   ├── DestinationDirectoryHandler.java
│       │   │               │   ├── DontOverwriteSameContentHandler.java
│       │   │               │   ├── ExcludeFoldersHandler.java
│       │   │               │   ├── ExcludedFileExtensionsHandler.java
│       │   │               │   ├── FileExtensionsHandler.java
│       │   │               │   ├── GlobalVariableDefiningFileHandler.java
│       │   │               │   ├── GlobalVariableHandler.java
│       │   │               │   ├── HelpHandler.java
│       │   │               │   ├── InCharsetHandler.java
│       │   │               │   ├── KeepAttributesHandler.java
│       │   │               │   ├── KeepCommentsHandler.java
│       │   │               │   ├── KeepLineHandler.java
│       │   │               │   ├── OutCharsetHandler.java
│       │   │               │   ├── PreserveIndentDirectiveHandler.java
│       │   │               │   ├── RemoveCommentsHandler.java
│       │   │               │   ├── SourceDirectoryHandler.java
│       │   │               │   ├── UnknownAsFalseHandler.java
│       │   │               │   └── VerboseHandler.java
│       │   │               ├── containers/
│       │   │               │   ├── FileInfoContainer.java
│       │   │               │   ├── PreprocessingFlag.java
│       │   │               │   └── TextFileDataContainer.java
│       │   │               ├── context/
│       │   │               │   ├── CommentRemoverType.java
│       │   │               │   ├── CommentTextProcessor.java
│       │   │               │   ├── EnvironmentVariableProcessor.java
│       │   │               │   ├── ExecutionAllowable.java
│       │   │               │   ├── JCPSpecialVariableProcessor.java
│       │   │               │   ├── PreprocessingState.java
│       │   │               │   ├── PreprocessorContext.java
│       │   │               │   ├── PreprocessorContextAware.java
│       │   │               │   └── SpecialVariableProcessor.java
│       │   │               ├── directives/
│       │   │               │   ├── AbortDirectiveHandler.java
│       │   │               │   ├── AbstractDirectiveHandler.java
│       │   │               │   ├── ActionDirectiveHandler.java
│       │   │               │   ├── AfterDirectiveProcessingBehaviour.java
│       │   │               │   ├── BreakDirectiveHandler.java
│       │   │               │   ├── CommentNextLineDirectiveHandler.java
│       │   │               │   ├── ContinueDirectiveHandler.java
│       │   │               │   ├── DefineDirectiveHandler.java
│       │   │               │   ├── DefinelDirectiveHandler.java
│       │   │               │   ├── DirectiveArgumentType.java
│       │   │               │   ├── EchoDirectiveHandler.java
│       │   │               │   ├── ElseDirectiveHandler.java
│       │   │               │   ├── EndDirectiveHandler.java
│       │   │               │   ├── EndIfDirectiveHandler.java
│       │   │               │   ├── ErrorDirectiveHandler.java
│       │   │               │   ├── ExcludeIfDirectiveHandler.java
│       │   │               │   ├── ExitDirectiveHandler.java
│       │   │               │   ├── ExitIfDirectiveHandler.java
│       │   │               │   ├── FlushDirectiveHandler.java
│       │   │               │   ├── GlobalDirectiveHandler.java
│       │   │               │   ├── GlobalElseDirectiveHandler.java
│       │   │               │   ├── GlobalEndIfDirectiveHandler.java
│       │   │               │   ├── GlobalIfDirectiveHandler.java
│       │   │               │   ├── IfDefDirectiveHandler.java
│       │   │               │   ├── IfDefinedDirectiveHandler.java
│       │   │               │   ├── IfDirectiveHandler.java
│       │   │               │   ├── IfNDefDirectiveHandler.java
│       │   │               │   ├── IncludeDirectiveHandler.java
│       │   │               │   ├── LocalDirectiveHandler.java
│       │   │               │   ├── MsgDirectiveHandler.java
│       │   │               │   ├── NoAutoFlushHandler.java
│       │   │               │   ├── OutDisabledDirectiveHandler.java
│       │   │               │   ├── OutEnabledDirectiveHandler.java
│       │   │               │   ├── OutNameDirectiveHandler.java
│       │   │               │   ├── OutdirDirectiveHandler.java
│       │   │               │   ├── PostfixDirectiveHandler.java
│       │   │               │   ├── PrefixDirectiveHandler.java
│       │   │               │   ├── UndefDirectiveHandler.java
│       │   │               │   ├── WarningDirectiveHandler.java
│       │   │               │   └── WhileDirectiveHandler.java
│       │   │               ├── exceptions/
│       │   │               │   ├── FilePositionInfo.java
│       │   │               │   └── PreprocessorException.java
│       │   │               ├── expression/
│       │   │               │   ├── Expression.java
│       │   │               │   ├── ExpressionItem.java
│       │   │               │   ├── ExpressionItemPriority.java
│       │   │               │   ├── ExpressionItemType.java
│       │   │               │   ├── ExpressionParser.java
│       │   │               │   ├── ExpressionTree.java
│       │   │               │   ├── ExpressionTreeElement.java
│       │   │               │   ├── Value.java
│       │   │               │   ├── ValueType.java
│       │   │               │   ├── Variable.java
│       │   │               │   ├── functions/
│       │   │               │   │   ├── AbstractFunction.java
│       │   │               │   │   ├── AbstractStrConverter.java
│       │   │               │   │   ├── FunctionABS.java
│       │   │               │   │   ├── FunctionBINFILE.java
│       │   │               │   │   ├── FunctionDefinedByUser.java
│       │   │               │   │   ├── FunctionESC.java
│       │   │               │   │   ├── FunctionEVALFILE.java
│       │   │               │   │   ├── FunctionIS.java
│       │   │               │   │   ├── FunctionISSUBSTR.java
│       │   │               │   │   ├── FunctionROUND.java
│       │   │               │   │   ├── FunctionSTR2CSV.java
│       │   │               │   │   ├── FunctionSTR2GO.java
│       │   │               │   │   ├── FunctionSTR2INT.java
│       │   │               │   │   ├── FunctionSTR2JAVA.java
│       │   │               │   │   ├── FunctionSTR2JS.java
│       │   │               │   │   ├── FunctionSTR2JSON.java
│       │   │               │   │   ├── FunctionSTR2WEB.java
│       │   │               │   │   ├── FunctionSTR2XML.java
│       │   │               │   │   ├── FunctionSTRLEN.java
│       │   │               │   │   ├── FunctionTRIMLINES.java
│       │   │               │   │   └── xml/
│       │   │               │   │       ├── AbstractXMLFunction.java
│       │   │               │   │       ├── FunctionXML_ATTR.java
│       │   │               │   │       ├── FunctionXML_GET.java
│       │   │               │   │       ├── FunctionXML_LIST.java
│       │   │               │   │       ├── FunctionXML_NAME.java
│       │   │               │   │       ├── FunctionXML_OPEN.java
│       │   │               │   │       ├── FunctionXML_ROOT.java
│       │   │               │   │       ├── FunctionXML_SIZE.java
│       │   │               │   │       ├── FunctionXML_TEXT.java
│       │   │               │   │       ├── FunctionXML_XELEMENT.java
│       │   │               │   │       ├── FunctionXML_XLIST.java
│       │   │               │   │       └── NodeContainer.java
│       │   │               │   └── operators/
│       │   │               │       ├── AbstractOperator.java
│       │   │               │       ├── OperatorADD.java
│       │   │               │       ├── OperatorAND.java
│       │   │               │       ├── OperatorDIV.java
│       │   │               │       ├── OperatorEQU.java
│       │   │               │       ├── OperatorGREAT.java
│       │   │               │       ├── OperatorGREATEQU.java
│       │   │               │       ├── OperatorLESS.java
│       │   │               │       ├── OperatorLESSEQU.java
│       │   │               │       ├── OperatorMOD.java
│       │   │               │       ├── OperatorMUL.java
│       │   │               │       ├── OperatorNOT.java
│       │   │               │       ├── OperatorNOTEQU.java
│       │   │               │       ├── OperatorOR.java
│       │   │               │       ├── OperatorSUB.java
│       │   │               │       └── OperatorXOR.java
│       │   │               ├── extension/
│       │   │               │   ├── LogPreprocessorExtension.java
│       │   │               │   └── PreprocessorExtension.java
│       │   │               ├── gradle/
│       │   │               │   ├── JcpGradlePlugin.java
│       │   │               │   └── JcpTask.java
│       │   │               ├── logger/
│       │   │               │   ├── PreprocessorLogger.java
│       │   │               │   └── SystemOutLogger.java
│       │   │               ├── maven/
│       │   │               │   ├── MavenPropertiesImporter.java
│       │   │               │   └── PreprocessMojo.java
│       │   │               ├── removers/
│       │   │               │   ├── AbstractCommentRemover.java
│       │   │               │   ├── CStyleCommentRemover.java
│       │   │               │   ├── JcpCommentLineRemover.java
│       │   │               │   └── JustCopyRemover.java
│       │   │               └── utils/
│       │   │                   ├── AntPathMatcher.java
│       │   │                   ├── ArrayUtils.java
│       │   │                   ├── GetUtils.java
│       │   │                   ├── IOUtils.java
│       │   │                   ├── PreprocessorUtils.java
│       │   │                   └── ResettablePrinter.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── gradle-plugins/
│       │       │       └── com.igormaznitsa.jcp.properties
│       │       ├── com/
│       │       │   └── igormaznitsa/
│       │       │       └── jcp/
│       │       │           └── ant/
│       │       │               ├── antlib.xml
│       │       │               └── tasks.properties
│       │       └── jcpversion.properties
│       ├── site/
│       │   ├── markdown/
│       │   │   ├── examples/
│       │   │   │   └── hello-world.md
│       │   │   ├── index.md
│       │   │   └── usage.md
│       │   └── site.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── igormaznitsa/
│           │           └── jcp/
│           │               ├── AbstractMockPreprocessorContextTest.java
│           │               ├── AbstractSpyPreprocessorContextTest.java
│           │               ├── JCPreprocessorTest.java
│           │               ├── TestUtils.java
│           │               ├── ant/
│           │               │   └── PreprocessTaskTest.java
│           │               ├── cmdline/
│           │               │   ├── AbstractCommandLineHandlerTest.java
│           │               │   ├── ActionPreprocessorExtensionHandlerTest.java
│           │               │   ├── AllowMergeBlockLineHandlerTest.java
│           │               │   ├── AllowWhitespaceDirectiveHandlerTest.java
│           │               │   ├── CareForLastEolHandlerTest.java
│           │               │   ├── ClearTargetFolderHandlerTest.java
│           │               │   ├── CommentRemoverTypeHandlerTest.java
│           │               │   ├── DestinationDirectoryHandlerTest.java
│           │               │   ├── DontOverwriteSameContentHandlerTest.java
│           │               │   ├── ExcludeFoldersHandlerTest.java
│           │               │   ├── ExcludedFileExtensionsHandlerTest.java
│           │               │   ├── FileExtensionsHandlerTest.java
│           │               │   ├── GlobalVariableDefiningFileHandlerTest.java
│           │               │   ├── GlobalVariableHandlerTest.java
│           │               │   ├── HelpHandlerTest.java
│           │               │   ├── InCharsetHandlerTest.java
│           │               │   ├── KeepLineHandlerTest.java
│           │               │   ├── OutCharsetHandlerTest.java
│           │               │   ├── PreserveIndentDirectiveHandlerTest.java
│           │               │   ├── RemoveCommentsHandlerTest.java
│           │               │   ├── SourceDirectoryHandlerTest.java
│           │               │   ├── UnknownAsFalseHandlerTest.java
│           │               │   └── VerboseHandlerTest.java
│           │               ├── context/
│           │               │   ├── EnvironmentVariableProcessorTest.java
│           │               │   ├── JCPSpecialVariableProcessorTest.java
│           │               │   ├── PreprocessorContextTest.java
│           │               │   └── ProcessContentWithSpacesAndWithoutTest.java
│           │               ├── directives/
│           │               │   ├── AbortDirectiveHandlerTest.java
│           │               │   ├── AbstractDirectiveHandlerAcceptanceTest.java
│           │               │   ├── AbstractDirectiveHandlerTest.java
│           │               │   ├── ActionDirectiveHandlerTest.java
│           │               │   ├── CommentNextLineDirectiveHandlerTest.java
│           │               │   ├── DefineDirectiveHandlerTest.java
│           │               │   ├── DefinelDirectiveHandlerTest.java
│           │               │   ├── EchoDirectiveHandlerTest.java
│           │               │   ├── ErrorDirectiveHandlerTest.java
│           │               │   ├── ExcludeIfDirectiveHandlerTest.java
│           │               │   ├── ExitDirectiveHandlerTest.java
│           │               │   ├── ExitIfDirectiveHandlerTest.java
│           │               │   ├── FlushDirectiveHandlerTest.java
│           │               │   ├── GlobalDirectiveHandlerTest.java
│           │               │   ├── GlobalIfElseEndifTest.java
│           │               │   ├── IfDefDirectiveHandlerTest.java
│           │               │   ├── IfDefinedDirectiveHandlerTest.java
│           │               │   ├── IfElseEndifDirectiveHandlerTest.java
│           │               │   ├── IfElseEndifDirectiveWithKeepLinesHandlerTest.java
│           │               │   ├── IfNDefDirectiveHandlerTest.java
│           │               │   ├── IncludeDirectiveHandlerTest.java
│           │               │   ├── LinesNotMatchException.java
│           │               │   ├── LocalDirectiveHandlerTest.java
│           │               │   ├── MsgDirectiveHandlerTest.java
│           │               │   ├── NoAutoFlushDirectiveHandlerTest.java
│           │               │   ├── OnlySpacesTest.java
│           │               │   ├── OutDisabledDirectiveHandlerTest.java
│           │               │   ├── OutEnabledDirectiveHandlerTest.java
│           │               │   ├── OutNameDirectiveHandlerTest.java
│           │               │   ├── OutdirDirectiveHandlerTest.java
│           │               │   ├── PrefixPostfixDirectiveHandlerTest.java
│           │               │   ├── SpecVarsROTest.java
│           │               │   ├── SpecialDirectivesBlockTest.java
│           │               │   ├── SpecialDirectivesTest.java
│           │               │   ├── UndefDirectiveHandlerTest.java
│           │               │   ├── VariablePair.java
│           │               │   ├── WarningDirectiveHandlerTest.java
│           │               │   └── WhileContinueBreakEndDirectiveHandlerTest.java
│           │               ├── exceptions/
│           │               │   └── PreprocessorExceptionTest.java
│           │               ├── expression/
│           │               │   ├── ExpressionParserTest.java
│           │               │   ├── ExpressionTest.java
│           │               │   ├── ExpressionTreeTest.java
│           │               │   ├── functions/
│           │               │   │   ├── AbstractFunctionTest.java
│           │               │   │   ├── FunctionABSTest.java
│           │               │   │   ├── FunctionBINFILETest.java
│           │               │   │   ├── FunctionDefinedByUserTest.java
│           │               │   │   ├── FunctionESCTest.java
│           │               │   │   ├── FunctionEVALFILETest.java
│           │               │   │   ├── FunctionISSUBSTRTest.java
│           │               │   │   ├── FunctionISTest.java
│           │               │   │   ├── FunctionROUNDTest.java
│           │               │   │   ├── FunctionSTR2CSVTest.java
│           │               │   │   ├── FunctionSTR2GOTest.java
│           │               │   │   ├── FunctionSTR2INTTest.java
│           │               │   │   ├── FunctionSTR2JAVATest.java
│           │               │   │   ├── FunctionSTR2JSONTest.java
│           │               │   │   ├── FunctionSTR2JSTest.java
│           │               │   │   ├── FunctionSTR2WEBTest.java
│           │               │   │   ├── FunctionSTR2XMLTest.java
│           │               │   │   ├── FunctionSTRLENTest.java
│           │               │   │   ├── FunctionTRIMLINESTest.java
│           │               │   │   └── xml/
│           │               │   │       ├── AbstractFunctionXMLTest.java
│           │               │   │       ├── FunctionXML_ATTRTest.java
│           │               │   │       ├── FunctionXML_GETTest.java
│           │               │   │       ├── FunctionXML_LISTTest.java
│           │               │   │       ├── FunctionXML_NAMETest.java
│           │               │   │       ├── FunctionXML_OPENTest.java
│           │               │   │       ├── FunctionXML_ROOTTest.java
│           │               │   │       ├── FunctionXML_SIZETest.java
│           │               │   │       ├── FunctionXML_TEXTTest.java
│           │               │   │       ├── FunctionXML_XELEMENTTest.java
│           │               │   │       └── FunctionXML_XLISTTest.java
│           │               │   └── operators/
│           │               │       ├── AbstractOperatorTest.java
│           │               │       ├── OperatorADDTest.java
│           │               │       ├── OperatorANDTest.java
│           │               │       ├── OperatorDIVTest.java
│           │               │       ├── OperatorEQUTest.java
│           │               │       ├── OperatorGREATEQUTest.java
│           │               │       ├── OperatorGREATTest.java
│           │               │       ├── OperatorLESSEQUTest.java
│           │               │       ├── OperatorLESSTest.java
│           │               │       ├── OperatorMODTest.java
│           │               │       ├── OperatorMULTest.java
│           │               │       ├── OperatorNOTEQUTest.java
│           │               │       ├── OperatorNOTTest.java
│           │               │       ├── OperatorORTest.java
│           │               │       ├── OperatorSUBTest.java
│           │               │       └── OperatorXORTest.java
│           │               ├── maven/
│           │               │   ├── MavenPropertiesImporterTest.java
│           │               │   └── PreprocessMojoTest.java
│           │               ├── removers/
│           │               │   ├── AbstractCommentRemoverTest.java
│           │               │   ├── CStyleCommentsRemoverTest.java
│           │               │   ├── JcpCommentLineRemoverTest.java
│           │               │   └── JustCopyCommentsRemoverTest.java
│           │               ├── usecases/
│           │               │   ├── AbortTest.java
│           │               │   ├── AbstractUseCaseTest.java
│           │               │   ├── BinFileTest.java
│           │               │   ├── DefUndefTest.java
│           │               │   ├── EvalFileTest.java
│           │               │   ├── ExternalGlobalDefFileTest.java
│           │               │   ├── GenerationTest.java
│           │               │   ├── IncludeAndExitTest.java
│           │               │   ├── InsidePreprocessingTest.java
│           │               │   ├── PrefixPostfixTest.java
│           │               │   ├── PreserveIndentOffTest.java
│           │               │   ├── PreserveIndentOnTest.java
│           │               │   ├── SimpleTest.java
│           │               │   ├── SpacesBeforeDirectivesNotAllowedTest.java
│           │               │   ├── SpacesBeforeDirectivesTest.java
│           │               │   ├── StaticSiteTest.java
│           │               │   ├── Str2JavaTest.java
│           │               │   ├── StringDirectiveTest.java
│           │               │   ├── TextBufferVariablesTest.java
│           │               │   ├── UnknownVarAsFalseTest.java
│           │               │   ├── UsePrefixAsMultilineTest.java
│           │               │   └── UserFunctionTest.java
│           │               └── utils/
│           │                   ├── PreprocessorUtilsTest.java
│           │                   └── antpathmatcher/
│           │                       └── AntPathMatcherTest.java
│           └── resources/
│               └── com/
│                   └── igormaznitsa/
│                       └── jcp/
│                           ├── cmdline/
│                           │   └── global_variable_def.txt
│                           ├── context/
│                           │   ├── spacedFile.txt
│                           │   └── standardFile.txt
│                           ├── directives/
│                           │   ├── directive_abort.txt
│                           │   ├── directive_action.txt
│                           │   ├── directive_comment_next_line.txt
│                           │   ├── directive_define.txt
│                           │   ├── directive_definel.txt
│                           │   ├── directive_echo.txt
│                           │   ├── directive_error.txt
│                           │   ├── directive_excludeif.txt
│                           │   ├── directive_exit.txt
│                           │   ├── directive_exitif.txt
│                           │   ├── directive_global.txt
│                           │   ├── directive_globalifelseendif.txt
│                           │   ├── directive_globalifelseendif2.txt
│                           │   ├── directive_if_else_endif.txt
│                           │   ├── directive_if_else_endif_with_keptlines.txt
│                           │   ├── directive_ifdef.txt
│                           │   ├── directive_ifdefined.txt
│                           │   ├── directive_ifndef.txt
│                           │   ├── directive_include.txt
│                           │   ├── directive_include2.txt
│                           │   ├── directive_include3.txt
│                           │   ├── directive_local.txt
│                           │   ├── directive_msg.txt
│                           │   ├── directive_outdir.txt
│                           │   ├── directive_outdisabled.txt
│                           │   ├── directive_outenabled.txt
│                           │   ├── directive_outname.txt
│                           │   ├── directive_prefixpostfix.txt
│                           │   ├── directive_special.txt
│                           │   ├── directive_special_block.txt
│                           │   ├── directive_undef.txt
│                           │   ├── directive_warning.txt
│                           │   ├── directive_while_continue_break_end.txt
│                           │   ├── only_spaces.txt
│                           │   └── specvars_ro.txt
│                           ├── exceptions/
│                           │   ├── wrong_bracket.txt
│                           │   ├── wrong_bracket_closing.txt
│                           │   └── wrong_bracket_include.txt
│                           ├── expression/
│                           │   └── functions/
│                           │       ├── eval/
│                           │       │   ├── TestBin.txt
│                           │       │   ├── TestBinLong.txt
│                           │       │   ├── TestEval.java
│                           │       │   └── TestEvalWithIncluded.java
│                           │       └── xml/
│                           │           ├── noxml.txt
│                           │           └── test.xml
│                           ├── global_error_at.txt
│                           ├── global_ok.txt
│                           ├── maven/
│                           │   └── test.pom.xml
│                           ├── removers/
│                           │   └── java/
│                           │       ├── etalon.etl
│                           │       └── test_java.ppp
│                           ├── usecases/
│                           │   ├── AbortTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── text.txt
│                           │   │       ├── text1.txt
│                           │   │       ├── text2.txt
│                           │   │       └── text3.txt
│                           │   ├── BinFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── DefUndefTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── EvalFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── newfolder/
│                           │   │   │       ├── file1.txt
│                           │   │   │       └── file2.txt
│                           │   │   └── src/
│                           │   │       ├── _file1.txt
│                           │   │       ├── _file2.txt
│                           │   │       └── text.txt
│                           │   ├── ExternalGlobalDefFileTest/
│                           │   │   ├── etl/
│                           │   │   │   └── test.txt
│                           │   │   ├── list.cfg
│                           │   │   └── src/
│                           │   │       └── test.txt
│                           │   ├── GenerationTest/
│                           │   │   ├── etl/
│                           │   │   │   ├── file1.ttt
│                           │   │   │   ├── file2.ttt
│                           │   │   │   └── file3.ttt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── IncludeAndExitTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── text.txt
│                           │   │       ├── text1.txt
│                           │   │       └── text2.txt
│                           │   ├── InsidePreprocessingTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── some.txt
│                           │   │       └── text.txt
│                           │   ├── PrefixPostfixTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── PreserveIndentOffTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── PreserveIndentOnTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── SimpleTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── SpacesBeforeDirectivesNotAllowedTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── SpacesBeforeDirectivesTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── StaticSiteTest/
│                           │   │   ├── etl/
│                           │   │   │   ├── cmn/
│                           │   │   │   │   ├── sendfeedback.phtml
│                           │   │   │   │   ├── styles.css
│                           │   │   │   │   └── styles2.css
│                           │   │   │   ├── eng/
│                           │   │   │   │   ├── end.txt
│                           │   │   │   │   ├── gpage_airaggression.htm
│                           │   │   │   │   ├── gpage_airboil.htm
│                           │   │   │   │   ├── gpage_aneks_ny2006.htm
│                           │   │   │   │   ├── gpage_blazinggears.htm
│                           │   │   │   │   ├── gpage_caspianmonster.htm
│                           │   │   │   │   ├── gpage_castleassault.htm
│                           │   │   │   │   ├── gpage_cockroach.htm
│                           │   │   │   │   ├── gpage_coconutsfall.htm
│                           │   │   │   │   ├── gpage_conecone.htm
│                           │   │   │   │   ├── gpage_copterbomber.htm
│                           │   │   │   │   ├── gpage_drunkman.htm
│                           │   │   │   │   ├── gpage_firingline.htm
│                           │   │   │   │   ├── gpage_fisher.htm
│                           │   │   │   │   ├── gpage_fruitmania.htm
│                           │   │   │   │   ├── gpage_hardday.htm
│                           │   │   │   │   ├── gpage_hunt.htm
│                           │   │   │   │   ├── gpage_icegifts.htm
│                           │   │   │   │   ├── gpage_ironstream.htm
│                           │   │   │   │   ├── gpage_kalah.htm
│                           │   │   │   │   ├── gpage_kickkick.htm
│                           │   │   │   │   ├── gpage_lifesaver.htm
│                           │   │   │   │   ├── gpage_livebridge.htm
│                           │   │   │   │   ├── gpage_mobilechase.htm
│                           │   │   │   │   ├── gpage_mobilesheriff.htm
│                           │   │   │   │   ├── gpage_mtvpaparazzo.htm
│                           │   │   │   │   ├── gpage_mtvpillow.htm
│                           │   │   │   │   ├── gpage_mtvpuzzle.htm
│                           │   │   │   │   ├── gpage_mtvstage.htm
│                           │   │   │   │   ├── gpage_nimble.htm
│                           │   │   │   │   ├── gpage_opthunderclap.htm
│                           │   │   │   │   ├── gpage_oysterbank.htm
│                           │   │   │   │   ├── gpage_papaninsquest.htm
│                           │   │   │   │   ├── gpage_ravenscheese.htm
│                           │   │   │   │   ├── gpage_searoad.htm
│                           │   │   │   │   ├── gpage_searovers.htm
│                           │   │   │   │   ├── gpage_slider_alpop.htm
│                           │   │   │   │   ├── gpage_smashingkick.htm
│                           │   │   │   │   ├── gpage_smscat.htm
│                           │   │   │   │   ├── gpage_spiders.htm
│                           │   │   │   │   ├── gpage_starharbor.htm
│                           │   │   │   │   ├── gpage_strangehunt.htm
│                           │   │   │   │   ├── gpage_tastydish.htm
│                           │   │   │   │   ├── gpage_vineyard.htm
│                           │   │   │   │   ├── gpage_waterway.htm
│                           │   │   │   │   ├── gpage_wildballs.htm
│                           │   │   │   │   ├── gpage_wildroad.htm
│                           │   │   │   │   ├── menu1_about.htm
│                           │   │   │   │   ├── menu1_contacts.htm
│                           │   │   │   │   ├── menu1_job.htm
│                           │   │   │   │   ├── menu1_news.htm
│                           │   │   │   │   ├── menu1_partnership.htm
│                           │   │   │   │   ├── menu2_all.htm
│                           │   │   │   │   ├── menu2_arcade.htm
│                           │   │   │   │   ├── menu2_clientserver.htm
│                           │   │   │   │   ├── menu2_erotic.htm
│                           │   │   │   │   ├── menu2_fighting.htm
│                           │   │   │   │   ├── menu2_gambling.htm
│                           │   │   │   │   ├── menu2_logic.htm
│                           │   │   │   │   ├── menu2_multiplayer.htm
│                           │   │   │   │   ├── menu2_quest.htm
│                           │   │   │   │   ├── menu2_racing.htm
│                           │   │   │   │   ├── menu2_shooter.htm
│                           │   │   │   │   ├── menu2_sport.htm
│                           │   │   │   │   ├── menu3_appsall.htm
│                           │   │   │   │   ├── send_error.html
│                           │   │   │   │   └── send_ok.html
│                           │   │   │   ├── games/
│                           │   │   │   │   └── games2003_2006.html
│                           │   │   │   ├── index.htm
│                           │   │   │   ├── loadpages/
│                           │   │   │   │   ├── muzon_AirBoil.htm
│                           │   │   │   │   └── muzon_StarHarbor.htm
│                           │   │   │   ├── rus/
│                           │   │   │   │   ├── gpage_airaggression.htm
│                           │   │   │   │   ├── gpage_airboil.htm
│                           │   │   │   │   ├── gpage_aneks_ny2006.htm
│                           │   │   │   │   ├── gpage_blazinggears.htm
│                           │   │   │   │   ├── gpage_caspianmonster.htm
│                           │   │   │   │   ├── gpage_castleassault.htm
│                           │   │   │   │   ├── gpage_cockroach.htm
│                           │   │   │   │   ├── gpage_coconutsfall.htm
│                           │   │   │   │   ├── gpage_conecone.htm
│                           │   │   │   │   ├── gpage_copterbomber.htm
│                           │   │   │   │   ├── gpage_drunkman.htm
│                           │   │   │   │   ├── gpage_firingline.htm
│                           │   │   │   │   ├── gpage_fisher.htm
│                           │   │   │   │   ├── gpage_fruitmania.htm
│                           │   │   │   │   ├── gpage_hardday.htm
│                           │   │   │   │   ├── gpage_hunt.htm
│                           │   │   │   │   ├── gpage_icegifts.htm
│                           │   │   │   │   ├── gpage_ironstream.htm
│                           │   │   │   │   ├── gpage_kalah.htm
│                           │   │   │   │   ├── gpage_kickkick.htm
│                           │   │   │   │   ├── gpage_lifesaver.htm
│                           │   │   │   │   ├── gpage_livebridge.htm
│                           │   │   │   │   ├── gpage_mobilechase.htm
│                           │   │   │   │   ├── gpage_mobilesheriff.htm
│                           │   │   │   │   ├── gpage_mtvpaparazzo.htm
│                           │   │   │   │   ├── gpage_mtvpillow.htm
│                           │   │   │   │   ├── gpage_mtvpuzzle.htm
│                           │   │   │   │   ├── gpage_mtvstage.htm
│                           │   │   │   │   ├── gpage_nimble.htm
│                           │   │   │   │   ├── gpage_opthunderclap.htm
│                           │   │   │   │   ├── gpage_oysterbank.htm
│                           │   │   │   │   ├── gpage_papaninsquest.htm
│                           │   │   │   │   ├── gpage_ravenscheese.htm
│                           │   │   │   │   ├── gpage_searoad.htm
│                           │   │   │   │   ├── gpage_searovers.htm
│                           │   │   │   │   ├── gpage_slider_alpop.htm
│                           │   │   │   │   ├── gpage_smashingkick.htm
│                           │   │   │   │   ├── gpage_smscat.htm
│                           │   │   │   │   ├── gpage_spiders.htm
│                           │   │   │   │   ├── gpage_starharbor.htm
│                           │   │   │   │   ├── gpage_strangehunt.htm
│                           │   │   │   │   ├── gpage_tastydish.htm
│                           │   │   │   │   ├── gpage_vineyard.htm
│                           │   │   │   │   ├── gpage_waterway.htm
│                           │   │   │   │   ├── gpage_wildballs.htm
│                           │   │   │   │   ├── gpage_wildroad.htm
│                           │   │   │   │   ├── menu1_about.htm
│                           │   │   │   │   ├── menu1_contacts.htm
│                           │   │   │   │   ├── menu1_job.htm
│                           │   │   │   │   ├── menu1_news.htm
│                           │   │   │   │   ├── menu1_partnership.htm
│                           │   │   │   │   ├── menu2_all.htm
│                           │   │   │   │   ├── menu2_arcade.htm
│                           │   │   │   │   ├── menu2_clientserver.htm
│                           │   │   │   │   ├── menu2_erotic.htm
│                           │   │   │   │   ├── menu2_fighting.htm
│                           │   │   │   │   ├── menu2_gambling.htm
│                           │   │   │   │   ├── menu2_logic.htm
│                           │   │   │   │   ├── menu2_multiplayer.htm
│                           │   │   │   │   ├── menu2_quest.htm
│                           │   │   │   │   ├── menu2_racing.htm
│                           │   │   │   │   ├── menu2_shooter.htm
│                           │   │   │   │   ├── menu2_sport.htm
│                           │   │   │   │   ├── menu3_appsall.htm
│                           │   │   │   │   ├── send_error.html
│                           │   │   │   │   └── send_ok.html
│                           │   │   │   └── wap/
│                           │   │   │       ├── index.wml
│                           │   │   │       └── logo.wbmp
│                           │   │   └── src/
│                           │   │       ├── about.htm
│                           │   │       ├── channels.xml
│                           │   │       ├── cmn/
│                           │   │       │   ├── sendfeedback.phtml
│                           │   │       │   ├── styles.css
│                           │   │       │   └── styles2.css
│                           │   │       ├── contacts.htm
│                           │   │       ├── devices.xml
│                           │   │       ├── eng/
│                           │   │       │   ├── send_error.html
│                           │   │       │   └── send_ok.html
│                           │   │       ├── gamelist.htm
│                           │   │       ├── gameref.htm
│                           │   │       ├── games/
│                           │   │       │   └── games2003_2006.html
│                           │   │       ├── games.htm
│                           │   │       ├── games.xml
│                           │   │       ├── hotnews.htm
│                           │   │       ├── hotnews.xml
│                           │   │       ├── index.htm
│                           │   │       ├── job.htm
│                           │   │       ├── loadpages/
│                           │   │       │   ├── muzon_AirBoil.htm
│                           │   │       │   └── muzon_StarHarbor.htm
│                           │   │       ├── main.htm
│                           │   │       ├── news.htm
│                           │   │       ├── news.xml
│                           │   │       ├── partnership.htm
│                           │   │       ├── rus/
│                           │   │       │   ├── send_error.html
│                           │   │       │   └── send_ok.html
│                           │   │       ├── site.xml
│                           │   │       └── wap/
│                           │   │           ├── index.wml
│                           │   │           └── logo.wbmp
│                           │   ├── Str2JavaTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       ├── body.txt
│                           │   │       ├── str.txt
│                           │   │       └── text.txt
│                           │   ├── StringDirectiveTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── TextBufferVariablesTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   ├── UnknownVarAsFalseTest/
│                           │   │   ├── etl/
│                           │   │   │   └── body.txt
│                           │   │   └── src/
│                           │   │       └── body.txt
│                           │   ├── UsePrefixAsMultilineTest/
│                           │   │   ├── etl/
│                           │   │   │   └── text.txt
│                           │   │   └── src/
│                           │   │       └── text.txt
│                           │   └── UserFunctionTest/
│                           │       ├── etl/
│                           │       │   └── text.txt
│                           │       └── src/
│                           │           └── text.txt
│                           └── utils/
│                               └── somefile.txt
├── jcp-tests/
│   ├── extlibs/
│   │   └── gradle-tooling-api-5.1.jar
│   ├── jcp-test-android/
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── android/
│   │   │       │           └── it/
│   │   │       │               └── igormaznitsa/
│   │   │       │                   └── com/
│   │   │       │                       └── jcpandroid/
│   │   │       │                           └── ExampleInstrumentedTest.java
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── java/
│   │   │       │   │   └── android/
│   │   │       │   │       └── it/
│   │   │       │   │           └── igormaznitsa/
│   │   │       │   │               └── com/
│   │   │       │   │                   └── jcpandroid/
│   │   │       │   │                       ├── MainActivity.java
│   │   │       │   │                       └── utils/
│   │   │       │   │                           └── Utils.java
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── ic_launcher_background.xml
│   │   │       │       ├── drawable-v24/
│   │   │       │       │   └── ic_launcher_foreground.xml
│   │   │       │       ├── layout/
│   │   │       │       │   ├── activity_main.xml
│   │   │       │       │   └── content_main.xml
│   │   │       │       ├── menu/
│   │   │       │       │   └── menu_main.xml
│   │   │       │       ├── mipmap-anydpi-v26/
│   │   │       │       │   ├── ic_launcher.xml
│   │   │       │       │   └── ic_launcher_round.xml
│   │   │       │       └── values/
│   │   │       │           ├── colors.xml
│   │   │       │           ├── dimens.xml
│   │   │       │           ├── strings.xml
│   │   │       │           └── styles.xml
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── android/
│   │   │                   └── it/
│   │   │                       └── igormaznitsa/
│   │   │                           └── com/
│   │   │                               └── jcpandroid/
│   │   │                                   ├── ExampleUnitTest.java
│   │   │                                   └── utils/
│   │   │                                       └── UtilsTest.java
│   │   ├── build.gradle
│   │   ├── gradle.properties
│   │   ├── local.properties
│   │   ├── pom.xml
│   │   └── settings.gradle
│   ├── jcp-test-ant/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── test/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── igormaznitsa/
│   │           │           └── jcp/
│   │           │               └── it/
│   │           │                   └── ant/
│   │           │                       └── TestAntTaskResult.java
│   │           └── resources/
│   │               ├── build.xml
│   │               ├── config.cfg
│   │               └── src/
│   │                   └── com/
│   │                       └── igormaznitsa/
│   │                           └── dummyproject/
│   │                               └── main.java
│   ├── jcp-test-gradle-6/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-7/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-8/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-gradle-9/
│   │   ├── build.gradle
│   │   ├── configFile.txt
│   │   ├── pom.xml
│   │   ├── settings.gradle
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── gradle/
│   │       │                           ├── Main.java
│   │       │                           └── Some.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── gradle/
│   │                                   └── TestMain.java
│   ├── jcp-test-javassist/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── test/
│   │       │                           ├── JavassistMain.java
│   │       │                           ├── Javassistable.java
│   │       │                           └── Main.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── test/
│   │                                   └── JavassistableTest.java
│   ├── jcp-test-jep238/
│   │   ├── pom.jdk9.xml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── assembly/
│   │       │   └── assembly.xml
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── tests/
│   │       │                   ├── JDK9APIClass.java
│   │       │                   ├── Main.java
│   │       │                   └── OldJavaClass.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── tests/
│   │                           ├── JDK9APIClassTest.java
│   │                           └── OldJavaClassTest.java
│   ├── jcp-test-maven/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── igormaznitsa/
│   │       │               └── jcp/
│   │       │                   └── it/
│   │       │                       └── maven/
│   │       │                           └── Main.java
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── maven/
│   │                                   └── TestMain.java
│   ├── jcp-test-maven-action/
│   │   ├── jcp-test-maven-action-action/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       └── main/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── igormaznitsa/
│   │   │                       └── jcp/
│   │   │                           └── it/
│   │   │                               └── CustomPreprocessorExtension.java
│   │   ├── jcp-test-maven-action-plugin-call/
│   │   │   ├── pom.xml
│   │   │   └── src/
│   │   │       ├── main/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── igormaznitsa/
│   │   │       │               └── jcp/
│   │   │       │                   └── it/
│   │   │       │                       └── Main.java
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── igormaznitsa/
│   │   │                       └── jcp/
│   │   │                           └── it/
│   │   │                               └── MainTest.java
│   │   └── pom.xml
│   ├── jcp-test-static-site/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── resources/
│   │       │       ├── about.htm
│   │       │       ├── channels.xml
│   │       │       ├── cmn/
│   │       │       │   ├── sendfeedback.phtml
│   │       │       │   ├── styles.css
│   │       │       │   └── styles2.css
│   │       │       ├── contacts.htm
│   │       │       ├── devices.xml
│   │       │       ├── eng/
│   │       │       │   ├── send_error.html
│   │       │       │   └── send_ok.html
│   │       │       ├── gamelist.htm
│   │       │       ├── gameref.htm
│   │       │       ├── games/
│   │       │       │   └── games2003_2006.html
│   │       │       ├── games.htm
│   │       │       ├── games.xml
│   │       │       ├── hotnews.htm
│   │       │       ├── hotnews.xml
│   │       │       ├── index.htm
│   │       │       ├── job.htm
│   │       │       ├── loadpages/
│   │       │       │   ├── muzon_AirBoil.htm
│   │       │       │   └── muzon_StarHarbor.htm
│   │       │       ├── main.htm
│   │       │       ├── news.htm
│   │       │       ├── news.xml
│   │       │       ├── partnership.htm
│   │       │       ├── rus/
│   │       │       │   ├── send_error.html
│   │       │       │   └── send_ok.html
│   │       │       ├── site.xml
│   │       │       └── wap/
│   │       │           ├── index.wml
│   │       │           └── logo.wbmp
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── igormaznitsa/
│   │                       └── jcp/
│   │                           └── it/
│   │                               └── test/
│   │                                   └── TestSite.java
│   └── pom.xml
└── pom.xml
Download .txt
SYMBOL INDEX (2360 symbols across 343 files)

FILE: jcp-tests/jcp-test-android/app/src/androidTest/java/android/it/igormaznitsa/com/jcpandroid/ExampleInstrumentedTest.java
  class ExampleInstrumentedTest (line 13) | @RunWith(AndroidJUnit4.class)
    method useAppContext (line 15) | @Test

FILE: jcp-tests/jcp-test-android/app/src/main/java/android/it/igormaznitsa/com/jcpandroid/MainActivity.java
  class MainActivity (line 12) | public class MainActivity extends AppCompatActivity {
    method onCreate (line 14) | @Override
    method onCreateOptionsMenu (line 34) | @Override
    method onOptionsItemSelected (line 41) | @Override

FILE: jcp-tests/jcp-test-android/app/src/main/java/android/it/igormaznitsa/com/jcpandroid/utils/Utils.java
  class Utils (line 3) | public final class Utils {
    method Utils (line 5) | private Utils(){
    method makeSecretPassword (line 14) | public static String makeSecretPassword() {

FILE: jcp-tests/jcp-test-android/app/src/test/java/android/it/igormaznitsa/com/jcpandroid/ExampleUnitTest.java
  class ExampleUnitTest (line 7) | public class ExampleUnitTest {
    method addition_isCorrect (line 8) | @Test

FILE: jcp-tests/jcp-test-android/app/src/test/java/android/it/igormaznitsa/com/jcpandroid/utils/UtilsTest.java
  class UtilsTest (line 7) | public class UtilsTest {
    method testMakeSecretPassword (line 8) | @Test

FILE: jcp-tests/jcp-test-ant/src/test/java/com/igormaznitsa/jcp/it/ant/TestAntTaskResult.java
  class TestAntTaskResult (line 29) | public class TestAntTaskResult {
    method testPreprocessResult (line 33) | @Test

FILE: jcp-tests/jcp-test-ant/src/test/resources/src/com/igormaznitsa/dummyproject/main.java
  class testmain (line 5) | public class testmain {
    method test (line 8) | public String test(){

FILE: jcp-tests/jcp-test-gradle-6/src/main/java/com/igormaznitsa/jcp/it/gradle/Main.java
  class Main (line 6) | public class Main {
    method Main (line 10) | public Main(){
    method getValue (line 24) | public String getValue(){
    method main (line 28) | public static void main(String [] args) {

FILE: jcp-tests/jcp-test-gradle-6/src/main/java/com/igormaznitsa/jcp/it/gradle/Some.java
  class Some (line 3) | public class Some {
    method getText (line 5) | public String getText() {

FILE: jcp-tests/jcp-test-gradle-6/src/test/java/com/igormaznitsa/jcp/it/gradle/TestMain.java
  class TestMain (line 6) | public class TestMain {
    method testMain (line 8) | @Test

FILE: jcp-tests/jcp-test-gradle-7/src/main/java/com/igormaznitsa/jcp/it/gradle/Main.java
  class Main (line 6) | public class Main {
    method Main (line 10) | public Main(){
    method getValue (line 24) | public String getValue(){
    method main (line 28) | public static void main(String [] args) {

FILE: jcp-tests/jcp-test-gradle-7/src/main/java/com/igormaznitsa/jcp/it/gradle/Some.java
  class Some (line 3) | public class Some {
    method getText (line 5) | public String getText() {

FILE: jcp-tests/jcp-test-gradle-7/src/test/java/com/igormaznitsa/jcp/it/gradle/TestMain.java
  class TestMain (line 6) | public class TestMain {
    method testMain (line 8) | @Test

FILE: jcp-tests/jcp-test-gradle-8/src/main/java/com/igormaznitsa/jcp/it/gradle/Main.java
  class Main (line 6) | public class Main {
    method Main (line 10) | public Main(){
    method getValue (line 24) | public String getValue(){
    method main (line 28) | public static void main(String [] args) {

FILE: jcp-tests/jcp-test-gradle-8/src/main/java/com/igormaznitsa/jcp/it/gradle/Some.java
  class Some (line 3) | public class Some {
    method getText (line 5) | public String getText() {

FILE: jcp-tests/jcp-test-gradle-8/src/test/java/com/igormaznitsa/jcp/it/gradle/TestMain.java
  class TestMain (line 6) | public class TestMain {
    method testMain (line 8) | @Test

FILE: jcp-tests/jcp-test-gradle-9/src/main/java/com/igormaznitsa/jcp/it/gradle/Main.java
  class Main (line 6) | public class Main {
    method Main (line 10) | public Main(){
    method getValue (line 24) | public String getValue(){
    method main (line 28) | public static void main(String [] args) {

FILE: jcp-tests/jcp-test-gradle-9/src/main/java/com/igormaznitsa/jcp/it/gradle/Some.java
  class Some (line 3) | public class Some {
    method getText (line 5) | public String getText() {

FILE: jcp-tests/jcp-test-gradle-9/src/test/java/com/igormaznitsa/jcp/it/gradle/TestMain.java
  class TestMain (line 6) | public class TestMain {
    method testMain (line 8) | @Test

FILE: jcp-tests/jcp-test-javassist/src/main/java/com/igormaznitsa/jcp/it/test/JavassistMain.java
  class JavassistMain (line 8) | public class JavassistMain {
    method printLines (line 28) | public boolean printLines(int lineNumber, String pattern, String text) {

FILE: jcp-tests/jcp-test-javassist/src/main/java/com/igormaznitsa/jcp/it/test/Javassistable.java
  class Javassistable (line 7) | public class Javassistable {
    method printLines (line 8) | public boolean printLines(int ___arg1, String ___arg2, String ___arg3) {

FILE: jcp-tests/jcp-test-javassist/src/main/java/com/igormaznitsa/jcp/it/test/Main.java
  class Main (line 3) | public class Main {
    method printLines (line 4) | public boolean printLines(int lineNumber, String pattern, String text) {

FILE: jcp-tests/jcp-test-javassist/src/test/java/com/igormaznitsa/jcp/it/test/JavassistableTest.java
  class JavassistableTest (line 6) | public class JavassistableTest {
    method testProcessJavassistSrc (line 8) | @Test

FILE: jcp-tests/jcp-test-jep238/src/main/java/com/igormaznitsa/tests/JDK9APIClass.java
  class JDK9APIClass (line 10) | public class JDK9APIClass {
    method getList (line 11) | public List<String> getList() {

FILE: jcp-tests/jcp-test-jep238/src/main/java/com/igormaznitsa/tests/Main.java
  class Main (line 6) | public class Main {
    method main (line 8) | public static void main(final String... args) {

FILE: jcp-tests/jcp-test-jep238/src/main/java/com/igormaznitsa/tests/OldJavaClass.java
  class OldJavaClass (line 8) | public class OldJavaClass {
    method getString (line 9) | public String getString(){

FILE: jcp-tests/jcp-test-jep238/src/test/java/com/igormaznitsa/tests/JDK9APIClassTest.java
  class JDK9APIClassTest (line 7) | public class JDK9APIClassTest {
    method testGetList (line 8) | @Test

FILE: jcp-tests/jcp-test-jep238/src/test/java/com/igormaznitsa/tests/OldJavaClassTest.java
  class OldJavaClassTest (line 8) | public class OldJavaClassTest {
    method testGetString (line 10) | @Test

FILE: jcp-tests/jcp-test-maven-action/jcp-test-maven-action-action/src/main/java/com/igormaznitsa/jcp/it/CustomPreprocessorExtension.java
  class CustomPreprocessorExtension (line 10) | public class CustomPreprocessorExtension implements PreprocessorExtension {
    method hasAction (line 14) | @Override
    method hasUserFunction (line 19) | @Override
    method processAction (line 27) | @Override
    method getUserFunctionArity (line 33) | @Override
    method processUserFunction (line 42) | @Override

FILE: jcp-tests/jcp-test-maven-action/jcp-test-maven-action-plugin-call/src/main/java/com/igormaznitsa/jcp/it/Main.java
  class Main (line 3) | public class Main {
    method main (line 5) | public static void main(String ... args) {
    method makeHello (line 10) | public static String makeHello() {

FILE: jcp-tests/jcp-test-maven-action/jcp-test-maven-action-plugin-call/src/test/java/com/igormaznitsa/jcp/it/MainTest.java
  class MainTest (line 6) | class MainTest {
    method testMain (line 7) | @Test

FILE: jcp-tests/jcp-test-maven/src/main/java/com/igormaznitsa/jcp/it/maven/Main.java
  class Main (line 7) | public class Main {
    method Main (line 11) | public Main(){
    method getProperty (line 30) | public String getProperty() {

FILE: jcp-tests/jcp-test-maven/src/test/java/com/igormaznitsa/jcp/it/maven/TestMain.java
  class TestMain (line 7) | class TestMain {
    method testMain (line 9) | @Test

FILE: jcp-tests/jcp-test-static-site/src/test/java/com/igormaznitsa/jcp/it/test/TestSite.java
  class TestSite (line 32) | public class TestSite {
    method countFilesInDir (line 36) | private int countFilesInDir(File dir) {
    method testGeneratedSite (line 50) | @Test

FILE: jcp/src/main/java/com/igormaznitsa/jcp/InfoHelper.java
  class InfoHelper (line 41) | public final class InfoHelper {
    method InfoHelper (line 63) | private InfoHelper() {
    method getVersion (line 66) | public static String getVersion() {
    method getCopyright (line 71) | public static String getCopyright() {
    method getSite (line 76) | public static String getSite() {
    method getProductName (line 81) | public static String getProductName() {
    method makeTextForHelpInfo (line 86) | public static List<String> makeTextForHelpInfo() {
    method makeSpecialVariableReference (line 140) | private static String makeSpecialVariableReference(
    method makeCommandLineKeyReference (line 148) | private static String makeCommandLineKeyReference(final CommandLineHan...
    method makeDirectiveReference (line 153) | private static String makeDirectiveReference(final AbstractDirectiveHa...
    method makeSpecialDirectiveReference (line 177) | private static String makeSpecialDirectiveReference(final String name,...
    method makeOperatorReference (line 182) | private static String makeOperatorReference(final AbstractOperator ope...
    method makeFunctionReference (line 187) | private static String makeFunctionReference(final AbstractFunction fun...
    method makeColumns (line 214) | private static String makeColumns(final String name, final String refe...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/JcpPreprocessor.java
  class JcpPreprocessor (line 86) | public final class JcpPreprocessor {
    method JcpPreprocessor (line 116) | public JcpPreprocessor(final PreprocessorContext context) {
    method getCommandLineHandlers (line 122) | public static List<CommandLineHandler> getCommandLineHandlers() {
    method main (line 126) | public static void main(final String... args) {
    method getBaseDir (line 158) | private static File getBaseDir() {
    method processCommandLine (line 167) | private static PreprocessorContext processCommandLine(final File baseDir,
    method printHeader (line 199) | private static void printHeader() {
    method help (line 205) | private static void help() {
    method getContext (line 212) | public PreprocessorContext getContext() {
    method execute (line 216) | public Statistics execute() throws IOException {
    method processFileExclusion (line 253) | private void processFileExclusion(final List<PreprocessingState.Exclud...
    method processGlobalDirectives (line 301) | private List<PreprocessingState.ExcludeIfInfo> processGlobalDirectives(
    method preprocessFiles (line 320) | private Statistics preprocessFiles(final Collection<FileInfoContainer>...
    method createTargetFolder (line 412) | private void createTargetFolder() throws IOException {
    method collectFilesToPreprocess (line 434) | private Collection<FileInfoContainer> collectFilesToPreprocess(
    method findAllFiles (line 471) | private Set<File> findAllFiles(
    method processConfigFiles (line 519) | List<File> processConfigFiles() throws IOException {
    class Statistics (line 595) | @Data

FILE: jcp/src/main/java/com/igormaznitsa/jcp/ant/PreprocessTask.java
  class PreprocessTask (line 61) | @Data
    method registerConfigFiles (line 90) | private void registerConfigFiles(final PreprocessorContext context) {
    method fillGlobalVars (line 100) | private void fillGlobalVars(final PreprocessorContext context) {
    method makePreprocessorContext (line 110) | PreprocessorContext makePreprocessorContext() {
    method execute (line 198) | @Override
    method error (line 227) | @Override
    method info (line 232) | @Override
    method debug (line 237) | @Override
    method debug (line 242) | @Override
    method warning (line 252) | @Override
    method fillAntVariables (line 257) | private Map<String, Value> fillAntVariables() {
    method getVariableNames (line 278) | @Override
    method getVariable (line 289) | @Override
    method setVariable (line 302) | @Override
    method createExtensions (line 310) | public Extensions createExtensions() {
    method createExcludeExtensions (line 315) | public ExcludeExtensions createExcludeExtensions() {
    method createExcludeFolders (line 320) | public ExcludeFolders createExcludeFolders() {
    method createSources (line 325) | public Sources createSources() {
    method createConfigFiles (line 330) | public ConfigFiles createConfigFiles() {
    method createVars (line 335) | public Vars createVars() {
    class Sources (line 340) | @Data
      method createPath (line 346) | public Path createPath() {
      class Path (line 352) | @Data
        method addText (line 356) | public void addText(final String text) {
    class ConfigFiles (line 363) | @Data
    class ExcludeFolders (line 369) | @Data
      method createFolder (line 375) | public Folder createFolder() {
      class Folder (line 381) | @Data
        method addText (line 385) | public void addText(final String text) {
    class ExcludeExtensions (line 391) | @Data
    class Extensions (line 397) | @Data
      method createExtension (line 402) | public Extension createExtension() {
      class Extension (line 408) | @Data
        method addText (line 412) | public void addText(final String text) {
    class Vars (line 418) | @Data
      method createVar (line 423) | public Var createVar() {
      class Var (line 429) | @Data
        method addText (line 435) | public void addText(final String text) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ActionPreprocessorExtensionHandler.java
  class ActionPreprocessorExtensionHandler (line 8) | public class ActionPreprocessorExtensionHandler implements CommandLineHa...
    method getDescription (line 12) | @Override
    method processCommandLineKey (line 17) | @Override
    method getKeyName (line 34) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowMergeBlockLineHandler.java
  class AllowMergeBlockLineHandler (line 33) | public class AllowMergeBlockLineHandler implements CommandLineHandler {
    method getDescription (line 37) | @Override
    method processCommandLineKey (line 42) | @Override
    method getKeyName (line 54) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowWhitespaceDirectiveHandler.java
  class AllowWhitespaceDirectiveHandler (line 31) | public class AllowWhitespaceDirectiveHandler implements CommandLineHandl...
    method getDescription (line 35) | @Override
    method processCommandLineKey (line 40) | @Override
    method getKeyName (line 52) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CareForLastEolHandler.java
  class CareForLastEolHandler (line 26) | public class CareForLastEolHandler implements CommandLineHandler {
    method getDescription (line 30) | @Override
    method processCommandLineKey (line 35) | @Override
    method getKeyName (line 47) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ClearTargetHandler.java
  class ClearTargetHandler (line 32) | public class ClearTargetHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 51) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CommandLineHandler.java
  type CommandLineHandler (line 32) | public interface CommandLineHandler {
    method getKeyName (line 39) | String getKeyName();
    method getDescription (line 46) | String getDescription();
    method processCommandLineKey (line 55) | boolean processCommandLineKey(String key, PreprocessorContext context);

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DestinationDirectoryHandler.java
  class DestinationDirectoryHandler (line 34) | public class DestinationDirectoryHandler implements CommandLineHandler {
    method getDescription (line 38) | @Override
    method processCommandLineKey (line 44) | @Override
    method getKeyName (line 60) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DontOverwriteSameContentHandler.java
  class DontOverwriteSameContentHandler (line 32) | public class DontOverwriteSameContentHandler implements CommandLineHandl...
    method getKeyName (line 36) | @Override
    method getDescription (line 41) | @Override
    method processCommandLineKey (line 46) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludeFoldersHandler.java
  class ExcludeFoldersHandler (line 34) | public class ExcludeFoldersHandler implements CommandLineHandler {
    method getDescription (line 38) | @Override
    method processCommandLineKey (line 43) | @Override
    method getKeyName (line 58) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludedFileExtensionsHandler.java
  class ExcludedFileExtensionsHandler (line 35) | public class ExcludedFileExtensionsHandler implements CommandLineHandler {
    method getDescription (line 39) | @Override
    method processCommandLineKey (line 46) | @Override
    method getKeyName (line 62) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/FileExtensionsHandler.java
  class FileExtensionsHandler (line 35) | public class FileExtensionsHandler implements CommandLineHandler {
    method getDescription (line 39) | @Override
    method processCommandLineKey (line 45) | @Override
    method getKeyName (line 62) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableDefiningFileHandler.java
  class GlobalVariableDefiningFileHandler (line 35) | public class GlobalVariableDefiningFileHandler implements CommandLineHan...
    method getDescription (line 39) | @Override
    method processCommandLineKey (line 44) | @Override
    method getKeyName (line 91) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableHandler.java
  class GlobalVariableHandler (line 36) | public class GlobalVariableHandler implements CommandLineHandler {
    method getDescription (line 40) | @Override
    method processCommandLineKey (line 45) | @Override
    method getKeyName (line 77) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/HelpHandler.java
  class HelpHandler (line 32) | public class HelpHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 58) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/InCharsetHandler.java
  class InCharsetHandler (line 34) | public class InCharsetHandler implements CommandLineHandler {
    method getKeyName (line 38) | @Override
    method getDescription (line 43) | @Override
    method processCommandLineKey (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepAttributesHandler.java
  class KeepAttributesHandler (line 31) | public class KeepAttributesHandler implements CommandLineHandler {
    method getDescription (line 35) | @Override
    method processCommandLineKey (line 40) | @Override
    method getKeyName (line 52) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepCommentsHandler.java
  class KeepCommentsHandler (line 37) | public class KeepCommentsHandler implements CommandLineHandler {
    method getDescription (line 41) | @Override
    method processCommandLineKey (line 47) | @Override
    method getKeyName (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepLineHandler.java
  class KeepLineHandler (line 32) | public class KeepLineHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/OutCharsetHandler.java
  class OutCharsetHandler (line 34) | public class OutCharsetHandler implements CommandLineHandler {
    method getKeyName (line 38) | @Override
    method getDescription (line 43) | @Override
    method processCommandLineKey (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/PreserveIndentDirectiveHandler.java
  class PreserveIndentDirectiveHandler (line 29) | public class PreserveIndentDirectiveHandler implements CommandLineHandler {
    method getDescription (line 33) | @Override
    method processCommandLineKey (line 38) | @Override
    method getKeyName (line 50) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/RemoveCommentsHandler.java
  class RemoveCommentsHandler (line 32) | public class RemoveCommentsHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 54) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/SourceDirectoryHandler.java
  class SourceDirectoryHandler (line 39) | public class SourceDirectoryHandler implements CommandLineHandler {
    method getDescription (line 43) | @Override
    method processCommandLineKey (line 49) | @Override
    method getKeyName (line 65) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/UnknownAsFalseHandler.java
  class UnknownAsFalseHandler (line 32) | public class UnknownAsFalseHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/cmdline/VerboseHandler.java
  class VerboseHandler (line 32) | public class VerboseHandler implements CommandLineHandler {
    method getDescription (line 36) | @Override
    method processCommandLineKey (line 41) | @Override
    method getKeyName (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/containers/FileInfoContainer.java
  class FileInfoContainer (line 58) | @Data
    method FileInfoContainer (line 103) | public FileInfoContainer(final File srcFile, final String targetFileName,
    method findTailRemover (line 126) | private static String findTailRemover(final String str, final Preproce...
    method isDoubleDollarPrefixed (line 150) | public static boolean isDoubleDollarPrefixed(final String line,
    method isDollarBlockPrefixed (line 159) | public static boolean isDollarBlockPrefixed(final String line, final b...
    method isDoubleDollarBlockPrefixed (line 167) | public static boolean isDoubleDollarBlockPrefixed(final String line,
    method isSingleDollarPrefixed (line 184) | public static boolean isSingleDollarPrefixed(final String line,
    method isJcpCommentLine (line 201) | public static boolean isJcpCommentLine(final String line, final boolea...
    method isJcpDirectiveLine (line 214) | public static boolean isJcpDirectiveLine(final String line, final bool...
    method findLastReadStringIndexInStack (line 222) | private static int findLastReadStringIndexInStack(final PreprocessingS...
    method setTargetFolder (line 235) | public void setTargetFolder(final String folder) {
    method setTargetFileName (line 239) | public void setTargetFileName(final String name) {
    method makeTargetFilePathAsString (line 244) | public String makeTargetFilePathAsString() {
    method toString (line 254) | @Override
    method processGlobalDirectives (line 262) | public List<PreprocessingState.ExcludeIfInfo> processGlobalDirectives(
    method isHashPrefixed (line 331) | private boolean isHashPrefixed(final String line, final PreprocessorCo...
    method extractHashPrefixedDirective (line 350) | private String extractHashPrefixedDirective(final String line,
    method extractDoubleDollarPrefixedDirective (line 365) | private String extractDoubleDollarPrefixedDirective(
    method extractSingleDollarPrefixedDirective (line 394) | private String extractSingleDollarPrefixedDirective(final String line,
    method preprocessFile (line 432) | public PreprocessingState preprocessFile(final PreprocessorContext con...
    method flushTextBufferForRemovedComments (line 436) | @SuppressWarnings("StringEquality")
    method preprocessFileWithNotification (line 509) | public PreprocessingState preprocessFileWithNotification(
    method checkDirectiveArgumentRoughly (line 857) | private boolean checkDirectiveArgumentRoughly(final AbstractDirectiveH...
    method processDirective (line 895) | private AfterDirectiveProcessingBehaviour processDirective(
    method setExcluded (line 931) | public void setExcluded(final boolean flag) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/containers/PreprocessingFlag.java
  type PreprocessingFlag (line 29) | public enum PreprocessingFlag {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/containers/TextFileDataContainer.java
  class TextFileDataContainer (line 32) | public final class TextFileDataContainer {
    method TextFileDataContainer (line 44) | public TextFileDataContainer(final TextFileDataContainer item, final i...
    method TextFileDataContainer (line 48) | public TextFileDataContainer(final File currentFile, final String[] text,
    method disableAutoFlush (line 58) | public void disableAutoFlush() {
    method isAutoFlush (line 62) | public boolean isAutoFlush() {
    method getText (line 67) | public String[] getText() {
    method getFile (line 72) | public File getFile() {
    method reset (line 76) | public void reset() {
    method isPresentedNextLineOnReadString (line 80) | public boolean isPresentedNextLineOnReadString() {
    method nextLine (line 85) | public String nextLine() {
    method getLastReadStringIndex (line 93) | public int getLastReadStringIndex() {
    method getNextStringIndex (line 97) | public int getNextStringIndex() {
    method setNextStringIndex (line 101) | public void setNextStringIndex(final int index) {
    method hashCode (line 108) | @Override
    method equals (line 113) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/CommentRemoverType.java
  type CommentRemoverType (line 11) | public enum CommentRemoverType {
    method makeListOfAllRemoverIds (line 30) | public static String makeListOfAllRemoverIds() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/CommentTextProcessor.java
  type CommentTextProcessor (line 13) | public interface CommentTextProcessor extends PreprocessorContextAware, ...
    method processUncommentedText (line 25) | String processUncommentedText(

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/EnvironmentVariableProcessor.java
  class EnvironmentVariableProcessor (line 39) | public class EnvironmentVariableProcessor implements SpecialVariableProc...
    method EnvironmentVariableProcessor (line 44) | public EnvironmentVariableProcessor() {
    method getVariableNames (line 57) | @Override
    method getVariable (line 62) | @Override
    method setVariable (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/ExecutionAllowable.java
  type ExecutionAllowable (line 8) | public interface ExecutionAllowable {
    method isAllowed (line 20) | boolean isAllowed(

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/JCPSpecialVariableProcessor.java
  class JCPSpecialVariableProcessor (line 41) | public class JCPSpecialVariableProcessor implements SpecialVariableProce...
    method getReference (line 67) | public static List<NameReferencePair> getReference() {
    method getVariableNames (line 103) | @Override
    method getVariable (line 127) | @Override
    method assertNotGlobalPhase (line 190) | private void assertNotGlobalPhase(final String varName, final Preproce...
    method setVariable (line 197) | @Override
    class NameReferencePair (line 256) | public static final class NameReferencePair {
      method NameReferencePair (line 261) | private NameReferencePair(final String name, final String reference) {
      method getName (line 267) | public String getName() {
      method getReference (line 272) | public String getReference() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessingState.java
  class PreprocessingState (line 68) | public final class PreprocessingState {
    method PreprocessingState (line 97) | PreprocessingState(final PreprocessorContext context, final Charset in...
    method PreprocessingState (line 110) | PreprocessingState(final PreprocessorContext context, final FileInfoCo...
    method PreprocessingState (line 126) | PreprocessingState(final PreprocessorContext context, final FileInfoCo...
    method makeMock (line 143) | public static PreprocessingState makeMock(final PreprocessorContext co...
    method isMockMode (line 147) | public boolean isMockMode() {
    method isGlobalPhase (line 151) | public boolean isGlobalPhase() {
    method setGlobalPhase (line 155) | public void setGlobalPhase(final boolean flag) {
    method getLastReadString (line 159) | public String getLastReadString() {
    method pushExcludeIfData (line 163) | public void pushExcludeIfData(
    method getSelectedPrinter (line 179) | public ResettablePrinter getSelectedPrinter() {
    method popAllExcludeIfInfoData (line 183) | public List<ExcludeIfInfo> popAllExcludeIfInfoData() {
    method popExcludeIfData (line 190) | public ExcludeIfInfo popExcludeIfData() {
    method getPreprocessingFlags (line 195) | public Set<PreprocessingFlag> getPreprocessingFlags() {
    method findPrinter (line 199) | public ResettablePrinter findPrinter(final PrinterType type) {
    method selectPrinter (line 212) | public void selectPrinter(final PrinterType type) {
    method getRootTextContainer (line 229) | public TextFileDataContainer getRootTextContainer() {
    method openFile (line 234) | public TextFileDataContainer openFile(final File file) throws IOExcept...
    method peekIncludeStackFile (line 247) | public TextFileDataContainer peekIncludeStackFile() {
    method getIncludeStack (line 251) | public List<TextFileDataContainer> getIncludeStack() {
    method findActiveTextFileDataContainer (line 255) | public Optional<TextFileDataContainer> findActiveTextFileDataContainer...
    method findFilePositionInfo (line 265) | public Optional<FilePositionInfo> findFilePositionInfo() {
    method makeIncludeStack (line 270) | public FilePositionInfo[] makeIncludeStack() {
    method getCurrentIncludeFileContainer (line 284) | public TextFileDataContainer getCurrentIncludeFileContainer() {
    method popTextContainer (line 288) | public TextFileDataContainer popTextContainer() {
    method getRootFileInfo (line 295) | public FileInfoContainer getRootFileInfo() {
    method isIncludeStackEmpty (line 299) | public boolean isIncludeStackEmpty() {
    method cloneTopTextDataContainer (line 303) | private TextFileDataContainer cloneTopTextDataContainer() {
    method popWhile (line 310) | public PreprocessingState popWhile() {
    method pushWhile (line 324) | public PreprocessingState pushWhile(final boolean makeActive) {
    method peekWhile (line 334) | public TextFileDataContainer peekWhile() {
    method hasReadLineNextLineInEnd (line 338) | public boolean hasReadLineNextLineInEnd() {
    method nextLine (line 343) | public String nextLine() {
    method goToString (line 350) | public PreprocessingState goToString(final int stringIndex) {
    method pushIf (line 356) | public PreprocessingState pushIf(final boolean makeActive) {
    method popAllIFUntilContainerWithFile (line 365) | public void popAllIFUntilContainerWithFile(final TextFileDataContainer...
    method popIf (line 379) | public PreprocessingState popIf() {
    method isAtActiveWhile (line 391) | public boolean isAtActiveWhile() {
    method isAtActiveIf (line 399) | public boolean isAtActiveIf() {
    method isDirectiveCanBeProcessedIgnoreBreak (line 407) | public boolean isDirectiveCanBeProcessedIgnoreBreak() {
    method isDirectiveCanBeProcessed (line 412) | public boolean isDirectiveCanBeProcessed() {
    method peekIf (line 418) | public TextFileDataContainer peekIf() {
    method isIfStackEmpty (line 422) | public boolean isIfStackEmpty() {
    method isWhileStackEmpty (line 426) | public boolean isWhileStackEmpty() {
    method init (line 430) | private void init() {
    method resetPrinters (line 437) | public void resetPrinters() {
    method setBufferText (line 445) | public void setBufferText(final String text) {
    method setBufferText (line 452) | public void setBufferText(final String text, final PrinterType printer...
    method getCurrentText (line 474) | public String getCurrentText() {
    method saveBuffersToStreams (line 480) | public void saveBuffersToStreams(final OutputStream prefix, final Outp...
    method saveBuffersToFile (line 490) | public boolean saveBuffersToFile(final File outFile, final CommentRemo...
    method writePrinterBuffers (line 565) | public Writer writePrinterBuffers(final Writer writer) throws IOExcept...
    method makeException (line 582) | public PreprocessorException makeException(final String message, final...
    type PrinterType (line 587) | public enum PrinterType {
    class ExcludeIfInfo (line 594) | public static class ExcludeIfInfo {
      method ExcludeIfInfo (line 600) | public ExcludeIfInfo(final FileInfoContainer fileInfoContainer, fina...
      method getStringIndex (line 607) | public int getStringIndex() {
      method getFileInfoContainer (line 612) | public FileInfoContainer getFileInfoContainer() {
      method getCondition (line 617) | public String getCondition() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessorContext.java
  class PreprocessorContext (line 66) | @Data
    method PreprocessorContext (line 128) | public PreprocessorContext(final File baseDir) {
    method PreprocessorContext (line 147) | public PreprocessorContext(final PreprocessorContext context) {
    method makeStackView (line 204) | private static String makeStackView(
    method decodeCharset (line 241) | private static Charset decodeCharset(final String charsetName) {
    method addCommentTextProcessor (line 256) | public void addCommentTextProcessor(final CommentTextProcessor comment...
    method removeCommentTextProcessor (line 266) | public void removeCommentTextProcessor(final CommentTextProcessor comm...
    method getDirectiveHandlers (line 276) | public List<AbstractDirectiveHandler> getDirectiveHandlers() {
    method addPreprocessedResource (line 280) | public void addPreprocessedResource(final FileInfoContainer container) {
    method addAllPreprocessedResources (line 286) | public void addAllPreprocessedResources(final Collection<FileInfoConta...
    method findPreprocessedResources (line 292) | public Set<FileInfoContainer> findPreprocessedResources() {
    method fireNotificationStart (line 302) | public void fireNotificationStart(final List<PreprocessorContextAware>...
    method fireNotificationStop (line 324) | public void fireNotificationStop(final Throwable error) {
    method findAllInputFiles (line 340) | public Set<File> findAllInputFiles() {
    method findAllProducedFiles (line 358) | public Set<File> findAllProducedFiles() {
    method findFileInfoContainer (line 364) | public Optional<FileInfoContainer> findFileInfoContainer(final File fi...
    method setEol (line 374) | public void setEol(final String eol) {
    method setTarget (line 378) | public void setTarget(final File file) {
    method getPreprocessorExtensions (line 382) | public List<PreprocessorExtension> getPreprocessorExtensions() {
    method setPreprocessorExtensions (line 386) | public void setPreprocessorExtensions(final List<PreprocessorExtension...
    method addPreprocessorExtension (line 400) | public void addPreprocessorExtension(final PreprocessorExtension exten...
    method isCloned (line 418) | public boolean isCloned() {
    method setPreprocessorLogger (line 427) | public void setPreprocessorLogger(final PreprocessorLogger logger) {
    method registerSpecialVariableProcessor (line 437) | public void registerSpecialVariableProcessor(final SpecialVariableProc...
    method logInfo (line 456) | public void logInfo(final String text) {
    method logError (line 467) | public void logError(final String text) {
    method logDebug (line 479) | public void logDebug(final String text) {
    method logDebug (line 491) | public void logDebug(final Supplier<String> textSupplier) {
    method logWarning (line 502) | public void logWarning(final String text) {
    method setSharedResource (line 514) | public void setSharedResource(final String name, final Object obj) {
    method getSharedResource (line 528) | public Object getSharedResource(final String name) {
    method removeSharedResource (line 539) | public Object removeSharedResource(final String name) {
    method setSources (line 550) | public PreprocessorContext setSources(final List<String> folderPaths) {
    method getExtensions (line 563) | public Set<String> getExtensions() {
    method setExtensions (line 573) | public PreprocessorContext setExtensions(final List<String> extensions) {
    method isFileAllowedForPreprocessing (line 584) | public final boolean isFileAllowedForPreprocessing(final File file) {
    method isFileExcludedByExtension (line 598) | public final boolean isFileExcludedByExtension(final File file) {
    method getExcludeExtensions (line 608) | public Set<String> getExcludeExtensions() {
    method setExcludeExtensions (line 618) | public PreprocessorContext setExcludeExtensions(
    method setLocalVariable (line 632) | public PreprocessorContext setLocalVariable(final String name, final V...
    method removeLocalVariable (line 665) | public PreprocessorContext removeLocalVariable(final String name) {
    method removeGlobalVariable (line 694) | public PreprocessorContext removeGlobalVariable(final String name) {
    method getLocalVariable (line 722) | public Value getLocalVariable(final String name) {
    method containsLocalVariable (line 742) | public boolean containsLocalVariable(final String name) {
    method clearLocalVariables (line 761) | public PreprocessorContext clearLocalVariables() {
    method findAllowedSpecialVariableProcessor (line 766) | private Optional<SpecialVariableProcessor> findAllowedSpecialVariableP...
    method setGlobalVariable (line 780) | public PreprocessorContext setGlobalVariable(final String name, final ...
    method containsGlobalVariable (line 820) | public boolean containsGlobalVariable(final String name) {
    method findVariableForName (line 841) | public Value findVariableForName(final String name, final boolean enfo...
    method isGlobalVariable (line 882) | public boolean isGlobalVariable(final String variableName) {
    method isLocalVariable (line 898) | public boolean isLocalVariable(final String variableName) {
    method createDestinationFileForPath (line 913) | public File createDestinationFileForPath(final String path) {
    method isFileInBaseDir (line 930) | public boolean isFileInBaseDir(final File file) {
    method findFileInSources (line 944) | public File findFileInSources(final String path) {
    method findFileInSources (line 957) | public File findFileInSources(final String path, final boolean mustExi...
    method registerConfigFile (line 1028) | public void registerConfigFile(final File file) {
    method produceNewPreprocessingState (line 1041) | public PreprocessingState produceNewPreprocessingState(final FileInfoC...
    method makeNewPreprocessorState (line 1060) | protected PreprocessingState makeNewPreprocessorState(final Charset so...
    method makeNewPreprocessorState (line 1065) | protected PreprocessingState makeNewPreprocessorState(final FileInfoCo...
    method makeNewPreprocessorState (line 1076) | protected PreprocessingState makeNewPreprocessorState(final FileInfoCo...
    method produceNewPreprocessingState (line 1095) | public PreprocessingState produceNewPreprocessingState(final FileInfoC...
    method getPreprocessingState (line 1107) | public PreprocessingState getPreprocessingState() {
    method makeException (line 1118) | public PreprocessorException makeException(final String text, final Th...
    method logForVerbose (line 1130) | public void logForVerbose(final String str) {
    class SourceFolder (line 1139) | public final static class SourceFolder {
      method SourceFolder (line 1143) | public SourceFolder(final File baseDir, final String path) {
      method getAsString (line 1149) | public String getAsString() {
      method getAsFile (line 1153) | public File getAsFile() {
      method getNormalizedAbsolutePath (line 1157) | public String getNormalizedAbsolutePath(final boolean separatorCharE...
      method toString (line 1165) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessorContextAware.java
  type PreprocessorContextAware (line 8) | public interface PreprocessorContextAware {
    method onContextStarted (line 14) | default void onContextStarted(PreprocessorContext context) {
    method onContextStopped (line 24) | default void onContextStopped(PreprocessorContext context, Throwable e...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/context/SpecialVariableProcessor.java
  type SpecialVariableProcessor (line 33) | public interface SpecialVariableProcessor extends PreprocessorContextAware,
    method getVariableNames (line 42) | Set<String> getVariableNames();
    method isAllowed (line 44) | @Override
    method getVariable (line 57) | Value getVariable(String varName, PreprocessorContext context);
    method setVariable (line 66) | void setVariable(String varName, Value value, PreprocessorContext cont...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/AbortDirectiveHandler.java
  class AbortDirectiveHandler (line 33) | public class AbortDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method getArgumentType (line 45) | @Override
    method execute (line 50) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/AbstractDirectiveHandler.java
  class AbstractDirectiveHandler (line 34) | public abstract class AbstractDirectiveHandler {
    method findAllDirectives (line 57) | public static List<AbstractDirectiveHandler> findAllDirectives() {
    method getName (line 105) | public abstract String getName();
    method getReference (line 113) | public abstract String getReference();
    method getFullName (line 121) | public String getFullName() {
    method getArgumentType (line 131) | public DirectiveArgumentType getArgumentType() {
    method execute (line 143) | public abstract AfterDirectiveProcessingBehaviour execute(String tailS...
    method executeOnlyWhenExecutionAllowed (line 153) | public boolean executeOnlyWhenExecutionAllowed() {
    method isGlobalPhaseAllowed (line 164) | public boolean isGlobalPhaseAllowed() {
    method isPreprocessingPhaseAllowed (line 175) | public boolean isPreprocessingPhaseAllowed() {
    method isDeprecated (line 184) | public boolean isDeprecated() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ActionDirectiveHandler.java
  class ActionDirectiveHandler (line 44) | public class ActionDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 46) | @Override
    method getReference (line 51) | @Override
    method getArgumentType (line 56) | @Override
    method execute (line 61) | @Override
    method parseString (line 99) | private List<ExpressionTree> parseString(final String str, final Prepr...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/AfterDirectiveProcessingBehaviour.java
  type AfterDirectiveProcessingBehaviour (line 29) | public enum AfterDirectiveProcessingBehaviour {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/BreakDirectiveHandler.java
  class BreakDirectiveHandler (line 34) | public class BreakDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getReference (line 41) | @Override
    method execute (line 46) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/CommentNextLineDirectiveHandler.java
  class CommentNextLineDirectiveHandler (line 32) | public class CommentNextLineDirectiveHandler extends AbstractDirectiveHa...
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method execute (line 44) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ContinueDirectiveHandler.java
  class ContinueDirectiveHandler (line 34) | public class ContinueDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getReference (line 41) | @Override
    method execute (line 46) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/DefineDirectiveHandler.java
  class DefineDirectiveHandler (line 40) | public class DefineDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 42) | @Override
    method getArgumentType (line 47) | @Override
    method getReference (line 52) | @Override
    method process (line 57) | protected void process(final PreprocessorContext context, final String...
    method execute (line 65) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/DefinelDirectiveHandler.java
  class DefinelDirectiveHandler (line 32) | public class DefinelDirectiveHandler extends DefineDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 40) | @Override
    method process (line 46) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/DirectiveArgumentType.java
  type DirectiveArgumentType (line 29) | public enum DirectiveArgumentType {
    method DirectiveArgumentType (line 43) | DirectiveArgumentType(final String str) {
    method getAsText (line 47) | public String getAsText() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/EchoDirectiveHandler.java
  class EchoDirectiveHandler (line 32) | public class EchoDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getArgumentType (line 39) | @Override
    method getReference (line 44) | @Override
    method execute (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ElseDirectiveHandler.java
  class ElseDirectiveHandler (line 33) | public class ElseDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method execute (line 45) | @Override
    method executeOnlyWhenExecutionAllowed (line 64) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/EndDirectiveHandler.java
  class EndDirectiveHandler (line 35) | public class EndDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 37) | @Override
    method getReference (line 42) | @Override
    method execute (line 47) | @Override
    method executeOnlyWhenExecutionAllowed (line 72) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/EndIfDirectiveHandler.java
  class EndIfDirectiveHandler (line 33) | public class EndIfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method executeOnlyWhenExecutionAllowed (line 41) | @Override
    method getReference (line 46) | @Override
    method execute (line 51) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ErrorDirectiveHandler.java
  class ErrorDirectiveHandler (line 33) | public class ErrorDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getArgumentType (line 40) | @Override
    method getReference (line 45) | @Override
    method process (line 50) | protected void process(final PreprocessorContext context, final String...
    method execute (line 56) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ExcludeIfDirectiveHandler.java
  class ExcludeIfDirectiveHandler (line 34) | public class ExcludeIfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getReference (line 41) | @Override
    method isGlobalPhaseAllowed (line 46) | @Override
    method isPreprocessingPhaseAllowed (line 51) | @Override
    method getArgumentType (line 56) | @Override
    method execute (line 61) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ExitDirectiveHandler.java
  class ExitDirectiveHandler (line 33) | public class ExitDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method execute (line 45) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/ExitIfDirectiveHandler.java
  class ExitIfDirectiveHandler (line 36) | public class ExitIfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 38) | @Override
    method getReference (line 43) | @Override
    method getArgumentType (line 48) | @Override
    method execute (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/FlushDirectiveHandler.java
  class FlushDirectiveHandler (line 36) | public class FlushDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 38) | @Override
    method getReference (line 43) | @Override
    method execute (line 48) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalDirectiveHandler.java
  class GlobalDirectiveHandler (line 34) | public class GlobalDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getArgumentType (line 41) | @Override
    method execute (line 46) | @Override
    method getReference (line 53) | @Override
    method isGlobalPhaseAllowed (line 58) | @Override
    method isPreprocessingPhaseAllowed (line 63) | @Override
    method processDefinition (line 68) | private void processDefinition(final String string, final Preprocessor...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalElseDirectiveHandler.java
  class GlobalElseDirectiveHandler (line 33) | public class GlobalElseDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method isGlobalPhaseAllowed (line 45) | @Override
    method isPreprocessingPhaseAllowed (line 50) | @Override
    method execute (line 55) | @Override
    method executeOnlyWhenExecutionAllowed (line 75) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalEndIfDirectiveHandler.java
  class GlobalEndIfDirectiveHandler (line 33) | public class GlobalEndIfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method executeOnlyWhenExecutionAllowed (line 41) | @Override
    method getReference (line 46) | @Override
    method isGlobalPhaseAllowed (line 51) | @Override
    method isPreprocessingPhaseAllowed (line 56) | @Override
    method execute (line 61) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalIfDirectiveHandler.java
  class GlobalIfDirectiveHandler (line 36) | public class GlobalIfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 38) | @Override
    method getReference (line 43) | @Override
    method getArgumentType (line 48) | @Override
    method executeOnlyWhenExecutionAllowed (line 53) | @Override
    method isGlobalPhaseAllowed (line 58) | @Override
    method isPreprocessingPhaseAllowed (line 63) | @Override
    method execute (line 68) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDefDirectiveHandler.java
  class IfDefDirectiveHandler (line 29) | public class IfDefDirectiveHandler extends IfDefinedDirectiveHandler {
    method getName (line 31) | @Override
    method getReference (line 36) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDefinedDirectiveHandler.java
  class IfDefinedDirectiveHandler (line 33) | public class IfDefinedDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method postprocessFlag (line 46) | protected boolean postprocessFlag(final boolean variableExists) {
    method executeOnlyWhenExecutionAllowed (line 50) | @Override
    method getArgumentType (line 55) | @Override
    method execute (line 60) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDirectiveHandler.java
  class IfDirectiveHandler (line 36) | public class IfDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 38) | @Override
    method getReference (line 43) | @Override
    method getArgumentType (line 49) | @Override
    method executeOnlyWhenExecutionAllowed (line 54) | @Override
    method execute (line 59) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/IfNDefDirectiveHandler.java
  class IfNDefDirectiveHandler (line 29) | public class IfNDefDirectiveHandler extends IfDefinedDirectiveHandler {
    method getName (line 31) | @Override
    method postprocessFlag (line 36) | @Override
    method getReference (line 41) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/IncludeDirectiveHandler.java
  class IncludeDirectiveHandler (line 38) | public class IncludeDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 40) | @Override
    method getReference (line 45) | @Override
    method getArgumentType (line 50) | @Override
    method execute (line 55) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/LocalDirectiveHandler.java
  class LocalDirectiveHandler (line 34) | public class LocalDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method execute (line 41) | @Override
    method getReference (line 48) | @Override
    method getArgumentType (line 53) | @Override
    method processLocalDefinition (line 58) | private void processLocalDefinition(final String string, final Preproc...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/MsgDirectiveHandler.java
  class MsgDirectiveHandler (line 32) | public class MsgDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getArgumentType (line 39) | @Override
    method getReference (line 44) | @Override
    method execute (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/NoAutoFlushHandler.java
  class NoAutoFlushHandler (line 33) | public class NoAutoFlushHandler extends AbstractDirectiveHandler {
    method getName (line 35) | @Override
    method getReference (line 40) | @Override
    method execute (line 45) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/OutDisabledDirectiveHandler.java
  class OutDisabledDirectiveHandler (line 32) | public class OutDisabledDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method execute (line 45) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/OutEnabledDirectiveHandler.java
  class OutEnabledDirectiveHandler (line 32) | public class OutEnabledDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method execute (line 44) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/OutNameDirectiveHandler.java
  class OutNameDirectiveHandler (line 34) | public class OutNameDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getReference (line 41) | @Override
    method getArgumentType (line 47) | @Override
    method execute (line 52) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/OutdirDirectiveHandler.java
  class OutdirDirectiveHandler (line 34) | public class OutdirDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 36) | @Override
    method getReference (line 41) | @Override
    method getArgumentType (line 47) | @Override
    method execute (line 52) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/PostfixDirectiveHandler.java
  class PostfixDirectiveHandler (line 32) | public class PostfixDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method getArgumentType (line 44) | @Override
    method execute (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/PrefixDirectiveHandler.java
  class PrefixDirectiveHandler (line 32) | public class PrefixDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method getArgumentType (line 44) | @Override
    method execute (line 49) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/UndefDirectiveHandler.java
  class UndefDirectiveHandler (line 32) | public class UndefDirectiveHandler extends DefineDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method process (line 44) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/WarningDirectiveHandler.java
  class WarningDirectiveHandler (line 32) | public class WarningDirectiveHandler extends ErrorDirectiveHandler {
    method getName (line 34) | @Override
    method getReference (line 39) | @Override
    method process (line 44) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/directives/WhileDirectiveHandler.java
  class WhileDirectiveHandler (line 36) | public class WhileDirectiveHandler extends AbstractDirectiveHandler {
    method getName (line 38) | @Override
    method getReference (line 43) | @Override
    method executeOnlyWhenExecutionAllowed (line 48) | @Override
    method getArgumentType (line 53) | @Override
    method execute (line 58) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/exceptions/FilePositionInfo.java
  class FilePositionInfo (line 34) | public class FilePositionInfo {
    method FilePositionInfo (line 46) | public FilePositionInfo(final File file, final int stringIndex) {
    method getFile (line 53) | public File getFile() {
    method getStringIndex (line 62) | public int getStringIndex() {
    method getLineNumber (line 71) | public int getLineNumber() {
    method toShortString (line 75) | public String toShortString() {
    method toString (line 79) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/exceptions/PreprocessorException.java
  class PreprocessorException (line 33) | public class PreprocessorException extends RuntimeException {
    method PreprocessorException (line 40) | public PreprocessorException(final String message, final String proces...
    method makeStackView (line 49) | private static String makeStackView(final FilePositionInfo[] list, fin...
    method extractPreprocessorException (line 75) | public static PreprocessorException extractPreprocessorException(final...
    method referenceAsString (line 90) | public static String referenceAsString(final char fillChar, final Thro...
    method getRootFile (line 111) | public File getRootFile() {
    method getProcessingFile (line 120) | public File getProcessingFile() {
    method getLineNumber (line 128) | public int getLineNumber() {
    method getProcessingString (line 137) | public String getProcessingString() {
    method convertIncludeStackToString (line 142) | private String convertIncludeStackToString() {
    method getIncludeChain (line 153) | public FilePositionInfo[] getIncludeChain() {
    method toString (line 157) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/Expression.java
  class Expression (line 45) | public class Expression {
    method Expression (line 62) | private Expression(final ExpressionTree tree) {
    method evalExpression (line 73) | public static Value evalExpression(final String expression, final Prep...
    method evalTree (line 91) | public static Value evalTree(final ExpressionTree tree, final Preproce...
    method evalFunction (line 96) | private ExpressionTreeElement evalFunction(
    method evalOperator (line 221) | private ExpressionTreeElement evalOperator(final ExpressionTreeElement...
    method calculateTreeElement (line 322) | private ExpressionTreeElement calculateTreeElement(final ExpressionTre...
    method eval (line 357) | private Value eval(final PreprocessorContext context) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItem.java
  type ExpressionItem (line 30) | public interface ExpressionItem {
    method getExpressionItemType (line 37) | ExpressionItemType getExpressionItemType();
    method getExpressionItemPriority (line 44) | ExpressionItemPriority getExpressionItemPriority();

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItemPriority.java
  type ExpressionItemPriority (line 24) | public enum ExpressionItemPriority {
    method ExpressionItemPriority (line 35) | ExpressionItemPriority(final int priority) {
    method getPriority (line 39) | public int getPriority() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItemType.java
  type ExpressionItemType (line 24) | public enum ExpressionItemType {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionParser.java
  class ExpressionParser (line 51) | public final class ExpressionParser {
    method getInstance (line 58) | public static ExpressionParser getInstance() {
    method isDelimiterOrOperatorChar (line 62) | private static boolean isDelimiterOrOperatorChar(final char chr) {
    method isDelimiter (line 66) | private static boolean isDelimiter(final char chr) {
    method isOperatorChar (line 77) | private static boolean isOperatorChar(final char chr) {
    method parse (line 105) | public ExpressionTree parse(final String expressionStr, final Preproce...
    method readExpression (line 136) | public ExpressionItem readExpression(
    method readFunction (line 211) | private ExpressionTree readFunction(
    method readFunctionArgument (line 291) | ExpressionItem readFunctionArgument(final PushbackReader reader, final...
    method hex2int (line 326) | private int hex2int(final PreprocessorContext context, final char chr) {
    method nextItem (line 347) | ExpressionItem nextItem(final PushbackReader reader, final Preprocesso...
    type ParserState (line 652) | private enum ParserState {
    type SpecialItem (line 673) | public enum SpecialItem implements ExpressionItem {
      method SpecialItem (line 679) | SpecialItem() {
      method getExpressionItemPriority (line 682) | @Override
      method getExpressionItemType (line 687) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionTree.java
  class ExpressionTree (line 34) | public class ExpressionTree {
    method ExpressionTree (line 40) | public ExpressionTree() {
    method ExpressionTree (line 44) | public ExpressionTree(final FilePositionInfo[] callStack, final String...
    method isEmpty (line 54) | public boolean isEmpty() {
    method addItem (line 63) | public void addItem(final ExpressionItem item) {
    method addTree (line 85) | public void addTree(final ExpressionTree tree) {
    method getRoot (line 103) | public ExpressionTreeElement getRoot() {
    method postProcess (line 123) | public void postProcess() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionTreeElement.java
  class ExpressionTreeElement (line 42) | public class ExpressionTreeElement {
    method toString (line 91) | @Override
    method ExpressionTreeElement (line 96) | private ExpressionTreeElement() {
    method ExpressionTreeElement (line 108) | ExpressionTreeElement(final ExpressionItem item, final FilePositionInf...
    method extractEffectiveChildren (line 142) | public List<ExpressionTreeElement> extractEffectiveChildren() {
    method getExpectedArities (line 153) | public Set<Integer> getExpectedArities() {
    method isEmptySlot (line 162) | public boolean isEmptySlot() {
    method assertNotEmptySlot (line 166) | private void assertNotEmptySlot() {
    method makeMaxPriority (line 175) | void makeMaxPriority() {
    method getItem (line 185) | public ExpressionItem getItem() {
    method getParent (line 195) | public ExpressionTreeElement getParent() {
    method getPriority (line 204) | public int getPriority() {
    method addSubTree (line 215) | public ExpressionTreeElement addSubTree(final ExpressionTree tree) {
    method replaceElement (line 233) | public boolean replaceElement(final ExpressionTreeElement oldOne,
    method getChildForIndex (line 268) | public ExpressionTreeElement getChildForIndex(final int index) {
    method addTreeElement (line 280) | public ExpressionTreeElement addTreeElement(final ExpressionTreeElemen...
    method isFull (line 332) | public boolean isFull() {
    method fillArguments (line 341) | public void fillArguments(final List<ExpressionTree> arguments) {
    method addElementToNextFreeSlot (line 386) | private void addElementToNextFreeSlot(final ExpressionTreeElement elem...
    method postProcess (line 409) | public void postProcess() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/Value.java
  class Value (line 33) | public final class Value implements ExpressionItem {
    method Value (line 48) | private Value(final String val) {
    method Value (line 53) | private Value(final Long val) {
    method Value (line 58) | private Value(final Float val) {
    method Value (line 63) | private Value(final Boolean val) {
    method valueOf (line 69) | public static Value valueOf(final Long val) {
    method valueOf (line 74) | public static Value valueOf(final Boolean val) {
    method valueOf (line 79) | public static Value valueOf(final Float val) {
    method valueOf (line 84) | public static Value valueOf(final String val) {
    method recognizeRawString (line 89) | public static Value recognizeRawString(final String str) {
    method recognizeOf (line 116) | public static Value recognizeOf(final String str) {
    method getValue (line 147) | public static Object getValue(final String value, final ValueType type) {
    method recognizeType (line 178) | public static ValueType recognizeType(final String value) {
    method getType (line 210) | public ValueType getType() {
    method getValue (line 215) | public Object getValue() {
    method asLong (line 220) | public Long asLong() {
    method asFloat (line 228) | public Float asFloat() {
    method asString (line 236) | public String asString() {
    method asBoolean (line 244) | public Boolean asBoolean() {
    method toStringDetail (line 252) | public String toStringDetail() {
    method toString (line 273) | @Override
    method toBoolean (line 291) | public boolean toBoolean() {
    method getExpressionItemType (line 306) | @Override
    method getExpressionItemPriority (line 311) | @Override
    method equals (line 316) | @Override
    method hashCode (line 330) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/ValueType.java
  type ValueType (line 30) | public enum ValueType {
    method ValueType (line 39) | ValueType(final String signature) {
    method getSignature (line 44) | public String getSignature() {
    method isCompatible (line 54) | public boolean isCompatible(final ValueType type) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/Variable.java
  class Variable (line 31) | public final class Variable implements ExpressionItem {
    method Variable (line 43) | public Variable(final String varName) {
    method getName (line 54) | public String getName() {
    method getExpressionItemType (line 63) | @Override
    method getExpressionItemPriority (line 74) | @Override
    method toString (line 80) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/AbstractFunction.java
  class AbstractFunction (line 53) | public abstract class AbstractFunction implements ExpressionItem {
    method findAllFunctions (line 112) | public static List<AbstractFunction> findAllFunctions() {
    method getFunctionNameMap (line 123) | public static Map<String, AbstractFunction> getFunctionNameMap() {
    method findForClass (line 140) | public static <E extends AbstractFunction> E findForClass(final Class<...
    method findForName (line 158) | public static AbstractFunction findForName(final String functionName) {
    method getName (line 167) | public abstract String getName();
    method getReference (line 174) | public abstract String getReference();
    method getArity (line 182) | public abstract Set<Integer> getArity();
    method getAllowedArgumentTypes (line 190) | public abstract List<List<ValueType>> getAllowedArgumentTypes();
    method getResultType (line 197) | public abstract ValueType getResultType();
    method getExpressionItemPriority (line 204) | @Override
    method getExpressionItemType (line 215) | @Override
    method toString (line 220) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/AbstractStrConverter.java
  class AbstractStrConverter (line 35) | public abstract class AbstractStrConverter extends AbstractFunction {
    method executeStr (line 40) | public abstract Value executeStr(final PreprocessorContext context, fi...
    method getArity (line 42) | @Override
    method getAllowedArgumentTypes (line 47) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionABS.java
  class FunctionABS (line 35) | public final class FunctionABS extends AbstractFunction {
    method getName (line 40) | @Override
    method executeInt (line 45) | public Value executeInt(final PreprocessorContext context, final Value...
    method executeFloat (line 49) | public Value executeFloat(final PreprocessorContext context, final Val...
    method getArity (line 53) | @Override
    method getAllowedArgumentTypes (line 58) | @Override
    method getReference (line 63) | @Override
    method getResultType (line 68) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionBINFILE.java
  class FunctionBINFILE (line 45) | public class FunctionBINFILE extends AbstractFunction {
    method hasSplitFlag (line 50) | private static boolean hasSplitFlag(final String name, final Type type) {
    method hasDeflateFlag (line 55) | private static boolean hasDeflateFlag(final String name, final Type ty...
    method convertTo (line 61) | private static String convertTo(final File file, final Type type, fina...
    method deflate (line 131) | private static byte[] deflate(final byte[] data) throws IOException {
    method getName (line 151) | @Override
    method getReference (line 156) | @Override
    method getArity (line 170) | @Override
    method getAllowedArgumentTypes (line 175) | @Override
    method getResultType (line 180) | @Override
    method executeStrStr (line 186) | public Value executeStrStr(final PreprocessorContext context, final Va...
    type Type (line 216) | private enum Type {
      method Type (line 224) | Type(final String name) {
      method find (line 229) | public static Type find(final String name) {
      method getName (line 244) | public String getName() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionDefinedByUser.java
  class FunctionDefinedByUser (line 43) | public final class FunctionDefinedByUser extends AbstractFunction {
    method FunctionDefinedByUser (line 59) | public FunctionDefinedByUser(final String name, final Set<Integer> all...
    method getName (line 102) | @Override
    method getArity (line 107) | @Override
    method execute (line 113) | public Value execute(final PreprocessorContext context, final List<Val...
    method getAllowedArgumentTypes (line 135) | @Override
    method getReference (line 140) | @Override
    method getResultType (line 145) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionESC.java
  class FunctionESC (line 34) | public final class FunctionESC extends AbstractFunction {
    method getName (line 38) | @Override
    method executeStr (line 43) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 89) | @Override
    method getAllowedArgumentTypes (line 94) | @Override
    method getReference (line 99) | @Override
    method getResultType (line 104) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionEVALFILE.java
  class FunctionEVALFILE (line 43) | public class FunctionEVALFILE extends AbstractFunction {
    method getName (line 47) | @Override
    method getReference (line 52) | @Override
    method getArity (line 57) | @Override
    method getAllowedArgumentTypes (line 62) | @Override
    method getResultType (line 67) | @Override
    method prepareContext (line 72) | private PreprocessorContext prepareContext(final PreprocessorContext b...
    method executeStr (line 82) | public Value executeStr(final PreprocessorContext context, final Value...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionIS.java
  class FunctionIS (line 35) | public final class FunctionIS extends AbstractFunction {
    method getName (line 40) | @Override
    method executeStrAny (line 46) | public Value executeStrAny(
    method getArity (line 62) | @Override
    method getAllowedArgumentTypes (line 67) | @Override
    method getReference (line 72) | @Override
    method getResultType (line 77) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionISSUBSTR.java
  class FunctionISSUBSTR (line 35) | public final class FunctionISSUBSTR extends AbstractFunction {
    method getName (line 40) | @Override
    method executeStrStr (line 45) | public Value executeStrStr(final PreprocessorContext context, final Va...
    method getArity (line 52) | @Override
    method getAllowedArgumentTypes (line 57) | @Override
    method getReference (line 62) | @Override
    method getResultType (line 67) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionROUND.java
  class FunctionROUND (line 35) | public final class FunctionROUND extends AbstractFunction {
    method getName (line 40) | @Override
    method executeInt (line 45) | public Value executeInt(final PreprocessorContext context, final Value...
    method executeFloat (line 49) | public Value executeFloat(final PreprocessorContext context, final Val...
    method getArity (line 53) | @Override
    method getAllowedArgumentTypes (line 58) | @Override
    method getReference (line 63) | @Override
    method getResultType (line 68) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2CSV.java
  class FunctionSTR2CSV (line 35) | public final class FunctionSTR2CSV extends AbstractStrConverter {
    method getName (line 37) | @Override
    method executeStr (line 42) | @Override
    method getReference (line 48) | @Override
    method getResultType (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2GO.java
  class FunctionSTR2GO (line 36) | public final class FunctionSTR2GO extends AbstractFunction {
    method toUnicode (line 41) | private static String toUnicode(final char c) {
    method escapeGo (line 51) | private static String escapeGo(final String value) {
    method getName (line 103) | @Override
    method executeStrBool (line 109) | public Value executeStrBool(final PreprocessorContext context, final V...
    method getArity (line 137) | @Override
    method getAllowedArgumentTypes (line 142) | @Override
    method getReference (line 147) | @Override
    method getResultType (line 153) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2INT.java
  class FunctionSTR2INT (line 33) | public final class FunctionSTR2INT extends AbstractStrConverter {
    method getName (line 35) | @Override
    method executeStr (line 40) | @Override
    method getReference (line 45) | @Override
    method getResultType (line 50) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JAVA.java
  class FunctionSTR2JAVA (line 38) | public final class FunctionSTR2JAVA extends AbstractFunction {
    method getName (line 43) | @Override
    method executeStrBool (line 48) | public Value executeStrBool(final PreprocessorContext context, final V...
    method getArity (line 76) | @Override
    method getAllowedArgumentTypes (line 81) | @Override
    method getReference (line 86) | @Override
    method getResultType (line 91) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JS.java
  class FunctionSTR2JS (line 35) | public final class FunctionSTR2JS extends AbstractStrConverter {
    method getName (line 37) | @Override
    method executeStr (line 42) | @Override
    method getReference (line 48) | @Override
    method getResultType (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JSON.java
  class FunctionSTR2JSON (line 35) | public final class FunctionSTR2JSON extends AbstractStrConverter {
    method getName (line 37) | @Override
    method executeStr (line 42) | @Override
    method getReference (line 48) | @Override
    method getResultType (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2WEB.java
  class FunctionSTR2WEB (line 35) | public final class FunctionSTR2WEB extends AbstractStrConverter {
    method getName (line 37) | @Override
    method executeStr (line 42) | @Override
    method getReference (line 59) | @Override
    method getResultType (line 64) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2XML.java
  class FunctionSTR2XML (line 35) | public final class FunctionSTR2XML extends AbstractStrConverter {
    method getName (line 37) | @Override
    method executeStr (line 42) | @Override
    method getReference (line 48) | @Override
    method getResultType (line 53) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTRLEN.java
  class FunctionSTRLEN (line 35) | public final class FunctionSTRLEN extends AbstractFunction {
    method getName (line 39) | @Override
    method executeStr (line 45) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 49) | @Override
    method getAllowedArgumentTypes (line 54) | @Override
    method getReference (line 59) | @Override
    method getResultType (line 65) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionTRIMLINES.java
  class FunctionTRIMLINES (line 34) | public final class FunctionTRIMLINES extends AbstractStrConverter {
    method getName (line 36) | @Override
    method executeStr (line 41) | @Override
    method getReference (line 59) | @Override
    method getResultType (line 64) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/AbstractXMLFunction.java
  class AbstractXMLFunction (line 36) | public abstract class AbstractXMLFunction extends AbstractFunction {
    method makeElementListId (line 39) | public static String makeElementListId(final Element parentName, final...
    method makeDocumentId (line 44) | public static String makeDocumentId(final String fileName) {
    method makeDocumentRootId (line 49) | public static String makeDocumentRootId(final String documentId) {
    method makeElementId (line 54) | public static String makeElementId(final String elementListId, final i...
    method makeXPathListId (line 59) | public static String makeXPathListId(final String documentId, final St...
    method makeXPathElementId (line 64) | public static String makeXPathElementId(final String documentId, final...
    method buildPathForElement (line 69) | public static String buildPathForElement(final Element element) {
    method getFirstLevelTextContent (line 90) | public static String getFirstLevelTextContent(final Node node) {
    method prepareXPathExpression (line 103) | protected static XPathExpression prepareXPathExpression(final String p...
    method getAttribute (line 111) | public String getAttribute(final PreprocessorContext context, final St...
    method getCachedDocument (line 127) | public Document getCachedDocument(final PreprocessorContext context, f...
    method findCachedElement (line 142) | public Element findCachedElement(final PreprocessorContext context, fi...
    method getCachedElement (line 156) | public Element getCachedElement(final PreprocessorContext context, fin...
    method findCachedElementList (line 166) | public NodeList findCachedElementList(final PreprocessorContext context,
    method getCachedElementList (line 180) | public NodeList getCachedElementList(final PreprocessorContext context,
    method getElementListSize (line 191) | public int getElementListSize(final PreprocessorContext context, final...
    method findElementForIndex (line 196) | public String findElementForIndex(final PreprocessorContext context, f...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ATTR.java
  class FunctionXML_ATTR (line 35) | public final class FunctionXML_ATTR extends AbstractXMLFunction {
    method getName (line 40) | @Override
    method executeStrStr (line 46) | public Value executeStrStr(final PreprocessorContext context, final Va...
    method getArity (line 51) | @Override
    method getAllowedArgumentTypes (line 56) | @Override
    method getReference (line 61) | @Override
    method getResultType (line 66) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_GET.java
  class FunctionXML_GET (line 35) | public final class FunctionXML_GET extends AbstractXMLFunction {
    method getName (line 40) | @Override
    method executeStrInt (line 45) | public Value executeStrInt(final PreprocessorContext context, final Va...
    method getArity (line 51) | @Override
    method getAllowedArgumentTypes (line 56) | @Override
    method getReference (line 61) | @Override
    method getResultType (line 66) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_LIST.java
  class FunctionXML_LIST (line 37) | public final class FunctionXML_LIST extends AbstractXMLFunction {
    method getName (line 42) | @Override
    method executeStrStr (line 47) | public Value executeStrStr(final PreprocessorContext context, final Va...
    method getArity (line 63) | @Override
    method getAllowedArgumentTypes (line 68) | @Override
    method getReference (line 73) | @Override
    method getResultType (line 78) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_NAME.java
  class FunctionXML_NAME (line 36) | public final class FunctionXML_NAME extends AbstractXMLFunction {
    method getName (line 40) | @Override
    method executeStr (line 45) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 50) | @Override
    method getAllowedArgumentTypes (line 55) | @Override
    method getReference (line 60) | @Override
    method getResultType (line 65) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_OPEN.java
  class FunctionXML_OPEN (line 43) | public final class FunctionXML_OPEN extends AbstractXMLFunction {
    method getName (line 50) | @Override
    method executeStr (line 56) | public Value executeStr(final PreprocessorContext context, final Value...
    method openFileAndParse (line 81) | private Document openFileAndParse(final PreprocessorContext context, f...
    method getArity (line 98) | @Override
    method getAllowedArgumentTypes (line 103) | @Override
    method getReference (line 108) | @Override
    method getResultType (line 113) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ROOT.java
  class FunctionXML_ROOT (line 35) | public final class FunctionXML_ROOT extends AbstractXMLFunction {
    method getName (line 39) | @Override
    method executeStr (line 44) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 54) | @Override
    method getAllowedArgumentTypes (line 59) | @Override
    method getReference (line 64) | @Override
    method getResultType (line 69) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_SIZE.java
  class FunctionXML_SIZE (line 35) | public final class FunctionXML_SIZE extends AbstractXMLFunction {
    method getName (line 39) | @Override
    method executeStr (line 44) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 48) | @Override
    method getAllowedArgumentTypes (line 53) | @Override
    method getReference (line 58) | @Override
    method getResultType (line 63) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_TEXT.java
  class FunctionXML_TEXT (line 36) | public final class FunctionXML_TEXT extends AbstractXMLFunction {
    method getName (line 40) | @Override
    method executeStr (line 45) | public Value executeStr(final PreprocessorContext context, final Value...
    method getArity (line 50) | @Override
    method getAllowedArgumentTypes (line 55) | @Override
    method getReference (line 60) | @Override
    method getResultType (line 65) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XELEMENT.java
  class FunctionXML_XELEMENT (line 40) | public final class FunctionXML_XELEMENT extends AbstractXMLFunction {
    method getName (line 45) | @Override
    method executeStrStr (line 50) | public Value executeStrStr(final PreprocessorContext context, final Va...
    method getArity (line 77) | @Override
    method getAllowedArgumentTypes (line 82) | @Override
    method getReference (line 87) | @Override
    method getResultType (line 92) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XLIST.java
  class FunctionXML_XLIST (line 40) | public final class FunctionXML_XLIST extends AbstractXMLFunction {
    method getName (line 45) | @Override
    method executeStrStr (line 50) | public Value executeStrStr(final PreprocessorContext context, final Va...
    method getArity (line 72) | @Override
    method getAllowedArgumentTypes (line 77) | @Override
    method getReference (line 82) | @Override
    method getResultType (line 87) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/NodeContainer.java
  class NodeContainer (line 34) | public class NodeContainer {
    method NodeContainer (line 40) | public NodeContainer(final long id, final Node node) {
    method NodeContainer (line 47) | public NodeContainer(final long id, final NodeList list) {
    method getNodeList (line 55) | public NodeList getNodeList() {
    method getNode (line 60) | public Node getNode() {
    method getId (line 64) | public long getId() {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/AbstractOperator.java
  class AbstractOperator (line 34) | public abstract class AbstractOperator implements ExpressionItem {
    method getAllOperators (line 66) | public static List<AbstractOperator> getAllOperators() {
    method findForClass (line 81) | public static <E extends AbstractOperator> E findForClass(final Class<...
    method getExpressionItemType (line 95) | @Override
    method getArity (line 105) | public abstract int getArity();
    method getKeyword (line 112) | public abstract String getKeyword();
    method getReference (line 119) | public abstract String getReference();
    method toString (line 121) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorADD.java
  class OperatorADD (line 32) | public final class OperatorADD extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 57) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatInt (line 67) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeStrAny (line 72) | public Value executeStrAny(final Value arg1, final Value arg2) {
    method executeAnyStr (line 77) | public Value executeAnyStr(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 81) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorAND.java
  class OperatorAND (line 32) | public final class OperatorAND extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeBoolBool (line 57) | public Value executeBoolBool(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 61) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorDIV.java
  class OperatorDIV (line 32) | public final class OperatorDIV extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 57) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatInt (line 62) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorEQU.java
  class OperatorEQU (line 32) | public final class OperatorEQU extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method executeBoolBool (line 77) | public Value executeBoolBool(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 81) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorGREAT.java
  class OperatorGREAT (line 32) | public final class OperatorGREAT extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 76) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorGREATEQU.java
  class OperatorGREATEQU (line 32) | public final class OperatorGREATEQU extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 76) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorLESS.java
  class OperatorLESS (line 32) | public final class OperatorLESS extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 76) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorLESSEQU.java
  class OperatorLESSEQU (line 32) | public final class OperatorLESSEQU extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 76) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorMOD.java
  class OperatorMOD (line 32) | public final class OperatorMOD extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 57) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatInt (line 62) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorMUL.java
  class OperatorMUL (line 32) | public final class OperatorMUL extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 57) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatInt (line 62) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorNOT.java
  class OperatorNOT (line 32) | public class OperatorNOT extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeInt (line 52) | public Value executeInt(final Value arg1) {
    method executeBool (line 57) | public Value executeBool(final Value arg1) {
    method getExpressionItemPriority (line 62) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorNOTEQU.java
  class OperatorNOTEQU (line 32) | public final class OperatorNOTEQU extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeFloatInt (line 57) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 62) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method executeStrStr (line 72) | public Value executeStrStr(final Value arg1, final Value arg2) {
    method executeBoolBool (line 77) | public Value executeBoolBool(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 81) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorOR.java
  class OperatorOR (line 32) | public final class OperatorOR extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeBoolBool (line 57) | public Value executeBoolBool(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 61) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorSUB.java
  class OperatorSUB (line 32) | public final class OperatorSUB extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeIntFloat (line 57) | public Value executeIntFloat(final Value arg1, final Value arg2) {
    method executeFloatInt (line 62) | public Value executeFloatInt(final Value arg1, final Value arg2) {
    method executeFloatFloat (line 67) | public Value executeFloatFloat(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 71) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorXOR.java
  class OperatorXOR (line 32) | public class OperatorXOR extends AbstractOperator {
    method getArity (line 34) | @Override
    method getReference (line 39) | @Override
    method getKeyword (line 45) | @Override
    method executeIntInt (line 52) | public Value executeIntInt(final Value arg1, final Value arg2) {
    method executeBoolBool (line 57) | public Value executeBoolBool(final Value arg1, final Value arg2) {
    method getExpressionItemPriority (line 61) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/extension/LogPreprocessorExtension.java
  class LogPreprocessorExtension (line 20) | public class LogPreprocessorExtension implements PreprocessorExtension {
    method findPosition (line 24) | private static String findPosition(final PreprocessorContext context) {
    method hasAction (line 39) | @Override
    method hasUserFunction (line 44) | @Override
    method processAction (line 49) | @Override
    method processUserFunction (line 57) | @Override
    method getUserFunctionArity (line 67) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/extension/PreprocessorExtension.java
  type PreprocessorExtension (line 37) | public interface PreprocessorExtension extends PreprocessorContextAware,...
    method isAllowed (line 39) | @Override
    method hasAction (line 51) | boolean hasAction(int arity);
    method hasUserFunction (line 61) | boolean hasUserFunction(String name, Set<Integer> arity);
    method processAction (line 73) | boolean processAction(PreprocessorContext context, List<Value> paramet...
    method processUserFunction (line 85) | Value processUserFunction(PreprocessorContext context, String function...
    method getUserFunctionArity (line 97) | Set<Integer> getUserFunctionArity(String functionName);

FILE: jcp/src/main/java/com/igormaznitsa/jcp/gradle/JcpGradlePlugin.java
  class JcpGradlePlugin (line 6) | public class JcpGradlePlugin implements Plugin<Project> {
    method apply (line 8) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/gradle/JcpTask.java
  class JcpTask (line 41) | public class JcpTask extends DefaultTask {
    method JcpTask (line 175) | @Inject
    method getOutcomingFiles (line 214) | @OutputFiles
    method getIncomingFiles (line 219) | @Internal
    method getDescription (line 224) | @Internal
    method getSources (line 230) | @InputFiles
    method getEol (line 235) | @Input
    method getKeepAttributes (line 240) | @Input
    method getTarget (line 245) | @Input
    method getSourceEncoding (line 250) | @Input
    method getTargetEncoding (line 255) | @Input
    method getIgnoreMissingSources (line 260) | @Input
    method getExcludeExtensions (line 265) | @Input
    method getFileExtensions (line 270) | @Input
    method getUnknownVarAsFalse (line 275) | @Input
    method getDryRun (line 280) | @Input
    method getAllowBlocks (line 285) | @Input
    method getVerbose (line 290) | @Input
    method getClearTarget (line 295) | @Input
    method getBaseDir (line 300) | @Input
    method getActionPreprocessorExtensions (line 305) | @Input
    method getCareForLastEol (line 310) | @Input
    method getKeepComments (line 315) | @Input
    method getVars (line 320) | @Input
    method getExcludeFolders (line 325) | @Input
    method getConfigFiles (line 330) | @Input
    method getKeepLines (line 335) | @Input
    method getAllowWhitespaces (line 340) | @Input
    method getPreserveIndents (line 345) | @Input
    method getDontOverwriteSameContent (line 350) | @Input
    method preprocessTask (line 355) | @TaskAction

FILE: jcp/src/main/java/com/igormaznitsa/jcp/logger/PreprocessorLogger.java
  type PreprocessorLogger (line 31) | public interface PreprocessorLogger {
    method error (line 38) | void error(String message);
    method info (line 45) | void info(String message);
    method debug (line 53) | void debug(String message);
    method debug (line 61) | default void debug(Supplier<String> supplier) {
    method warning (line 72) | void warning(String message);

FILE: jcp/src/main/java/com/igormaznitsa/jcp/logger/SystemOutLogger.java
  class SystemOutLogger (line 29) | public final class SystemOutLogger implements PreprocessorLogger {
    method hashCode (line 40) | @Override
    method equals (line 45) | @Override
    method error (line 50) | @Override
    method info (line 58) | @Override
    method warning (line 66) | @Override
    method debug (line 74) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/maven/MavenPropertiesImporter.java
  class MavenPropertiesImporter (line 44) | public class MavenPropertiesImporter implements SpecialVariableProcessor {
    method MavenPropertiesImporter (line 82) | public MavenPropertiesImporter(final PreprocessorContext context,
    method getProperty (line 116) | static String getProperty(final MavenProject project, final String nam...
    method normalizeGetter (line 152) | static String normalizeGetter(final String str) {
    method findPropertyValue (line 156) | private String findPropertyValue(final String key) {
    method printInfoAboutVarIntoLog (line 163) | private void printInfoAboutVarIntoLog(final PreprocessorContext contex...
    method addVariableIntoInternalMap (line 172) | private void addVariableIntoInternalMap(final PreprocessorContext cont...
    method getVariableNames (line 183) | @Override
    method getVariable (line 188) | @Override
    method setVariable (line 196) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/maven/PreprocessMojo.java
  class PreprocessMojo (line 65) | @Data
    method formSourceRootList (line 324) | private List<String> formSourceRootList() {
    method replaceSourceRootByPreprocessingDestinationFolder (line 347) | private void replaceSourceRootByPreprocessingDestinationFolder(final P...
    method makePreprocessorContext (line 380) | PreprocessorContext makePreprocessorContext() throws AbstractMojoExecu...
    method execute (line 474) | @Override
    method error (line 515) | @Override
    method info (line 520) | @Override
    method warning (line 525) | @Override
    method debug (line 530) | @Override
    method debug (line 535) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/removers/AbstractCommentRemover.java
  class AbstractCommentRemover (line 10) | public abstract class AbstractCommentRemover {
    method AbstractCommentRemover (line 16) | protected AbstractCommentRemover(
    method makeCommentRemover (line 28) | public static AbstractCommentRemover makeCommentRemover(
    method process (line 45) | public abstract Writer process() throws IOException;
    method skipTillNextString (line 47) | protected void skipTillNextString() throws IOException {
    method skipTillClosingJavaComments (line 61) | protected void skipTillClosingJavaComments() throws IOException {
    method copyTillClosingJavaComments (line 81) | protected void copyTillClosingJavaComments() throws IOException {
    method copyTillNextString (line 102) | protected void copyTillNextString() throws IOException {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/removers/CStyleCommentRemover.java
  class CStyleCommentRemover (line 33) | public class CStyleCommentRemover extends AbstractCommentRemover {
    method CStyleCommentRemover (line 35) | public CStyleCommentRemover(final Reader src, final Writer dst,
    method process (line 40) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/removers/JcpCommentLineRemover.java
  class JcpCommentLineRemover (line 38) | public class JcpCommentLineRemover extends AbstractCommentRemover {
    method JcpCommentLineRemover (line 40) | public JcpCommentLineRemover(final Reader src, final Writer dst,
    method process (line 45) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/removers/JustCopyRemover.java
  class JustCopyRemover (line 7) | public class JustCopyRemover extends AbstractCommentRemover {
    method JustCopyRemover (line 9) | public JustCopyRemover(final Reader src, final Writer dst,
    method process (line 14) | @Override

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/AntPathMatcher.java
  class AntPathMatcher (line 16) | public class AntPathMatcher {
    method AntPathMatcher (line 29) | public AntPathMatcher() {
    method AntPathMatcher (line 33) | public AntPathMatcher(String pathSeparator) {
    method tokenizeToStringArray (line 37) | public static String[] tokenizeToStringArray(
    method toStringArray (line 58) | public static String[] toStringArray(Collection<String> collection) {
    method isEmpty (line 62) | public static boolean isEmpty(Collection<?> collection) {
    method deactivatePatternCache (line 66) | private void deactivatePatternCache() {
    method match (line 72) | public boolean match(String pattern, String path) {
    method doMatch (line 76) | protected boolean doMatch(String pattern, String path, boolean fullMat...
    method isPotentialMatch (line 199) | private boolean isPotentialMatch(String path, String[] pattDirs) {
    method skipSegment (line 215) | private int skipSegment(String path, int pos, String prefix) {
    method skipSeparator (line 233) | private int skipSeparator(String path, int pos, String separator) {
    method isWildcardChar (line 241) | private boolean isWildcardChar(char c) {
    method tokenizePattern (line 250) | protected String[] tokenizePattern(String pattern) {
    method tokenizePath (line 269) | protected String[] tokenizePath(String path) {
    method matchStrings (line 273) | private boolean matchStrings(String pattern, String str) {
    method getStringMatcher (line 277) | protected AntPathStringMatcher getStringMatcher(String pattern) {
    class AntPathStringMatcher (line 296) | protected static class AntPathStringMatcher {
      method AntPathStringMatcher (line 311) | public AntPathStringMatcher(String pattern, boolean caseSensitive) {
      method quote (line 348) | private String quote(String s, int start, int end) {
      method matchStrings (line 355) | public boolean matchStrings(String str) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/ArrayUtils.java
  class ArrayUtils (line 26) | public final class ArrayUtils {
    method ArrayUtils (line 37) | private ArrayUtils() {
    method joinArrays (line 48) | @SafeVarargs

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/GetUtils.java
  class GetUtils (line 26) | public final class GetUtils {
    method GetUtils (line 28) | private GetUtils() {
    method ensureNonNull (line 41) | public static <T> T ensureNonNull(final T value, final T defaultValue) {
    method ensureNonNullStr (line 52) | public static String ensureNonNullStr(final String value) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/IOUtils.java
  class IOUtils (line 26) | public final class IOUtils {
    method IOUtils (line 28) | private IOUtils() {
    method closeQuietly (line 37) | public static Closeable closeQuietly(final Closeable closeable) {

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/PreprocessorUtils.java
  class PreprocessorUtils (line 65) | public final class PreprocessorUtils {
    method PreprocessorUtils (line 77) | private PreprocessorUtils() {
    method findActiveFileInfoContainer (line 88) | public static Optional<FileInfoContainer> findActiveFileInfoContainer(
    method extractFilePositionInfo (line 109) | public static FilePositionInfo extractFilePositionInfo(
    method fillContextByFoundServices (line 122) | public static void fillContextByFoundServices(final PreprocessorContex...
    method findAndInstantiatePreprocessorExtensionForClassName (line 166) | public static PreprocessorExtension findAndInstantiatePreprocessorExte...
    method findCommentRemoverForId (line 187) | public static CommentRemoverType findCommentRemoverForId(final String ...
    method getFileExtension (line 212) | public static String getFileExtension(final File file) {
    method makeFileReader (line 220) | public static BufferedReader makeFileReader(final File file, final Cha...
    method replaceChar (line 237) | public static String[] replaceChar(final String[] source,
    method extractTrimmedTail (line 247) | public static String extractTrimmedTail(final String prefix, final Str...
    method extractTail (line 251) | public static String extractTail(final String prefix, final String val...
    method copyFile (line 262) | public static void copyFile(final File source, final File dest, final ...
    method copyFileAttributes (line 281) | public static boolean copyFileAttributes(final File from, final File t...
    method replacePartByChar (line 289) | public static String replacePartByChar(final String text, final char c...
    method findAndInstantiateAllServices (line 308) | public static <T> List<T> findAndInstantiateAllServices(final Class<T>...
    method generateStringForChar (line 316) | public static String generateStringForChar(final char chr, final int l...
    method processMacroses (line 323) | public static String processMacroses(final String processingString,
    method checkFile (line 371) | private static void checkFile(final File file) throws IOException {
    method readWholeTextFileIntoArray (line 379) | public static String[] readWholeTextFileIntoArray(final File file, fin...
    method splitForEqualChar (line 442) | public static String[] splitForEqualChar(final String string) {
    method splitForCharAndHoldEmptyLine (line 457) | public static List<String> splitForCharAndHoldEmptyLine(final String s...
    method splitForChar (line 466) | public static List<String> splitForChar(final String string, final cha...
    method normalizeVariableName (line 492) | public static String normalizeVariableName(final String name) {
    method getFilePath (line 501) | public static String getFilePath(final File file) {
    method throwPreprocessorException (line 513) | public static void throwPreprocessorException(final String msg, final ...
    method replaceStringPrefix (line 520) | public static String[] replaceStringPrefix(
    method getNextLineCodes (line 548) | public static String getNextLineCodes() {
    method leftTrim (line 553) | public static String leftTrim(String rawString) {
    method isFileContentEquals (line 565) | public static boolean isFileContentEquals(final File src, final File d...

FILE: jcp/src/main/java/com/igormaznitsa/jcp/utils/ResettablePrinter.java
  class ResettablePrinter (line 33) | public class ResettablePrinter {
    method ResettablePrinter (line 37) | public ResettablePrinter(final int initialCapacity) {
    method getText (line 41) | public String getText() {
    method isEmpty (line 45) | public boolean isEmpty() {
    method writeBufferTo (line 49) | public void writeBufferTo(final Writer writer) throws IOException {
    method getSize (line 55) | public int getSize() {
    method reset (line 59) | public void reset() {
    method print (line 63) | public void print(final String text) {
    method println (line 69) | public void println(final String text, final String eol) {

FILE: jcp/src/test/java/com/igormaznitsa/jcp/AbstractMockPreprocessorContextTest.java
  class AbstractMockPreprocessorContextTest (line 43) | @RunWith(PowerMockRunner.class)
    method prepareMockContext (line 47) | protected PreprocessorContext prepareMockContext() throws Exception {

FILE: jcp/src/test/java/com/igormaznitsa/jcp/AbstractSpyPreprocessorContextTest.java
  class AbstractSpyPreprocessorContextTest (line 43) | @RunWith(PowerMockRunner.class)
    method prepareClassTests (line 49) | @BeforeClass
    method doJanitor (line 55) | @AfterClass
    method beforeTest (line 60) | @Before
    method getCurrentTestFolder (line 65) | protected List<String> getCurrentTestFolder() {
    method getDestinationFolder (line 73) | protected File getDestinationFolder() {
    method assertDestinationFolderEmpty (line 77) | protected void assertDestinationFolderEmpty() throws Exception {
    method preparePreprocessorContext (line 81) | protected PreprocessorContext preparePreprocessorContext(final List<St...
    method preparePreprocessorContext (line 86) | protected PreprocessorContext preparePreprocessorContext(final List<St...
    type ContextDataProvider (line 101) | public interface ContextDataProvider {
      method getAllowSpaceBeforeDirectiveFlag (line 102) | boolean getAllowSpaceBeforeDirectiveFlag();

FILE: jcp/src/test/java/com/igormaznitsa/jcp/JCPreprocessorTest.java
  class JCPreprocessorTest (line 43) | public final class JCPreprocessorTest {
    method assertGVDFPreprocessorException (line 45) | private void assertGVDFPreprocessorException(final String file,
    method testProcessGlobalVarDefiningFiles (line 62) | @Test
    method testProcessGlobalVarDefiningFiles_ATsymbol (line 78) | @Test
    method testJavaCommentRemoving (line 83) | @Test
    method testCLIHandlerNameConflicts (line 139) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/TestUtils.java
  class TestUtils (line 23) | public final class TestUtils {
    method TestUtils (line 24) | private TestUtils() {
    method normalizeNextLine (line 28) | public static String normalizeNextLine(final String text) {
    method assertFilePath (line 32) | public static void assertFilePath(final String message, final File exp...

FILE: jcp/src/test/java/com/igormaznitsa/jcp/ant/PreprocessTaskTest.java
  class PreprocessTaskTest (line 43) | public class PreprocessTaskTest {
    method beforeClass (line 55) | @BeforeClass
    method beforeTest (line 61) | @Before
    method testSetSources (line 72) | @Test
    method testTarget (line 80) | @Test
    method testSourceEncoding (line 86) | @Test
    method testTargetEncoding (line 94) | @Test
    method testExcludedExtensions (line 102) | @Test
    method testExtensions (line 115) | @Test
    method testClearTarget (line 129) | @Test
    method testKeepComments (line 137) | @Test
    method testVerbose (line 146) | @Test
    method testAllowWhitespace (line 154) | @Test
    method testCareForLastEol (line 162) | @Test
    method testEol (line 170) | @Test
    method testPreserveIndents (line 176) | @Test
    method testDontOverwriteSameContent (line 184) | @Test
    method testDryRun (line 192) | @Test
    method testUnknownVarAsFalse (line 200) | @Test
    method testAddGlobal (line 208) | @Test
    method testAddCfgFile (line 218) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AbstractCommandLineHandlerTest.java
  class AbstractCommandLineHandlerTest (line 33) | public abstract class AbstractCommandLineHandlerTest extends AbstractMoc...
    method testExecution (line 35) | @Test
    method testName (line 38) | @Test
    method testDescription (line 41) | @Test
    method testThatTheHandlerInTheHandlerList (line 44) | @Test
    method assertDescription (line 47) | protected void assertDescription(final CommandLineHandler handler) {
    method assertHandlerInTheHandlerList (line 54) | protected void assertHandlerInTheHandlerList(final CommandLineHandler ...

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ActionPreprocessorExtensionHandlerTest.java
  class ActionPreprocessorExtensionHandlerTest (line 14) | public class ActionPreprocessorExtensionHandlerTest extends AbstractComm...
    method testThatTheHandlerInTheHandlerList (line 18) | @Override
    method testErrorWithoutFlag (line 23) | @Test
    method testExecution (line 27) | @Override
    method testName (line 40) | @Override
    method testDescription (line 45) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AllowMergeBlockLineHandlerTest.java
  class AllowMergeBlockLineHandlerTest (line 10) | public class AllowMergeBlockLineHandlerTest extends AbstractCommandLineH...
    method testThatTheHandlerInTheHandlerList (line 14) | @Override
    method testExecution (line 19) | @Override
    method testName (line 31) | @Override
    method testDescription (line 36) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AllowWhitespaceDirectiveHandlerTest.java
  class AllowWhitespaceDirectiveHandlerTest (line 35) | public class AllowWhitespaceDirectiveHandlerTest extends AbstractCommand...
    method testThatTheHandlerInTheHandlerList (line 40) | @Override
    method testErrorWithoutFlag (line 45) | @Test
    method testExecution (line 49) | @Override
    method testName (line 67) | @Override
    method testDescription (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/CareForLastEolHandlerTest.java
  class CareForLastEolHandlerTest (line 34) | public class CareForLastEolHandlerTest extends AbstractCommandLineHandle...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ClearTargetFolderHandlerTest.java
  class ClearTargetFolderHandlerTest (line 34) | public class ClearTargetFolderHandlerTest extends AbstractCommandLineHan...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/CommentRemoverTypeHandlerTest.java
  class CommentRemoverTypeHandlerTest (line 33) | public class CommentRemoverTypeHandlerTest extends AbstractCommandLineHa...
    method testThatTheHandlerInTheHandlerList (line 37) | @Override
    method testExecution (line 42) | @Override
    method testName (line 56) | @Override
    method testDescription (line 61) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/DestinationDirectoryHandlerTest.java
  class DestinationDirectoryHandlerTest (line 33) | public class DestinationDirectoryHandlerTest extends AbstractCommandLine...
    method testThatTheHandlerInTheHandlerList (line 37) | @Override
    method testExecution (line 42) | @Override
    method testName (line 55) | @Override
    method testDescription (line 60) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/DontOverwriteSameContentHandlerTest.java
  class DontOverwriteSameContentHandlerTest (line 34) | public class DontOverwriteSameContentHandlerTest extends AbstractCommand...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ExcludeFoldersHandlerTest.java
  class ExcludeFoldersHandlerTest (line 35) | @SuppressWarnings("unchecked")
    method testThatTheHandlerInTheHandlerList (line 40) | @Override
    method testExecution (line 45) | @Override
    method testName (line 64) | @Override
    method testDescription (line 69) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ExcludedFileExtensionsHandlerTest.java
  class ExcludedFileExtensionsHandlerTest (line 34) | public class ExcludedFileExtensionsHandlerTest extends AbstractCommandLi...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 58) | @Override
    method testDescription (line 63) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/FileExtensionsHandlerTest.java
  class FileExtensionsHandlerTest (line 34) | public class FileExtensionsHandlerTest extends AbstractCommandLineHandle...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 58) | @Override
    method testDescription (line 63) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/GlobalVariableDefiningFileHandlerTest.java
  class GlobalVariableDefiningFileHandlerTest (line 34) | public final class GlobalVariableDefiningFileHandlerTest extends Abstrac...
    method testThatTheHandlerInTheHandlerList (line 39) | @Override
    method testExecution (line 44) | @Override
    method testExecution_Expression (line 62) | @Test
    method testExecution_nonExistingFileWithExpression (line 83) | @Test(expected = PreprocessorException.class)
    method testExecution_nonExistingFile (line 90) | @Test(expected = PreprocessorException.class)
    method testExecution_emptyFile (line 97) | @Test(expected = PreprocessorException.class)
    method testExecution_emptyFileForExpressionMode (line 104) | @Test(expected = PreprocessorException.class)
    method testName (line 111) | @Override
    method testDescription (line 116) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/GlobalVariableHandlerTest.java
  class GlobalVariableHandlerTest (line 32) | public class GlobalVariableHandlerTest extends AbstractCommandLineHandle...
    method testThatTheHandlerInTheHandlerList (line 36) | @Override
    method testExecution (line 41) | @Override
    method testName (line 55) | @Override
    method testDescription (line 60) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/HelpHandlerTest.java
  class HelpHandlerTest (line 30) | public class HelpHandlerTest extends AbstractCommandLineHandlerTest {
    method testThatTheHandlerInTheHandlerList (line 34) | @Override
    method testExecution (line 39) | @Override
    method testName (line 53) | @Override
    method testDescription (line 58) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/InCharsetHandlerTest.java
  class InCharsetHandlerTest (line 34) | public class InCharsetHandlerTest extends AbstractCommandLineHandlerTest {
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 58) | @Override
    method testDescription (line 63) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/KeepLineHandlerTest.java
  class KeepLineHandlerTest (line 34) | public class KeepLineHandlerTest extends AbstractCommandLineHandlerTest {
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/OutCharsetHandlerTest.java
  class OutCharsetHandlerTest (line 33) | public class OutCharsetHandlerTest extends AbstractCommandLineHandlerTest {
    method testThatTheHandlerInTheHandlerList (line 37) | @Override
    method testExecution (line 42) | @Override
    method testName (line 58) | @Override
    method testDescription (line 63) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/PreserveIndentDirectiveHandlerTest.java
  class PreserveIndentDirectiveHandlerTest (line 34) | public class PreserveIndentDirectiveHandlerTest extends AbstractCommandL...
    method testThatTheHandlerInTheHandlerList (line 39) | @Override
    method testExecution (line 44) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/RemoveCommentsHandlerTest.java
  class RemoveCommentsHandlerTest (line 32) | public class RemoveCommentsHandlerTest extends AbstractCommandLineHandle...
    method testThatTheHandlerInTheHandlerList (line 36) | @Override
    method testExecution (line 41) | @Override
    method testName (line 54) | @Override
    method testDescription (line 59) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/SourceDirectoryHandlerTest.java
  class SourceDirectoryHandlerTest (line 33) | public class SourceDirectoryHandlerTest extends AbstractCommandLineHandl...
    method testThatTheHandlerInTheHandlerList (line 37) | @Override
    method testExecution (line 42) | @Override
    method testName (line 56) | @Override
    method testDescription (line 61) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/UnknownAsFalseHandlerTest.java
  class UnknownAsFalseHandlerTest (line 34) | public class UnknownAsFalseHandlerTest extends AbstractCommandLineHandle...
    method testThatTheHandlerInTheHandlerList (line 38) | @Override
    method testExecution (line 43) | @Override
    method testName (line 61) | @Override
    method testDescription (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/cmdline/VerboseHandlerTest.java
  class VerboseHandlerTest (line 31) | public class VerboseHandlerTest extends AbstractCommandLineHandlerTest {
    method testThatTheHandlerInTheHandlerList (line 35) | @Override
    method testExecution (line 40) | @Override
    method testName (line 52) | @Override
    method testDescription (line 57) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/context/EnvironmentVariableProcessorTest.java
  class EnvironmentVariableProcessorTest (line 32) | public class EnvironmentVariableProcessorTest extends AbstractMockPrepro...
    method testReadVariable (line 34) | @Test
    method testReadUnknownVariable (line 51) | @Test(expected = PreprocessorException.class)
    method testWriteVariable (line 57) | @Test(expected = PreprocessorException.class)

FILE: jcp/src/test/java/com/igormaznitsa/jcp/context/JCPSpecialVariableProcessorTest.java
  class JCPSpecialVariableProcessorTest (line 34) | public class JCPSpecialVariableProcessorTest extends AbstractMockPreproc...
    method testReadVariable (line 36) | @Test
    method testReadUnknownVariable (line 49) | @Test(expected = PreprocessorException.class)
    method testWriteDisallowed (line 55) | @Test(expected = PreprocessorException.class)

FILE: jcp/src/test/java/com/igormaznitsa/jcp/context/PreprocessorContextTest.java
  class PreprocessorContextTest (line 49) | @SuppressWarnings("rawtypes")
    method extractDeclaredNonStaticNonFinalFields (line 54) | private static Set<Field> extractDeclaredNonStaticNonFinalFields(final...
    method extractValues (line 65) | private static Map<Field, Object> extractValues(final PreprocessorCont...
    method assertObjectValue (line 75) | private static void assertObjectValue(final String fieldName, final Ob...
    method assertMapFields (line 120) | private static void assertMapFields(final String mapFieldName, final P...
    method assertPreprocessorContextMaps (line 145) | private static void assertPreprocessorContextMaps(final PreprocessorCo...
    method assertContextEquals (line 158) | private static void assertContextEquals(final Map<Field, Object> etalon,
    method randomString (line 167) | private static String randomString() {
    method fillByRandomValues (line 177) | @SuppressWarnings("unchecked")
    method testConstuctorWithBaseContext_DefaultValues (line 326) | @Test
    method testConstructorWithBaseContext_RandomValues (line 343) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/context/ProcessContentWithSpacesAndWithoutTest.java
  class ProcessContentWithSpacesAndWithoutTest (line 34) | public class ProcessContentWithSpacesAndWithoutTest extends AbstractSpyP...
    method testProcess_NoSpaced_SpacesNotAllowed (line 36) | @Test
    method testProcess_NoSpaced_SpacesAllowed (line 44) | @Test
    method testProcess_Spaced_SpacesNotAllowed (line 53) | @Test
    method testProcess_Spaced_SpacesAllowed (line 64) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/AbortDirectiveHandlerTest.java
  class AbortDirectiveHandlerTest (line 30) | public class AbortDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution_wrongExpression (line 34) | @Test
    method testExecution (line 39) | @Override
    method testKeyword (line 44) | @Override
    method testExecutionCondition (line 49) | @Override
    method testReference (line 54) | @Override
    method testPhase (line 59) | @Override
    method testArgumentType (line 65) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/AbstractDirectiveHandlerAcceptanceTest.java
  class AbstractDirectiveHandlerAcceptanceTest (line 56) | public abstract class AbstractDirectiveHandlerAcceptanceTest {
    method beforeClass (line 60) | @BeforeClass
    method testExecution (line 66) | @Test
    method testKeyword (line 69) | @Test
    method testExecutionCondition (line 72) | @Test
    method testReference (line 75) | @Test
    method testArgumentType (line 78) | @Test
    method testPhase (line 81) | @Test
    method assertReference (line 84) | protected void assertReference(final AbstractDirectiveHandler handler) {
    method setGlobalVars (line 93) | private PreprocessorContext setGlobalVars(final PreprocessorContext co...
    method assertPreprocessorException (line 103) | public void assertPreprocessorException(final String preprocessingText,
    method assertGlobalPhaseException (line 120) | public void assertGlobalPhaseException(final String preprocessingText,
    method preprocessStringAtGlobalPhase (line 135) | private PreprocessorContext preprocessStringAtGlobalPhase(final String...
    method executeGlobalPhase (line 158) | public PreprocessorContext executeGlobalPhase(final String fileName,
    method readWholeDataFromReader (line 175) | private void readWholeDataFromReader(final BufferedReader reader, fina...
    method assertEqualsStringLists (line 186) | private void assertEqualsStringLists(final List<String> etalon, final ...
    method internalPreprocessAndMatch (line 203) | private PreprocessorContext internalPreprocessAndMatch(final File srcf...
    method println (line 287) | private void println(final String str, final boolean showWhitespaces) {
    method parseStringForLines (line 298) | private List<String> parseStringForLines(final String text) throws IOE...
    method preprocessString (line 318) | private PreprocessorContext preprocessString(
    method assertFilePreprocessing (line 330) | public PreprocessorContext assertFilePreprocessing(
    method assertFilePreprocessing (line 340) | public PreprocessorContext assertFilePreprocessing(final String testFi...

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/AbstractDirectiveHandlerTest.java
  class AbstractDirectiveHandlerTest (line 30) | public class AbstractDirectiveHandlerTest {
    method testPotentialConflictsBetweenDirectives (line 32) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/ActionDirectiveHandlerTest.java
  class ActionDirectiveHandlerTest (line 43) | public class ActionDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 47) | @Test
    method testExecutionWrongExpression (line 70) | @Test
    method testKeyword (line 81) | @Test
    method testExecutionCondition (line 87) | @Test
    method testReference (line 93) | @Test
    method testArgumentType (line 99) | @Override
    method testPhase (line 104) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/CommentNextLineDirectiveHandlerTest.java
  class CommentNextLineDirectiveHandlerTest (line 28) | public class CommentNextLineDirectiveHandlerTest extends AbstractDirecti...
    method testExecution (line 33) | @Override
    method testKeyword (line 38) | @Override
    method testExecutionCondition (line 43) | @Override
    method testReference (line 48) | @Override
    method testPhase (line 53) | @Override
    method testArgumentType (line 59) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/DefineDirectiveHandlerTest.java
  class DefineDirectiveHandlerTest (line 30) | public class DefineDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 34) | @Override
    method testExecution_wrongCases (line 41) | @Test
    method testKeyword (line 48) | @Override
    method testExecutionCondition (line 53) | @Override
    method testReference (line 58) | @Override
    method testPhase (line 63) | @Override
    method testArgumentType (line 69) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/DefinelDirectiveHandlerTest.java
  class DefinelDirectiveHandlerTest (line 30) | public class DefinelDirectiveHandlerTest extends AbstractDirectiveHandle...
    method testExecution (line 34) | @Override
    method testExecution_wrongCases (line 40) | @Test
    method testKeyword (line 49) | @Override
    method testExecutionCondition (line 54) | @Override
    method testReference (line 59) | @Override
    method testPhase (line 64) | @Override
    method testArgumentType (line 70) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/EchoDirectiveHandlerTest.java
  class EchoDirectiveHandlerTest (line 31) | public class EchoDirectiveHandlerTest extends AbstractDirectiveHandlerAc...
    method testExecution (line 35) | @Override
    method testKeyword (line 42) | @Override
    method testExecutionCondition (line 47) | @Override
    method testReference (line 52) | @Override
    method testArgumentType (line 57) | @Override
    method testPhase (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/ErrorDirectiveHandlerTest.java
  class ErrorDirectiveHandlerTest (line 33) | public class ErrorDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution (line 37) | @Override
    method testExecution_wrongCases (line 49) | @Test
    method testKeyword (line 57) | @Override
    method testExecutionCondition (line 62) | @Override
    method testReference (line 67) | @Override
    method testArgumentType (line 72) | @Override
    method testPhase (line 77) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/ExcludeIfDirectiveHandlerTest.java
  class ExcludeIfDirectiveHandlerTest (line 33) | public class ExcludeIfDirectiveHandlerTest extends AbstractDirectiveHand...
    method testExecution (line 37) | @Override
    method testKeyword (line 54) | @Override
    method testExecutionCondition (line 59) | @Override
    method testReference (line 64) | @Override
    method testPhase (line 69) | @Override
    method testArgumentType (line 75) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/ExitDirectiveHandlerTest.java
  class ExitDirectiveHandlerTest (line 28) | public class ExitDirectiveHandlerTest extends AbstractDirectiveHandlerAc...
    method testExecution (line 32) | @Override
    method testKeyword (line 37) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 47) | @Override
    method testPhase (line 52) | @Override
    method testArgumentType (line 58) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/ExitIfDirectiveHandlerTest.java
  class ExitIfDirectiveHandlerTest (line 30) | public class ExitIfDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 34) | @Override
    method testExecution_wrongExpression (line 39) | @Test
    method testKeyword (line 47) | @Override
    method testExecutionCondition (line 52) | @Override
    method testReference (line 57) | @Override
    method testPhase (line 62) | @Override
    method testArgumentType (line 68) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/FlushDirectiveHandlerTest.java
  class FlushDirectiveHandlerTest (line 28) | public class FlushDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution (line 32) | @Override
    method testKeyword (line 37) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 47) | @Override
    method testArgumentType (line 52) | @Override
    method testPhase (line 57) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/GlobalDirectiveHandlerTest.java
  class GlobalDirectiveHandlerTest (line 33) | public class GlobalDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 37) | @Override
    method testExecution_PreprocessingPhase (line 45) | @Test
    method testExecution_WrongCases (line 53) | @Test
    method testExecutionCondition (line 64) | @Override
    method testKeyword (line 69) | @Override
    method testPhase (line 74) | @Override
    method testReference (line 80) | @Override
    method testArgumentType (line 85) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/GlobalIfElseEndifTest.java
  class GlobalIfElseEndifTest (line 31) | public class GlobalIfElseEndifTest extends AbstractDirectiveHandlerAccep...
    method testExecution (line 39) | @Override
    method testExecution_PreprocessingPhase (line 47) | @Test
    method testExecution_wrongCases (line 53) | @Test
    method testKeyword (line 66) | @Override
    method testExecutionCondition (line 73) | @Override
    method testReference (line 80) | @Override
    method testPhase (line 87) | @Override
    method testArgumentType (line 99) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IfDefDirectiveHandlerTest.java
  class IfDefDirectiveHandlerTest (line 28) | public class IfDefDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution (line 32) | @Override
    method testKeyword (line 45) | @Override
    method testExecutionCondition (line 50) | @Override
    method testReference (line 55) | @Override
    method testPhase (line 60) | @Override
    method testArgumentType (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IfDefinedDirectiveHandlerTest.java
  class IfDefinedDirectiveHandlerTest (line 28) | public class IfDefinedDirectiveHandlerTest extends AbstractDirectiveHand...
    method testExecution (line 32) | @Override
    method testKeyword (line 47) | @Override
    method testExecutionCondition (line 52) | @Override
    method testReference (line 57) | @Override
    method testPhase (line 62) | @Override
    method testArgumentType (line 68) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IfElseEndifDirectiveHandlerTest.java
  class IfElseEndifDirectiveHandlerTest (line 30) | public class IfElseEndifDirectiveHandlerTest extends AbstractDirectiveHa...
    method testExecution (line 36) | @Override
    method testIf_ExceptionWithoutExpression (line 41) | @Test
    method testIf_ExceptionWithoutEndIf (line 47) | @Test
    method testElse_ExeptionWithoutIf (line 53) | @Test
    method testEndIf_ExceptionWithoutIf (line 58) | @Test
    method testKeyword (line 63) | @Override
    method testExecutionCondition (line 70) | @Override
    method testReference (line 77) | @Override
    method testPhase (line 84) | @Override
    method testArgumentType (line 94) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IfElseEndifDirectiveWithKeepLinesHandlerTest.java
  class IfElseEndifDirectiveWithKeepLinesHandlerTest (line 26) | public class IfElseEndifDirectiveWithKeepLinesHandlerTest extends IfElse...
    method testExecution (line 28) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IfNDefDirectiveHandlerTest.java
  class IfNDefDirectiveHandlerTest (line 28) | public class IfNDefDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 32) | @Override
    method testKeyword (line 45) | @Override
    method testExecutionCondition (line 50) | @Override
    method testReference (line 55) | @Override
    method testPhase (line 60) | @Override
    method testArgumentType (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/IncludeDirectiveHandlerTest.java
  class IncludeDirectiveHandlerTest (line 31) | public class IncludeDirectiveHandlerTest extends AbstractDirectiveHandle...
    method testExecution (line 35) | @Test
    method testExecution_wrongCases (line 43) | @Test
    method testKeyword (line 56) | @Override
    method testExecutionCondition (line 61) | @Override
    method testReference (line 66) | @Override
    method testPhase (line 71) | @Override
    method testArgumentType (line 77) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/LinesNotMatchException.java
  class LinesNotMatchException (line 24) | public class LinesNotMatchException extends RuntimeException {
    method LinesNotMatchException (line 34) | public LinesNotMatchException(final int etalonLineNumber, final int re...
    method getProblemStringIndex (line 45) | public int getProblemStringIndex() {
    method getEtalonLineNumber (line 49) | public int getEtalonLineNumber() {
    method getResultLineNumber (line 53) | public int getResultLineNumber() {
    method getEtalonString (line 57) | public String getEtalonString() {
    method getResultString (line 61) | public String getResultString() {
    method toString (line 65) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/LocalDirectiveHandlerTest.java
  class LocalDirectiveHandlerTest (line 31) | public class LocalDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution (line 35) | @Override
    method testExecutionCondition (line 46) | @Override
    method testExecution_ExceptionOnExpressionAbsence (line 51) | @Test
    method testExecution_ExceptionOnWrongExpression (line 57) | @Test
    method testKeyword (line 63) | @Override
    method testReference (line 68) | @Override
    method testPhase (line 73) | @Override
    method testArgumentType (line 79) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/MsgDirectiveHandlerTest.java
  class MsgDirectiveHandlerTest (line 35) | public class MsgDirectiveHandlerTest extends AbstractDirectiveHandlerAcc...
    method testExecution (line 39) | @Override
    method testKeyword (line 52) | @Override
    method testExecutionCondition (line 57) | @Override
    method testReference (line 62) | @Override
    method testArgumentType (line 67) | @Override
    method testPhase (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/NoAutoFlushDirectiveHandlerTest.java
  class NoAutoFlushDirectiveHandlerTest (line 28) | public class NoAutoFlushDirectiveHandlerTest extends AbstractDirectiveHa...
    method testExecution (line 32) | @Override
    method testKeyword (line 37) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 47) | @Override
    method testArgumentType (line 52) | @Override
    method testPhase (line 57) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/OnlySpacesTest.java
  class OnlySpacesTest (line 24) | public class OnlySpacesTest extends AbstractDirectiveHandlerAcceptanceTe...
    method testExecution (line 26) | @Override
    method testKeyword (line 31) | @Override
    method testExecutionCondition (line 35) | @Override
    method testReference (line 39) | @Override
    method testArgumentType (line 43) | @Override
    method testPhase (line 47) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/OutDisabledDirectiveHandlerTest.java
  class OutDisabledDirectiveHandlerTest (line 28) | public class OutDisabledDirectiveHandlerTest extends AbstractDirectiveHa...
    method testExecution (line 32) | @Override
    method testKeyword (line 37) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 47) | @Override
    method testPhase (line 52) | @Override
    method testArgumentType (line 58) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/OutEnabledDirectiveHandlerTest.java
  class OutEnabledDirectiveHandlerTest (line 28) | public class OutEnabledDirectiveHandlerTest extends AbstractDirectiveHan...
    method testExecution (line 32) | @Override
    method testKeyword (line 37) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 47) | @Override
    method testPhase (line 52) | @Override
    method testArgumentType (line 58) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/OutNameDirectiveHandlerTest.java
  class OutNameDirectiveHandlerTest (line 30) | public class OutNameDirectiveHandlerTest extends AbstractDirectiveHandle...
    method testExecution (line 34) | @Override
    method testExecution_wrongExpressionResult (line 39) | @Test
    method testKeyword (line 45) | @Override
    method testExecutionCondition (line 50) | @Override
    method testReference (line 55) | @Override
    method testPhase (line 60) | @Override
    method testArgumentType (line 66) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/OutdirDirectiveHandlerTest.java
  class OutdirDirectiveHandlerTest (line 30) | public class OutdirDirectiveHandlerTest extends AbstractDirectiveHandler...
    method testExecution (line 34) | @Override
    method testExecution_wrongExpression (line 39) | @Test
    method testKeyword (line 46) | @Override
    method testExecutionCondition (line 51) | @Override
    method testReference (line 56) | @Override
    method testPhase (line 61) | @Override
    method testArgumentType (line 67) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/PrefixPostfixDirectiveHandlerTest.java
  class PrefixPostfixDirectiveHandlerTest (line 30) | public class PrefixPostfixDirectiveHandlerTest extends AbstractDirective...
    method testExecution (line 35) | @Override
    method testPrefix_wrongArgument (line 40) | @Test
    method testPostfix_wrongArgument (line 47) | @Test
    method testKeyword (line 54) | @Override
    method testExecutionCondition (line 60) | @Override
    method testReference (line 66) | @Override
    method testPhase (line 72) | @Override
    method testArgumentType (line 80) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/SpecVarsROTest.java
  class SpecVarsROTest (line 30) | public class SpecVarsROTest extends AbstractDirectiveHandlerAcceptanceTe...
    method testExecution (line 32) | @Override
    method testKeyword (line 38) | @Override
    method testExecutionCondition (line 42) | @Override
    method testReference (line 46) | @Override
    method testArgumentType (line 50) | @Override
    method testPhase (line 54) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/SpecialDirectivesBlockTest.java
  class SpecialDirectivesBlockTest (line 38) | public class SpecialDirectivesBlockTest extends AbstractDirectiveHandler...
    method testExecution (line 40) | @Override
    method testKeyword (line 125) | @Override
    method testExecutionCondition (line 130) | @Override
    method testReference (line 135) | @Override
    method testArgumentType (line 140) | @Override
    method testPhase (line 145) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/SpecialDirectivesTest.java
  class SpecialDirectivesTest (line 35) | public class SpecialDirectivesTest extends AbstractDirectiveHandlerAccep...
    method testExecution (line 37) | @Override
    method testKeyword (line 90) | @Override
    method testExecutionCondition (line 95) | @Override
    method testReference (line 100) | @Override
    method testArgumentType (line 105) | @Override
    method testPhase (line 110) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/UndefDirectiveHandlerTest.java
  class UndefDirectiveHandlerTest (line 31) | public class UndefDirectiveHandlerTest extends AbstractDirectiveHandlerA...
    method testExecution (line 35) | @Override
    method testExecution_wrongCases (line 44) | @Test
    method testKeyword (line 51) | @Override
    method testExecutionCondition (line 56) | @Override
    method testReference (line 61) | @Override
    method testPhase (line 66) | @Override
    method testArgumentType (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/VariablePair.java
  class VariablePair (line 26) | public class VariablePair {
    method VariablePair (line 31) | public VariablePair(final String name, final String value) {
    method getName (line 36) | public String getName() {
    method getValue (line 40) | public Value getValue() {

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/WarningDirectiveHandlerTest.java
  class WarningDirectiveHandlerTest (line 32) | public class WarningDirectiveHandlerTest extends AbstractDirectiveHandle...
    method testExecution (line 36) | @Override
    method testExecution_wrongCases (line 43) | @Test
    method testKeyword (line 51) | @Override
    method testExecutionCondition (line 56) | @Override
    method testReference (line 61) | @Override
    method testArgumentType (line 66) | @Override
    method testPhase (line 71) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/directives/WhileContinueBreakEndDirectiveHandlerTest.java
  class WhileContinueBreakEndDirectiveHandlerTest (line 30) | public class WhileContinueBreakEndDirectiveHandlerTest
    method testExecution (line 38) | @Override
    method testWhile_ExceptionWithoutExpression (line 43) | @Test
    method testWhile_ExceptionForNonBooleanExpression (line 48) | @Test
    method testWhile_ExceptionForNonClosed (line 53) | @Test
    method testBreak_ExceptionWithoutWhile (line 58) | @Test
    method testContinue_ExceptionWithoutWhile (line 63) | @Test
    method testEnd_ExceptionWithoutWhile (line 68) | @Test
    method testKeyword (line 73) | @Override
    method testExecutionCondition (line 81) | @Override
    method testReference (line 89) | @Override
    method testPhase (line 97) | @Override
    method testArgumentType (line 110) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/exceptions/PreprocessorExceptionTest.java
  class PreprocessorExceptionTest (line 34) | public final class PreprocessorExceptionTest {
    method testExceptionStringIndex_WrongBracket (line 36) | @Test
    method testExceptionStringIndex_WrongBracketClosing (line 53) | @Test
    method testExceptionStringIndex_WrongBracketInIncluded (line 71) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/ExpressionParserTest.java
  class ExpressionParserTest (line 46) | public class ExpressionParserTest extends AbstractMockPreprocessorContex...
    method testReplacingNegativeNumber (line 48) | @Test
    method testNextItem_zero (line 69) | @Test
    method testNextItem_negativeNumber (line 79) | @Test
    method testNextItem_zeroLess (line 91) | @Test
    method testNextItem_oneValue (line 103) | @Test
    method testNextItem_oneHexValue (line 113) | @Test
    method testNextItem_oneBooleanTrueValue (line 123) | @Test
    method testNextItem_oneBooleanFalseValue (line 133) | @Test
    method testNextItem_oneOperator (line 143) | @Test
    method testNextItem_complexExpression (line 153) | @Test
    method testParsing_oneValue (line 192) | @Test
    method testParsing_negativeNumber (line 203) | @Test
    method testParsing_easyExpression (line 214) | @Test
    method testParsing_complexExpression (line 231) | @Test
    method testParsing_deepIncludingBrackets (line 253) | @Test
    method testParsing_insideFunctionCall (line 268) | @Test
    method testParsing_notEasyBrackets (line 290) | @Test
    method testParsing_emptyBrakes (line 318) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/ExpressionTest.java
  class ExpressionTest (line 29) | public class ExpressionTest extends AbstractSpyPreprocessorContextTest {
    method testSimpleExpression (line 31) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/ExpressionTreeTest.java
  class ExpressionTreeTest (line 35) | public class ExpressionTreeTest {
    method testAddHierarchyTree (line 37) | @Test
    method testAddDivHierarchyTree (line 55) | @Test
    method testDivAddHierarchyTree (line 81) | @Test
    method testAddAddAddHierarchyTree (line 107) | @Test
    method testMulAddMulHierarchyTree (line 137) | @Test
    method testAddInBrakesMulHierarchyTree (line 169) | @Test
    method testMulAddInBrakesMulHierarchyTree (line 198) | @Test
    method testNotEquHierarchy (line 236) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/AbstractFunctionTest.java
  class AbstractFunctionTest (line 42) | public abstract class AbstractFunctionTest extends AbstractSpyPreprocess...
    method var (line 44) | protected static Map<String, Value> var(final Map<String, Value> map, ...
    method var (line 50) | protected static Map<String, Value> var(final String name, final Value...
    method testName (line 56) | @Test
    method testReference (line 59) | @Test
    method testArity (line 62) | @Test
    method testAllowedArgumentTypes (line 65) | @Test
    method testResultType (line 68) | @Test
    method assertReference (line 71) | protected void assertReference(final AbstractFunction function) {
    method assertAllowedArguments (line 78) | protected void assertAllowedArguments(final AbstractFunction function,
    method assertFunction (line 95) | protected void assertFunction(final String expression, final Value exp...
    method assertFunction (line 99) | protected void assertFunction(final String expression, final Value exp...
    method getRootCause (line 120) | protected Throwable getRootCause(final Throwable thr) {
    method assertFunctionException (line 134) | protected void assertFunctionException(final String expression) throws...

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionABSTest.java
  class FunctionABSTest (line 32) | public class FunctionABSTest extends AbstractFunctionTest {
    method testExecution_Int (line 36) | @Test
    method testExecution_Float (line 43) | @Test
    method testExecution_wrongCases (line 49) | @Test
    method testName (line 58) | @Override
    method testReference (line 63) | @Override
    method testArity (line 68) | @Override
    method testAllowedArgumentTypes (line 73) | @Override
    method testResultType (line 78) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionBINFILETest.java
  class FunctionBINFILETest (line 34) | public class FunctionBINFILETest extends AbstractFunctionTest {
    method testExecution_Base64Encoding (line 38) | @Test
    method testExecution_Base64Encoding_Deflate (line 48) | @Test
    method testExecution_Base64EncodingSplitted (line 58) | @Test
    method testExecution_ByteArrayEncoding (line 68) | @Test
    method testExecution_ByteArrayEncodingSplitted (line 80) | @Test
    method testExecution_UINT8ArrayEncoding (line 96) | @Test
    method testExecution_INT8ArrayEncoding (line 108) | @Test
    method testExecution_DEFLATEINT8ArrayEncoding (line 120) | @Test
    method testExecution_UINT8ArrayEncodingSplitted (line 132) | @Test
    method testExecution_INT8ArrayEncodingSplitted (line 163) | @Test
    method testExecution_DEFLATEINT8ArrayEncodingSplitted (line 194) | @Test
    method testExecution_Str_wrongCases (line 220) | @Test
    method testName (line 231) | @Override
    method testReference (line 236) | @Override
    method testArity (line 241) | @Override
    method testAllowedArgumentTypes (line 246) | @Override
    method testResultType (line 251) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionDefinedByUserTest.java
  class FunctionDefinedByUserTest (line 46) | public class FunctionDefinedByUserTest extends AbstractSpyPreprocessorCo...
    method testExecution_withArguments (line 48) | @Test
    method testExecution_withAnyArguments (line 72) | @Test
    method testExecution_withoutArguments (line 96) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionESCTest.java
  class FunctionESCTest (line 32) | public class FunctionESCTest extends AbstractFunctionTest {
    method testExecution (line 36) | @Test
    method testExecution_wrongCases (line 44) | @Test
    method testName (line 53) | @Override
    method testReference (line 58) | @Override
    method testArity (line 63) | @Override
    method testAllowedArgumentTypes (line 68) | @Override
    method testResultType (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionEVALFILETest.java
  class FunctionEVALFILETest (line 37) | public class FunctionEVALFILETest extends AbstractFunctionTest {
    method testExecution_ErrorForUndefinedVariable (line 46) | @Test
    method testExecution_VisibilityLocalVariable (line 59) | @Test
    method testExecution_AbsolutePath (line 68) | @Test
    method testExecution_IncludedEvalCall (line 79) | @Test
    method testExecution_VisibilityGlobalVariable (line 92) | @Test
    method testExecution_ConditionsInsideFile (line 102) | @Test
    method testExecution_Str_wrongCases (line 113) | @Test
    method testName (line 124) | @Override
    method testReference (line 129) | @Override
    method testArity (line 134) | @Override
    method testAllowedArgumentTypes (line 139) | @Override
    method testResultType (line 144) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionISSUBSTRTest.java
  class FunctionISSUBSTRTest (line 32) | public class FunctionISSUBSTRTest extends AbstractFunctionTest {
    method testExecution_StrStr (line 36) | @Test
    method testExecution_StrStr_wrongCases (line 47) | @Test
    method testName (line 59) | @Override
    method testReference (line 64) | @Override
    method testArity (line 69) | @Override
    method testAllowedArgumentTypes (line 74) | @Override
    method testResultType (line 79) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionISTest.java
  class FunctionISTest (line 32) | public class FunctionISTest extends AbstractFunctionTest {
    method testExecution_StrAny_VarPresented (line 36) | @Test
    method testExecution_StrAny_VarNotPresented (line 63) | @Test
    method testName (line 90) | @Override
    method testReference (line 95) | @Override
    method testArity (line 100) | @Override
    method testAllowedArgumentTypes (line 105) | @Override
    method testResultType (line 110) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionROUNDTest.java
  class FunctionROUNDTest (line 32) | public class FunctionROUNDTest extends AbstractFunctionTest {
    method testExecution_Float (line 36) | @Test
    method testExecution_Int (line 43) | @Test
    method testExecution_wrongCases (line 49) | @Test
    method testName (line 58) | @Override
    method testReference (line 63) | @Override
    method testArity (line 68) | @Override
    method testAllowedArgumentTypes (line 73) | @Override
    method testResultType (line 78) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2CSVTest.java
  class FunctionSTR2CSVTest (line 32) | public class FunctionSTR2CSVTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 43) | @Test
    method testName (line 53) | @Override
    method testReference (line 58) | @Override
    method testArity (line 63) | @Override
    method testAllowedArgumentTypes (line 68) | @Override
    method testResultType (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2GOTest.java
  class FunctionSTR2GOTest (line 32) | public class FunctionSTR2GOTest extends AbstractFunctionTest {
    method testExecution_NoSplit (line 36) | @Test
    method testExecution_Split (line 43) | @Test
    method testExecution_wrongCases (line 58) | @Test
    method testName (line 69) | @Override
    method testReference (line 74) | @Override
    method testArity (line 79) | @Override
    method testAllowedArgumentTypes (line 84) | @Override
    method testResultType (line 89) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2INTTest.java
  class FunctionSTR2INTTest (line 32) | public class FunctionSTR2INTTest extends AbstractFunctionTest {
    method testExecute_Str (line 36) | @Test
    method testExecute_wrongCase (line 43) | @Test
    method testName (line 51) | @Override
    method testReference (line 56) | @Override
    method testArity (line 61) | @Override
    method testAllowedArgumentTypes (line 66) | @Override
    method testResultType (line 71) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JAVATest.java
  class FunctionSTR2JAVATest (line 33) | public class FunctionSTR2JAVATest extends AbstractFunctionTest {
    method testExecution_NoSplit (line 37) | @Test
    method testExecution_Split (line 44) | @Test
    method testExecution_wrongCases (line 54) | @Test
    method testName (line 64) | @Override
    method testReference (line 69) | @Override
    method testArity (line 74) | @Override
    method testAllowedArgumentTypes (line 79) | @Override
    method testResultType (line 84) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JSONTest.java
  class FunctionSTR2JSONTest (line 32) | public class FunctionSTR2JSONTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 43) | @Test
    method testName (line 53) | @Override
    method testReference (line 58) | @Override
    method testArity (line 63) | @Override
    method testAllowedArgumentTypes (line 68) | @Override
    method testResultType (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JSTest.java
  class FunctionSTR2JSTest (line 32) | public class FunctionSTR2JSTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 43) | @Test
    method testName (line 53) | @Override
    method testReference (line 58) | @Override
    method testArity (line 63) | @Override
    method testAllowedArgumentTypes (line 68) | @Override
    method testResultType (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2WEBTest.java
  class FunctionSTR2WEBTest (line 32) | public class FunctionSTR2WEBTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 44) | @Test
    method testName (line 54) | @Override
    method testReference (line 59) | @Override
    method testArity (line 64) | @Override
    method testAllowedArgumentTypes (line 69) | @Override
    method testResultType (line 74) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2XMLTest.java
  class FunctionSTR2XMLTest (line 32) | public class FunctionSTR2XMLTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 43) | @Test
    method testName (line 53) | @Override
    method testReference (line 58) | @Override
    method testArity (line 63) | @Override
    method testAllowedArgumentTypes (line 68) | @Override
    method testResultType (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionSTRLENTest.java
  class FunctionSTRLENTest (line 32) | public class FunctionSTRLENTest extends AbstractFunctionTest {
    method testExecution_Str (line 36) | @Test
    method testExecution_wrongCases (line 42) | @Test
    method testName (line 52) | @Override
    method testReference (line 57) | @Override
    method testArity (line 62) | @Override
    method testAllowedArgumentTypes (line 67) | @Override
    method testResultType (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/FunctionTRIMLINESTest.java
  class FunctionTRIMLINESTest (line 33) | public class FunctionTRIMLINESTest extends AbstractFunctionTest {
    method testExecution_WorkingCases (line 37) | @Test
    method testExecution_wrongCases (line 46) | @Test
    method testName (line 57) | @Override
    method testReference (line 62) | @Override
    method testArity (line 67) | @Override
    method testAllowedArgumentTypes (line 72) | @Override
    method testResultType (line 77) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/AbstractFunctionXMLTest.java
  class AbstractFunctionXMLTest (line 35) | public abstract class AbstractFunctionXMLTest extends AbstractFunctionTe...
    method initTest (line 41) | @Before

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ATTRTest.java
  class FunctionXML_ATTRTest (line 33) | public class FunctionXML_ATTRTest extends AbstractFunctionXMLTest {
    method testExecution_WrongAttributeName (line 37) | @Test(expected = PreprocessorException.class)
    method testExecution_WrongElementId (line 42) | @Test(expected = PreprocessorException.class)
    method testExecution_ExistsAttribute (line 48) | @Test
    method testExecution_nonExistsAttribute (line 54) | @Test
    method testName (line 61) | @Override
    method testReference (line 66) | @Override
    method testArity (line 71) | @Override
    method testAllowedArgumentTypes (line 76) | @Override
    method testResultType (line 81) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_GETTest.java
  class FunctionXML_GETTest (line 33) | public class FunctionXML_GETTest extends AbstractFunctionXMLTest {
    method testExecution_WrongElementId (line 38) | @Test(expected = PreprocessorException.class)
    method testExecution_WrongIndex (line 43) | @Test(expected = PreprocessorException.class)
    method testExecution (line 51) | @Test
    method testName (line 77) | @Override
    method testReference (line 82) | @Override
    method testArity (line 87) | @Override
    method testAllowedArgumentTypes (line 92) | @Override
    method testResultType (line 97) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_LISTTest.java
  class FunctionXML_LISTTest (line 34) | public class FunctionXML_LISTTest extends AbstractFunctionXMLTest {
    method testExecution_ForWrongElement (line 38) | @Test(expected = PreprocessorException.class)
    method testExecution_ForNonExistElements (line 44) | @Test
    method testExecution_ForExistElements (line 50) | @Test
    method testName (line 56) | @Override
    method testReference (line 61) | @Override
    method testArity (line 66) | @Override
    method testAllowedArgumentTypes (line 71) | @Override
    method testResultType (line 76) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_NAMETest.java
  class FunctionXML_NAMETest (line 33) | public class FunctionXML_NAMETest extends AbstractFunctionXMLTest {
    method testExecution_WrongElementId (line 37) | @Test(expected = PreprocessorException.class)
    method testExecution_RootElement (line 42) | @Test
    method testName (line 47) | @Override
    method testReference (line 52) | @Override
    method testArity (line 57) | @Override
    method testAllowedArgumentTypes (line 62) | @Override
    method testResultType (line 67) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_OPENTest.java
  class FunctionXML_OPENTest (line 33) | public class FunctionXML_OPENTest extends AbstractFunctionXMLTest {
    method testExecute_FileNotFound (line 37) | @Test(expected = PreprocessorException.class)
    method testExecute_NoXMLFile (line 42) | @Test(expected = PreprocessorException.class)
    method testExecute (line 47) | @Test
    method testName (line 52) | @Override
    method testReference (line 57) | @Override
    method testArity (line 62) | @Override
    method testAllowedArgumentTypes (line 67) | @Override
    method testResultType (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ROOTTest.java
  class FunctionXML_ROOTTest (line 33) | public class FunctionXML_ROOTTest extends AbstractFunctionXMLTest {
    method testExecution_WrongDocId (line 37) | @Test(expected = PreprocessorException.class)
    method testExecution (line 42) | @Test
    method testName (line 48) | @Override
    method testReference (line 53) | @Override
    method testArity (line 58) | @Override
    method testAllowedArgumentTypes (line 63) | @Override
    method testResultType (line 68) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_SIZETest.java
  class FunctionXML_SIZETest (line 34) | public class FunctionXML_SIZETest extends AbstractFunctionXMLTest {
    method testExecution_WrongElementListID (line 38) | @Test(expected = PreprocessorException.class)
    method testExecution_WrongElementType (line 43) | @Test(expected = PreprocessorException.class)
    method testExecution (line 48) | @Test
    method testName (line 59) | @Override
    method testReference (line 64) | @Override
    method testArity (line 69) | @Override
    method testAllowedArgumentTypes (line 74) | @Override
    method testResultType (line 79) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_TEXTTest.java
  class FunctionXML_TEXTTest (line 33) | public class FunctionXML_TEXTTest extends AbstractFunctionXMLTest {
    method testExecution_IncompatibleCachedObjectId (line 37) | @Test(expected = PreprocessorException.class)
    method testExecution (line 42) | @Test
    method testName (line 51) | @Override
    method testReference (line 56) | @Override
    method testArity (line 61) | @Override
    method testAllowedArgumentTypes (line 66) | @Override
    method testResultType (line 71) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XELEMENTTest.java
  class FunctionXML_XELEMENTTest (line 34) | public class FunctionXML_XELEMENTTest extends AbstractFunctionXMLTest {
    method testExecution_ForWrongElement (line 38) | @Test(expected = PreprocessorException.class)
    method testExecution_NonExistElement (line 44) | @Test(expected = PreprocessorException.class)
    method testExecution_ForExistElements (line 49) | @Test
    method testName (line 58) | @Override
    method testReference (line 63) | @Override
    method testArity (line 68) | @Override
    method testAllowedArgumentTypes (line 73) | @Override
    method testResultType (line 78) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XLISTTest.java
  class FunctionXML_XLISTTest (line 34) | public class FunctionXML_XLISTTest extends AbstractFunctionXMLTest {
    method testExecution_ForWrongElement (line 38) | @Test(expected = PreprocessorException.class)
    method testExecution_NonExistElement (line 44) | @Test
    method testExecution_ForExistElements (line 52) | @Test
    method testName (line 60) | @Override
    method testReference (line 65) | @Override
    method testArity (line 70) | @Override
    method testAllowedArgumentTypes (line 75) | @Override
    method testResultType (line 80) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/AbstractOperatorTest.java
  class AbstractOperatorTest (line 37) | public abstract class AbstractOperatorTest extends AbstractSpyPreprocess...
    method testKeyword (line 39) | @Test
    method testReference (line 42) | @Test
    method testArity (line 45) | @Test
    method testPriority (line 48) | @Test
    method testExecution (line 51) | @Test
    method testExecution_PreprocessorException (line 54) | @Test
    method assertReference (line 57) | public void assertReference(final AbstractOperator operator) {
    method assertExecution (line 64) | public PreprocessorContext assertExecution(final Value expectedResult,...
    method assertPreprocessorException (line 72) | public void assertPreprocessorException(final String expression) {

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorADDTest.java
  class OperatorADDTest (line 30) | public class OperatorADDTest extends AbstractOperatorTest {
    method testExecution (line 34) | @Override
    method testExecution_chain (line 43) | @Test
    method testExecution_PreprocessorException (line 48) | @Override
    method testArity (line 58) | @Override
    method testKeyword (line 63) | @Override
    method testReference (line 68) | @Override
    method testPriority (line 73) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorANDTest.java
  class OperatorANDTest (line 30) | public class OperatorANDTest extends AbstractOperatorTest {
    method testExecution (line 34) | @Test
    method testExecution_PreprocessorException (line 48) | @Override
    method testKeyword (line 57) | @Override
    method testReference (line 62) | @Override
    method testArity (line 67) | @Override
    method testPriority (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorDIVTest.java
  class OperatorDIVTest (line 30) | public class OperatorDIVTest extends AbstractOperatorTest {
    method testExecution (line 34) | @Override
    method testExecution_chain (line 41) | @Test
    method testExecution_PreprocessorException (line 46) | @Override
    method testExecution_arithmeticException (line 57) | @Test(expected = ArithmeticException.class)
    method testKeyword (line 62) | @Override
    method testReference (line 67) | @Override
    method testArity (line 72) | @Override
    method testPriority (line 77) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorEQUTest.java
  class OperatorEQUTest (line 29) | public class OperatorEQUTest extends AbstractOperatorTest {
    method testExecution (line 33) | @Override
    method testExecution_PreprocessorException (line 48) | @Override
    method testKeyword (line 56) | @Override
    method testReference (line 61) | @Override
    method testArity (line 66) | @Override
    method testPriority (line 71) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorGREATEQUTest.java
  class OperatorGREATEQUTest (line 29) | public class OperatorGREATEQUTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 65) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorGREATTest.java
  class OperatorGREATTest (line 29) | public class OperatorGREATTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorLESSEQUTest.java
  class OperatorLESSEQUTest (line 29) | public class OperatorLESSEQUTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 65) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorLESSTest.java
  class OperatorLESSTest (line 29) | public class OperatorLESSTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorMODTest.java
  class OperatorMODTest (line 30) | public class OperatorMODTest extends AbstractOperatorTest {
    method testExecution (line 34) | @Override
    method testExecution_PreprocessorException (line 41) | @Override
    method testExecution_arithmeticException (line 50) | @Test(expected = ArithmeticException.class)
    method testArity (line 55) | @Override
    method testKeyword (line 60) | @Override
    method testReference (line 65) | @Override
    method testPriority (line 70) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorMULTest.java
  class OperatorMULTest (line 30) | public class OperatorMULTest extends AbstractOperatorTest {
    method testExecution (line 34) | @Override
    method testExecution_chain (line 40) | @Test
    method testExecution_PreprocessorException (line 45) | @Override
    method testArity (line 57) | @Override
    method testKeyword (line 62) | @Override
    method testReference (line 67) | @Override
    method testPriority (line 72) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorNOTEQUTest.java
  class OperatorNOTEQUTest (line 29) | public class OperatorNOTEQUTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 67) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorNOTTest.java
  class OperatorNOTTest (line 29) | public class OperatorNOTTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 60) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorORTest.java
  class OperatorORTest (line 29) | public class OperatorORTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorSUBTest.java
  class OperatorSUBTest (line 29) | public class OperatorSUBTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/expression/operators/OperatorXORTest.java
  class OperatorXORTest (line 29) | public class OperatorXORTest extends AbstractOperatorTest {
    method testKeyword (line 33) | @Override
    method testReference (line 38) | @Override
    method testArity (line 43) | @Override
    method testPriority (line 48) | @Override
    method testExecution (line 53) | @Override
    method testExecution_PreprocessorException (line 62) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/maven/MavenPropertiesImporterTest.java
  class MavenPropertiesImporterTest (line 31) | public class MavenPropertiesImporterTest {
    method testNormalizeGetter (line 33) | @Test
    method testRequestProperty (line 38) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/maven/PreprocessMojoTest.java
  class PreprocessMojoTest (line 39) | public final class PreprocessMojoTest extends AbstractMojoTestCase {
    method assertArrayEqualsWithoutOrders (line 41) | private static void assertArrayEqualsWithoutOrders(final Object[] arra...
    method setUp (line 59) | @Before
    method tearDown (line 65) | @After
    method testConfiguration (line 71) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/removers/AbstractCommentRemoverTest.java
  class AbstractCommentRemoverTest (line 16) | @RunWith(Parameterized.class)
    method AbstractCommentRemoverTest (line 20) | public AbstractCommentRemoverTest(final boolean whiteSpaced) {
    method data (line 24) | @Parameterized.Parameters
    method makeCommentRemoverInstance (line 29) | protected abstract AbstractCommentRemover makeCommentRemoverInstance(R...
    method assertCommentRemove (line 32) | public void assertCommentRemove(final String source, final String expe...

FILE: jcp/src/test/java/com/igormaznitsa/jcp/removers/CStyleCommentsRemoverTest.java
  class CStyleCommentsRemoverTest (line 28) | public class CStyleCommentsRemoverTest extends AbstractCommentRemoverTest {
    method CStyleCommentsRemoverTest (line 30) | public CStyleCommentsRemoverTest(boolean whiteSpaced) {
    method makeCommentRemoverInstance (line 34) | @Override
    method testRemovingSingleStringComments (line 41) | @Test
    method testMultilineStringComments (line 48) | @Test
    method testMultipleStarsAtComments (line 55) | @Test
    method testTabulation (line 62) | @Test
    method testJcpDirectivesInComments (line 67) | @Test
    method testLineCommentInTheEnd (line 75) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/removers/JcpCommentLineRemoverTest.java
  class JcpCommentLineRemoverTest (line 28) | public class JcpCommentLineRemoverTest extends AbstractCommentRemoverTest {
    method JcpCommentLineRemoverTest (line 30) | public JcpCommentLineRemoverTest(boolean whiteSpaced) {
    method makeCommentRemoverInstance (line 34) | @Override
    method testRemovingSingleStringComments (line 41) | @Test
    method testMultilineStringComments (line 49) | @Test
    method testMultipleStarsAtComments (line 57) | @Test
    method testTabulation (line 65) | @Test
    method testJcpDirectivesInComments (line 73) | @Test
    method testCommentedJcpDirective (line 81) | @Test
    method testCommentedJcpDirectiveAndJcpMarkedLines (line 96) | @Test
    method testLineCommentInTheEnd (line 111) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/removers/JustCopyCommentsRemoverTest.java
  class JustCopyCommentsRemoverTest (line 28) | public class JustCopyCommentsRemoverTest extends AbstractCommentRemoverT...
    method JustCopyCommentsRemoverTest (line 30) | public JustCopyCommentsRemoverTest(boolean whiteSpaced) {
    method makeCommentRemoverInstance (line 34) | @Override
    method testRemovingSingleStringComments (line 41) | @Test
    method testMultilineStringComments (line 49) | @Test
    method testMultipleStarsAtComments (line 57) | @Test
    method testTabulation (line 65) | @Test
    method testJcpDirectivesInComments (line 73) | @Test
    method testLineCommentInTheEnd (line 81) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/AbortTest.java
  class AbortTest (line 29) | public class AbortTest extends AbstractUseCaseTest {
    method tuneContext (line 31) | @Override
    method check (line 36) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/AbstractUseCaseTest.java
  class AbstractUseCaseTest (line 40) | public abstract class AbstractUseCaseTest {
    method before (line 46) | @Before
    method after (line 66) | @After
    method isDeleteTemporaryFolder (line 77) | public boolean isDeleteTemporaryFolder() {
    method check (line 81) | public abstract void check(PreprocessorContext context, JcpPreprocesso...
    method assertFolder (line 84) | private void assertFolder(final File etalonFolder, final File checkFol...
    method tuneContext (line 148) | protected void tuneContext(final PreprocessorContext context) {
    method tuneDefaultContextOptions (line 152) | protected void tuneDefaultContextOptions(final PreprocessorContext con...
    method isIgnoreEolInCheck (line 160) | protected boolean isIgnoreEolInCheck() {
    method createPreprocessorContext (line 164) | protected PreprocessorContext createPreprocessorContext(final File bas...
    method executeTest (line 168) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/BinFileTest.java
  class BinFileTest (line 30) | public class BinFileTest extends AbstractUseCaseTest {
    method tuneContext (line 32) | @Override
    method check (line 37) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/DefUndefTest.java
  class DefUndefTest (line 29) | public class DefUndefTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/EvalFileTest.java
  class EvalFileTest (line 29) | public class EvalFileTest extends AbstractUseCaseTest {
    method tuneContext (line 31) | @Override
    method check (line 36) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/ExternalGlobalDefFileTest.java
  class ExternalGlobalDefFileTest (line 30) | public class ExternalGlobalDefFileTest extends AbstractUseCaseTest {
    method tuneContext (line 32) | @Override
    method check (line 37) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/GenerationTest.java
  class GenerationTest (line 29) | public class GenerationTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/IncludeAndExitTest.java
  class IncludeAndExitTest (line 29) | public class IncludeAndExitTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/InsidePreprocessingTest.java
  class InsidePreprocessingTest (line 29) | public class InsidePreprocessingTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/PrefixPostfixTest.java
  class PrefixPostfixTest (line 29) | public class PrefixPostfixTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/PreserveIndentOffTest.java
  class PreserveIndentOffTest (line 30) | public class PreserveIndentOffTest extends AbstractUseCaseTest {
    method tuneContext (line 32) | @Override
    method check (line 38) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/PreserveIndentOnTest.java
  class PreserveIndentOnTest (line 29) | public class PreserveIndentOnTest extends AbstractUseCaseTest {
    method tuneContext (line 31) | @Override
    method check (line 37) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/SimpleTest.java
  class SimpleTest (line 29) | public class SimpleTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/SpacesBeforeDirectivesNotAllowedTest.java
  class SpacesBeforeDirectivesNotAllowedTest (line 33) | public class SpacesBeforeDirectivesNotAllowedTest extends AbstractUseCas...
    method createPreprocessorContext (line 35) | @Override
    method tuneContext (line 40) | @Override
    method check (line 45) | @Override
    class WarnLogPreprocessorContext (line 58) | private static class WarnLogPreprocessorContext extends PreprocessorCo...
      method WarnLogPreprocessorContext (line 61) | public WarnLogPreprocessorContext(final File baseDir) {
      method getWarnings (line 66) | public List<String> getWarnings() {
      method logWarning (line 70) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/SpacesBeforeDirectivesTest.java
  class SpacesBeforeDirectivesTest (line 33) | public class SpacesBeforeDirectivesTest extends AbstractUseCaseTest {
    method createPreprocessorContext (line 35) | @Override
    method tuneContext (line 40) | @Override
    method check (line 45) | @Override
    class WarnLogPreprocessorContext (line 58) | private static class WarnLogPreprocessorContext extends PreprocessorCo...
      method WarnLogPreprocessorContext (line 61) | public WarnLogPreprocessorContext(final File baseDir) {
      method getWarnings (line 65) | public List<String> getWarnings() {
      method logWarning (line 69) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/StaticSiteTest.java
  class StaticSiteTest (line 29) | public class StaticSiteTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/Str2JavaTest.java
  class Str2JavaTest (line 29) | public class Str2JavaTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/StringDirectiveTest.java
  class StringDirectiveTest (line 29) | public class StringDirectiveTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/TextBufferVariablesTest.java
  class TextBufferVariablesTest (line 30) | public class TextBufferVariablesTest extends AbstractUseCaseTest {
    method tuneContext (line 32) | @Override
    method check (line 37) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/UnknownVarAsFalseTest.java
  class UnknownVarAsFalseTest (line 29) | public class UnknownVarAsFalseTest extends AbstractUseCaseTest {
    method tuneContext (line 31) | @Override
    method check (line 37) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/UsePrefixAsMultilineTest.java
  class UsePrefixAsMultilineTest (line 29) | public class UsePrefixAsMultilineTest extends AbstractUseCaseTest {
    method check (line 31) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/usecases/UserFunctionTest.java
  class UserFunctionTest (line 34) | public class UserFunctionTest extends AbstractUseCaseTest implements Pre...
    method tuneContext (line 39) | @Override
    method check (line 44) | @Override
    method processAction (line 52) | @Override
    method processUserFunction (line 61) | @Override
    method hasAction (line 76) | @Override
    method hasUserFunction (line 81) | @Override
    method getUserFunctionArity (line 89) | @Override

FILE: jcp/src/test/java/com/igormaznitsa/jcp/utils/PreprocessorUtilsTest.java
  class PreprocessorUtilsTest (line 35) | public class PreprocessorUtilsTest {
    method testReplaceStringPrefix (line 37) | @Test
    method testGenerateStringForChar (line 45) | @Test
    method testReplacePartByChar (line 53) | @Test
    method testMakeFileReader_charsetAndBufferSizeChange (line 61) | @Test

FILE: jcp/src/test/java/com/igormaznitsa/jcp/utils/antpathmatcher/AntPathMatcherTest.java
  class AntPathMatcherTest (line 30) | public class AntPathMatcherTest {
    method testMatching (line 32) | @Test

FILE: jcp/src/test/resources/com/igormaznitsa/jcp/expression/functions/eval/TestEval.java
  class TestEval (line 13) | public final class TestEval {
    method main (line 14) | public void main(String ... args){

FILE: jcp/src/test/resources/com/igormaznitsa/jcp/expression/functions/eval/TestEvalWithIncluded.java
  class TestEvalWithIncluded (line 2) | public final class TestEvalWithIncluded {
    method main (line 3) | public void main(String ... args){
Condensed preview — 717 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,049K chars).
[
  {
    "path": ".gitattributes",
    "chars": 20,
    "preview": "* text=false\n* -crlf"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 140,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"maven\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n    rebase-s"
  },
  {
    "path": ".github/workflows/run-maven-tests.yml",
    "chars": 427,
    "preview": "name: Run maven tests\n\non:\n  pull_request:\n    branches:\n      - master\n  push:\n    branches:\n      - master\n\njobs:\n  te"
  },
  {
    "path": ".gitignore",
    "chars": 216,
    "preview": "**/.gradle/\n**/build/\n**/target/\n/nbproject/\n**/dependency-reduced-pom.xml\n*.iml\n/.idea/\n/.idea/libraries\n/jcp-tests/jcp"
  },
  {
    "path": ".projectKnowledge/JCPreprocessor.mmd",
    "chars": 461,
    "preview": "Mind Map generated by NB MindMap plugin   \n> __version__=`1.0`,showJumps=`true`\n---\n\n# Java Comment<br/>preprocessor\n- L"
  },
  {
    "path": ".projectKnowledge/documap.mmd",
    "chars": 46537,
    "preview": "[Scia Reto](https://sciareto.org) mind map   \n> __version__=`1.1`,showJumps=`true`\n---\n\n# Java Comment Preprocessor<br/>"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 7480,
    "preview": "![Logo](assets/banner.png)\n\n[![License Apache 2.0](https://img.shields.io/badge/license-Apache%20License%202.0-green.svg"
  },
  {
    "path": "changelog.txt",
    "chars": 9507,
    "preview": "__7.3.0 (11-okt-2025)__\n\n- added way to manipulate current JCP text buffers as string variables: `jcp.text.buffer.all`,`"
  },
  {
    "path": "jcp/pom.xml",
    "chars": 29543,
    "preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:sc"
  },
  {
    "path": "jcp/src/assemble/bundle.xml",
    "chars": 1275,
    "preview": "<assembly xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n          xmlns=\"http://maven.apache.org/plugins/maven-a"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/InfoHelper.java",
    "chars": 7841,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/JcpPreprocessor.java",
    "chars": 22755,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/ant/PreprocessTask.java",
    "chars": 13329,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ActionPreprocessorExtensionHandler.java",
    "chars": 1175,
    "preview": "package com.igormaznitsa.jcp.cmdline;\n\nimport com.igormaznitsa.jcp.context.PreprocessorContext;\nimport com.igormaznitsa."
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowMergeBlockLineHandler.java",
    "chars": 1777,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/AllowWhitespaceDirectiveHandler.java",
    "chars": 1675,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CareForLastEolHandler.java",
    "chars": 1530,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ClearTargetHandler.java",
    "chars": 1724,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/CommandLineHandler.java",
    "chars": 1875,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DestinationDirectoryHandler.java",
    "chars": 2053,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/DontOverwriteSameContentHandler.java",
    "chars": 1741,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludeFoldersHandler.java",
    "chars": 2046,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/ExcludedFileExtensionsHandler.java",
    "chars": 2186,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/FileExtensionsHandler.java",
    "chars": 2165,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableDefiningFileHandler.java",
    "chars": 3004,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/GlobalVariableHandler.java",
    "chars": 2708,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/HelpHandler.java",
    "chars": 2078,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/InCharsetHandler.java",
    "chars": 1998,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepAttributesHandler.java",
    "chars": 1666,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepCommentsHandler.java",
    "chars": 2463,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/KeepLineHandler.java",
    "chars": 1739,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/OutCharsetHandler.java",
    "chars": 2028,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/PreserveIndentDirectiveHandler.java",
    "chars": 1628,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/RemoveCommentsHandler.java",
    "chars": 1867,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/SourceDirectoryHandler.java",
    "chars": 2306,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/UnknownAsFalseHandler.java",
    "chars": 1732,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/cmdline/VerboseHandler.java",
    "chars": 1695,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/containers/FileInfoContainer.java",
    "chars": 37585,
    "preview": "/*\r\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\r\n *\r\n * Licensed to the Apache Software Foundatio"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/containers/PreprocessingFlag.java",
    "chars": 1700,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/containers/TextFileDataContainer.java",
    "chars": 3431,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/CommentRemoverType.java",
    "chars": 733,
    "preview": "package com.igormaznitsa.jcp.context;\n\nimport java.util.Arrays;\nimport java.util.stream.Collectors;\n\n/**\n * Type of comm"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/CommentTextProcessor.java",
    "chars": 1334,
    "preview": "package com.igormaznitsa.jcp.context;\n\n/**\n * A custom processor for detecting and handling uncommenting directives in s"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/EnvironmentVariableProcessor.java",
    "chars": 2710,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/ExecutionAllowable.java",
    "chars": 785,
    "preview": "package com.igormaznitsa.jcp.context;\n\n/**\n * Interface describes an abstract object which can decide to be executed or "
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/JCPSpecialVariableProcessor.java",
    "chars": 10994,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessingState.java",
    "chars": 20391,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessorContext.java",
    "chars": 41984,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/PreprocessorContextAware.java",
    "chars": 608,
    "preview": "package com.igormaznitsa.jcp.context;\n\n/**\n * Listener for preprocessor context work states.\n *\n * @since 7.3.0\n */\npubl"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/context/SpecialVariableProcessor.java",
    "chars": 2271,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/AbortDirectiveHandler.java",
    "chars": 2273,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/AbstractDirectiveHandler.java",
    "chars": 6110,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ActionDirectiveHandler.java",
    "chars": 4654,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/AfterDirectiveProcessingBehaviour.java",
    "chars": 1538,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/BreakDirectiveHandler.java",
    "chars": 2102,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/CommentNextLineDirectiveHandler.java",
    "chars": 1731,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ContinueDirectiveHandler.java",
    "chars": 2226,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/DefineDirectiveHandler.java",
    "chars": 3856,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/DefinelDirectiveHandler.java",
    "chars": 1627,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/DirectiveArgumentType.java",
    "chars": 1455,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/EchoDirectiveHandler.java",
    "chars": 1806,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ElseDirectiveHandler.java",
    "chars": 2336,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/EndDirectiveHandler.java",
    "chars": 2581,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/EndIfDirectiveHandler.java",
    "chars": 2215,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ErrorDirectiveHandler.java",
    "chars": 2227,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ExcludeIfDirectiveHandler.java",
    "chars": 2204,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ExitDirectiveHandler.java",
    "chars": 1944,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/ExitIfDirectiveHandler.java",
    "chars": 2698,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/FlushDirectiveHandler.java",
    "chars": 2681,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalDirectiveHandler.java",
    "chars": 2505,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalElseDirectiveHandler.java",
    "chars": 2520,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalEndIfDirectiveHandler.java",
    "chars": 2372,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/GlobalIfDirectiveHandler.java",
    "chars": 2745,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDefDirectiveHandler.java",
    "chars": 1314,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDefinedDirectiveHandler.java",
    "chars": 2656,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/IfDirectiveHandler.java",
    "chars": 2628,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/IfNDefDirectiveHandler.java",
    "chars": 1459,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/IncludeDirectiveHandler.java",
    "chars": 2687,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/LocalDirectiveHandler.java",
    "chars": 2315,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/MsgDirectiveHandler.java",
    "chars": 2091,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/NoAutoFlushHandler.java",
    "chars": 1926,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/OutDisabledDirectiveHandler.java",
    "chars": 1740,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/OutEnabledDirectiveHandler.java",
    "chars": 1740,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/OutNameDirectiveHandler.java",
    "chars": 2266,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/OutdirDirectiveHandler.java",
    "chars": 2245,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/PostfixDirectiveHandler.java",
    "chars": 2335,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/PrefixDirectiveHandler.java",
    "chars": 2330,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/UndefDirectiveHandler.java",
    "chars": 1851,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/WarningDirectiveHandler.java",
    "chars": 1670,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/directives/WhileDirectiveHandler.java",
    "chars": 2577,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/exceptions/FilePositionInfo.java",
    "chars": 2338,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/exceptions/PreprocessorException.java",
    "chars": 4735,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/Expression.java",
    "chars": 13861,
    "preview": "/*\r\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\r\n *\r\n * Licensed to the Apache Software Foundatio"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItem.java",
    "chars": 1391,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItemPriority.java",
    "chars": 1241,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionItemType.java",
    "chars": 1012,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionParser.java",
    "chars": 24125,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionTree.java",
    "chars": 3852,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ExpressionTreeElement.java",
    "chars": 15451,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/Value.java",
    "chars": 8163,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/ValueType.java",
    "chars": 1833,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/Variable.java",
    "chars": 2142,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/AbstractFunction.java",
    "chars": 7558,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/AbstractStrConverter.java",
    "chars": 1696,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionABS.java",
    "chars": 2147,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionBINFILE.java",
    "chars": 7351,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionDefinedByUser.java",
    "chars": 5031,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionESC.java",
    "chars": 3173,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionEVALFILE.java",
    "chars": 3944,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionIS.java",
    "chars": 2321,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionISSUBSTR.java",
    "chars": 2196,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionROUND.java",
    "chars": 2117,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2CSV.java",
    "chars": 1769,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2GO.java",
    "chars": 4522,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2INT.java",
    "chars": 1670,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JAVA.java",
    "chars": 3079,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JS.java",
    "chars": 1798,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2JSON.java",
    "chars": 1775,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2WEB.java",
    "chars": 2112,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTR2XML.java",
    "chars": 1778,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionSTRLEN.java",
    "chars": 1964,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/FunctionTRIMLINES.java",
    "chars": 2151,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/AbstractXMLFunction.java",
    "chars": 7720,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ATTR.java",
    "chars": 2138,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_GET.java",
    "chars": 2152,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_LIST.java",
    "chars": 2600,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_NAME.java",
    "chars": 2084,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_OPEN.java",
    "chars": 4030,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_ROOT.java",
    "chars": 2266,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_SIZE.java",
    "chars": 2012,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_TEXT.java",
    "chars": 2118,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XELEMENT.java",
    "chars": 3341,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/FunctionXML_XLIST.java",
    "chars": 3026,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/functions/xml/NodeContainer.java",
    "chars": 1823,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/AbstractOperator.java",
    "chars": 3718,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorADD.java",
    "chars": 2417,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorAND.java",
    "chars": 1830,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorDIV.java",
    "chars": 2085,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorEQU.java",
    "chars": 2464,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorGREAT.java",
    "chars": 2308,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorGREATEQU.java",
    "chars": 2332,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorLESS.java",
    "chars": 2303,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorLESSEQU.java",
    "chars": 2286,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorMOD.java",
    "chars": 2112,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorMUL.java",
    "chars": 2117,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorNOT.java",
    "chars": 1738,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorNOTEQU.java",
    "chars": 2476,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorOR.java",
    "chars": 1825,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorSUB.java",
    "chars": 2110,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/expression/operators/OperatorXOR.java",
    "chars": 1822,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/extension/LogPreprocessorExtension.java",
    "chars": 2494,
    "preview": "package com.igormaznitsa.jcp.extension;\n\n\nimport com.igormaznitsa.jcp.containers.TextFileDataContainer;\nimport com.igorm"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/extension/PreprocessorExtension.java",
    "chars": 3790,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/gradle/JcpGradlePlugin.java",
    "chars": 280,
    "preview": "package com.igormaznitsa.jcp.gradle;\n\nimport org.gradle.api.Plugin;\nimport org.gradle.api.Project;\n\npublic class JcpGrad"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/gradle/JcpTask.java",
    "chars": 16709,
    "preview": "package com.igormaznitsa.jcp.gradle;\n\nimport static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServi"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/logger/PreprocessorLogger.java",
    "chars": 1974,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/logger/SystemOutLogger.java",
    "chars": 2267,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/maven/MavenPropertiesImporter.java",
    "chars": 7782,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/maven/PreprocessMojo.java",
    "chars": 18844,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/removers/AbstractCommentRemover.java",
    "chars": 2948,
    "preview": "package com.igormaznitsa.jcp.removers;\n\nimport static java.util.Objects.requireNonNull;\n\nimport com.igormaznitsa.jcp.con"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/removers/CStyleCommentRemover.java",
    "chars": 3416,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/removers/JcpCommentLineRemover.java",
    "chars": 4973,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/removers/JustCopyRemover.java",
    "chars": 687,
    "preview": "package com.igormaznitsa.jcp.removers;\n\nimport java.io.IOException;\nimport java.io.Reader;\nimport java.io.Writer;\n\npubli"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/AntPathMatcher.java",
    "chars": 11226,
    "preview": "package com.igormaznitsa.jcp.utils;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.List;\nimp"
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/ArrayUtils.java",
    "chars": 2378,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/GetUtils.java",
    "chars": 1801,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/IOUtils.java",
    "chars": 1461,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/PreprocessorUtils.java",
    "chars": 19903,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/java/com/igormaznitsa/jcp/utils/ResettablePrinter.java",
    "chars": 2085,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/main/resources/META-INF/gradle-plugins/com.igormaznitsa.jcp.properties",
    "chars": 64,
    "preview": "implementation-class=com.igormaznitsa.jcp.gradle.JcpGradlePlugin"
  },
  {
    "path": "jcp/src/main/resources/com/igormaznitsa/jcp/ant/antlib.xml",
    "chars": 143,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<antlib>\n    <taskdef name=\"preprocess\" classname=\"com.igormaznitsa.jcp.ant.Prepr"
  },
  {
    "path": "jcp/src/main/resources/com/igormaznitsa/jcp/ant/tasks.properties",
    "chars": 50,
    "preview": "preprocess=com.igormaznitsa.jcp.ant.PreprocessTask"
  },
  {
    "path": "jcp/src/main/resources/jcpversion.properties",
    "chars": 67,
    "preview": "version=${project.version}\nurl=${project.url}\nyear=${current.year}\n"
  },
  {
    "path": "jcp/src/site/markdown/examples/hello-world.md",
    "chars": 690,
    "preview": "# Hello World\n\nJust add the snippet into pom.xml\n\n```xml\n\n<build>\n    <plugins>\n        <plugin>\n            <groupId>co"
  },
  {
    "path": "jcp/src/site/markdown/index.md",
    "chars": 1024,
    "preview": "# Java Comment Preprocessor\n\nJava Comment Preprocessor (JCP) is a Maven plugin that allows preprocessing of source code "
  },
  {
    "path": "jcp/src/site/markdown/usage.md",
    "chars": 1798,
    "preview": "# Usage\n\nJust add the plugin into the module build section.\n\n```xml\n\n<plugin>\n    <groupId>com.igormaznitsa</groupId>\n  "
  },
  {
    "path": "jcp/src/site/site.xml",
    "chars": 637,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project>\n    <skin>\n        <groupId>org.apache.maven.skins</groupId>\n        <a"
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/AbstractMockPreprocessorContextTest.java",
    "chars": 3290,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/AbstractSpyPreprocessorContextTest.java",
    "chars": 3919,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/JCPreprocessorTest.java",
    "chars": 5833,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/TestUtils.java",
    "chars": 1293,
    "preview": "/*\n * Copyright 2019 Igor Maznitsa.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not"
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/ant/PreprocessTaskTest.java",
    "chars": 7961,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AbstractCommandLineHandlerTest.java",
    "chars": 2233,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ActionPreprocessorExtensionHandlerTest.java",
    "chars": 1433,
    "preview": "package com.igormaznitsa.jcp.cmdline;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.asser"
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AllowMergeBlockLineHandlerTest.java",
    "chars": 1147,
    "preview": "package com.igormaznitsa.jcp.cmdline;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.asser"
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/AllowWhitespaceDirectiveHandlerTest.java",
    "chars": 2536,
    "preview": "/*\r\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\r\n *\r\n * Licensed to the Apache Software Foundatio"
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/CareForLastEolHandlerTest.java",
    "chars": 2337,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ClearTargetFolderHandlerTest.java",
    "chars": 2327,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/CommentRemoverTypeHandlerTest.java",
    "chars": 2348,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/DestinationDirectoryHandlerTest.java",
    "chars": 2166,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/DontOverwriteSameContentHandlerTest.java",
    "chars": 2404,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ExcludeFoldersHandlerTest.java",
    "chars": 2542,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/ExcludedFileExtensionsHandlerTest.java",
    "chars": 2310,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/FileExtensionsHandlerTest.java",
    "chars": 2274,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/GlobalVariableDefiningFileHandlerTest.java",
    "chars": 4271,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/GlobalVariableHandlerTest.java",
    "chars": 2150,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/HelpHandlerTest.java",
    "chars": 2172,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/InCharsetHandlerTest.java",
    "chars": 2344,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/KeepLineHandlerTest.java",
    "chars": 2306,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/OutCharsetHandlerTest.java",
    "chars": 2324,
    "preview": "/*\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\n *\n * Licensed to the Apache Software Foundation ("
  },
  {
    "path": "jcp/src/test/java/com/igormaznitsa/jcp/cmdline/PreserveIndentDirectiveHandlerTest.java",
    "chars": 2389,
    "preview": "/*\r\n * Copyright 2002-2019 Igor Maznitsa (http://www.igormaznitsa.com)\r\n *\r\n * Licensed to the Apache Software Foundatio"
  }
]

// ... and 517 more files (download for full content)

About this extraction

This page contains the full source code of the raydac/java-comment-preprocessor GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 717 files (2.6 MB), approximately 742.7k tokens, and a symbol index with 2360 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!