Final fix of issue 2843 for any number of references.
svn: r12370
This commit is contained in:
		@@ -23,7 +23,7 @@
 | 
			
		||||
Contain and organize bibliographic information.
 | 
			
		||||
"""
 | 
			
		||||
import string
 | 
			
		||||
 | 
			
		||||
import math
 | 
			
		||||
from gen.lib import SourceRef as SourceRef
 | 
			
		||||
 | 
			
		||||
class Citation:
 | 
			
		||||
@@ -74,17 +74,28 @@ class Citation:
 | 
			
		||||
        @return: The key of the added reference among all the references.
 | 
			
		||||
        @rtype: char
 | 
			
		||||
        """
 | 
			
		||||
        first_letter = ''
 | 
			
		||||
        second_letter = ''
 | 
			
		||||
        letter_count = len(string.lowercase)
 | 
			
		||||
        ref_count = len(self.__ref_list)
 | 
			
		||||
        if ref_count > letter_count:
 | 
			
		||||
            # If there are more than 26 references, we need to use two 
 | 
			
		||||
            # characters to uniquely identify them all.
 | 
			
		||||
            first_letter = string.lowercase[ ref_count / letter_count ]
 | 
			
		||||
        second_letter = string.lowercase[ ref_count % letter_count ]
 | 
			
		||||
        
 | 
			
		||||
        key = first_letter + second_letter
 | 
			
		||||
        x_ref_count = ref_count
 | 
			
		||||
        # Return "a" for ref_count = 0, otherwise log(0) does not work
 | 
			
		||||
        if ref_count == 0:
 | 
			
		||||
            self.__ref_list.append(("a", source_ref))
 | 
			
		||||
            return "a"
 | 
			
		||||
        last_letter = string.lowercase[ ref_count % letter_count ]
 | 
			
		||||
        key = ""
 | 
			
		||||
        # Calculate prek number of digits.
 | 
			
		||||
        number_of_letters = int(math.log(float(ref_count),float(letter_count)))+1
 | 
			
		||||
        # Exclude index for number_of_letters-1
 | 
			
		||||
        for n in range(1, number_of_letters-1):
 | 
			
		||||
            ref_count = ref_count - pow(letter_count, n) 
 | 
			
		||||
        # Adjust number_of_letters for new index
 | 
			
		||||
        number_of_letters = int(math.log(float(ref_count),float(letter_count))) +1
 | 
			
		||||
        for n in range(1, number_of_letters):
 | 
			
		||||
            x_ref_count = x_ref_count - pow(letter_count, n) 
 | 
			
		||||
        for letter in range(1, number_of_letters):
 | 
			
		||||
            index = x_ref_count  / pow(letter_count, letter)  % letter_count
 | 
			
		||||
            key += string.lowercase[ index ]
 | 
			
		||||
        key = key + last_letter
 | 
			
		||||
        self.__ref_list.append((key, source_ref))
 | 
			
		||||
        return key
 | 
			
		||||
 | 
			
		||||
@@ -228,4 +239,4 @@ class Bibliography:
 | 
			
		||||
                if notehandle not in nl2:
 | 
			
		||||
                    return False
 | 
			
		||||
        # Can't find anything different. They must be equal.
 | 
			
		||||
        return True
 | 
			
		||||
        return True
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user