Exemple #1
0
		private void WriteLexReference(TextWriter w, ILexReference lref, ICmObject lexItem)
		{
			var slr = new SingleLexReference(lref, lref.TargetsRS[0].Hvo);
			var nMappingType = slr.MappingType;
			var hvoOpen = lexItem.Hvo;
			for (var i = 0; i < lref.TargetsRS.Count; i++)
			{
				var target = lref.TargetsRS[i];
				// If the LexReference vector element is the currently open object, ignore
				// it unless it's a sequence type relation.
				if (nMappingType != (int)LexRefTypeTags.MappingTypes.kmtSenseSequence &&
					nMappingType != (int)LexRefTypeTags.MappingTypes.kmtEntrySequence &&
					nMappingType != (int)LexRefTypeTags.MappingTypes.kmtEntryOrSenseSequence)
				{
					if (target.Hvo == hvoOpen)
						continue;
				}
				slr.CrossRefHvo = target.Hvo;
				w.Write("<relation");
				WriteLiftDates(w, lref);
				var typeName = slr.TypeName((int)SpecialWritingSystemCodes.BestAnalysisOrVernacular, lexItem.Hvo);
				w.Write(" type=\"{0}\"", MakeSafeAndNormalizedAttribute(typeName));
				w.Write(" ref=\"{0}\"", XmlUtils.MakeSafeXmlAttribute(slr.RefLIFTid));
				var refOrder = slr.RefOrder;
				if (!String.IsNullOrEmpty(refOrder))
					w.Write(" order=\"{0}\"", refOrder);
				var residue = slr.LiftResidueContent;
				if (String.IsNullOrEmpty(residue))
				{
					w.WriteLine("/>");
				}
				else
				{
					w.WriteLine(">");
					w.Write(residue);
					w.WriteLine("</relation>");
				}

				// If this is a tree type relation, show only the first element if the
				// currently open object is not the first element.
				if (nMappingType == (int)LexRefTypeTags.MappingTypes.kmtSenseTree ||
					nMappingType == (int)LexRefTypeTags.MappingTypes.kmtEntryTree ||
					nMappingType == (int)LexRefTypeTags.MappingTypes.kmtEntryOrSenseTree)
				{
					if (hvoOpen != lref.TargetsRS[0].Hvo)
						break;
				}
			}
		}
Exemple #2
0
		/// <summary>
		/// Process the vector of objects targeted by a LexReference object.
		/// </summary>
		/// <param name="rghvo">vector of database object ids</param>
		/// <param name="currentObject">current CmObject (a LexReference)</param>
		/// <param name="contentsStream">output stream wrapper</param>
		/// <param name="classNode">XML descriptor of how to output each object</param>
		protected void ProcessSingleLexReferences(int[] rghvo, ICmObject currentObject,
			TextWriter contentsStream, XmlNode classNode)
		{
			Debug.Assert(rghvo.Rank == 1);
			SingleLexReference slr = new SingleLexReference(currentObject, rghvo[0]);
			int nMappingType = slr.MappingType;
			int hvoOpen = m_openForRefStack.Peek();
			for (int i = 0; i < rghvo.Length; ++i)
			{
				// If the LexReference vector element is the currently open object, ignore
				// it unless it's a sequence type relation.
				if (nMappingType != (int)LexRefTypeTags.MappingTypes.kmtSenseSequence &&
					nMappingType != (int)LexRefTypeTags.MappingTypes.kmtEntrySequence &&
					nMappingType != (int)LexRefTypeTags.MappingTypes.kmtEntryOrSenseSequence)
				{
					if (rghvo[i] == hvoOpen)
						continue;
				}
				slr.CrossRefHvo = rghvo[i];
				DoChildren(contentsStream, slr, classNode, null);

				// If this is a tree type relation, show only the first element if the
				// currently open object is not the first element.
				if (nMappingType == (int)LexRefTypeTags.MappingTypes.kmtSenseTree ||
					nMappingType == (int)LexRefTypeTags.MappingTypes.kmtEntryTree ||
					nMappingType == (int)LexRefTypeTags.MappingTypes.kmtEntryOrSenseTree)
				{
					if (hvoOpen != rghvo[0])
						break;
				}
			}
		}