PROGRAMMATION DES CONJUGAISONS

PROGRAMMATION DES CONJUGAISONS

CLASSE Messager (dialogue avec les élèves)

DialogView subclass: #Messager

instanceVariableNames: ''

classVariableNames: ''

poolDictionaries: ''

category: 'conjugaisons et outils'!

 

Messager class

instanceVariableNames: ''!

 

!Messager class methodsFor: 'demande des conjugaisons'!

demandeImpératif

| theModel m i |

i := 1.

theModel := ValueHolder with: #('' '' '' ).

m := self model: theModel.

m addVerticalSpace: 3.

m addTextLabel: 'Impératif présent'.

m addVerticalSpace: 3.

#('2ème pers singulier' '1ème pers pluriel' '2ème pers pluriel') with: Ta

do:

[:pro :v|

m addTextLabel: pro; addTextFieldOn: ((PluggableAdaptor on: theModel)

collectionIndex: i)

initially: v; addVerticalSpace: 3.

i := i + 1].

m open.

^theModel value!

demandeImpératifConj: uneListe

"uneListe contient la conjugaison déjà rentrée au préalable"

| theModel m i |

i := 1.

theModel := ValueHolder with: #('' '' '' ).

m := self model: theModel.

m addVerticalSpace: 3.

m addTextLabel: 'Impératif présent'.

m addVerticalSpace: 3.

#('2ème pers singulier' '1ème pers pluriel' '2ème pers pluriel') with: uneListe

do:

[:pro :v|

m addTextLabel: pro; addTextFieldOn: ((PluggableAdaptor on: theModel)

collectionIndex: i)

initially: v; addVerticalSpace: 3.

i := i + 1].

m open.

^theModel value!

demandeTemps: unTemps listePronoms: uneListe conjugaisons: uneConj

| theModel m i |

i := 1.

theModel := ValueHolder with: #('' '' '' '' '' '' '' '' ).

m := self model: theModel.

m addVerticalSpace: 3.

m addTextLabel: unTemps.

m addVerticalSpace: 3.

uneListe with: uneConj

do:

[:pro :v|

m addTextLabel: pro; addTextFieldOn: ((PluggableAdaptor on: theModel)

collectionIndex: i)

initially: v; addVerticalSpace: 3.

i := i + 1].

m open.

^theModel value! !

MÉTHODES DE LECTURE DES CARACTÉRISTIQUES DES VERBES (pronominal, auxiliaire " être ou avoir ")

!Messager class methodsFor: 'choix multiples'!

hMuetOuiNon

^self

choose: 'h muet ?'

labels: #('oui' 'non')

values: #('oui' 'non')

default: 'non'!

prononominalOuiNon

^self

choose: 'Verbe pronominal ?'

labels: #('oui' 'non')

values: #('oui' 'non')

default: 'non'!

êtreOuAvoir

^self

choose: 'Auxiliaire ?'

labels: #('avoir' 'être')

values: #('avoir' 'être')

default: 'avoir'! !

CRÉATION DE LA CLASSE MonOutil

Object subclass: #MonOutil

instanceVariableNames: 'instVarName1 instVarNai?me2 '

classVariableNames: ''

poolDictionaries: ''

category: 'conjugaisons et outils'!

 

FABRICATION DE MENUS AVEC LES DICTIONNAIRES

ET RÉUNION DE DEUX DICTIONNAIRES

MonOutil class

instanceVariableNames: ''!

 

!MonOutil class methodsFor: 'RéunionMenu'!

menu: unDico

"crée un menu avecunDico

Nouvelle Catégorie"

 

| choices categories choice |

categories := unDico keys asOrderedCollection.

choices := String new writeStream.

categories do: [:cat|choices nextPutAll: cat;cr].

choices := choices copyFrom: 1 to: (choices size -1).

choice :=(PopUpMenu

labels:choices

lines: (1)

values: (categories ))startUp.

^choice!

menuAvec: unDico

"crée un menu avecunDico

Nouvelle Catégorie"

 

| choices categories choice |

categories := unDico keys asOrderedCollection.

choices := String new writeStream.

categories do: [:cat|choices nextPutAll: cat;cr].

choices := choices contents, 'Nouvelle catégorie'.

choice :=(PopUpMenu

labels:choices

lines: (Array with: categories size)

values: (categories copyWith: 'Nouvelle catégorie'))startUp.

^choice!

menuAvec: unDico mot1: unMot mot2: unMotBis

"crée un menu avec :unDico

Nouveau verbe

Supprimer un verbe"

| choices categories choice ci c |

categories := unDico keys asOrderedCollection.

choices := String new writeStream.

categories do: [:cat|choices nextPutAll: cat;cr].

choices nextPutAll: unMot;cr.

choices nextPutAll: unMotBis.

choices := choices contents.

ci :=(categories copyWith: unMot).

c:= ci copyWith:unMotBis.

choice :=(PopUpMenu

labels:choices

lines: (Array with: categories size)

values: c)startUp.

^choice!

réunis: unDico avec:unAutreDico

"réunit un dictionnaire avec un autre

MonOutil réunis: DicoFrAn avec: Dico"

| li dicBis |

dicBis := unDico copy.

li := unAutreDico keys asOrderedCollection.

li do: [ :i | dicBis at:i put:( unAutreDico at:i)].

^dicBis!

simpleMenuAvec: unDico

"crée un menu avec

unDico"

| choices categories choice |

categories := unDico keys asOrderedCollection.

choices := String new writeStream.

categories do: [:cat|choices nextPutAll: cat;cr].

choices := choices contents.

choices := choices copyFrom: 1 to: (choices size -1).

choice := (PopUpMenu

labels:choices

lines:#(0)

values: categories)startUp.

^choice!

termenuAvec: unDico

"crée un menu avec :unDico

Nouveau verbe

Supprimer un verbe"

| choices categories choice ci c |

categories := unDico keys asOrderedCollection.

choices := String new writeStream.

categories do: [:cat|choices nextPutAll: cat;cr].

choices nextPutAll: 'Nouveau verbe';cr.

choices nextPutAll: 'Supprimer un verbe'.

choices := choices contents.

ci :=(categories copyWith: 'Nouveau verbe').

c:= ci copyWith: 'Supprimer un verbe'.

choice :=(PopUpMenu

labels:choices

lines: (Array with: categoriei?s size)

values: c)startUp.

^choice! !

CONJUGAISON D'UN VERBE COMME SON MODÈLE

!MonOutil class methodsFor: 'Conjugaisons'!

 

conjugue: verbe comme: modèle

