Skip to content
Permalink
015837e54f
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
315 lines (286 sloc) 9.81 KB
import re
class Bibitem:
# TODO: Interne Funktion, um° durch Leerzeichen zu ersetzen
# TODO: Eine Lösung finden, für Autoren die nur aus einem Namen bestehen, ie keinen Vornamen haben
def __init__(self,xmlEntry):
self.xmlEntry = xmlEntry
def sanitize(self,strString):
strString = re.sub("°", " ", strString)
return strString
def gettext(self,xmlElement):
xmlText = xmlElement.text or ""
for xmlChild in xmlElement:
xmlText += self.gettext(xmlChild)
if xmlChild.tail:
xmlText += xmlChild.tail
return xmlText
def citekey(self):
xmlEntry = self.xmlEntry
xmlLabel = xmlEntry.find(".//label")
if xmlLabel is not None:
return xmlLabel.text
else:
return None
def entrytype(self):
strType = self.xmlEntry.find(".//type").text
return strType
def title(self):
xmlTitle = self.xmlEntry.find(".//title")
if xmlTitle is not None:
strTitle = xmlTitle.text
return strTitle
else:
return ""
def addendum(self):
xmlAddendum = self.xmlEntry.find(".//addendum")
if xmlAddendum is not None:
return xmlAddendum.text
else:
return ""
def volume(self):
xmlVolume = self.xmlEntry.find(".//volume")
if xmlVolume is not None:
strResult = " Vol. " + xmlVolume.text + ". "
return strResult
else:
return ""
def volumenumeric(self):
xmlVolume = self.xmlEntry.find(".//volume")
if xmlVolume is not None:
strResult = " " + xmlVolume.text + ". "
return strResult
else:
return ""
def series(self):
xmlSeries = self.xmlEntry.find(".//series")
if xmlSeries is not None:
if xmlSeries.text is not None:
strResult = " " + xmlSeries.text + ". "
return strResult
else:
return ""
else:
return ""
def journaltitle(self):
xmlJournaltitle = self.xmlEntry.find(".//journaltitle")
if xmlJournaltitle is not None:
strResult = " <i>" + str(xmlJournaltitle.text) + "</i> "
return strResult
else:
return ""
def booktitle(self):
xmlBooktitle = self.xmlEntry.find(".//booktitle")
if xmlBooktitle is not None:
strResult = " In: <i>" + xmlBooktitle.text + "</i> "
return strResult
else:
return ""
def volumenumberpages(self):
xmlVolume = self.xmlEntry.find(".//volume")
xmlPages = self.xmlEntry.find(".//pages")
xmlNumber = self.xmlEntry.find("number")
strResult = ""
if xmlVolume is not None and xmlNumber is not None and xmlPages is not None and xmlPages.text is not None:
strResult = xmlVolume.text + "(" + xmlNumber.text + "): " + xmlPages.text
if xmlVolume is not None and xmlNumber is None and xmlPages is not None:
strResult = xmlVolume.text + ": " + xmlPages.text
return strResult
def location(self):
xmlLocation = self.xmlEntry.find(".//location")
if xmlLocation is not None:
xmlPublisher = self.xmlEntry.find(".//publisher")
if xmlPublisher is not None:
strResult = " " + xmlLocation.text + ": " + self.gettext(xmlPublisher)
else:
strResult = " " + xmlLocation.text
return strResult
else:
return ""
def howpublished(self):
xmlHowpublished = self.xmlEntry.find(".//howpublished")
if xmlHowpublished is not None:
strResult = xmlHowpublished.text
return strResult
else:
return ""
def pages(self):
xmlPages = self.xmlEntry.find(".//pages")
if xmlPages is not None:
strResult = " " + xmlPages.text
return strResult
else:
return ""
def thesistype(self):
xmlTypes = self.xmlEntry.findall(".//type")
strThesisType = " " + xmlTypes[1].text + ". "
return strThesisType
def institution(self):
xmlInstitution = self.xmlEntry.find(".//institution")
if xmlInstitution is not None:
strInstitution = xmlInstitution.text
return strInstitution
else:
return ""
def labelyear(self):
xmlEntry = self.xmlEntry
xmlEdition = xmlEntry.find(".//labelyear")
if xmlEdition is not None:
return xmlEdition.text
else:
# If no year is given, return empty string
return ""
def year(self):
xmlEntry = self.xmlEntry
xmlYear = xmlEntry.find(".//year")
if xmlYear is not None:
return xmlYear.text
else:
return ""
def labelyearsuffix(self):
xmlEntry = self.xmlEntry
xmlExtrayear = xmlEntry.find(".//extrayear")
if xmlExtrayear is not None:
intExtrayear = int(xmlExtrayear.text)
listCharacters = ["","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
strLabelYearSuffix = listCharacters[intExtrayear]
return strLabelYearSuffix
else:
return ""
def fullauthorlastfirst(self):
xmlEntry = self.xmlEntry
# If no Name is given, return either the Shorthand or the Title (Shorthand prefererred)
if xmlEntry.find(".//labelname/number") == None:
if xmlEntry.find(".//shorthand") is not None:
strComplete = xmlEntry.find(".//shorthand").text
return strComplete
else:
strComplete = self.title()
return strComplete
intNumberOfAuthors = int(xmlEntry.find(".//labelname/number").text)
if intNumberOfAuthors == 1:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow")
strLastName = xmlAuthorRows[0].text
if len(xmlAuthorRows) > 3:
strFirstName = xmlAuthorRows[2].text
strCompleteName = strLastName + ", " + strFirstName
return self.sanitize(strCompleteName)
else:
return self.sanitize(strLastName)
if intNumberOfAuthors > 1:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow/mrow")
# First Author here would be Lastname, Firstname
strLastName = xmlAuthorRows[0].text
strFirstName = xmlAuthorRows[2].text
strCompleteName = strLastName + ", " + strFirstName
# Remaining Authors are to be Firstname Lastname
for i in range(0, (intNumberOfAuthors - 1)):
a = i + 4
strLastName = ""
strFirstName = ""
if len(xmlAuthorRows) > a:
strLastName = xmlAuthorRows[a].text
a = i + 6
if len(xmlAuthorRows) > a:
strFirstName = xmlAuthorRows[a].text
strCompleteName = strCompleteName + ", " + strFirstName + " " + strLastName
return self.sanitize(strCompleteName)
def fullauthorfirstlast(self):
xmlEntry = self.xmlEntry
# If no Name is given, return either the Shorthand or the Title (Shorthand prefererred)
if xmlEntry.find(".//labelname/number") == None:
if xmlEntry.find(".//shorthand") is not None:
strComplete = xmlEntry.find(".//shorthand").text
return strComplete
else:
strComplete = self.title()
return strComplete
intNumberOfAuthors = int(xmlEntry.find(".//labelname/number").text)
if intNumberOfAuthors == 1:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow")
strLastName = xmlAuthorRows[0].text
if len(xmlAuthorRows) > 3:
strFirstName = xmlAuthorRows[2].text
strCompleteName = strFirstName + " " + strLastName
return self.sanitize(strCompleteName)
else:
return self.sanitize(strLastName)
if intNumberOfAuthors > 1:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow/mrow")
# First Author here would be Lastname, Firstname
strLastName = xmlAuthorRows[0].text
strFirstName = xmlAuthorRows[2].text
strCompleteName = strFirstName + " " + strLastName
# Remaining Authors are to be Firstname Lastname
for i in range(0, (intNumberOfAuthors - 1)):
a = i + 4
strLastName = ""
strFirstName = ""
if len(xmlAuthorRows) > a:
strLastName = xmlAuthorRows[a].text
a = i + 6
if len(xmlAuthorRows) > a:
strFirstName = xmlAuthorRows[a].text
strCompleteName = strCompleteName + ", " + strFirstName + " " + strLastName
return self.sanitize(strCompleteName)
def shortauthor(self):
xmlEntry = self.xmlEntry
# If no Name is given, return either the Shorthand or the Title (Shorthand prefererred)
if xmlEntry.find(".//labelname/number") == None:
if xmlEntry.find(".//shorthand") is not None:
strComplete = xmlEntry.find(".//shorthand").text
return strComplete
else:
#strComplete = xmlEntry.find(".//title").text
strComplete = self.title()
return strComplete
intNumberOfAuthors = int(xmlEntry.find(".//labelname/number").text)
if intNumberOfAuthors == 1:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow")
strLastName = xmlAuthorRows[0].text
return self.sanitize(strLastName)
if intNumberOfAuthors == 2:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow/mrow")
strLastName1 = xmlAuthorRows[0].text
if len(xmlAuthorRows) > 5:
strLastName2 = xmlAuthorRows[4].text
else:
strLastName2 = ""
strCompleteName = strLastName1 + " and " + strLastName2
return self.sanitize(strCompleteName)
if intNumberOfAuthors > 2:
xmlAuthorRows = xmlEntry.findall(".//labelname/mrow/mrow/mrow")
strLastName1 = xmlAuthorRows[0].text
strCompleteName = strLastName1 + " et.al."
return self.sanitize(strCompleteName)
def editor(self):
xmlEntry = self.xmlEntry
# If no Name is given, return either the Shorthand or the Title (Shorthand prefererred)
if xmlEntry.find(".//editor/number") is None:
return ""
intNumberOfEditors = int(xmlEntry.find(".//editor/number").text)
if intNumberOfEditors == 1:
xmlEditorRows = xmlEntry.findall(".//editor/mrow/mrow")
strLastName = xmlEditorRows[0].text
if len(xmlEditorRows) > 3:
strFirstName = xmlEditorRows[2].text
strCompleteName = "Ed. by " + strFirstName + " " + strLastName + "."
return self.sanitize(strCompleteName)
else:
return self.sanitize(strLastName)
if intNumberOfEditors > 1:
xmlEditorRows = xmlEntry.findall(".//editor/mrow/mrow/mrow")
strLastName = xmlEditorRows[0].text
strFirstName = xmlEditorRows[2].text
strCompleteName = "Ed. by " + strFirstName + " " + strLastName
for i in range(0, (intNumberOfEditors - 1)):
a = i + 4
strLastName = ""
strFirstName = ""
if len(xmlEditorRows) > a:
strLastName = xmlEditorRows[a].text
a = i + 6
if len(xmlEditorRows) > a:
strFirstName = xmlEditorRows[a].text
strCompleteName = strCompleteName + ", " + strFirstName + " " + strLastName
strCompleteName = strCompleteName + "."
return self.sanitize(strCompleteName)