// PB General rules for vowels:
// Short vowels
// ACC: Short "pille" [p?el@-]
// AC[V]: Short "piler" [p?ilV]
// A[N]: Short "bange" [b?AN@-]
// Long vowels
// A + group #@ OR group #e: Long "ae" "aer" [&:@-]
// AC + group #@ OR group #e: Long "pile" [pi:l@-]
// AC[i]: Long "smidig" [smi:Di]

phoneme @
  vowel starttype #@ endtype #@
  unstressed
  length 60
  FMT(vowel/@_3)
endphoneme

phoneme @-   //  very short schwa
  vowel starttype #@  endtype #@
  unstressed nonsyllabic
  ipa ə
  IF nextPhW(*) OR nextPhW(r) THEN
    ipa NULL   // @-* is used to make 'r'
  ENDIF
  length 40
  FMT(vowel/@-)
endphoneme

// ToDo: change [@] to [a#] if adjacent to [r] or [R]
phoneme 3
  vowel starttype #a endtype #a
  unstressed
  length 40
  FMT(vowel/a#_3)
endphoneme

// PB sort of schwa [ɐ] (0250+032F)
// "spurgt" [sp'o3-d] – ipa [spˈoɐ̯d]
phoneme 3-    // used for 'r' after a vowel (to create a diphthong)
  liquid
  lengthmod 7
  ipa ɐ̯
    FMT(r/a_)
endphoneme

phoneme i
  vowel starttype #i endtype #i
  length 90 //150
// PB long vowel followed by consonant and certain vowels "gide"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
	length 150
ENDIF
// "gider" TEST
IF nextPhW(D) AND next2PhW(V) OR next2PhW(?V) THEN
	length 90
ENDIF
// PB long vowel followed by certain vowels - "pigen" [p'i@-n]
IF nextPhW(#@) OR nextPhW(#e) THEN
	length 150
ENDIF
// Only this vowel (in this case [i])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
	length 150
ENDIF
// This vowel is word end - longer because it sounds too short
// "sig", "si"
IF thisPh(isWordEnd) THEN
	length 120
ENDIF
// "vilje" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
// PB "tie", "stige", "krige" vowel + vowel: extra length
// What is causing this very short [i] in words with final [@-]?
// NOT "galleriet" [g,?&lVR'i@-D] NOT "krigen" [kR'i@-n]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) AND NOT next2PhW(n) THEN
	length 240
ENDIF
  FMT(vowel/i_4)
endphoneme

// PB short i
// sviret vs. svirret
phoneme ?i
  vowel starttype #i endtype #i
  length 90
  IfNextVowelAppend(;)
  FMT(vowel/i_4)
endphoneme

// PB English i - Tim
phoneme I
  vowel  starttype #i  endtype #i
  length 130
  IfNextVowelAppend(;)
  FMT(vowel/ii_2)
endphoneme

phoneme e
  vowel starttype #e endtype #e
  length 90 //150
// "delte", "mente"
IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@) THEN
	length 150
ENDIF
// PB "ring", "ringe"
IF nextPhW(N) THEN
	length 90
ENDIF
// PB "enig", "enige", "evig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
	length 150
ENDIF
// Only "e"
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
	length 150
ENDIF
// "nedladende" [n'eDl&D@-n@-] - before 2 consonants: short
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
  FMT(vowel/e)
endphoneme

// PB short e
// "skille" vs. "skele", "pille" vs. "pile"
phoneme ?e
  vowel starttype #e endtype #e
  length 90
  FMT(vowel/e)
endphoneme

phoneme E
  vowel starttype #e endtype #e
  length 90 //150
// "værelse", "breve"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN
//	length 150
ENDIF
// "ræve"
IF nextVowel(#@) OR nextVowel(#e) THEN
	length 150
ENDIF
// "ære", "kærester", "ærefrygt" - longer E
IF nextPhW(V) THEN
	length 180
ENDIF
// Only the letter "æ" - long
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
	length 150
ENDIF
// "stædig" [st'EDi] long
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
	length 150
ENDIF
// "længe" - short - 2 consonants => 1 consonant
IF nextPhW(N) THEN
	length 90
ENDIF
// "værelse"  [v'E3-Vls@_!]
IF nextPhW(3-) AND next2PhW(V) THEN
	length 90
ENDIF
// "mælkebøtte" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
  FMT(vowel/e_mid2)
endphoneme

// PB short E
// "læsse" vs. "læse"
phoneme ?E
  vowel starttype #e endtype #e
  length 90
// PB "færre" [f'?EV] - a bit longer because og the missing [ɐ] [ˈfæɐ̯ʌ]
// Changed now [f'?E3-V] but it won't do any harm
IF nextPhW(V) THEN
	length 120
ENDIF
  FMT(vowel/e_mid2)
endphoneme

phoneme &
  vowel starttype #e endtype #e
  ipa a
  length 90 //150
// "same", "sale", "bade" - consonant + gooup #e or group #@: long
IF next2PhW(#@) OR next2PhW(#e) THEN
	length 150
ENDIF
// ThisPh + gooup #e or group #@
// "ae", "aer" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN
	length 240
ENDIF
// This vowel is word end - longer because it sounds too short
// "ja", "Omaha"
IF thisPh(isWordEnd) THEN
	length 120
ENDIF
// Only this vowel (in this case [&])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) OR prevPhW(_) THEN
	length 150
ENDIF
// "stadig" [st&Di], "stadigt" [st&Dit]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
	length 180
ENDIF
// "Alfie", "alfer" - short before 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
  FMT(vowel/ee_2)
endphoneme

// PB Short &
// e.g. the last a in "staldkarl"
// "sale" vs. "sal"
phoneme ?&
  ipa a
  vowel starttype #e endtype #e
   length 90
  FMT(vowel/ee_2)
endphoneme

// PB added for the æ in "dræbt"
phoneme &#
  vowel starttype  #e endtype #e
    length 120
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
	FMT(vowel/&)
endphoneme

// PB short &#
// "revl" vs. "tremme"
phoneme ?&#
  vowel starttype  #e endtype #e
    length 90
		FMT(vowel/&)
endphoneme

//phoneme a
//  vowel starttype #a endtype #a
//  length 90 //150
//IF nextPhW(#@) OR nextPhW(#e) THEN
//	length 150
//ENDIF
//  FMT(vowel/a_2)
//endphoneme

// PB short (glottal) a
// "bragt"
//phoneme ?a
//  vowel starttype #a endtype #a
//  length 90
//  FMT(vowel/a_2)
//endphoneme

phoneme A // PB changed to a_8
  vowel starttype #a endtype #a
  length 90 //150
// PB long vowel followed by consonant and certain vowels - "drabelig"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
	length 150
ENDIF
// "far", "bastard" - a bit longer followed by [r]
IF nextPhW(r) AND nextPhW(isWordEnd) THEN
	length 120
ENDIF
// "bange" [bAN@-] - [N] = 2 consonants (ng) => short
IF nextPhW(N) THEN
	length 90
ENDIF
  FMT(vowel/a_8)
endphoneme

// PB short A
// "drab" vs. "drabelig"
phoneme ?A
  vowel starttype #a endtype #a
  length 90
// "straffeattest", "straffe", "rapid" - a bit longer after R
IF prevPhW(R) AND nextPhW(isNotVowel) AND next2PhW(isVowel) THEN
	length 110
ENDIF
  FMT(vowel/a_8)
endphoneme

phoneme u
  vowel starttype #u endtype #u
  length 90 //150
// Short vowel followed by consonant and NOT consonant + 3 or V or @
// "blus" vs. "bluse" and "bluser"
  IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
//   glstop
//   length 90
  ENDIF
// "suge", "uge", bluse
IF nextPhW(#e) OR nextPhW(#@) OR next2PhW(#e) OR next2PhW(#@)THEN
	length 150
ENDIF
// extra length followed by 3 or V or @
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
//	length 240
ENDIF
// "umulig"
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
  length 180
ENDIF
// Only "u"
IF thisPh(isWordEnd) AND thisPh(isWordStart) THEN
	length 150
ENDIF
  FMT(vowel/u_bck)
endphoneme

// PB glottal u
// "tude" vs. "tuden" - [tuD3] [t?uD@n]
phoneme ?u
  vowel starttype #u endtype #u
  length 90
  FMT(vowel/u_bck)
endphoneme

phoneme o
  vowel starttype #o endtype #o
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// "tro" 
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
	length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
// "modig" - long vowel after consonant + [i]
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) THEN
	length 150
ENDIF
  FMT(vowel/o_2)
endphoneme

// PB Short o
// "patron" vs. "kone"
phoneme ?o
  vowel starttype #o endtype #o
  length 95
  FMT(vowel/o_2)
endphoneme

phoneme O
  vowel starttype #o endtype #o
  length 90 // 150
// PB "sove", "sover" - consonant + #e or #@: long
IF next2PhW(#@) OR next2PhW(#e) THEN
	length 150
ENDIF
// PB "gået" - ThisPh + #e or #@
IF nextPhW(#e) OR nextPhW(#@) THEN
	length 150
ENDIF
// "rådig"
IF nextVowel(i) AND nextVowel(isFinalVowel) THEN
	length 180
ENDIF
  FMT(vowel/o_5)
endphoneme

// PB Experimental glottal O
// "toget" vs. "tåget"
phoneme ?O
  vowel starttype #o endtype #o
  length 90
  FMT(vowel/o_5)
endphoneme

phoneme V
  vowel starttype #@ endtype #@
  length 150
// "sport" [spV:t]
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPh(3) OR nextPh(V) OR nextPh(@) THEN
	length 150
ENDIF
// PB short V in "holder", "solder"
IF nextPhW(isNotVowel) AND next2Ph(V) THEN
	length 90
ENDIF
// PB "snorke", "snorker", årlig
IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN
	length 180
ENDIF
// "sove" [sVw3] - longer followed by w + 3
IF nextPhW(w) AND next2PhW(3) THEN
	length 220
ENDIF
  FMT(vowel/V_4)
endphoneme

// PB Short å
// "forstår" vs. "kåre"
phoneme ?V
  vowel starttype #@ endtype #@
  length 100
  FMT(vowel/V_4)
endphoneme

phoneme 0
  vowel starttype #o endtype #o
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
  FMT(vowel/oo_2)
endphoneme

// ?B short 0 "sukker"
phoneme ?0
  vowel starttype #o endtype #o
  length 90
  FMT(vowel/oo_2)
endphoneme

phoneme y
  vowel starttype #i endtype #i
// Length changed to short since most vowels are short.
// It's probably easier only to make rules for long vowels.
  length 90 //150

// PB long vowel followed by consonant and certain vowels
// "lyde", "lyder"
IF nextPhW(isNotVowel) AND next2PhW(#@) OR next2PhW(#e) THEN
	length 150
ENDIF
// Only this vowel (in this case [y])
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) AND thisPh(isWordStart) THEN
	length 150
ENDIF
// "dydig" [dyDi]
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
	length 150
ENDIF
// "syge" [sy3] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(#e) OR nextPhW(#@) AND NOT next2PhW(D) THEN
	length 200
ENDIF
// "tyve"
IF nextPhW(?u) AND next2PhW(@-) THEN
	length 150
ENDIF
  FMT(vowel/y)
endphoneme

// PB Short y
// "kylling" vs. "kyle", "krybbe" vs. "krybe"
phoneme ?y
  vowel starttype #i endtype #i
  length 90
  FMT(vowel/y)
endphoneme

phoneme Y
  vowel starttype #i endtype #i
  length 150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
  FMT(vowel/yy)
endphoneme

phoneme W
  vowel starttype #@ endtype #@
  length 99 //160
// "kløe" vowel + vowel: extra length
IF nextPhW(#@) OR nextPhW(#e) THEN
	length 220
ENDIF
// røde" W + 1 consonant + 3 or W or @
IF next2PhW(#@) OR next2PhW(#e) THEN
	length 160
ENDIF
// "røveri" TEST
IF next2PhW(V) OR next2PhW(?V) THEN
	length 90
ENDIF
// PB "nødig", "nødigt", "kølige"
IF nextVowel(i) THEN
	length 160
ENDIF
// "møve" [mWw@-]
IF nextPhW(w) AND nextVowel(@-) THEN
	length 160
ENDIF
// "børnebog"
IF nextPhW(r) AND next2PhW(n) AND nextVowel(@-) THEN
	length 150
ENDIF
  FMT(vowel/oe)
endphoneme

// PB short W
// "prøv" vs. "prøve"
phoneme ?W
  vowel starttype #@ endtype #@
  length 95
  FMT(vowel/oe)
endphoneme

// PB added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W#
  vowel starttype #@ endtype #@
  length 90 //150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
//   length 90
ENDIF
// PB long vowel followed by consonant and certain vowels
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(@) OR next2PhW(3) OR next2PhW(V) OR next2PhW(?V) THEN
	length 150
ENDIF
  FMT(vowel/V)
endphoneme

// PB short W#
// "rømme"
phoneme ?W#
  vowel starttype #@ endtype #@
  length 90
    FMT(vowel/V)
endphoneme

phoneme aI
  vowel starttype #a endtype #i
  length 300
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2Ph(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 150
ENDIF
// "dreje" [dR'aI@-_!]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 280
ENDIF
// PB "drej" vs. "dreje"
IF thisPh(isWordEnd) THEN
	length 140
ENDIF
// "lejde" [l'aId@-_!], "lejder" [l'aIdV_!]
IF nextPhW(isNotVowel) AND next2PhW(@-) OR next2PhW(V) THEN
	length 190
ENDIF
  FMT(vdiph/ai)
endphoneme


// CONSONANTS

// PB added l/3
phoneme l
  liquid
  lengthmod 7
  ChangePhoneme(l/3)
//  CALL base/l
endphoneme

phoneme l/3    // Replacement for [l/]
  liquid
  lengthmod 7

  IF nextPh(isVowel) THEN
//    ChangePhoneme(l)
  ENDIF

  PrevVowelEndings
    VowelEnding(l/l_@)
    VowelEnding(l/l_a)
    VowelEnding(l/l_e, -40)
    VowelEnding(l/l_i, -70)
    VowelEnding(l/l_o)
    VowelEnding(l/l_u, -70)
  EndSwitch

//  IF nextPh(isLiquid) THEN
//    FMT(l/_l)
//  ENDIF

  FMT(l/l_)
endphoneme

phoneme v        // approximant, not fricative
  import_phoneme base/v#
  voicingswitch f
endphoneme

// PB Actually a kind of schwa = [ɐ]? - "byder" [bˈyðɐʌ]
phoneme r    // used for 'r' after a vowel (to create a diphthong)
  liquid
  lengthmod 7
  ipa ɐ̯
  IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) AND NOT nextPhW(@-) THEN
    ChangePhoneme(R)
  ENDIF
  FMT(r/a_)
endphoneme

phoneme R
  lengthmod 6
  liquid
  ipa ʁ
  FMT(r/aa)
endphoneme

// don't weaken consonants at end of word or before a stop

phoneme s
  vls alv frc sibilant
  voicingswitch z
  lengthmod 3
  Vowelin  f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0  f2=1700 -300 250  f3=-100 80  rms=20

  IF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
    WAV(ufric/s!)
  ENDIF
  WAV(ufric/s)
endphoneme

phoneme p
  vls blb stop
  voicingswitch b
  lengthmod 7
  Vowelin  f1=0  f2=1000 -50 -100  f3=-200 80 amp=11
  Vowelout f1=0  f2=1000 -500 -350  f3=-300 80 rms=22

  IF nextPh(isPause2) THEN
    WAV(ustop/p_unasp)
  ELIF nextPh(r) THEN
    WAV(ustop/pr, 70)
  ELIF nextPh(R) OR nextPh(R2) THEN
    WAV(ustop/pr)
  ELIF nextPh(@-) THEN
    WAV(ustop/p_unasp)
  ELIF nextPh(l) THEN
    WAV(ustop/pl)
  ENDIF
  WAV(ustop/p)
endphoneme

phoneme t
  vls alv stop
  voicingswitch d
  lengthmod 7
  Vowelin f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0 f2=1700 -300 250  f3=-100 80  rms=20

  IF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
    WAV(ustop/tr)
  ENDIF
// "respekt"  [REsp'Egd]
  IF thisPh(isWordEnd) THEN
//	ChangePhoneme(d)
  ENDIF
  WAV(ustop/t, 90)
endphoneme

phoneme j
  liquid palatal
  lengthmod 7

  IF nextPhW(isVowel) THEN
    NextVowelStarts
      VowelStart(j/j@)
      VowelStart(j/ja)
      VowelStart(j/je,-35)
      VowelStart(j/ji)
      VowelStart(j/jo)
      VowelStart(j/ju)
    EndSwitch
Vowelout len=70
    VowelEnding(j/xj, -30)

    IF prevPh(isPause) THEN
      FMT(j/_j)
    ENDIF
  ELSE
    // no vowel follows
    Vowelout len=70
    FMT(j/j_)
  ENDIF
endphoneme