index←{⎕ML←1                            ⍝ ⍵-index of notes in space ⍺.

    tags←⍵,'|'                          ⍝ search for lines starting 'Index',⍵.

    sort←{⍵[⍋lcase↑⍵]}                  ⍝ case-insensitive vector sort.
                                        ⍝ vector of name,entry pairs:
    pairs←↑,/(~∘' '¨sort↓⍺.⎕NL 2){      ⍝ names of all notes in ⍺.
        0=⍴⍵:⍵                          ⍝ no index entry: null.
        ↑,/⍺∘{                          ⍝ collection of all,
            ⍺∘{⍵ ⍺}∘dxb¨1↓¨(⍵∊tags)⊂⍵   ⍝ name, index-entry pairs,
        }¨⍵                             ⍝ for each Index line.
    }∘{                                 ⍝ from:
        ((6↑¨⍵)(⊂'Index')tags)/⍵     ⍝ lines starting Index,⍵.
    }∘ltov∘⍺.⍎¨sort↓⍺.⎕NL 2             ⍝ vectors of all notes in ⍺.

    0=⍴pairs:0⍴⊂''(0⍴⊂'')               ⍝ no hits: null result.
                                        ⍝ returns a vector of pairs from
    (↓⍉↑pairs)∘{                        ⍝   a 2-vector of
        notes entries←⍺                 ⍝   names and entries.
        ⍵{⍺ ⍵}(notes∊⊂⍵)/entries        ⍝ name, entries pertaining to name.
    }¨sort∪⊃¨pairs                      ⍝ case-insensitive sorted names.
}
code_colours

test script

Back to: notes

Back to: Workspaces