|
@@ -0,0 +1,118 @@
|
|
|
+#!/usr/bin/python
|
|
|
+#
|
|
|
+# Copyright 2010 wkhtmltopdf authors
|
|
|
+#
|
|
|
+# This file is part of wkhtmltopdf.
|
|
|
+#
|
|
|
+# wkhtmltopdf is free software: you can redistribute it and/or modify
|
|
|
+# it under the terms of the GNU General Public License as published by
|
|
|
+# the Free Software Foundation, either version 3 of the License, or
|
|
|
+# (at your option) any later version.
|
|
|
+#
|
|
|
+# wkhtmltopdf is distributed in the hope that it will be useful,
|
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+# GNU General Public License for more details.
|
|
|
+#
|
|
|
+# You should have received a copy of the GNU General Public License
|
|
|
+# along with wkhtmltopdf. If not, see <http:#www.gnu.org/licenses/>.
|
|
|
+
|
|
|
+from sys import argv, exit
|
|
|
+import re
|
|
|
+from datetime import date
|
|
|
+import os
|
|
|
+
|
|
|
+cdate = re.compile(r"Copyright ([0-9 ,]*) wkhtmltopdf authors")
|
|
|
+ifdef = re.compile(r"^#ifndef __(.*)__[\r\n]*#define __\1__[\r\n]*")
|
|
|
+endif = re.compile(r"#endif.*[\r\n \t]*$")
|
|
|
+ws = re.compile(r"[ \t]*[\r\n]")
|
|
|
+branchspace = re.compile(r"([ \t\r\n])(for|if|while|switch|foreach)[\t \r\n]*\(")
|
|
|
+hangelse = re.compile(r"}[\r\n\t ]*(else)")
|
|
|
+braceup = re.compile(r"(\)|else)[\r\n\t ]*{")
|
|
|
+include = re.compile(r"(#include (\"[^\"]*\"|<[^>]*>)\n)+")
|
|
|
+
|
|
|
+def includesort(x):
|
|
|
+ return "\n".join(sorted(x.group(0)[:-1].split("\n"))+[""])
|
|
|
+
|
|
|
+changes=False
|
|
|
+progname="wkhtmltopdf"
|
|
|
+for path in argv[1:]:
|
|
|
+ try:
|
|
|
+ data = file(path).read()
|
|
|
+ except:
|
|
|
+ continue
|
|
|
+
|
|
|
+ mo = cdate.search(data)
|
|
|
+ years = set(mo.group(1).split(", ")) if mo else set()
|
|
|
+ years.add(str(date.today().year))
|
|
|
+
|
|
|
+ ext = path.rsplit(".",2)[-1]
|
|
|
+ header = ""
|
|
|
+ cc = "//"
|
|
|
+ if ext in ["hh","h","c","cc","cpp","inl"]:
|
|
|
+ header += """// -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
|
|
|
+// vi:set ts=4 sts=4 sw=4 noet :
|
|
|
+//
|
|
|
+"""
|
|
|
+ elif ext in ["sh"]:
|
|
|
+ header += "#!/bin/bash\n#\n"
|
|
|
+ cc = "#"
|
|
|
+ elif ext in ["py"]:
|
|
|
+ header += "#!/usr/bin/python\n#\n"
|
|
|
+ cc = "#"
|
|
|
+ elif ext in ["pro","pri"]:
|
|
|
+ cc = "#"
|
|
|
+ else:
|
|
|
+ continue
|
|
|
+
|
|
|
+ header += """// Copyright %(years)s %(name)s authors
|
|
|
+//
|
|
|
+// This file is part of %(name)s.
|
|
|
+//
|
|
|
+// %(name)s is free software: you can redistribute it and/or modify
|
|
|
+// it under the terms of the GNU General Public License as published by
|
|
|
+// the Free Software Foundation, either version 3 of the License, or
|
|
|
+// (at your option) any later version.
|
|
|
+//
|
|
|
+// %(name)s is distributed in the hope that it will be useful,
|
|
|
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+// GNU General Public License for more details.
|
|
|
+//
|
|
|
+// You should have received a copy of the GNU General Public License
|
|
|
+// along with %(name)s. If not, see <http://www.gnu.org/licenses/>.
|
|
|
+
|
|
|
+"""%{"years": (", ".join(sorted(list(years)))),"name":progname}
|
|
|
+
|
|
|
+ #Strip away generated header
|
|
|
+ hexp = re.compile("^(%s[^\\n]*\\n)*"%(cc))
|
|
|
+ ndata = hexp.sub("", data,1)
|
|
|
+ ndata = ws.sub("\n", ndata)+"\n"
|
|
|
+ if ext in ["hh","h","inl"]:
|
|
|
+ #Strip away generated ifdef
|
|
|
+ if ifdef.search(ndata):
|
|
|
+ ndata = endif.sub("",ifdef.sub("",ndata,1),1)
|
|
|
+ s=0
|
|
|
+ e=-1
|
|
|
+ while ndata[s] in ['\r','\n',' ','\t']: s+=1
|
|
|
+ while ndata[e] in ['\r','\n',' ','\t']: e-=1
|
|
|
+ ndata=ndata[s:e+1].replace(" ",'\t')
|
|
|
+ if ext in ["hh","h","c","cc","cpp","inl"]:
|
|
|
+ ndata = branchspace.sub(r"\1\2 (",ndata)
|
|
|
+ ndata = hangelse.sub("} else",ndata)
|
|
|
+ ndata = braceup.sub(r"\1 {",ndata)
|
|
|
+ ndata = include.sub(includesort, ndata)
|
|
|
+
|
|
|
+ if ext in ["hh","h","inl"]:
|
|
|
+ n = os.path.split(path)[-1].replace(".","_").replace(" ","_").upper()
|
|
|
+ ndata = """#ifndef __%s__
|
|
|
+#define __%s__
|
|
|
+%s
|
|
|
+#endif //__%s__"""%(n,n,ndata,n)
|
|
|
+ ndata = header.replace("//",cc)+ndata+"\n"
|
|
|
+ if ndata != data:
|
|
|
+ changes=True
|
|
|
+ print "Updated %s for style"%path
|
|
|
+ file(path, "w").write(ndata)
|
|
|
+
|
|
|
+if changes: exit(1)
|