You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.1 KiB
Racket
32 lines
1.1 KiB
Racket
7 years ago
|
#lang racket/base
|
||
|
(require racket/class)
|
||
|
(provide indent-brag)
|
||
|
|
||
|
(define (line text pos)
|
||
|
(send text position-line pos))
|
||
|
|
||
|
(define (previous-line text pos)
|
||
|
(define this-line (line text pos))
|
||
|
(and (positive? this-line) (sub1 this-line)))
|
||
|
|
||
|
(define (line-first-visible-char text line)
|
||
|
(define (char text pos) (and pos (send text get-character pos)))
|
||
|
(char text (for*/first ([pos (in-range (send text line-start-position line)
|
||
|
(send text line-end-position line))]
|
||
|
[c (in-value (char text pos))]
|
||
|
#:unless (char-blank? c))
|
||
|
pos)))
|
||
|
|
||
|
(define (indent-brag tbox [posn 0])
|
||
|
(define prev-line (previous-line tbox posn))
|
||
|
(define this-line (line tbox posn))
|
||
|
(cond
|
||
|
[(not prev-line) #f]
|
||
6 years ago
|
[(eqv? (line-first-visible-char tbox this-line) #\|)
|
||
7 years ago
|
(define start (send tbox line-start-position prev-line))
|
||
|
(define end (send tbox line-end-position prev-line))
|
||
|
(for*/first ([pos (in-range start end)]
|
||
|
[c (in-value (send tbox get-character pos))]
|
||
6 years ago
|
#:when (memv c '(#\: #\|)))
|
||
7 years ago
|
(- pos start))]
|
||
|
[else #f]))
|