⍝ Reformat dfn/op:

    2 refmt ⎕cr'refmt'
refmt←{⎕IO←0                   ⍝ Reformat dfn/op.                
  ⍺←4 ⋄ dent csep←⍺            ⍝ default indents and ⍝-separation
  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             
  rtb←⌽∘{(∨\⍵≠' ')/⍵}∘⌽        ⍝ remove trailing blanks          
  qnr←icode,∘rtb¨scoms         ⍝ reunited code and comments      
  ↑⍣(1=≡⍵)⊢qnr                 ⍝ ⎕cr or ⎕nr                      
}                                                                

    1 2 refmt ⎕cr'refmt'
refmt←{⎕IO←0                 ⍝ Reformat dfn/op.                
 ⍺←4 ⋄ dent csep←⍺           ⍝ default indents and ⍝-separation
 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             
 rtb←⌽∘{(∨\⍵≠' ')/⍵}∘⌽       ⍝ remove trailing blanks          
 qnr←icode,∘rtb¨scoms        ⍝ reunited code and comments      
 ↑⍣(1=≡⍵)⊢qnr                ⍝ ⎕cr or ⎕nr                      
}                                                              

    0 refmt ⎕nr'refmt'
┌───────────────────────────────────────────┬───────────────────────────────────────────────────────────┬──────────────────────────────────────────────────┬───────────────────────────────────────────────────┬─────────────────────────────────────────┬───────────────────────────────────────┬──────────────────────────────────────────┬────────────────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┬────────────────────────────────────────┬────────────────────────────────────────────────────┬───────────────────────────────────────────────────┬────────────────────────────────────────────────────┬─────────────────────────────────────────────┬────────────────────────────────────────────────────┬────────────────────────────────────────────────┬─────────────────────────────────────────────┬──────────────────────────────────────────────┬─────────────────────────────────────────────────┬─────────────────────────────────────────────────────┬─────────────────────────────────────┬─────────────────────────┐
│refmt←{⎕IO←0             ⍝ Reformat dfn/op.│⍺←4 ⋄ dent csep←⍺        ⍝ default indents and ⍝-separation│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│rtb←⌽∘{(∨\⍵≠' ')/⍵}∘⌽    ⍝ remove trailing blanks│qnr←icode,∘rtb¨scoms     ⍝ reunited code and comments│↑⍣(1=≡⍵)⊢qnr             ⍝ ⎕cr or ⎕nr│}                        │
└───────────────────────────────────────────┴───────────────────────────────────────────────────────────┴──────────────────────────────────────────────────┴───────────────────────────────────────────────────┴─────────────────────────────────────────┴───────────────────────────────────────┴──────────────────────────────────────────┴────────────────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┴────────────────────────────────────────┴────────────────────────────────────────────────────┴───────────────────────────────────────────────────┴────────────────────────────────────────────────────┴─────────────────────────────────────────────┴────────────────────────────────────────────────────┴────────────────────────────────────────────────┴─────────────────────────────────────────────┴──────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────────────┴─────────────────────────────────────┴─────────────────────────┘

⍝∇ refmt

Back to: code

Back to: Workspaces