chiark / gitweb /
improved handling of ordinary numbers and description of relations
authornaath <naath@chiark.greenend.org.uk>
Sun, 30 Mar 2014 12:25:15 +0000 (13:25 +0100)
committernaath <naath@chiark.greenend.org.uk>
Sun, 30 Mar 2014 12:25:15 +0000 (13:25 +0100)
cgiFiles/person.py
familyTree/askQuestion.py

index 84645e60e520c6f86e8da8e6e77dc1c2383319b2..32d3807efabf671f88585e1dc7ce602d4b461334 100755 (executable)
@@ -27,7 +27,7 @@ else:
        if len(printMe)<10:
                printMe =  'sorry, no data <br>'
        else:
-               url = "<a href= "+everyPage.base_url()+"ancestors.py?ID="+ID+">Ancestors</a>"
+               url = "<a href= "+everyPage.base_url()+"ancestors.py?ID="+str(ID)+">Ancestors</a>"
                printMe = printMe + '<br>' + url
 
        everyPage.good(printMe)
index b9c459f18f1a1604a5f9129e69c911095431c7d7..5f9b6fb40f575c0dcac81f82bff09498e18a6dd8 100755 (executable)
@@ -40,8 +40,9 @@ def print_tagged_query(relationship,s,t,newLine):
 def relationship_html(ID,ID2,newLine):
        if newLine=='<br>':
                relationship = common_ancestors(ID,ID2,newLine)[2]
-               script = "ancestors.py?ID="+ID+"&ID2="+str(ID2)
-               return link_Template.substitute(script = script,text = "Common ancestors")
+               script = "ancestors.py?ID="+str(ID)+"&ID2="+str(ID2)
+               url = link_Template.substitute(script = script,text = "Common ancestors")
+               return relationship + ' '+url + newLine
        else:
                return ''
 
@@ -78,6 +79,19 @@ def print_tagged_name(relationship,row,newLine):
                        out = relationship + ": " + name_html(row,html)
        return out + newLine
 
+
+def ordinal_numbers(number):
+       out = str(number)
+       if number==1:
+               out = out +'st'
+       elif number==2:
+               out = out +'nd'
+       elif number==3:
+               out = out +'rd'
+       else:
+               out = out +'th'
+       return out
+
 def list_territories(newLine):
        s = "SELECT DISTINCT territory"\
        +" FROM territories"\
@@ -102,16 +116,9 @@ def list_people(newLine):
 
                if row[2]/100!=year/100:
                        century = row[2]/100 + 1
-                       out = out +newLine+ 'born in ' + str(century)
+                       out = out +newLine+ 'born in ' 
 
-                       if century==21:
-                               out = out + 'st'
-                       elif century==2:
-                               out = out + 'nd'
-                       else:
-                               out = out + 'th' 
-
-                       out = out + ' century:' + newLine
+                       out = out +ordinal_numbers(century) + ' century:' + newLine
 
                out = out + name_html(row,newLine) +newLine
                year = row[2]
@@ -152,7 +159,7 @@ def all_ancestors(personID,newLine):
        while len(ancestors)>0:
                level = level+1
                newA =[]
-               out = out+newLine + parent_level(level) +':' + newLine
+               out = out+newLine + parent_level(level,'parent') +':' + newLine
                for ancestor in ancestors:
                        id = (ancestor,)
                        for row in run_query(s,id):
@@ -249,7 +256,7 @@ def common_ancestors(IDA, IDB,newLine):
                if a!=indexA[-1]:
                        out = out + 'and' + newLine
 
-       out = out + parent_level(aLevels[indexA[0]])
+       out = out + parent_level(aLevels[indexA[0]],'parent')
        if len(indexA) >1:
                out = out + 's'
 
@@ -262,7 +269,7 @@ def common_ancestors(IDA, IDB,newLine):
                if b!=indexB[-1]:
                        out = out + 'and' + newLine
 
-       out = out + parent_level(bLevels[indexB[0]])
+       out = out + parent_level(bLevels[indexB[0]],'parent')
        if len(indexB)>1:
                out = out + 's'
        out = out + ' of ' + name_html([names[1],IDB],newLine)+newLine
@@ -281,18 +288,12 @@ def relationship(level1, level2,names):
        if level1==0 and level2==0:
                return names[0] + ' is ' +names[1]
        if level1==0:
-               return names[0] + ' is ' + names[1] + '\'s '+ parent_level(level2)
+               return names[0] + ' is ' + names[1] + '\'s '+ parent_level(level2,'parent')
        if level2==0:
-               return names[1] + ' is ' + names[0] + '\'s '+ parent_level(level1)
+               return names[1] + ' is ' + names[0] + '\'s '+ parent_level(level1,'parent')
 
-       if level1==level2:
-               remove = 0
-               if level1==1:
-                       return names[0] +' and '+names[1] +' are '+' siblings'
-               else:
-                       cousinNum = level1-1
 
-       if level1>level2:
+       if level1>=level2:
                remove = level1-level2
                cousinNum = level2-1
        else:
@@ -300,21 +301,14 @@ def relationship(level1, level2,names):
                cousinNum = level1-1
 
        if cousinNum==0:
-               if level1< level2:
-                       return names[0] + ' is ' + names[1] + '\'s  uncle or aunt'
+               uaLevel =  parent_level(remove,'uncle or aunt')
+               if level1<= level2:
+                       return names[0] + ' is ' + names[1] + '\'s ' + uaLevel
 
                if level2<level1:
-                       return names[1] + ' is ' + names[0] + '\'s  uncle or aunt'
-
-       if cousinNum ==1:
-               c = '1st'
-       elif cousinNum==2:
-               c = '2nd'
-       elif cousinNum==3:
-               c = '3rd'
-       else:
-               c = str(cousinNum)+'th'                 
+                       return names[1] + ' is ' + names[0] + '\'s ' + uaLevel
 
+       c=ordinal_numbers(cousinNum)
        if remove == 1:
                rem = 'once'
        elif remove ==2:
@@ -328,10 +322,13 @@ def relationship(level1, level2,names):
 
        return r
 
-def parent_level(level):
+def parent_level(level,type):
        if level == 0:
-               return 'self'
-       out = 'parent'
+               if type=='parent':
+                       return 'self'
+               else:           
+                       return 'sibling'
+       out = type
        if level ==1:
                return out
        out = 'grand '+out