codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/^<<.+>>=$/ { name = substr($0, 3, length($0) - 5) while (getline > 0) { if (length($0) == 0) next chunk[name, ++count[name]] = $0 } } END { tangle("*", ""); printf "\n" } function tangle(name, prefix, i, tag, suffix) { for (i = 1; i <= count[name]; i++) { if (i == 2) gsub(/[^ \t]/, " ", prefix) if (match(chunk[name,i], /<<.+>>/)) { tag = substr(chunk[name,i], RSTART + 2, RLENGTH - 4) if (tag in count) { suffix = substr(chunk[name,i], RSTART + RLENGTH) tangle(tag, prefix substr(chunk[name,i], 1, RSTART - 1)) printf "%s", suffix } else printf "%s%s", prefix, chunk[name,i] } else printf "%s%s", prefix, chunk[name,i] if (i < count[name]) printf "\n" } }
Private
[
?
]
Run code
Submit