Leo Grace
Leo Grace

Reputation: 101

How do I convert double Latin letters?

How do I make sure that double letters are converted correctly? For example I want aa to become 2a instead of 1a1a.

var trans = {
  "a": "1a", 
  "aa": "2a",
  "e": "1e",
  "ee": "2e",
  "o": "1o",
  "oo": "2o",
}

function transliterate() {
  var latin = document.getElementById('latin').value;
  var result = '';
  var i;
  for (i = 0; i < latin.length; i++) {
    if (trans[ latin[i]] ) {
      result += trans[ latin[i]];
    }
  }
  document.getElementById('result').innerHTML = result;
  return false;
}

document.getElementById('latin').addEventListener('keyup', transliterate);
<input type="text" id="latin" />

<div id="result"></div>

Upvotes: 0

Views: 78

Answers (1)

Lajos Arpad
Lajos Arpad

Reputation: 76601

You will need to enforce your order of priority, like here:

var trans = {
  "a": "1a", 
  "aa": "2a",
  "e": "1e",
  "ee": "2e",
  "o": "1o",
  "oo": "2o",
}

let keys = ["aa", "ee", "oo", "a", "e", "o"];

function splitItems(input, index) {
    let temp = input.split(keys[index]);
    if (index + 1 === keys.length) return temp.join(trans[keys[index]]);
    let output = [];
    for (let item of temp) output.push(splitItems(item, index + 1));
    return output.join(trans[keys[index]]);
}

function transliterate() {
  var latin = splitItems(document.getElementById('latin').value, 0);
  document.getElementById('result').innerHTML = latin;
  return false;
}

document.getElementById('latin').addEventListener('keyup', transliterate);
<input type="text" id="latin" />

<div id="result"></div>

EDIT

To be clear, the test case has this result:

enter image description here

Upvotes: 2

Related Questions