#!/usr/bin/env wish package require textutil set active_transform 0 proc oneline {text} { return [regsub -all \n+ $text " "] } proc wordcount {text} { set lines [expr [llength [split $text \n]] - 1] set words [llength [regexp -all -inline {\S+} $text]] set len [string length $text] lappend out $lines lappend out $words lappend out $len return $out } proc dedent {text} { return [textutil::undent $text] } proc markdown_quote {text} { set text [string trimright $text] return [string cat "> " [regsub -all \n $text "\n> "]] } proc identity {text} { return $text } lappend transforms [list {None} identity] lappend transforms [list {One line} oneline] lappend transforms [list {Line/Word/Char} wordcount] lappend transforms [list {Dedent} dedent] lappend transforms [list {Markdown Quote} markdown_quote] wm geometry . 750x650 wm title . "Text Tools" wm resizable . false false text .content text .output listbox .transform foreach {elem} $transforms { .transform insert end [lindex $elem 0] } .transform selection set $active_transform grid .transform -row 1 -column 1 -rowspan 2 grid .content -row 1 -column 2 grid .output -row 2 -column 2 focus .content proc update_output {} { global active_transform global transforms set text [.content get 1.0 end] set tf [lindex $transforms $active_transform] set out [[lindex $tf 1] $text] .output replace 1.0 end $out } bind .content update_output proc select_transform {args} { global active_transform set active_transform [.transform curselection] update_output } bind .transform select_transform update