// note that addFrontModifier, addPostModifier, addPreModifier are inherited // from PhraseElement // likewise getFrontModifiers, getPostModifiers, getPreModifiers /** * Add a modifier to a clause Use heuristics to decide where it goes * * @param modifier */ public override void addModifier(object modifier) { // adverb is frontModifier if sentenceModifier // otherwise adverb is preModifier // string which is one lexicographic word is looked up in lexicon, // above rules apply if adverb // Everything else is postModifier if (modifier == null) { return; } // get modifier as NLGElement if possible INLGElement modifierElement = null; if (modifier is INLGElement) { modifierElement = (INLGElement)modifier; } else if (modifier is string) { var modifierString = (string)modifier; if (modifierString.length() > 0 && !modifierString.contains(" ")) { modifierElement = getFactory().createWord(modifier, new LexicalCategory_ANY()); } } // if no modifier element, must be a complex string if (modifierElement == null) { addPostModifier((string)modifier); return; } // AdvP is premodifer (probably should look at head to see if // sentenceModifier) if (modifierElement is AdvPhraseSpec) { addPreModifier(modifierElement); return; } // extract WordElement if modifier is a single word WordElement modifierWord = null; if (modifierElement != null && modifierElement is WordElement) { modifierWord = (WordElement)modifierElement; } else if (modifierElement != null && modifierElement is InflectedWordElement) { modifierWord = ((InflectedWordElement)modifierElement) .getBaseWord(); } if (modifierWord != null && (modifierWord.getCategory().enumType == (int)LexicalCategoryEnum.ADVERB)) { // adverb rules if (modifierWord .getFeatureAsBoolean(LexicalFeature.SENTENCE_MODIFIER)) { addFrontModifier(modifierWord); } else { addPreModifier(modifierWord); } return; } // default case addPostModifier(modifierElement); }