Add typed Kotlin string predicate helpers
ober
8894a3361f51943de58add4267dab3e54286b4fc
--- a/lib/jerboa/typed/checker.ss +++ b/lib/jerboa/typed/checker.ss @@ -418,12 +418,21 @@ (cons 'string-replace-regex (make-typed-call-sig (list 'String 'String 'String) 'String '() 'jvm-string-replace-regex '())) + (cons 'string-matches-regex? + (make-typed-call-sig (list 'String 'String) 'Bool '() + 'jvm-string-matches-regex '())) (cons 'string-filter-letter-or-digit (make-typed-call-sig (list 'String) 'String '() 'jvm-string-filter-letter-or-digit '())) (cons 'string-contains? (make-typed-call-sig (list 'String 'String) 'Bool '() 'jvm-string-contains '())) + (cons 'string-starts-with? + (make-typed-call-sig (list 'String 'String) 'Bool '() + 'jvm-string-starts-with '())) + (cons 'string-ends-with? + (make-typed-call-sig (list 'String 'String) 'Bool '() + 'jvm-string-ends-with '())) (cons 'string-blank? (make-typed-call-sig (list 'String) 'Bool '() 'jvm-string-blank '())) --- a/lib/jerboa/typed/kotlin/lower.ss +++ b/lib/jerboa/typed/kotlin/lower.ss @@ -239,6 +239,11 @@ (list (make-kt-new (make-kt-type 'Regex #f '()) (list (cadr args))) (caddr args)))] + [(jvm-string-matches-regex) + (make-kt-member-call + (make-kt-new (make-kt-type 'Regex #f '()) (list (cadr args))) + 'matches + (list (car args)))] [(jvm-string-filter-letter-or-digit) (make-kt-member-call (car args) @@ -249,6 +254,10 @@ (make-kt-member-call (kt-name1 'ch) 'isLetterOrDigit '()))))] [(jvm-string-contains) (make-kt-member-call (car args) 'contains (cdr args))] + [(jvm-string-starts-with) + (make-kt-member-call (car args) 'startsWith (cdr args))] + [(jvm-string-ends-with) + (make-kt-member-call (car args) 'endsWith (cdr args))] [(jvm-string-blank) (make-kt-member-call (car args) 'isBlank '())] [(jvm-float-array) --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -278,7 +278,7 @@ (define ocr-string-form '(typed-library (sample typed ocrstrings) - (export normalizeOcr compact) + (export normalizeOcr compact shouldReplaceOcrLabel) (def (normalizeOcr (value : String)) : String (string-replace-regex (string-trim @@ -289,7 +289,17 @@ "\\s+" " ")) (def (compact (value : String)) : String - (string-filter-letter-or-digit (string-lowercase value))))) + (string-filter-letter-or-digit (string-lowercase value))) + (def (shouldReplaceOcrLabel (label : String) (status : String) (notes : String)) : Bool + (let ((text (string-trim label))) + (if (string-blank? text) + #t + (if (string-ends-with? text "?") + #t + (if (string-matches-regex? text "^\\d+\\s+boxes$") + #t + (and (equal? status "candidate") + (string-starts-with? notes "Guess:"))))))))) (define ocr-string-kotlin (typed-library-form->kotlin-string ocr-string-form)) @@ -301,6 +311,12 @@ ".trim()") (test-contains "String filter letter-or-digit lowers to Kotlin filter lambda" ocr-string-kotlin "value.lowercase().filter({ ch -> ch.isLetterOrDigit() })") +(test-contains "String endsWith lowers to Kotlin endsWith" ocr-string-kotlin + "text.endsWith(\"?\")") +(test-contains "String regex matches lowers to Kotlin Regex matches" ocr-string-kotlin + "Regex(\"^\\\\d+\\\\s+boxes$\").matches(text)") +(test-contains "String startsWith lowers to Kotlin startsWith" ocr-string-kotlin + "notes.startsWith(\"Guess:\")") (printf "typed-kotlin tests: ~a passed, ~a failed~%" pass fail) (when (> fail 0) (exit 1))