| tableauVerbe radVerb radMod |

tableauVerbe := Dictionary new.

TableauModèle keys asOrderedCollection do:

[ :pronom | radVerb := MonOutil rendsResteDébut:verbe avec: modèle.

radMod :=MonOutil rendsResteDébut: modèle avec: verbe.

Term := MonOutil extraisDébut:(TableauModèle at: pronom) avec:radMod .

tableauVerbe at: pronom put: radVerb,Term.].

^tableauVerbe.! !

!MonOutil class methodsFor: 'Comparaison de chaînes'!

extraisDébut: mot1 avec: mot2

| rad1 rad2 |

rad1 := mot1.

rad2 :=mot2.

[(rad1 size > 0 and: [rad2 size > 0])

and: [rad1 first == rad2 first]]

whileTrue:

[rad1 := rad1 copyFrom: 2 to: rad1 size.

rad2 := rad2 copyFrom: 2 to: rad2 size].

^rad1!

rendsResteDébut: verbe1 avec: verbe2

| rad1 rad2 compteur longueur |

compteur := 0.

longueur :=verbe1 size.

rad1 := verbe1.

rad2 := verbe2.

[(rad1 size > 0 and: [rad2 size > 0])

and: [rad1 last == rad2 last]]

whileTrue:

[compteur := compteur + 1.

rad1 := rad1 copyFrom: 1 to: rad1 size - 1.

rad2 := rad2 copyFrom: 1 to: rad2 size - 1].

^verbe1 copyFrom:1 to: longueur-compteur!

rendsResteFin: verbe1 avec: verbe2

| rad1 rad2 compteur longueur |

compteur := 0.

longueur :=verbe1 size.

rad1 := verbei?1.

rad2 := verbe2.

[(rad1 size > 0 and: [rad2 size > 0])

and: [rad1 last == rad2 last]]

whileTrue:

[compteur := compteur + 1.

rad1 := rad1 copyFrom: 1 to: rad1 size - 1.

rad2 := rad2 copyFrom: 1 to: rad2 size - 1].

^verbe1 copyFrom:1+ longueur -compteur to: longueur! !

SAUVEGARDE DES OBJETS SUR LE DISQUE DUR

!MonOutil class methodsFor: 'Sauvegarde objets'!

ramèneListeEnregistréeSous: nomFichier

|liste |

Bos := BinaryObjectStorage onOld: (Filename named: nomFichier) readStream.

liste := OrderedCollection new.

[Bos atEnd] whileFalse: [ liste add: Bos next ].

Bos close.

^liste!

ramèneObjetEnregistréSous: nomFichier

| bos monObjet |

bos := BinaryObjectStorage onOld: (Filename named: nomFichier) readStream.

monObjet := bos next.

bos close.

^monObjet!

sauve: unObjet en: nomFichier

Bos := BinaryObjectStorage onNew: (Filename named:nomFichier) writeStream.

Bos nextPut: unObjet.

Bos close.!

sauveListe: uneListe en: nomFichier

| bos |

bos := BinaryObjectStorage onNew: (Filename named:nomFichier) writeStream.

bos nextPutAll: uneListe.

bos close.! !

CRÉATION DE LA CLASSE VERBES

Object subclass: #Verbes

instanceVariableNames: 'infinitif infinitifAff hMuet pronoms numéro modèle pronominal auxiliaire pPassé '

classVariableNames: ''

poolDictionaries: ''

category: 'conjugaisons et outils'!

GESTION DE LA LISTE DES VERBES RENTRÉS ET DE LEUR NUMÉRO

!Verbes methodsFor: 'correction'!

corrigeToi

"L variable globale de type Dictionary donne les infinitifs rentrés(y compris les

modèles) et leurs numéros

LV variable globale de type Dictionary donne les verbes rentrés et leurs numéros "

| t inf num hM mod |

L removeKey: infinitif ifAbsent: [].

LV removeKey: self ifAbsent: [].

(self modèle) listeVerbes removeKey: self infinitif ifAbsent: [].

Smalltalk removeKey: infinitif asSymbol ifAbsent: [].

inf := DialogView request: 'infinitif?' initialAnswer: infinitif.

(inf first = $h)

ifTrue: [ hM := Messager hMuetOuiNon

].

inf first isVowel | (hM = 'oui')

ifTrue:

[pronoms removeFirst.

pronoms addFirst: 'j''']

ifFalse: [pronoms removeFirst.

pronoms addFirst: 'je'].

num := DialogView request: 'numéro du Bescherelle?' initialAnswer: numéro.

t := Verbes new.

t tabPrésent: Dictionary new.

t infinitif: inf.

t numéro: num.

t hMuet: hM.

t pronoms: pronoms.

L at: inf put: num.

LV at: t put: num.

Smalltalk at: inf asSymbol put: t.

(self modèle) listeVerbes at: inf put: t.

mod := M at: num

ifAbsent:

[DialogView warn: 'ATTENTION !!!!!!

Le modèle n''a pas encore été créé …'.

mod := nil.

t initialiseStandard].

t modèle: mod.

mod notNil ifTrue: [t conjugueComme: mod].

t pronominal: (Messager prononominalOuiNon ).! !

!Verbes methodsFor: 'initialisation'!

hMuetOuiNon

infinitif = '' ifFalse:

[infinitif first == $h

ifTrue: [hi?Muet := Messager hMuetOuiNon]

ifFalse: [hMuet :='ce n''est pas un h'].

infinitif first isVowel | (hMuet = 'oui')

ifTrue:

[pronoms removeFirst.

pronoms addFirst: 'j''']]!

initialiseToi

"self initialiseStandard "

mod notNil

ifTrue:

[self conjugueComme: mod].

"! !

VALEUR DES CHAMPS (auxiliaire, hMuet, modèle…)

!Verbes methodsFor: 'valeur des champs'!

auxiliaire

^ auxiliaire!

auxiliaire: t1

auxiliaire := t1!

hMuet

^hMuet!

hMuet: t1

hMuet := t1!

infinitif

^infinitif!

infinitif: t1

infinitif := t1!

infinitifAff

^infinitifAff!

infinitifAff: t1

infinitifAff := t1!

modèle

modèle isNil ifTrue: [ modèle := Modeles new].

^modèle.!

modèle: unModèle

modèle := unModèle!

numéro

^numéro!

numéro: t1

numéro := t1!

pPassé

^pPassé!

pPassé: t1

pPassé := t1!

pronominal

^pronominal!

pronominal: t1

pronominal := t1!

pronoms

