1
22
23 package com.liferay.util.jazzy;
24
25 import com.swabunga.spell.engine.Word;
26 import com.swabunga.spell.event.SpellCheckEvent;
27 import com.swabunga.spell.event.SpellCheckListener;
28
29 import java.util.ArrayList;
30 import java.util.Iterator;
31 import java.util.List;
32
33
39 public class BasicSpellCheckListener implements SpellCheckListener {
40
41 public BasicSpellCheckListener(String text) {
42 _text = text;
43 _textCharArray = text.toCharArray();
44 _invalidWords = new ArrayList<InvalidWord>();
45 }
46
47 public void spellingError(SpellCheckEvent event) {
48 List<String> suggestions = new ArrayList<String>();
49
50 Iterator<Word> itr = event.getSuggestions().iterator();
51
52 while (itr.hasNext()) {
53 Word word = itr.next();
54
55 suggestions.add(word.getWord());
56 }
57
58 int pos = event.getWordContextPosition();
59
60 if (pos >= 0) {
61 if ((pos == 0) ||
62 ((pos > 0) &&
63 (!_isInsideHtmlTag(pos)) &&
65 (_text.charAt(pos - 1) != '&') &&
66 (event.getInvalidWord().length() > 1))) {
67
68 _invalidWords.add(
69 new InvalidWord(
70 event.getInvalidWord(), suggestions,
71 event.getWordContext(), pos));
72 }
73 }
74 }
75
76 public List<InvalidWord> getInvalidWords() {
77 return _invalidWords;
78 }
79
80 private boolean _isInsideHtmlTag(int pos) {
81 boolean insideHtmlTag = false;
82
83 for (int i = pos; i >= 0; i--) {
84 if (_textCharArray[i] == '<') {
85 insideHtmlTag = true;
86
87 break;
88 }
89 else if (_textCharArray[i] == '>') {
90 break;
91 }
92 }
93
94 if (insideHtmlTag) {
95 for (int i = pos; i < _textCharArray.length; i++) {
96 if (_textCharArray[i] == '<') {
97 insideHtmlTag = false;
98
99 break;
100 }
101 else if (_textCharArray[i] == '>') {
102 break;
103 }
104 }
105 }
106
107 return insideHtmlTag;
108 }
109
110 private String _text;
111 private char[] _textCharArray;
112 private List<InvalidWord> _invalidWords;
113
114 }