package egrepregex class RegexPlayground( val sentRegex : RegexProperty, val sentMatchWords : BoolProperty, val sentMatchCase : BoolProperty, val regexForm : RegexForm ) : FormBehaviour( regexForm.title, regexForm ) { constructor( regexForm : RegexForm ) : this( null, null, null, regexForm ) constructor( sentRegex : RegexProperty, sentMatchWords : BoolProperty, sentMatchCase : BoolProperty ) : this ( sentRegex, sentMatchWords, sentMatchCase, RegexForm() ) init { if ( sentRegex != null) regexForm.pattern.value = sentRegex.value if ( sentMatchWords != null) regexForm.matchWords.value = sentMatchWords.value if ( sentMatchCase != null) regexForm.matchCase.value = sentMatchCase.value regexForm.pattern.listen( this:>updated ) regexForm.matchCase.listen( this:>updated ) regexForm.matchWords.listen( this:>updated ) regexForm.text.listen( this:>updated ) regexForm.matchNumber.listen( this:>updated ) updated() } override meth onCancel() { closeCurrentBehaviour() } override meth onOK() { if (sentRegex != null) sentRegex.value = regexForm.pattern.value if (sentMatchCase != null) sentMatchCase.value = regexForm.matchCase.value if (sentMatchWords != null) sentMatchWords.value = regexForm.matchWords.value closeCurrentBehaviour() } meth updated() { try { val quotedPattern = regexForm.pattern.value // Note, the order is important! .replace( "\\", "\\\\" ) // Escape the \ character .replace( "\"", "\\\"" ) // Escape the " character regexForm.javaString.value = "\"${quotedPattern}\"" val caseFlag = if (regexForm.matchCase.value) "" else "-i" val pattern = EGrepRegexFlavour().withOptions( regexForm.pattern.value, true, regexForm.matchWords.value ) val result = $( echo '${regexForm.text.value}' | egrep -o $caseFlag '${pattern}' ).collect() regexForm.group0.value = if (result.exitStatus == 2) { "" } else if (result.exitStatus == 1) { "" } else { val lines = result.out.split( "\n" ) if (lines.size() < regexForm.matchNumber.value) { "Only ${lines.size()} matches" } else { lines[regexForm.matchNumber.value-1] } } } catch ( e : Exception ) { regexForm.group0.value = "ERROR :\n$e" } } }