pronoms isNil ifTrue: [pronoms := #('je' 'tu' 'elle' 'il' 'nous' 'vous' 'elles' 'ils' ) asOrderedCollection. ].

^pronoms!

pronoms: unDico

pronoms := unDico! !

CONJUGAISON DES VERBES (comme le modèle)

!Verbes methodsFor: 'conjugaisons'!

conjugueComme: unModèle

| radVerb radMod term tabPrésent|

tabPrésent := i?Dictionary new.

pronoms

do:

[:pro |

radVerb := MonOutil rendsResteDébut: self infinitif avec: unModèle infinitif.

radMod := MonOutil rendsResteDébut: unModèle infinitif avec: self infinitif.

term := MonOutil extraisDébut: (unModèle tabPrésent at: pro)

avec: radMod.

tabPrésent at: pro put: radVerb , term].

tabPrésent at: 'je' put: ( tabPrésent at: 'j''' ifAbsent: [ tabPrésent at: 'je']) .

tabPrésent at: 'j''' put: ( tabPrésent at: 'je' ifAbsent: [ tabPrésent at: 'j''' ]) .

^tabPrésent!

conjugueComme: unModèle Au: unTemps mode: unMode

| radVerb radMod term tableau tableauM |

tableau := Dictionary new.

tableauM := Dictionary new.

unMode = 'Indicatif' ifTrue: [

unTemps = 'Présent' ifTrue: [ tableauM := unModèle tabPrésent ].

unTemps = 'Futur' ifTrue: [ tableauM := unModèle tabFutur ].

unTemps = 'Imparfait' ifTrue: [ tableauM := unModèle tabImparfait ].

unTemps = 'Passé simple' ifTrue: [ tableauM := unModèle tabPasséSimple ]].

unMode = 'Subjonctif' ifTrue: [

unTemps = 'Présent' ifTrue: [ tableauM := unModèle tabSubjPrésent ].

unTemps = 'Imparfait' ifTrue: [ tableauM := unModèle tabSubjImparfait ]].

unMode = 'Conditionnel' ifTrue: [

unTemps = 'Présent' ifTrue: [ tableauM := unModèle tabCondPrésent ]].

unMode = 'Impératif' ifTrue: [

unTemps = 'Présent' ifTrue: [ tableauM := unModèle tabImpératif ]].

unMode = 'Impératif' ifFalse: [

pronoms

do:

[:pro |

radVerb := MonOutil reni?dsResteDébut: self infinitif avec: unModèle infinitif.

radMod := MonOutil rendsResteDébut: unModèle infinitif avec: self infinitif.

term := MonOutil extraisDébut: (tableauM at: pro)

avec: radMod.

tableau at: pro put: radVerb , term.].

tableau at: 'je' put: ( tableau at: 'j''' ifAbsent: [ tableau at: 'je']) .

tableau at: 'j''' put: ( tableau at: 'je' ifAbsent: [ tableau at: 'j''' ]) ].

(unMode = 'Impératif')& (unTemps = 'Présent') ifTrue: [tableau := Dictionary new. Transcript show: 'essai'.

#('tu' 'nous' 'vous') do:

[:pro |

radVerb := MonOutil rendsResteDébut: self infinitif avec: unModèle infinitif.

radMod := MonOutil rendsResteDébut: unModèle infinitif avec: self infinitif.

term := MonOutil extraisDébut: (tableauM at: pro)

avec: radMod.

tableau at: pro put: radVerb , term]].

 

^tableau!

conjugueTempsComposé: unTemps mode: unMode

unTemps = 'Passé composé' &(unMode = 'Indicatif') ifTrue: [^self passéComposé].

unTemps = 'Plus-que-parfait' &(unMode = 'Indicatif') ifTrue: [^self plusQueParfait].

unTemps = 'Futur antérieur' ifTrue: [^self futurAntérieur].

unTemps = 'Passé antérieur' ifTrue: [^self passéAntérieur].

(unTemps = 'Passé composé')&(unMode = 'Subjonctif') ifTrue: [^self passéSubj].

(unTemps = 'Plus-que-parfait')&(unMode = 'Subjonctif') ifTrue: [^self plusQueParfaitSubj].

unTemps = 'Passé 1' ifTrue: [^self passéCond1].

(unTemps = 'Passé composé')&(unMode = 'Impératif') ifTrue: [^self passé].!

conjugueToiAui?: unTemps mode: unMode

| pron prono ch tab p |

ch := ''.

tab := Dictionary new.

tab := self conjugueComme: self modèle Au: unTemps mode: unMode.

"fabrication de que je,que tu etc…"

p := OrderedCollection new. p add: 'que ',pronoms first. p add: 'que ', 'tu'.

p add: 'qu'' ', 'elle'. p add: 'qu'' ', 'il'. p add: 'que ', 'nous'. p add: 'que ', 'vous'.

p add: 'qu'' ', 'elles'. p add: 'qu'' ', 'ils'.

pron :=#('je' 'tu' 'elle' 'il' 'nous' 'vous' 'elles' 'ils' ) asOrderedCollection.

" fabrication de que je me, ..."

(infinitif first isVowel ) | (hMuet = 'oui')

ifTrue: [prono := #('que je m''' 'que tu t''' 'qu''elle s''' 'qu'' il se' 'que nous nous' 'que vous vous' 'qu'' elles s''' 'qu''il s''') asOrderedCollection]

ifFalse: [prono := #('que je me' 'que tu te' 'qu'' elle se' 'qu'' il se' 'que nous nous' 'que vous vous' 'qu'' ils se' 'qu'' elles se') asOrderedCollection].

(unMode = 'Indicatif')|(unMode = 'Conditionnel') ifTrue: [

p := pronoms.

pronominal = 'non'

ifTrue:

[pronoms with: p do: [:i :k| ch:= ch, k , ' ' , ( tab at: i) , '\' withCRs]]

"verbe pronominal"

ifFalse:

[infinitif first isVowel | (hMuet = 'oui')

ifTrue: [ prono := #('m''' 't''' 's''' 's''' 'nous' 'vous' 's''' 's''') asOrderedCollection]

ifFalse: [prono := #('me' 'te' 'se' 'se' 'nous' 'vous' 'se' 'se') asOrderedCollection].

pron with: prono do: [:i :j | ch:= ch, i ,' ',j,' ',(tab at: i) , '\' withCRs]]].

unMode = 'Subjonctif' ifTrue: [

pronominal = 'oui' ifTrue: [pron with: prono do: [:i :j | ch:= ch,j,' ',(tab at: i) , '\' withCRs]].

pronominal = 'non' ifTrue: [pron with: p do: [:i :j | ch:= ch,j,' ',(tab at: i) , '\' withCRs]].

].

(unMode = 'Impératif') ifTrue:

[

pronominal = 'non' ifTrue:

[#('tu' 'nous' 'voi?us') do: [:i | ch:= ch, (tab at: i) , '\' withCRs]].

pronominal = 'oui' ifTrue:

[#('tu' 'nous' 'vous') with: #('- toi' '- nous' '- vous') do: [:i :j | ch:= ch, (tab at: i) ,' ' ,j, '\' withCRs]].

].

^ch.!

faisTonParticipePassé

| radVerb radMod term |

radVerb := MonOutil rendsResteDébut: self infinitif avec: self modèle infinitif.

radMod :=MonOutil rendsResteDébut: self modèle infinitif avec: self infinitif.

term := MonOutil extraisDébut: self modèle pPassé avec: radMod .

^ radVerb,term!

futurAntérieur

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'j''',' aurai ',self pPassé,'\' withCRs,

'tu auras ',self pPassé,'\' withCRs,

'elle aura ',self pPassé,'\' withCRs,

'il aura ',self pPassé,'\' withCRs,

'nous aurons ',self pPassé,'\' withCRs,

'vous aurez ',self pPassé,'\' withCRs,

'elles auront ',self pPassé,'\' withCRs,

'ils auront ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'je serai ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu seras ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle sera ',self pPassé,'e\' withCRs,

'il sera ',self pPassé,'\' withCRs,

'nous serons ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous serez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles seront ',self pPassé,'es','\' withCRs,

'ils seront ',self pPasséMascPluriel,'\' withCRs]

ifFalse: [chaîne := 'je me serai ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu te seras ',self pPassé,' (',self pPassé,'e)','i?\' withCRs,

'elle se sera ',self pPassé,'e\' withCRs,

'il se sera ',self pPassé,'\' withCRs,

'nous nous serons ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous vous serez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles se seront ',self pPassé,'es','\' withCRs,

'ils se seront ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

passé

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'aie ',self pPassé,'\' withCRs,

'ayons ',self pPassé,'\' withCRs,

'ayez ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'sois ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'soyons ',self pPasséMascPluriel,' (',self pPassé,'es)','\' withCRs,

'soyez ',self pPasséMascPluriel,' (',self pPassé,'es)','\' withCRs]

ifFalse: [chaîne := 'sois - toi ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'soyons - nous ',self pPasséMascPluriel,' (',self pPassé,'es)','\' withCRs,

'soyons - vous ',self pPasséMascPluriel,' (',self pPassé,'es)','\' withCRs]].

^chaîne!

passéAntérieur

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'j''',' eus ',self pPassé,'\' withCRs,

'tu eus ',self pPassé,'\' withCRs,

'elle eut ',self pPassé,'\' withCRs,

'il eut ',self pPassé,'\' withCRs,

'nous eûmes ',self pPassé,'\' withCRs,

'vous eûtes ',self pPassé,'\' withCRs,

'elles eurent ',self pPassé,'\' withCRs,

'ils eurent ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pi?ronominal = 'non' ifTrue:

[chaîne := 'je fus ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu fus ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle fut ',self pPassé,'e\' withCRs,

'il fut ',self pPassé,'\' withCRs,

'nous fûmes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous fûtes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles furent ',self pPassé,'es','\' withCRs,

'ils furent ',self pPasséMascPluriel, '\' withCRs]

ifFalse: [chaîne := 'je me fus ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu te fus ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle se fut ',self pPassé,'e\' withCRs,

'il se fut ',self pPassé,'\' withCRs,

'nous nous fûmes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous vous fûmes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles se furent ',self pPassé,'es','\' withCRs,

'ils se furent ',self pPasséMascPluriel,'\' withCRs]].

^chaîne!

passéComposé

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'j''',' ai ',self pPassé,'\' withCRs,

'tu as ',self pPassé,'\' withCRs,

'elle a ',self pPassé,'\' withCRs,

'il a ',self pPassé,'\' withCRs,

'nous avons ',self pPassé,'\' withCRs,

'vous avez ',self pPassé,'\' withCRs,

'elles ont ',self pPassé,'\' withCRs,

'ils ont ',self pPassé,'\' withCRs].

 

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'je suis ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu es ',self pPassi?é,' (',self pPassé,'e)','\' withCRs,

'elle est ',self pPassé,'e\' withCRs,

'il est ',self pPassé,'\' withCRs,

'nous sommes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous êtes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles sont ',self pPassé,'es','\' withCRs,

'ils sont ',self pPasséMascPluriel,'\' withCRs]

ifFalse: [chaîne := 'je me suis ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu t'' es ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle s'' est ',self pPassé,'e\' withCRs,

'il s'' est ',self pPassé,'\' withCRs,

'nous nous sommes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous vous êtes ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles se sont ',self pPassé,'es','\' withCRs,

'ils se sont ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

passéCond1

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'j''',' aurais ',self pPassé,'\' withCRs,

'tu aurais ',self pPassé,'\' withCRs,

'elle aurait ',self pPassé,'\' withCRs,

'il aurait ',self pPassé,'\' withCRs,

'nous aurions ',self pPassé,'\' withCRs,

'vous auriez ',self pPassé,'\' withCRs,

'elles auraient ',self pPassé,'\' withCRs,

'ils auraient ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'je serais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu serais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle serait ',self pPassé,'e\' withCRs,

'il serait ',self pPassé,'\' wii?thCRs,

'nous serions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous seriez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles seraient ',self pPassé,'es','\' withCRs,

'ils seraient ',self pPasséMascPluriel, '\' withCRs]

ifFalse: [chaîne := 'je me serais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu te serais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle se serait ',self pPassé,'e\' withCRs,

'il se serait ',self pPassé,'\' withCRs,

'nous nous serions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous vous seriez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles se seraient ',self pPassé,'es','\' withCRs,

'ils se seraient ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

passéSubj

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'que j''',' aie ',self pPassé,'\' withCRs,

'que tu aies ',self pPassé,'\' withCRs,

'qu'' elle ait ',self pPassé,'\' withCRs,

'qu'' il ait ',self pPassé,'\' withCRs,

'que nous ayons ',self pPassé,'\' withCRs,

'que vous ayez ',self pPassé,'\' withCRs,

'qu'' elles aient ',self pPassé,'\' withCRs,

'qu'' ils aient ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'que je sois ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'que tu sois ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'qu'' elle soit ',self pPassé,'e\' withCRs,

'qu'' il soit ',self pPassé,'\' withCRs,

'que nous soyons ',self pPasséMascPluriel,' (',self pPassé,'es',')\' witi?hCRs,

'que vous soyez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'qu'' elles soient ',self pPassé,'es','\' withCRs,

'qu'' ils soient ',self pPasséMascPluriel, '\' withCRs]

ifFalse: [chaîne := 'que je me sois ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'que tu te sois ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'qu'' elle se soit ',self pPassé,'e\' withCRs,

'qu'' il se soit ',self pPassé,'\' withCRs,

'que nous nous soyons ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'que vous vous soyez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'qu'' elles se soient ',self pPassé,'es','\' withCRs,

'qu''ils se soient ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

plusQueParfait

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'j''',' avais ',self pPassé,'\' withCRs,

'tu avais ',self pPassé,'\' withCRs,

'elle avait ',self pPassé,'\' withCRs,

'il avait ',self pPassé,'\' withCRs,

'nous avions ',self pPassé,'\' withCRs,

'vous aviez ',self pPassé,'\' withCRs,

'elles avaient ',self pPassé,'\' withCRs,

'ils avaient ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'j'' étais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu étais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle était ',self pPassé,'e\' withCRs,

'il était ',self pPassé,'\' withCRs,

'nous étions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous étiez ',self pPasséMascPluriel,' (',self pi?Passé,'es',')\' withCRs,

'elles étaient ',self pPassé,'es','\' withCRs,

'ils étaient ',self pPasséMascPluriel, '\' withCRs]

ifFalse: [chaîne := 'je m'' étais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'tu t'' étais ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'elle s'' était ',self pPassé,'e\' withCRs,

'il s'' était ',self pPassé,'\' withCRs,

'nous nous étions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'vous vous étiez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'elles s'' étaient ',self pPassé,'es','\' withCRs,

'ils s'' étaient ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

plusQueParfaitSubj

| chaîne |

self auxiliaire = 'avoir' ifTrue: [

chaîne := 'que j''',' eusse ',self pPassé,'\' withCRs,

'que tu eusses ',self pPassé,'\' withCRs,

'qu'' elle eût ',self pPassé,'\' withCRs,

'qu'' il eût ',self pPassé,'\' withCRs,

'que nous eussions ',self pPassé,'\' withCRs,

'que vous eussiez ',self pPassé,'\' withCRs,

'qu'' elles eussent ',self pPassé,'\' withCRs,

'qu'' ils eussent ',self pPassé,'\' withCRs].

self auxiliaire = 'être' ifTrue: [

self pronominal = 'non' ifTrue:

[chaîne := 'que je fusse ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'que tu fusses ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'qu'' elle fût ',self pPassé,'e\' withCRs,

'qu'' il fût ',self pPassé,'\' withCRs,

'que nous fussions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'que vous fussiez ',self pPasséMascPlurii?el,' (',self pPassé,'es',')\' withCRs,

'qu'' elles fussent ',self pPassé,'es','\' withCRs,

'qu'' ils fussent ',self pPasséMascPluriel, '\' withCRs]

ifFalse: [chaîne := 'que je me fusse ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'que tu te fusses ',self pPassé,' (',self pPassé,'e)','\' withCRs,

'qu'' elle se fût ',self pPassé,'e\' withCRs,

'qu'' il se fût ',self pPassé,'\' withCRs,

'que nous nous fussions ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'que vous vous fussiez ',self pPasséMascPluriel,' (',self pPassé,'es',')\' withCRs,

'qu'' elles se fussent ',self pPassé,'es','\' withCRs,

'qu''ils se fussent ',self pPasséMascPluriel, '\' withCRs]].

^chaîne!

pPasséFémPluriel

^(self pPassé),'es'!

pPasséMascPluriel

(self pPassé last)=$s ifTrue: [^self pPassé] ifFalse:[^(self pPassé),'s']! !

Verbes class

instanceVariableNames: 'listeVerbesCréés '!

 

!Verbes class methodsFor: 'listeVerbes créés'!

listeVerbesCréés

^listeVerbesCréés! !

MÉTHODES DE LA CLASSE Verbes (création de Verbes)

!Verbes class methodsFor: 'création-instances'!

nouveau

| t |

t := super new.

"***initialisation du champ infinitif ***"

t infinitif: (DialogView request: 'infinitif?').

"***initialisation des champs hmuet et pronoms ***"

t pronoms.

t hMuetOuiNon.

"***initialisation du champ pronominal***"

t pronominal: Messager prononominalOuiNon.

"***initialisation du champ numéro***"

t numi?éro: ( DialogView request: 'numéro du Bescherelle?').

"****initialisation du champ modèle ***"

t modèle: ( Modeles numModèles at: t numéro

ifAbsent:

[DialogView warn: 'ATTENTION !!!!!!

Le modèle n''a pas encore été créé …'.

"***création du modèle s'il n ' existe pas encore***"

Modeles nouveauBis: t numéro]).

"**création d'une variable globale ayant pour nom l'infinitif du verbe**"

Smalltalk at: t infinitif asSymbol put: t.

"***création du champ infinitifAff***"

t infinitif ='' ifFalse:

[t pronominal = 'oui' ifTrue:

[t infinitif first isVowel | (t hMuet = 'oui') ifTrue:

[t infinitifAff: 's''',t infinitif]

ifFalse: [t infinitifAff: 'se',' ',t infinitif]]

ifFalse: (t infinitifAff: t infinitif).].

"***mise à jour du champ listeVerbes et listeVerbesAff du modèle qui gère le dictionnaire des verbes qui se conjuguent comme son modèle ***"

t modèle listeVerbes at: t infinitif put: t.

t modèle listeVerbesAff at: t infinitifAff put: t.

"***initialisation du champ auxiliaire***"

t auxiliaire: ( Messager êtreOuAvoir).

"***initialisation du champ pPassé***"

t pPassé: t faisTonParticipePassé.

"***mise à jour de la liste de tous les verbes créés***"

Verbes listeVerbesCréés add: t.

^t! !

MÉTHODES D'INITIALISATION

!Verbes class methodsFor: 'initialisation classe'!

initialiseToi

listeVerbesCréés :=OrderedCollection new.! !

CRÉATION DE LA CLASSE Modèles (sous-classe de Verbes)

Verbes subclass: #Modeles

instanceVariableNames: 'tabPrésent tabFutur tabImparfait tabPasséSimple tabSubjPrésent tabSubjImparfait tabCondPrésent tabImpératif listeVerbes listeVerbesAff '

classVariableNames: ''

poolDictionaries: ''

category: 'conjugaisons et outils'!

LECTURE DES TEMPS

!Modeles methodsFor: 'dialogues'!

demandeTon: unTemps

| ta tab rép m |

unTemps = 'Présent' ifTrue: [tab := tabPrésent ].

unTemps = 'Futur' ifTrue: [tab := tabFutur ].

unTemps = 'Imparfait' ifTrue: [tab := tabImparfait ].

unTemps = 'Passé simple' ifTrue: [tab := tabPasséSimple ].

"fabrication des réponses par défaut pour avoir exactement 8 formes"

ta := OrderedCollection new.

m := Modeles new.

m pronoms do: [:pro|

ta add: ( tab at: pro ifAbsent: [] )].

rép := Messager demandeTemps: unTemps listePronoms: self pronoms conjugaisons: ta .

"Mise à jour de tabPrésent ou tabFutur etc....."

rép with: pronoms do:

[ : v :pro | tab at: pro put: v].

"précaution pour que tous les cas soient prévus pour la première personne"

(pronoms first = 'je')ifTrue: [ tab at: 'j''' put: ( tab at: 'je' ifAbsent: [])].

(pronoms first = 'j''')ifTrue: [ tab at: 'je' put: ( tab at: 'j''' ifAbsent: [])].!

demandeTon: unTemps mode:unMode

| ta tab rép |

unMode = 'Indicatif' ifTrue:

[unTemps = 'Présent' ifTrue: [tab := tabPrésent ].

unTemps = 'Futur' ifTrue: [tab := tabFutur ].

unTemps = 'Imparfait' ifTrue: [tab := tabImparfait ].

unTemps = 'Passé simple' ifTrue: [tab := tabPasséSimple ]].

unMode = 'Subjonctif' ifTrue:

[unTemps = 'Présent' ifTrue: [tab := tabSubjPrésent ].

unTemps = 'Imparfait' ifTrue: [tab := tabSubjImparfait ]].

unMode = 'Conditionnel' ifTrue:

[unTemps = 'Présent' ifTrue: [tab := tabCondPrésent ]].

unMode = 'Impératif' ifTrue:

[unTemps = 'Présent' ifTrue: [tab := tabImpératif ]].

unMode = 'Impératif' ifTrue:

["fabrication de la liste ta des réponses par défaut"

ta := OrderedCollection new.

#('tu' 'nous' 'vous') do: [:pro|

ta add: ( tab at: pro ifAbsent: [] )].

rép := Messager demandeImpératifConj: ta.

"Mise à jour de tabImpératif"

rép with: #('tu' 'nous' 'vous') do:

[ : v :pro | tab at: pro put: v]].

"fabrication des réponses par défaut pour avoir exactement 8 formes si le mode n'est pas l'impératif"

unMode = 'Impératif' ifFalse:

[ta := OrderedCollection new.

pronoms do: [:pro|

ta add: ( tab at: pro ifAbsent: [] )].

rép := Messager demandeTemps: unTemps listePronoms: pronoms conjugaisons: ta .

"Mise à jour de tabPrésent ou tabFutur etc....."

rép with: pronoms do:

[ : v :pro | tab at: pro put: v].

"précaution pour que tous les cas soient prévus pour la première personne"

(pronoms first = 'je')ifTrue: [ tab at: 'j''' put: ( tab at: 'je' ifAbsent: [])].

(pronoms first = 'j''')ifTrue: [ tab at: 'je' put: ( tab at: 'j''' ifAbsent: [])]].!

demandeTonFutur

| prem |

pronoms

do:

[:pro |

prem := DialogView request: pro , ' … ?' initialAnswer: (self tabFutur at: pro).

tabFutur at: pro put: prem].

(pronoms first = 'je')ifTrue: [self tabFutur at: 'j''' put: (self tabFi?utur at: 'je' ifAbsent: [])].

(pronoms first = 'j''')ifTrue: [self tabFutur at: 'je' put: (self tabFutur at: 'j''' ifAbsent: [])].!

demandeTonPrésent

| prem |

pronoms

do:

[:pro |

prem := DialogView request: pro , ' … ?' initialAnswer: (self tabPrésent at: pro).

tabPrésent at: pro put: prem].

(pronoms first = 'je')ifTrue: [self tabPrésent at: 'j''' put: (self tabPrésent at: 'je' ifAbsent: [])].

(pronoms first = 'j''')ifTrue: [self tabPrésent at: 'je' put: (self tabPrésent at: 'j''' ifAbsent: [])].! !

!Modeles methodsFor: 'valeur des champs'!

listeVerbes

listeVerbes isNil ifTrue: [^(listeVerbes :=Dictionary new)] .

^listeVerbes!

listeVerbes: aDictionary

listeVerbes := aDictionary!

listeVerbesAff

^listeVerbesAff!

listeVerbesAff: t1

listeVerbesAff := t1!

modèle

^self!

modèle: unModeles

modèle := unModeles!

numéro

^numéro!

numéro: t1

numéro := t1!

tabCondPrésent

^ tabCondPrésent!

tabCondPrésent: unTableau

tabCondPrésent := unTableau!

tabFutur

^ tabFutur!

tabFutur: unTableau

tabFutur := unTableau!

tabImparfait

^ tabImparfait!

tabImparfait: unTableau

tabImparfait := unTableau!

tabImpératif

^ tabImpératif!

tabImpératif: unTableau

^ tabImpératif := unTableau!

tabPasséSimple

^ tabPasséSimple!

tabPasséSimple: unTableau

tabPasséSimple := unTableau!

tabPrésent

^ tabPrésent!

tabPrésent: unTableau

tabPrésent := unTableau!

tabSubjImparfait

^ tabSubjImparfait!

tabSubjImparfait: t1

tabSubjImparfait := t1!

tabSubjPrésent

^ tabSubjPrésent!

tabSubjPrésent: t1

tabSubjPrésent := t1! !

CONJUGAISONS

!Modeles methodsFor: 'conjugaisons'!

afficheTempsComposé: unTemps mode: unMode

| ch |

unMode = 'Indicatif' ifTrue: [unTemps = 'Passé composé' ifTrue: [ ch := self passéComposé].

unTemps = 'Futur antérieur' ifTrue: [ ch := self futurAntérieur] .

unTemps = 'Passé antérieur' ifTrue: [ ch := self passéAntérieur] .

unTemps = 'Plus-que-parfait' ifTrue: [ ch := self plusQueParfait]].

unMode = 'Subjonctif' ifTrue: [unTemps = 'Passé composé' ifTrue: [ ch := self passéSubj].

unTemps = 'Futur antérieur' ifTrue: [ ch := 'Le futur antérieur n''existe pas au subjonctif'] .

unTemps = 'Passé antérieur' ifTrue: [ ch := 'Le passé antérieur n''existe pas au subjonctif'] .

unTemps = 'Plus-que-parfait' ifTrue: [ ch := self plusQueParfaitSubj]].

unMode = 'Conditionnel' ifTrue: [unTemps = 'Passé 1' ifTrue: [ ch := self passéCond1]].

unMode = 'Impératif' ifTrue: [unTemps = 'Passé composé' ifTrue: [ ch := self passé]].

^ch!

afficheTempsSimple: unTemps mode: unMode

| ch tab p |

ch := ''.

unMode = 'Indicatif' ifTrue: [

unTemps = 'Présent' ifTrue: [tab := tabPrésent ].

unTemps = 'Imparfait' ifTrue: [tab := tabImparfait ].

unTemps = 'Passé simple' ifTrue: [tab := tabPasséSimple].

unTempsi? = 'Futur' ifTrue: [tab := tabFutur].

"si on souhaite supprimer le blanc après le j' le faire dans la ligne qui suit"

pronoms do: [:i | i = 'j''' ifTrue: [ch := ch ,i ,' ', ( tab at: i) , '\' withCRs ]

ifFalse: [ch := ch ,i , ' ' , ( tab at: i) , '\' withCRs]]].

"fabrication de que je,que tu etc…"

p := OrderedCollection new. p add: 'que ', pronoms first. p add: 'que ', 'tu'.

p add: 'qu'' ', 'elle'. p add: 'qu'' ', 'il'. p add: 'que ', 'nous'. p add: 'que ', 'vous'.

p add: 'qu'' ', 'elles'. p add: 'qu'' ', 'ils'.

unMode = 'Subjonctif' ifTrue: [

(unTemps = 'Présent') ifTrue: [tab := tabSubjPrésent ].

(unTemps = 'Imparfait') ifTrue: [tab := tabSubjImparfait ].

(unTemps = 'Présent')| (unTemps = 'Imparfait') ifTrue:

[pronoms with: p do: [:i :k | i = 'j''' ifTrue: [ch := ch , k ,' ', ( tab at: i) , '\' withCRs ]

ifFalse: [ch := ch , k , ' ' , ( tab at: i) , '\' withCRs]]].

(unTemps = 'Futur') ifTrue: [ch := 'Le futur n''existe pas au subjonctif'] .

(unTemps = 'Passé simple') ifTrue: [ch := 'Le passé simple n''existe pas au subjonctif']].

unMode = 'Conditionnel' ifTrue: [

unTemps = 'Présent' ifTrue: [tab := tabCondPrésent .

"si on souhaite supprimer le blanc après le j' le faire dans la ligne qui suit"

pronoms do: [:i | i = 'j''' ifTrue: [ch := ch ,i ,' ', ( tab at: i) , '\' withCRs ]

ifFalse: [ch := ch ,i , ' ' , ( tab at: i) , '\' withCRs]]].

(unTemps = 'Futur') ifTrue: [ch := 'Le futur n''existe pas au conditionnel'] .

(unTemps = 'Imparfait') ifTrue: [ch := 'Le futur n''existe pas au conditionnel'] .

(unTemps = 'Passé simple') ifTrue: [ch := 'Le passé simple n''existe pas au conditionnel']].

(unMode = 'Impératif') & (unTemps = 'Présent') ifTrue: [tab := tabImpératif.

#('tu' 'nous' 'vous') do: [ :i | ch := ch , ( tab ati?: i) , '\' withCRs ] ].

^ch! !

!Modeles methodsFor: 'correction'!

ajouteJeJ

pronoms first = 'je' ifTrue: [tabPrésent at: 'j''' put: (self tabPrésent at: 'je' ifAbsent: [tabPrésent at: 'j'''])].

pronoms first = 'j''' ifTrue: [tabPrésent at: 'je' put: (self tabPrésent at: 'j''' ifAbsent: [tabPrésent at: 'je'])].! !

MÉTHODES D'INITIALISATION

!Modeles methodsFor: 'initialisation'!

initialiseStandard

| déb |

déb := infinitif copyFrom: 1 to: infinitif size - 3.

"initialisation spéciale pour l'impératif"

self tabImpératif at: 'tu' put: déb.

self tabImpératif at: 'nous' put: déb.

self tabImpératif at: 'vous' put: déb.

pronoms do: [:pro | self tabPrésent at: pro put: déb].

self tabPrésent at: 'je' put: (self tabPrésent at: 'j''' ifAbsent: [ self tabPrésent at: 'je']) .

self tabPrésent at: 'j''' put: (self tabPrésent at: 'je' ifAbsent: [self tabPrésent at: 'j''' ]) .

pronoms do: [:pro | self tabFutur at: pro put: déb].

self tabFutur at: 'je' put: (self tabFutur at: 'j''' ifAbsent: [ self tabFutur at: 'je']) .

self tabFutur at: 'j''' put: (self tabFutur at: 'je' ifAbsent: [self tabFutur at: 'j''' ]) .

pronoms do: [:pro | self tabImparfait at: pro put: déb].

self tabImparfait at: 'je' put: (self tabImparfait at: 'j''' ifAbsent: [ self tabImparfait at: 'je']) .

self tabImparfait at: 'j''' put: (self tabImparfait at: 'je' ifAbsent: [self tabImparfait at: 'j''' ]) .

pronoms do: [:pro | self tabPasséSimple at: pro put: déb].

self tabPasséSimple at: 'je' put: (self tabPasséSimple at: 'j''' ifAbsent: [ self tabPai?sséSimple at: 'je']) .

self tabPasséSimple at: 'j''' put: (self tabPasséSimple at: 'je' ifAbsent: [self tabPasséSimple at: 'j''' ]) .

pronoms do: [:pro | self tabSubjPrésent at: pro put: déb].

self tabSubjPrésent at: 'je' put: (self tabSubjPrésent at: 'j''' ifAbsent: [ self tabSubjPrésent at: 'je']) .

self tabSubjPrésent at: 'j''' put: (self tabSubjPrésent at: 'je' ifAbsent: [self tabSubjPrésent at: 'j''' ]) .

pronoms do: [:pro | self tabSubjImparfait at: pro put: déb].

self tabSubjImparfait at: 'je' put: (self tabSubjImparfait at: 'j''' ifAbsent: [ self tabSubjImparfait at: 'je']) .

self tabSubjImparfait at: 'j''' put: (self tabSubjImparfait at: 'je' ifAbsent: [self tabSubjImparfait at: 'j''' ]) .

pronoms do: [:pro | self tabCondPrésent at: pro put: déb].

self tabCondPrésent at: 'je' put: (self tabCondPrésent at: 'j''' ifAbsent: [ self tabCondPrésent at: 'je']) .

self tabCondPrésent at: 'j''' put: (self tabCondPrésent at: 'je' ifAbsent: [self tabCondPrésent at: 'j''' ]) .! !

"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!

MÉTHODES D'INITIALISATION DE LA CLASSE Modèle

Modeles class

instanceVariableNames: 'dicoModèles numModèles '!

 

!Modeles class methodsFor: 'initialisation classe'!

initialiseAvecDicoModèles: dico1 avecNumModèles: dico2

dicoModèles := dico1.

numModèles := dico2.!

initialiseToi

dicoModèles := Dictionary new.

numModèles := Dictionary new.! !

!Modeles class methodsFor: 'liste des modèles'!

tesInfinitifs

^ (dicoModèles isNil) ifTrue: [dicoModèles := Dictioni?ary new]

ifFalse: [dicoModèles keys asOrderedCollection]!

tesModèles

^ (dicoModèles isNil) ifTrue: [dicoModèles := Dictionary new]

ifFalse: [dicoModèles values asOrderedCollection]! !

!Modeles class methodsFor: 'valeur des champs de classe'!

dicoModèles

" dans ce dictionnaire on range:

les infinitifs en face des modèles"

dicoModèles isNil ifTrue: [dicoModèles := Dictionary new].

^dicoModèles.!

dicoModèles: t1

dicoModèles := t1!

numModèles

" dans ce dictionnaire on range:

les numéros en face des modèles"

numModèles isNil ifTrue: [numModèles := Dictionary new].

^numModèles.!

numModèles: t1

numModèles := t1.! !

MÉTHODES DE CRÉATION D'OBJETS

!Modeles class methodsFor: 'création'!

nouveau

| t inf |

t := self new.

t tabPrésent: Dictionary new.

t tabFutur: Dictionary new.

t tabImparfait: Dictionary new.

t tabPasséSimple: Dictionary new.

t tabSubjPrésent: Dictionary new.

t tabSubjImparfait: Dictionary new.

t tabCondPrésent: Dictionary new.

t tabImpératif: Dictionary new.

t listeVerbes: Dictionary new.

t listeVerbesAff: Dictionary new.

t pronoms: #('je' 'tu' 'elle' 'il' 'nous' 'vous' 'elles' 'ils' ) asOrderedCollection.

"***initialisation du champ infinitif ***"

inf := DialogView request: 'infinitif?'.

inf = ''

ifTrue: [t infinitif: 'xxxxxxx']

ifFalse: [t infinitif: inf].

t hMuetOuiNon.

"****initialisatioi?n du champ modèle ***"

t modèle: self.

"***initialisation du champ numéro ***"

t numéro: (DialogView request: 'numéro du Bescherelle?').

t infinitif = '' ifFalse: ["***initialisation de tabPrésent tabFutur ***"

t initialiseStandard].

t infinitif = '' ifFalse: ["****initialisation de pronoms ***"

t infinitif first isVowel | (t hMuet = 'oui')

ifTrue:

[t pronoms removeFirst.

t pronoms addFirst: 'j''']].

Smalltalk at: t infinitif asSymbol put: t.

dicoModèles isNil

ifTrue: [dicoModèles := Dictionary new]

ifFalse: [dicoModèles at: t infinitif put: t].

numModèles isNil

ifTrue: [numModèles := Dictionary new]

ifFalse: [numModèles at: t numéro put: t].

"***initialisation du champ pPassé ***"

t pPassé: ' ................'.

"***initialisation du champ auxiliaire ***"

t auxiliaire: 'avoir'.

^t!

nouveauBis: unNuméro

| t inf |

t := self new.

t tabPrésent: Dictionary new.

t tabFutur: Dictionary new.

t tabImparfait: Dictionary new.

t tabPasséSimple: Dictionary new.

t tabSubjPrésent: Dictionary new.

t tabSubjImparfait: Dictionary new.

t tabCondPrésent: Dictionary new.

t tabImpératif: Dictionary new.

t listeVerbes: Dictionary new.

t listeVerbesAff: Dictionary new.

t pronoms: #('je' 'tu' 'elle' 'il' 'nous' 'vous' 'elles' 'ils' ) asOrderedCollection.

"***initialisation du champ infinitif***"

inf := DialogView request: 'infinitif du modèle?'.

inf = ''

ifTrue: [t infinitif: 'xxxxxxx']

ifFalse: [t infinitif: inf].

t hMuetOuiNon.

"***initialisation du champ modèle ***"

t modèle: self.

"***initialisation du champ numéro ***"

t numéro: unNuméro.

t infinitif = '' ifFalse: ["***initialisation de tabPrésent tabFutur ***"

t initialiseStandard].

t infinitif = '' ifFalse: ["***initialisation de pronoms ***"

t infinitif first isVowel | (t hMuet = 'oui')

ifTrue:

[t pronoms removeFirst.

t pronoms addFirst: 'j''']].

Smalltalk at: t infinitif asSymbol put: t.

dicoModèles isNil

ifTrue: [dicoModèles := Dictionary new]

ifFalse: [dicoModèles at: t infinitif put: t].

numModèles isNil

ifTrue: [numModèles := Dictionary new]

ifFalse: [numModèles at: t numéro put: t].

"***initialisation du champ pPassé ***"

t pPassé: ' ................'.

"***initialisation du champ auxiliaire ***"

t auxiliaire: 'avoir'.

^t! !

w.

t tabPrésent: Dictionary new.

t tabFutur: Dictionary new.

t tabImparfait: Dictionary new.

t tabPasséSimple: Dictionary new.

t tabSubjPrésent: Dictionary new.

t tabSubjImparfait: Dictionary new.

t tabCondPrésent: Dictionary new.

t tabImpératif: Dictionary new.

t listeVerbes: Dictionary new.

t listeVerbesAff: Dictionary new.

t pronoms: #('je' 'tu' 'elle' 'il' 'nous' 'vous' 'elles' 'ils' ) asOrderedCollection.

"***initialisation du champ infinitif***"

inf := DialogView request: 'infinitif du modèle?'.

inf = ''

ifTrue: [t infinitif: 'xxxxxxx']