Grammalecte  Hex Artifact Content

Artifact 8b7759e07600f639fc3e99efcaf96421ed82f4fbc7eadb34ea7dbb65ce22380a:


0000: 22 22 22 0a 4d 61 73 63 75 6c 69 6e 73 2c 20 66  """.Masculins, f
0010: c3 a9 6d 69 6e 69 6e 73 2c 20 73 69 6e 67 75 6c  ..minins, singul
0020: 69 65 72 73 20 65 74 20 70 6c 75 72 69 65 6c 73  iers et pluriels
0030: 0a 22 22 22 0a 0a 66 72 6f 6d 20 2e 6d 66 73 70  ."""..from .mfsp
0040: 5f 64 61 74 61 20 69 6d 70 6f 72 74 20 6c 54 61  _data import lTa
0050: 67 4d 69 73 63 50 6c 75 72 20 61 73 20 5f 6c 54  gMiscPlur as _lT
0060: 61 67 4d 69 73 63 50 6c 75 72 0a 66 72 6f 6d 20  agMiscPlur.from 
0070: 2e 6d 66 73 70 5f 64 61 74 61 20 69 6d 70 6f 72  .mfsp_data impor
0080: 74 20 6c 54 61 67 4d 61 73 46 6f 72 6d 20 61 73  t lTagMasForm as
0090: 20 5f 6c 54 61 67 4d 61 73 46 6f 72 6d 0a 66 72   _lTagMasForm.fr
00a0: 6f 6d 20 2e 6d 66 73 70 5f 64 61 74 61 20 69 6d  om .mfsp_data im
00b0: 70 6f 72 74 20 64 4d 69 73 63 50 6c 75 72 20 61  port dMiscPlur a
00c0: 73 20 5f 64 4d 69 73 63 50 6c 75 72 0a 66 72 6f  s _dMiscPlur.fro
00d0: 6d 20 2e 6d 66 73 70 5f 64 61 74 61 20 69 6d 70  m .mfsp_data imp
00e0: 6f 72 74 20 64 4d 61 73 46 6f 72 6d 20 61 73 20  ort dMasForm as 
00f0: 5f 64 4d 61 73 46 6f 72 6d 0a 0a 0a 64 65 66 20  _dMasForm...def 
0100: 69 73 46 65 6d 46 6f 72 6d 20 28 73 57 6f 72 64  isFemForm (sWord
0110: 29 3a 0a 20 20 20 20 22 72 65 74 75 72 6e 73 20  ):.    "returns 
0120: 54 72 75 65 20 69 66 20 73 57 6f 72 64 20 65 78  True if sWord ex
0130: 69 73 74 73 20 69 6e 20 5f 64 4d 61 73 46 6f 72  ists in _dMasFor
0140: 6d 22 0a 20 20 20 20 72 65 74 75 72 6e 20 73 57  m".    return sW
0150: 6f 72 64 20 69 6e 20 5f 64 4d 61 73 46 6f 72 6d  ord in _dMasForm
0160: 0a 0a 64 65 66 20 67 65 74 4d 61 73 46 6f 72 6d  ..def getMasForm
0170: 20 28 73 57 6f 72 64 2c 20 62 50 6c 75 72 29 3a   (sWord, bPlur):
0180: 0a 20 20 20 20 22 72 65 74 75 72 6e 73 20 6d 61  .    "returns ma
0190: 73 63 75 6c 69 6e 65 20 66 6f 72 6d 20 77 69 74  sculine form wit
01a0: 68 20 66 65 6d 69 6e 69 6e 65 20 66 6f 72 6d 22  h feminine form"
01b0: 0a 20 20 20 20 69 66 20 73 57 6f 72 64 20 69 6e  .    if sWord in
01c0: 20 5f 64 4d 61 73 46 6f 72 6d 3a 0a 20 20 20 20   _dMasForm:.    
01d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 20 5f 6d 6f      return [ _mo
01e0: 64 69 66 79 53 74 72 69 6e 67 57 69 74 68 53 75  difyStringWithSu
01f0: 66 66 69 78 43 6f 64 65 28 73 57 6f 72 64 2c 20  ffixCode(sWord, 
0200: 73 54 61 67 29 20 20 66 6f 72 20 73 54 61 67 20  sTag)  for sTag 
0210: 69 6e 20 5f 77 68 61 74 53 75 66 66 69 78 43 6f  in _whatSuffixCo
0220: 64 65 73 28 73 57 6f 72 64 2c 20 62 50 6c 75 72  des(sWord, bPlur
0230: 29 20 5d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b  ) ].    return [
0240: 5d 0a 0a 64 65 66 20 68 61 73 4d 69 73 63 50 6c  ]..def hasMiscPl
0250: 75 72 61 6c 20 28 73 57 6f 72 64 29 3a 0a 20 20  ural (sWord):.  
0260: 20 20 22 72 65 74 75 72 6e 73 20 54 72 75 65 20    "returns True 
0270: 69 66 20 73 57 6f 72 64 20 65 78 69 73 74 73 20  if sWord exists 
0280: 69 6e 20 64 50 6c 75 72 4d 69 73 63 22 0a 20 20  in dPlurMisc".  
0290: 20 20 72 65 74 75 72 6e 20 73 57 6f 72 64 20 69    return sWord i
02a0: 6e 20 5f 64 4d 69 73 63 50 6c 75 72 0a 0a 64 65  n _dMiscPlur..de
02b0: 66 20 67 65 74 4d 69 73 63 50 6c 75 72 61 6c 20  f getMiscPlural 
02c0: 28 73 57 6f 72 64 29 3a 0a 20 20 20 20 22 72 65  (sWord):.    "re
02d0: 74 75 72 6e 73 20 70 6c 75 72 61 6c 20 66 6f 72  turns plural for
02e0: 6d 20 77 69 74 68 20 73 69 6e 67 75 6c 61 72 20  m with singular 
02f0: 66 6f 72 6d 22 0a 20 20 20 20 69 66 20 73 57 6f  form".    if sWo
0300: 72 64 20 69 6e 20 5f 64 4d 69 73 63 50 6c 75 72  rd in _dMiscPlur
0310: 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  :.        return
0320: 20 5b 20 5f 6d 6f 64 69 66 79 53 74 72 69 6e 67   [ _modifyString
0330: 57 69 74 68 53 75 66 66 69 78 43 6f 64 65 28 73  WithSuffixCode(s
0340: 57 6f 72 64 2c 20 73 54 61 67 29 20 20 66 6f 72  Word, sTag)  for
0350: 20 73 54 61 67 20 69 6e 20 5f 6c 54 61 67 4d 69   sTag in _lTagMi
0360: 73 63 50 6c 75 72 5b 5f 64 4d 69 73 63 50 6c 75  scPlur[_dMiscPlu
0370: 72 5b 73 57 6f 72 64 5d 5d 2e 73 70 6c 69 74 28  r[sWord]].split(
0380: 22 7c 22 29 20 5d 0a 20 20 20 20 72 65 74 75 72  "|") ].    retur
0390: 6e 20 5b 5d 0a 0a 64 65 66 20 5f 77 68 61 74 53  n []..def _whatS
03a0: 75 66 66 69 78 43 6f 64 65 73 20 28 73 57 6f 72  uffixCodes (sWor
03b0: 64 2c 20 62 50 6c 75 72 29 3a 0a 20 20 20 20 22  d, bPlur):.    "
03c0: 6e 65 63 65 73 73 61 72 79 20 6f 6e 6c 79 20 66  necessary only f
03d0: 6f 72 20 64 4d 61 73 46 72 6f 6d 22 0a 20 20 20  or dMasFrom".   
03e0: 20 73 53 66 78 20 3d 20 5f 6c 54 61 67 4d 61 73   sSfx = _lTagMas
03f0: 46 6f 72 6d 5b 5f 64 4d 61 73 46 6f 72 6d 5b 73  Form[_dMasForm[s
0400: 57 6f 72 64 5d 5d 0a 20 20 20 20 69 66 20 22 2f  Word]].    if "/
0410: 22 20 69 6e 20 73 53 66 78 3a 0a 20 20 20 20 20  " in sSfx:.     
0420: 20 20 20 69 66 20 62 50 6c 75 72 3a 0a 20 20 20     if bPlur:.   
0430: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0440: 73 53 66 78 5b 73 53 66 78 2e 66 69 6e 64 28 22  sSfx[sSfx.find("
0450: 2f 22 29 2b 31 3a 5d 2e 73 70 6c 69 74 28 22 7c  /")+1:].split("|
0460: 22 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ").        retur
0470: 6e 20 73 53 66 78 5b 3a 73 53 66 78 2e 66 69 6e  n sSfx[:sSfx.fin
0480: 64 28 22 2f 22 29 5d 2e 73 70 6c 69 74 28 22 7c  d("/")].split("|
0490: 22 29 0a 20 20 20 20 72 65 74 75 72 6e 20 73 53  ").    return sS
04a0: 66 78 2e 73 70 6c 69 74 28 22 7c 22 29 0a 0a 64  fx.split("|")..d
04b0: 65 66 20 5f 6d 6f 64 69 66 79 53 74 72 69 6e 67  ef _modifyString
04c0: 57 69 74 68 53 75 66 66 69 78 43 6f 64 65 20 28  WithSuffixCode (
04d0: 73 57 6f 72 64 2c 20 73 53 66 78 29 3a 0a 20 20  sWord, sSfx):.  
04e0: 20 20 22 72 65 74 75 72 6e 73 20 73 57 6f 72 64    "returns sWord
04f0: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73 53 66   modified by sSf
0500: 78 22 0a 20 20 20 20 69 66 20 6e 6f 74 20 73 53  x".    if not sS
0510: 66 78 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75  fx:.        retu
0520: 72 6e 20 22 22 0a 20 20 20 20 69 66 20 73 53 66  rn "".    if sSf
0530: 78 20 3d 3d 20 22 30 22 3a 0a 20 20 20 20 20 20  x == "0":.      
0540: 20 20 72 65 74 75 72 6e 20 73 57 6f 72 64 0a 20    return sWord. 
0550: 20 20 20 74 72 79 3a 0a 20 20 20 20 20 20 20 20     try:.        
0560: 72 65 74 75 72 6e 20 73 57 6f 72 64 5b 3a 2d 28  return sWord[:-(
0570: 6f 72 64 28 73 53 66 78 5b 30 5d 29 2d 34 38 29  ord(sSfx[0])-48)
0580: 5d 20 2b 20 73 53 66 78 5b 31 3a 5d 20 20 69 66  ] + sSfx[1:]  if
0590: 20 73 53 66 78 5b 30 5d 20 21 3d 20 27 30 27 20   sSfx[0] != '0' 
05a0: 20 65 6c 73 65 20 20 73 57 6f 72 64 20 2b 20 73   else  sWord + s
05b0: 53 66 78 5b 31 3a 5d 20 20 23 20 34 38 20 69 73  Sfx[1:]  # 48 is
05c0: 20 74 68 65 20 41 53 43 49 49 20 63 6f 64 65 20   the ASCII code 
05d0: 66 6f 72 20 22 30 22 0a 20 20 20 20 65 78 63 65  for "0".    exce
05e0: 70 74 3a 0a 20 20 20 20 20 20 20 20 72 65 74 75  pt:.        retu
05f0: 72 6e 20 22 23 23 20 65 72 72 65 75 72 2c 20 63  rn "## erreur, c
0600: 6f 64 65 20 3a 20 22 20 2b 20 73 74 72 28 73 53  ode : " + str(sS
0610: 66 78 29 20 2b 20 22 20 23 23 22 0a              fx) + " ##".