private bool CreateSingleTag(TaggingHintKey hintKey, TagTreePointer tagPointer) { if (hintKey.IsFinished()) { ILog logger = LogManager.GetLogger(typeof(iText.Layout.Tagging.LayoutTaggingHelper)); logger.Error(iText.IO.LogMessageConstant.ATTEMPT_TO_CREATE_A_TAG_FOR_FINISHED_HINT); return(false); } if (IsNonAccessibleHint(hintKey)) { // try move pointer to the nearest accessible parent in case any direct content will be // tagged with this tagPointer TaggingHintKey parentTagHint = GetAccessibleParentHint(hintKey); context.GetWaitingTagsManager().TryMovePointerToWaitingTag(tagPointer, parentTagHint); return(false); } WaitingTagsManager waitingTagsManager = context.GetWaitingTagsManager(); if (!waitingTagsManager.TryMovePointerToWaitingTag(tagPointer, hintKey)) { IAccessibleElement modelElement = hintKey.GetAccessibleElement(); TaggingHintKey parentHint = GetAccessibleParentHint(hintKey); int ind = -1; if (parentHint != null) { // if parent tag hasn't been created yet - it's ok, kid tags will be moved on it's creation if (waitingTagsManager.TryMovePointerToWaitingTag(tagPointer, parentHint)) { IList <TaggingHintKey> siblingsHint = GetAccessibleKidsHint(parentHint); int i = siblingsHint.IndexOf(hintKey); ind = GetNearestNextSiblingTagIndex(waitingTagsManager, tagPointer, siblingsHint, i); } } tagPointer.AddTag(ind, modelElement.GetAccessibilityProperties()); if (hintKey.GetOverriddenRole() != null) { tagPointer.SetRole(hintKey.GetOverriddenRole()); } waitingTagsManager.AssignWaitingState(tagPointer, hintKey); IList <TaggingHintKey> kidsHint = GetAccessibleKidsHint(hintKey); foreach (TaggingHintKey kidKey in kidsHint) { MoveKidTagIfCreated(hintKey, kidKey); } return(true); } return(false); }
public virtual void FinishTaggingHint(IPropertyContainer hintOwner) { TaggingHintKey rendererKey = GetHintKey(hintOwner); // artifact is always finished if (rendererKey == null || rendererKey.IsFinished()) { return; } if (rendererKey.IsElementBasedFinishingOnly() && !(hintOwner is IElement)) { // avoid auto finishing of hints created based on IElements return; } if (!IsNonAccessibleHint(rendererKey)) { IAccessibleElement modelElement = rendererKey.GetAccessibleElement(); String role = modelElement.GetAccessibilityProperties().GetRole(); if (rendererKey.GetOverriddenRole() != null) { role = rendererKey.GetOverriddenRole(); } IList <ITaggingRule> rules = taggingRules.Get(role); bool ruleResult = true; if (rules != null) { foreach (ITaggingRule rule in rules) { ruleResult = ruleResult && rule.OnTagFinish(this, rendererKey); } } if (!ruleResult) { return; } } rendererKey.SetFinished(); }