#!/bin/sh
#
# noweb filter to handle #line directives in noweb input
#
# sample usage:
#
#  preprocessor files | notangle -L -filter sharpline - > result.c
#

nawk '
BEGIN { linestart = 1 }
/^(@nl|@index nl)$/ { linestart = 1; print; next }
/^@text #line +[0-9]+$/ {
  if (linestart)
    printf "@line %d\n", $3
  else
    print
  linestart = 0; next
}
/^@text #line +[0-9]+ +".*"$/ {
  if (linestart) {
    thisline = $3
    sub(/^@text #line +[0-9]+ +/, "")
    thisfile = substr($0, 2, length($0) - 2)
    printf "@file %s\n@line %d\n", thisfile, thisline
  } else
    print
  linestart = 0; next
}
/^@(text |quote )/ { linestart = 0 }
{ print }' "$@"


syntax highlighted by Code2HTML, v. 0.9.1