package divconq.lang.chars;

import divconq.util.StringUtil;

/**
 * Take English words and place them in reverse order, not to simulate RTL reading so much as to test that
 * dictionary tokens will work as desired when used in a non-ltr settings. 
 * 
 * @author Andy
 *
 */
public class RtlEnglish {
	/**
	 * Translate test in English to Rtl-English  
	 * 
	 * @param sText text to translate
	 * @return translated text
	 */
	public static String translate(String sText) {
		if (StringUtil.isEmpty(sText))
			return null;

		   String sRtlEn = "";    // translation result
		   String sLine = "";        // Line by line translation for multiple lines (text area)
		   String sWord = "";        // Current word being built & xlated (or separator)
		   boolean bWord = true;        // Word/Separator mode flag
		   char sChar = ' ';        // Current character from text being xlated

		   for (int iChar = 0; iChar < sText.length(); ++iChar) {

		      // The null at the end of the text signals final end of text/word

		      sChar = sText.charAt (iChar);  // Get the next character

		      if ((sChar >= 'A' && sChar <= 'Z') ||
		            (sChar >= 'a' && sChar <= 'z') ||
		            (sChar == '\'' && bWord && StringUtil.isNotEmpty(sWord))) {  // If alphabetic character

		         if (!bWord) {  // If last not a word, then must be non-word/separator
		            sLine = sWord + sLine;  // Append punctuation & whitespace to line
		            sWord = "";  // Clear word text
		            bWord = true;  // We're working on a real word
		         }

		         sWord += sChar;  // Append alpha character to word
		      } 
		      else {  // A non-alpha character
		         if (bWord && StringUtil.isNotEmpty(sWord)) {  // If word mode and a word was found
		            sLine = sWord + sLine;  // Append translated word to line
		            sWord = "";  // Clear word text
		         }

		         sWord += sChar;  // Build punctuation, symbol & whitespace "word"
		         bWord = false;  // Switch to non-word/separator mode

		         if (sChar == '\r' || sChar == '\n') {  // If end of line
		            sRtlEn += sLine + sWord;  // Append line and word to result
		            sLine = "";  // Clear line text
		            sWord = "";  // Clear word text
		         }
		         /* TODO improve someday so it comes out nicer with some punc symbols
		         else if (sChar == ':' || sChar == '.' || sChar == '?' || sChar == ' ') {  // If colon, treat special and append immediately
			            sLine = sWord + sLine;  // Append immediately
			            sWord = "";  // Clear word text
			     }
			     */
		      }

		   }  // for

		   return sRtlEn + sWord + sLine;  // Append final line and word to result
	}
}
