Annotation of researchv10dc/vol2/index/tools/mheadings.awk, revision 1.1.1.1

1.1       root        1: BEGIN  {
                      2:        monkdel = "\(\)\[\]<>{\}\"\"\'\'\`\'"
                      3:        longest = 0
                      4:        overf = 0
                      5:        i = 1
                      6:        havetitle=0
                      7:        }
                      8: /^\|title[^a-z_]/      {
                      9:        place[i] = total
                     10:        total += length($0) + 1
                     11:        if(havetitle)next
                     12:        gettitl($0)
                     13:        text[i] = title
                     14:        hsize += length(title)+1
                     15:        i++
                     16:        l = length(title)
                     17:        if(longest < l+1)
                     18:                longest = l + 1
                     19:        if(l > 23){
                     20:                while(l>=23){
                     21:                        overf++;
                     22:                        l -= 23
                     23:                }
                     24:        }
                     25:        havetitle=1
                     26:        next
                     27:        }
                     28: /\|(section|subsection|subsubsection|unnumbered_section|unnumbered_subsection)/        {
                     29:        place[i] = total
                     30:        save=$0
                     31:        heading = ""
                     32:        rdelim=getdel()
                     33:        if(pldelim == prdelim)getequal()
                     34:        else getpair()
                     35:        total += length(save) +1
                     36:        text[i] = heading
                     37:        hsize += length(heading)+1
                     38:        l = length(heading)
                     39:        if(longest < l+1)
                     40:                longest = l + 1
                     41:        if(l > 23){
                     42:                while(l>=23){
                     43:                        overf++;
                     44:                        l -= 23
                     45:                }
                     46:        }
                     47:        heading = ""
                     48:        i++
                     49:        next
                     50:        }
                     51: /.*/   {
                     52:        total += length($0) + 1
                     53:        }
                     54: END    {
                     55:        if(i > 1){
                     56: #              print hsize, longest, i-1, overf
                     57:                for(n=1;n<i;n++){
                     58: #                      print place[n]
                     59:                        print text[n]
                     60:                }
                     61:        }
                     62:        }
                     63: function gettitl(      rdelim,n,m,junk){
                     64:        rdelim = getdel()
                     65:        title=$0
                     66:        n=gsub(ldelim,"")
                     67:        junk=$0
                     68:        m=gsub(rdelim,"",junk)
                     69:        if($0 !~ rdelim || n != m-1){
                     70:                while(getline > 0){
                     71:                        total += length($0) +1
                     72:                        title=title " " $0
                     73:                        n=sub(ldelim,"")
                     74:                        if($0 ~ rdelim && n == 0)break
                     75:                }
                     76:        }
                     77:        title=substr(title,1,length(title)-1)
                     78: }
                     79: function getdel(){
                     80:        if($0 !~ /^\|/ && $0 ~ /..*\|/)sub(/^..*\|/,"\|")
                     81:        sub(/\|[a-z_ \t]*/,"")
                     82:        pldelim = substr($0, 0, 1)
                     83:        sub(/./,"")
                     84:        b = substr(monkdel,index(monkdel,pldelim)+1,1)
                     85:        prdelim = b
                     86:        ldelim = "\\" pldelim
                     87:        return("\\" b)
                     88: }
                     89: function getpair(){
                     90:        lsave=$0
                     91:        n = xn = gsub(ldelim,":")
                     92:        ind = index(lsave,pldelim)
                     93:        m = xm = gsub(rdelim,":")
                     94:        imd = index(lsave,prdelim)
                     95:        if(m>0 && n+1 == m){
                     96:                heading = substr(lsave, 1, index(lsave,prdelim)-1)
                     97:                return
                     98:        }
                     99:        total += length(save) + 1
                    100:        nlines = 0
                    101:        heading = $0
                    102:        while(getline ){
                    103:                save=$0
                    104:                if(nlines++ > 3){
                    105:                   print "too many lines in heading:" heading |"cat 1>&2"
                    106:                        break
                    107:                }
                    108:                lsave=$0
                    109:                n=gsub(ldelim,"X")
                    110:                xn += n
                    111:                ind = index(lsave,pldelim)
                    112:                m=gsub(rdelim,"Z")
                    113:                xm += m
                    114:                imd = index(lsave,prdelim)
                    115:                if(m>0 && xn+1 == xm){
                    116:                        if(ind > imd && n+1 == m){
                    117:                        if(heading == "")
                    118:                           heading=substr(lsave, 1, index(lsave,prdelim)-1)
                    119:                        else
                    120:                        heading=heading " " substr(lsave,1,index(lsave,prdelim)-1)
                    121:                        }
                    122:                        else{
                    123:                                new=getind()
                    124:                                if(heading == "")heading=substr(lsave, 1,new-1)
                    125:                                else heading = heading " " substr(lsave, 1,new-1)
                    126:                        }
                    127:                        break
                    128:                }
                    129:                else{
                    130:                        total += length(lsave) +1
                    131:                        if(heading == "")heading = lsave
                    132:                        else heading = heading " " lsave
                    133:                }
                    134:        }
                    135: }
                    136: function getind(){
                    137:        split($0,foo,"Z")
                    138:        sum=0
                    139:        for(j=1;j<=m;j++)
                    140:                sum += length(foo[j])+1
                    141:        return(sum)
                    142: }
                    143: function getequal(){
                    144:        cmd= "\\|[a-zA-Z_]*" prdelim
                    145:        lsave=$0
                    146:        n = xn = gsub(ldelim,":")
                    147:        if(n==1){
                    148:                heading = substr(lsave, 1, index(lsave,prdelim)-1)
                    149:                return
                    150:        }
                    151:        total += length(save) + 1
                    152:        heading = $0
                    153:        while(getline){
                    154:                save=lsave=$0
                    155:                ind=0
                    156:                if($0 ~ cmd){
                    157:                        while($0 ~ cmd)
                    158:                                ind=getcmd()
                    159:                }
                    160:                nind=index($0,pldelim)
                    161:                n=gsub(ldelim,":")
                    162:                xn += n
                    163:                if(xn == 1){
                    164:                        if(heading == "")heading=substr(save,1,nind+ind-1)
                    165:                        else heading=heading " " substr(save,1,nind+ind-1)
                    166:                        break
                    167:                }
                    168:                else{
                    169:                        total += length(lsave) +1
                    170:                        if(heading == "")heading = lsave
                    171:                        else heading = heading " " lsave
                    172:                }
                    173:        }
                    174: }
                    175: function getcmd(       i,nsv,sum){
                    176:        sum=length($0)
                    177:        sub(cmd,"")
                    178:        i=sub(ldelim,"")
                    179:        sum=sum-length($0)
                    180:        if(!i){
                    181:                total += length(lsave) +1
                    182:                if(heading == "")heading = lsave
                    183:                else heading = heading " " lsave
                    184:                getline
                    185:                save=lsave=$0
                    186:                sub(ldelim,"")
                    187:        }
                    188:        return(sum)
                    189: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.