Separate IPA

by Daniel Cheung

HTML

<label for="input">IPA inputs</label>
<textarea id="input"></textarea>

<label for="vowels">Vowels</label>
<textarea id="vowels"></textarea>

<button type="button" id="btn">
Run
</button>

<div id="inter1"></div>
<hr>
<div id="inter2"></div>

JavaScript

const input = document.getElementById('input')
const vowelsInput = document.getElementById('vowels')
const inter1 = document.getElementById('inter1')
const inter2 = document.getElementById('inter2')
const btn = document.getElementById('btn')

function run() {
  const x = input.value
  const v = vowelsInput.value.split(/ |\n/).filter(x => x != '').join('|')

  const regex = x => new RegExp(`(.+?)(?:(${x})(\\D+)?)?(\\d+)`)
  const regexC = x => new RegExp(`(.+?)(?:((?:${x})\\D*))?(\\d+)`)

  const words = x.split(/ |\n/).filter(x => x!= '').map(x => x.match(regex(v))).map(([,...x]) => x)
  const wordsC = x.split(/ |\n/).filter(x => x!= '').map(x => x.match(regexC(v))).map(([,...x]) => x)

  inter1.innerText = wordsC.map(x => x.toString()).join('\n')
  
  const initials = new Set(words.map(([x,..._]) => x))
  const medials = new Set(words.map(([, x,..._]) => x))
  const finals = new Set(words.map(([,, x,..._]) => x))
  
  const initialsC = new Set(wordsC.map(([x,..._]) => x))
  const finalsC = new Set(wordsC.map(([, x,..._]) => x))
  
  /* const out = `
  <h2>Initials</h2> <pre>${[...initials].join('\n')}</pre>
  <h2>Medials</h2> <pre>${[...medials].join('\n')}</pre>
  <h2>Finals</h2> <pre>${[...finals].join('\n')}</pre>
  ` */
  const out = `
  <h2>Initials</h2> <pre>${[...initialsC].join('\n')}</pre>
  <h2>Finals</h2> <pre>${[...finalsC].join('\n')}</pre>
  `
  
  inter2.innerHTML = out
}

btn.addEventListener('click', run)