code: public List<SubtitleItem.Inner> createElementsList(String text,
  			String furigana, SubtitleItem item) {
  
  		ArrayList<SubtitleItem.Inner> list = new ArrayList<SubtitleItem.Inner>();
  		String kanjiChars = null;
  		String chars = null;
  		boolean hasKanji = false;
  		for (int i = 0; i < text.length(); i++) {
  			char c = text.charAt(i);
  			boolean isKanji = isKanjiChar(c);
  			// the second check is useful to process words with kanji and
  			// katakana
  			if (isKanji || furigana.indexOf(c) < 0) {
  				if (isKanji) {
  					// use furigana only if there is at least one kanji in the
  					// word
  					hasKanji = true;
  				}
  				if (chars != null) {
  					addText(list, chars);
  					chars = null;
  				}
  				if (kanjiChars == null) {
  					kanjiChars = Character.toString(c);
  				} else {
  					kanjiChars += c;
  				}
  			} else {
  				if (kanjiChars != null) {
  					addKanji(list, kanjiChars);
  					kanjiChars = null;
  				}
  				if (chars == null) {
  					chars = Character.toString(c);
  				} else {
  					chars += c;
  				}
  			}
  		}
  		if (kanjiChars != null) {
  			addKanji(list, kanjiChars);
  		}
  		if (hasKanji) {
  			if (chars != null) {
  				addText(list, chars);
  			}
  			furiganaToElements(new StringBuilder(furigana), list);
  			return list;
  		}
  		return null;
  	}
docs: TODO: better algorithm to assign furigana to parts of the word