##################################
#                                #
# Last modified 01/23/2016       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import os

def run():

    if len(sys.argv) < 3:
        print 'usage: python %s text references sorted_reference_outfile' % sys.argv[0]
        print '\tNote: the script works with bibitem lists only'
        sys.exit(1)

    text = sys.argv[1]
    references = sys.argv[2]
    outfilename = sys.argv[3]

    CiteOrderDict = {}
    CitedDict = {}

    linelist = open(text)
    i=0
    for line in linelist:
        if line.startswith('%'):
            continue
        fields = line.strip().split('\cite{')
        for f in range(1,len(fields)):
            citations = fields[f].split('}')[0].split(',')
            for c in citations:
                c = c.strip() 
                if CitedDict.has_key(c):
                    continue
                else:
                    i+=1
                    CitedDict[c] = 1
                    CiteOrderDict[i] = c

    print CitedDict

    outfile = open(outfilename,'w')

    linelist = open(references)
    for line in linelist:
        if line[1:8] == 'bibitem':
            c = line.split('bibitem{')[1].split('}')[0]
            CitedDict[c] = line
        if line.startswith('%'):
            outfile.write(line)

    outfile.write('\n')
    outfile.write('\n')
    outfile.write('\n')

    refkeys = CitedDict.keys()
    refkeys.sort()

    print refkeys

    order = CiteOrderDict.keys()
    order.sort()

    for i in order:
        print i, CiteOrderDict[i], CitedDict[CiteOrderDict[i]]
        outfile.write(CitedDict[CiteOrderDict[i]])
        outfile.write('\n')

    outfile.close()


run()

