/// <summary> /// Constructs a Phrase with a certain Chunk and a certain leading. /// </summary> /// <param name="leading">the leading</param> /// <param name="chunk">a Chunk</param> public Phrase(float leading, Chunk chunk) { this.leading = leading; base.Add(chunk); font = chunk.Font; hyphenation = chunk.GetHyphenation(); }
// overriding some of the ArrayList-methods /// <summary> /// Adds a Chunk, an Anchor or another Phrase /// to this Phrase. /// </summary> /// <param name="index">index at which the specified element is to be inserted</param> /// <param name="o">an object of type Chunk, Anchor, or Phrase</param> public virtual void Add(int index, Object o) { if (o == null) { return; } try { IElement element = (IElement)o; if (element.Type == Element.CHUNK) { Chunk chunk = (Chunk)element; if (!font.IsStandardFont()) { chunk.Font = font.Difference(chunk.Font); } if (hyphenation != null && chunk.GetHyphenation() == null && !chunk.IsEmpty()) { chunk.SetHyphenation(hyphenation); } base.Insert(index, chunk); } else if (element.Type == Element.PHRASE || element.Type == Element.ANCHOR || element.Type == Element.ANNOTATION || element.Type == Element.TABLE || // line added by David Freels element.Type == Element.YMARK || element.Type == Element.MARKED) { base.Insert(index, element); } else { throw new Exception(element.Type.ToString()); } } catch (Exception cce) { throw new Exception("Insertion of illegal Element: " + cce.Message); } }
/// <summary> /// Adds a Chunk. /// </summary> /// <remarks> /// This method is a hack to solve a problem I had with phrases that were split between chunks /// in the wrong place. /// </remarks> /// <param name="chunk">a Chunk</param> /// <returns>a bool</returns> protected bool AddChunk(Chunk chunk) { Font f = chunk.Font; String c = chunk.Content; if (font != null && !font.IsStandardFont()) { f = font.Difference(chunk.Font); } if (Count > 0 && !chunk.HasAttributes()) { try { Chunk previous = (Chunk)this[Count - 1]; if (!previous.HasAttributes() && (f == null || f.CompareTo(previous.Font) == 0) && previous.Font.CompareTo(f) == 0 && !"".Equals(previous.Content.Trim()) && !"".Equals(c.Trim())) { previous.Append(c); return(true); } } catch { } } Chunk newChunk = new Chunk(c, f); newChunk.Attributes = chunk.Attributes; if (hyphenation != null && newChunk.GetHyphenation() == null && !newChunk.IsEmpty()) { newChunk.SetHyphenation(hyphenation); } base.Add(newChunk); return(true); }
/// <summary> /// Constructs a Phrase with a certain Chunk. /// </summary> /// <param name="chunk">a Chunk</param> public Phrase(Chunk chunk) { base.Add(chunk); font = chunk.Font; hyphenation = chunk.GetHyphenation(); }