crep ← {tabs csep←4} ##.refmt crep ⍝ Reformat dfn/op representation.
Reformats the (possibly nested) canonical representation of D-function or oper-
ator [crep]. The optional left argument (default 4) specifies:
[tabs] the indentation width for nested inner functions and
[csep] the number of blank columns to separate code from comment lines.
A previous version of this function, which took and returned the name of a fun-
ction to be reformatted, can be composed:
old_refmt ← ⎕fx∘refmt∘⎕cr
NB: If [AutoFormat functions] is checked in the session's Options→Configure→
Trace/Edit tab, the system will reimpose its own canonical formatting style when
functions are fixed. To preserve "non-standard" formatting, uncheck the box and
try again.
Examples:
display ⎕cr'refmt' ⍝ unformatted dfn.
┌→────────────────────────────────────────────────────────────────────┐
↓refmt←{⎕IO←0 ⍝ Reformat dfn/op. │
│ ⍺←4 ⋄ dent csep←⍺ ⍝ default indents and ⍝-separation.│
│ ⎕FX{ ⍝ refix function. │
│ unqt←{~≠\⍵=''''} ⍝ mask of unquoted tokens. │
│ code coms←↓⍉↑{ ⍝ code and comment vectors. │
│ umsk←unqt ⍵ ⍝ unquoted chars. │
│ cmsk←∨\umsk∧⍵='⍝' ⍝ comment mask. │
│ code coms←(0 1=⊂cmsk)/¨⊂⍵ ⍝ code / comments. │
│ rlb←{(∨\⍵≠' ')/⍵} ⍝ remove leading blanks. │
│ clean←⌽rlb⌽rlb code ⍝ cleaned code. │
│ clean coms ⍝ clean code / comment. │
│ }¨⍵ ⍝ for each line. │
│ dents←{ ⍝ indentation for each line │
│ toks←(unqt ⍵){⍺\⍺/⍵}⍵ ⍝ unquoted code characters. │
│ dvec←-⌿0 1⌽+\'{}'∘.=toks ⍝ brace-depth of each token. │
│ lmask←toks='·' ⍝ start of each line. │
│ (dent×lmask/dvec)/¨' ' ⍝ indentation for each line. │
│ }↑,/'·',¨code ⍝ collected code vector. │
│ scoms←(⊂csep⍴' '),¨coms ⍝ separated comments. │
│ icode←↓↑dents,¨code ⍝ indented code lines. │
│ icode,¨scoms ⍝ reunited code and comments. │
│ }⎕NR ⍵ ⍝ lines of function. │
│} │
└─────────────────────────────────────────────────────────────────────┘
display 4 refmt ⎕cr'refmt' ⍝ generous formatting.
┌→───────────────────────────────────────────────────────────────────────────┐
↓refmt←{⎕IO←0 ⍝ Reformat dfn/op. │
│ ⍺←4 ⋄ dent csep←⍺ ⍝ default indents and ⍝-separation.│
│ ⎕FX{ ⍝ refix function. │
│ unqt←{~≠\⍵=''''} ⍝ mask of unquoted tokens. │
│ code coms←↓⍉↑{ ⍝ code and comment vectors. │
│ umsk←unqt ⍵ ⍝ unquoted chars. │
│ cmsk←∨\umsk∧⍵='⍝' ⍝ comment mask. │
│ code coms←(0 1=⊂cmsk)/¨⊂⍵ ⍝ code / comments. │
│ rlb←{(∨\⍵≠' ')/⍵} ⍝ remove leading blanks. │
│ clean←⌽rlb⌽rlb code ⍝ cleaned code. │
│ clean coms ⍝ clean code / comment. │
│ }¨⍵ ⍝ for each line. │
│ dents←{ ⍝ indentation for each line │
│ toks←(unqt ⍵){⍺\⍺/⍵}⍵ ⍝ unquoted code characters. │
│ dvec←-⌿0 1⌽+\'{}'∘.=toks ⍝ brace-depth of each token. │
│ lmask←toks='·' ⍝ start of each line. │
│ (dent×lmask/dvec)/¨' ' ⍝ indentation for each line. │
│ }↑,/'·',¨code ⍝ collected code vector. │
│ scoms←(⊂csep⍴' '),¨coms ⍝ separated comments. │
│ icode←↓↑dents,¨code ⍝ indented code lines. │
│ icode,¨scoms ⍝ reunited code and comments. │
│ }⎕NR ⍵ ⍝ lines of function. │
│} │
└────────────────────────────────────────────────────────────────────────────┘
display 2 1 refmt ⎕cr'refmt' ⍝ frugal formatting.
┌→──────────────────────────────────────────────────────────────────┐
↓refmt←{⎕IO←0 ⍝ Reformat dfn/op. │
│ ⍺←4 ⋄ dent csep←⍺ ⍝ default indents and ⍝-separation.│
│ ⎕FX{ ⍝ refix function. │
│ unqt←{~≠\⍵=''''} ⍝ mask of unquoted tokens. │
│ code coms←↓⍉↑{ ⍝ code and comment vectors. │
│ umsk←unqt ⍵ ⍝ unquoted chars. │
│ cmsk←∨\umsk∧⍵='⍝' ⍝ comment mask. │
│ code coms←(0 1=⊂cmsk)/¨⊂⍵ ⍝ code / comments. │
│ rlb←{(∨\⍵≠' ')/⍵} ⍝ remove leading blanks. │
│ clean←⌽rlb⌽rlb code ⍝ cleaned code. │
│ clean coms ⍝ clean code / comment. │
│ }¨⍵ ⍝ for each line. │
│ dents←{ ⍝ indentation for each line │
│ toks←(unqt ⍵){⍺\⍺/⍵}⍵ ⍝ unquoted code characters. │
│ dvec←-⌿0 1⌽+\'{}'∘.=toks ⍝ brace-depth of each token. │
│ lmask←toks='·' ⍝ start of each line. │
│ (dent×lmask/dvec)/¨' ' ⍝ indentation for each line. │
│ }↑,/'·',¨code ⍝ collected code vector. │
│ scoms←(⊂csep⍴' '),¨coms ⍝ separated comments. │
│ icode←↓↑dents,¨code ⍝ indented code lines. │
│ icode,¨scoms ⍝ reunited code and comments. │
│ }⎕NR ⍵ ⍝ lines of function. │
│} │
└───────────────────────────────────────────────────────────────────┘
See also: wrapnote dots
Back to: contents
Back to: Workspaces