# This is file 'vc-svn.awk' from the vc bundle for TeX.
# The original file can be found at CTAN:support/vc.
# This file is Public Domain.
BEGIN {

### Process output of "svn info".
               if (script=="info") {
                               MaxRevision = 0
               }

### Process output of "svn status".
               if (script=="status") {
                               modified = 0
               }

}



### Process output of "svn info".
### Save all lines of the current record in a corresponding variable.
script=="info" && /^Path:/ { RecPath = $0; next }
script=="info" && /^Name:/ { RecName = $0; next }
script=="info" && /^URL:/ { RecUrl = $0; next }
script=="info" && /^Repository Root:/ { RecRepositoryRoot = $0; next }
script=="info" && /^Repository UUID:/ { RecRepositoryUuid = $0; next }
script=="info" && /^Revision:/ { RecRevision = $2; next }
script=="info" && /^Node Kind:/ { RecNodeKind = $0; next }
script=="info" && /^Last Changed Author:/ { RecLastChangedAuthor = $0; next }
script=="info" && /^Last Changed Rev:/ { RecLastChangedRevision = $0; next }
script=="info" && /^Last Changed Date:/ { RecLastChangedDate = $0; next }
script=="info" && /^[\r]*$/ {
### If revision number of the new record is higher,
### save all lines from the new record.
   if (RecRevision > MaxRevision) {
                               MaxPath = RecPath
                               MaxName = RecName
                               MaxUrl = RecUrl
                               MaxRepositoryRoot = RecRepositoryRoot
                               MaxRepositoryUuid = RecRepositoryUuid
                               MaxRevision = RecRevision
                               MaxNodeKind = RecNodeKind
                               MaxLastChangedAuthor = RecLastChangedAuthor
                               MaxLastChangedRev = RecLastChangedRevision
                               MaxLastChangedDate = RecLastChangedDate
   }
}

### Process output of "svn status".
### File with local modifications?
script=="status" && /^[^ ?]/ { modified = 1 }
### File with property modifications?
script=="status" && /^.[^ ]/ { modified = 2 }



END {

### Process output of "svn info".
               if (script=="info") {
### Remove possible Windows line endings (e.g., for Msys).
                               gsub("\r$", "", MaxPath)
                               gsub("\r$", "", MaxName)
                               gsub("\r$", "", MaxUrl)
                               gsub("\r$", "", MaxRepositoryRoot)
                               gsub("\r$", "", MaxRepositoryUuid)
                               gsub("\r$", "", MaxRevision)
                               gsub("\r$", "", MaxNodeKind)
                               gsub("\r$", "", MaxLastChangedAuthor)
                               gsub("\r$", "", MaxLastChangedRev)
                               gsub("\r$", "", MaxLastChangedDate)
### Escape % characters for TeX compatibility.
                               gsub("%", "\\%", MaxUrl)
                               gsub("%", "\\%", MaxRepositoryRoot)
### Extract relevant information from variables.
                               Path = substr(MaxPath, 2+match(MaxPath, ":"))
                               Name = substr(MaxName, 2+match(MaxName, ":"))
                               Url = substr(MaxUrl, 2+match(MaxUrl, ":"))
                               RepositoryRoot = substr(MaxRepositoryRoot, 2+match(MaxRepositoryRoot, ":"))
                               RepositoryUuid = substr(MaxRepositoryUuid, 2+match(MaxRepositoryUuid, ":"))
                               Revision = MaxRevision
                               NodeKind = substr(MaxNodeKind, 2+match(MaxNodeKind, ":"))
                               LastChangedAuthor = substr(MaxLastChangedAuthor, 2+match(MaxLastChangedAuthor, ":"))
                               LastChangedRev = substr(MaxLastChangedRev, 2+match(MaxLastChangedRev, ":"))
                               LastChangedDate = substr(MaxLastChangedDate, 2+match(MaxLastChangedDate, ":"))
                               LongDate = substr(LastChangedDate, 1, 25)
                               DateRAW = substr(LongDate, 1, 10)
                               DateISO = DateRAW
                               DateTEX = DateISO
                               gsub("-", "/", DateTEX)
                               Time = substr(LongDate, 12, 14)
### Write file identification to vc.tex.
                               print "%%% This file has been generated by the vc bundle for TeX."
                               print "%%% Do not edit this file!"
                               print "%%%"
### Write Subversion specific macros.
                               print "%%% Define Subversion specific macros."
                               print "\\gdef\\SVNRevision{" Revision "}%"
                               print "\\gdef\\SVNLastChangedRev{" LastChangedRev "}%"
                               print "\\gdef\\SVNLastChangedAuthor{" LastChangedAuthor "}%"
                               print "\\gdef\\SVNLastChangedDate{" LastChangedDate "}%"
                               print "\\gdef\\SVNRepositoryUuid{" RepositoryUuid "}%"
                               if (full==1) {
                                               print "\\gdef\\SVNPath{" Path "}%"
                                               print "\\gdef\\SVNName{" Name "}%"
                                               print "\\gdef\\SVNUrl{" Url "}%"
                                               print "\\gdef\\SVNNodeKind{" NodeKind "}%"
                                               print "\\gdef\\SVNRepositoryRoot{" RepositoryRoot "}%"
                               }
### Write generic version control macros.
                               print "%%% Define generic version control macros."
                               print "\\gdef\\VCRevision{\\SVNRevision}%"
                               print "\\gdef\\VCAuthor{\\SVNLastChangedAuthor}%"
                               print "\\gdef\\VCDateRAW{" DateRAW "}%"
                               print "\\gdef\\VCDateISO{" DateISO "}%"
                               print "\\gdef\\VCDateTEX{" DateTEX "}%"
                               print "\\gdef\\VCTime{" Time "}%"
                               print "\\gdef\\VCModifiedText{\\textcolor{red}{with local modifications!}}%"
                               print "%%% Assume clean working copy."
                               print "\\gdef\\VCModified{0}%"
                               print "\\gdef\\VCRevisionMod{\\VCRevision}%"
                               MaxRevision = 0
               }

### Process output of "svn status".
               if (script=="status") {
                               print "%%% Is working copy modified?"
                               print "\\gdef\\VCModified{" modified "}%"
                               if (modified==0) {
                                               print "\\gdef\\VCRevisionMod{\\VCRevision}%"
                               } else {
                                               print "\\gdef\\VCRevisionMod{\\VCRevision~\\VCModifiedText}%"
                               }
               }

}