File indexing completed on 2024-12-08 05:05:48

0001 #!/bin/awk
0002 #
0003 # Copyright (c) 2019, Michal Policht. This file is dually licensed under terms of
0004 # either WTFPL or BEER-WARE LICENSE. You may obtain the copy of WTFPL or BEER-WARE
0005 # LICENSE by googling it. NO WARRANTY. YOU WILL PAY ALL COSTS FOR ANY REPAIRS.
0006 #
0007 # Script deletes lines starting with "//(c):QUALIFIER" or "#(c):QUALIFIER" and
0008 # empty lines above and below.
0009 #
0010 # usage: awk [-v comment="type"] [-v qualifier="QUALIFIER"] -f striplic.awk [file1 [file2 ... [fileN]]]
0011 # example: awk -v comment="hash" -v qualifier="MYID" -f striplic.awk file1.cpp file1.hpp
0012 #
0013 # parameters:
0014 # qualifier - copyright notice qualifier. Value is appended to search pattern.
0015 # comment - comment type. Following values are available:
0016 #           "dslash" - "//(c):QUALIFIER" pattern is used (default).
0017 #           "hash" - "#(c):QUALIFIER" pattern is used.
0018 #           "xml" - "<!--(c):QUALIFIER" pattern is used.
0019 #
0020 # required tools: awk.
0021 
0022 BEGIN {
0023     if (comment == "hash")
0024         lic_comment = "^#\\(c\\)" qualifier ":"
0025     else if (comment == "xml")
0026         lic_comment = "^<!--\\(c\\)" qualifier ":"
0027     else
0028         lic_comment = "^//\\(c\\)" qualifier ":"
0029     nl_buf = ""; # New lines buffer.
0030 }
0031 
0032 # New line (CR+LF or LF).
0033 /^\r?$/ {
0034     nl_buf = nl_buf $0 ORS; # Might consider using RT instead of ORS, but RT is gawk specific.
0035 }
0036 
0037 # Everything except new line
0038 ! /^\r?$/ {
0039     if (match($0, lic_comment))
0040         nl_buf = ""; # New lines above license comment are eaten.
0041     else {
0042         print nl_buf $0;
0043         nl_buf = "";
0044     }
0045 }