Reset() public method

public Reset ( int ichMin, int ichLim ) : void
ichMin int
ichLim int
return void
Beispiel #1
0
        private static HashSet <string> GetOwnees(byte[] xmlBytes)
        {
            var ownees       = new HashSet <string>();
            var ichEnd       = xmlBytes.Length;
            var objsurBounds = new ElementBounds(xmlBytes, s_tagsObjsur);

            while (objsurBounds.IsValid)
            {
                var type = objsurBounds.GetAttributeValue(s_tAttr);
                if (type == "o")
                {
                    var guid = objsurBounds.GetAttributeValue(s_guidAttr);
                    if (!String.IsNullOrEmpty(guid))
                    {
                        ownees.Add(guid.ToLowerInvariant());
                    }
                }
                objsurBounds.Reset(objsurBounds.EndTagOffset, ichEnd);
            }
            return(ownees);
        }
		private static HashSet<string> GetOwnees(byte[] xmlBytes)
		{
			var ownees = new HashSet<string>();
			var ichEnd = xmlBytes.Length;
			var objsurBounds = new ElementBounds(xmlBytes, s_tagsObjsur);
			while (objsurBounds.IsValid)
			{
				var type = objsurBounds.GetAttributeValue(s_tAttr);
				if (type == "o")
				{
					var guid = objsurBounds.GetAttributeValue(s_guidAttr);
					if (!String.IsNullOrEmpty(guid))
						ownees.Add(guid.ToLowerInvariant());
				}
				objsurBounds.Reset(objsurBounds.EndTagOffset, ichEnd);
			}
			return ownees;
		}
		private static List<string> GetAppliesToObjsurGuids(byte[] xmlBytes)
		{
			var retval = new List<string>();
			var indirectBounds = new ElementBounds(xmlBytes, s_tagsCmIndirect);
			if (!indirectBounds.IsValid)
				return retval;
			var appliesToBounds = new ElementBounds(xmlBytes, s_tagsAppliesTo,
				indirectBounds.BeginTagOffset, indirectBounds.EndTagOffset);
			var ichNext = appliesToBounds.BeginTagOffset + s_tagsAppliesTo.BeginTag.Length;
			var objsurBounds = new ElementBounds(xmlBytes, s_tagsObjsur,
				appliesToBounds.BeginTagOffset, appliesToBounds.EndTagOffset);
			while (objsurBounds.IsValid)
			{
				var guid = GetGuid(xmlBytes, objsurBounds.BeginTagOffset, objsurBounds.EndTagOffset);
				if (!String.IsNullOrEmpty(guid))
					retval.Add(guid.ToLowerInvariant());
				objsurBounds.Reset(objsurBounds.EndTagOffset, appliesToBounds.EndTagOffset);
			}
			return retval;
		}
		private static void RemoveMismatchedAppliesToRefs(byte[] xmlBytes, ICollection<string> appliesToGuids)
		{
			var cmIndirectBounds = new ElementBounds(xmlBytes, s_tagsCmIndirect);
			if (!cmIndirectBounds.IsValid)
				return;
			var appliesToBounds = new ElementBounds(xmlBytes, s_tagsAppliesTo,
				cmIndirectBounds.BeginTagOffset, cmIndirectBounds.EndTagOffset);
			if (!appliesToBounds.IsValid)
				return;
			var objsurBounds = new ElementBounds(xmlBytes, s_tagsObjsur,
				appliesToBounds.BeginTagOffset, appliesToBounds.EndTagOffset);
			while (objsurBounds.IsValid)
			{
				var ichMin = objsurBounds.BeginTagOffset;
				var guid = objsurBounds.GetAttributeValue(s_guidAttr);
				if (!String.IsNullOrEmpty(guid))
					guid = guid.ToLowerInvariant();
				objsurBounds.Reset(objsurBounds.EndTagOffset, appliesToBounds.EndTagOffset);
				if (!String.IsNullOrEmpty(guid) && !appliesToGuids.Contains(guid))
				{
					var ichLim = objsurBounds.BeginTagOffset;
					if (ichLim < 0)
						ichLim = appliesToBounds.EndTagOffset;
					// Remove the <objsur> element by overwriting it with spaces.
					for (var i = ichMin; i < ichLim; ++i)
						xmlBytes[i] = 0x20;
				}
			}
		}
		private static List<string> GetParagraphContentRuns(byte[] xmlStTxtPara, out List<string> writingSystems)
		{
			var retval = new List<string>();
			writingSystems = new List<string>();
			var stTxtParaBounds = new ElementBounds(xmlStTxtPara, s_tagsStTxtPara);
			var contentsBounds = new ElementBounds(xmlStTxtPara, s_tagsContents,
				stTxtParaBounds.BeginTagOffset, stTxtParaBounds.EndTagOffset);
			var strBounds = new ElementBounds(xmlStTxtPara, s_tagsStr,
				contentsBounds.BeginTagOffset, contentsBounds.EndTagOffset);
			if (!strBounds.IsValid)
				return retval;
			var runBounds = new ElementBounds(xmlStTxtPara, s_tagsRun,
				strBounds.BeginTagOffset, strBounds.EndTagOffset);
			while (runBounds.IsValid)
			{
				var ws = runBounds.GetAttributeValue(s_wsAttr);
				writingSystems.Add(ws);
				var ichText = runBounds.EndOfStartTag + 1;	// move past the >
				var runText = Encoding.UTF8.GetString(xmlStTxtPara, ichText, runBounds.EndTagOffset - ichText);
				retval.Add(XmlUtils.DecodeXmlAttribute(runText));
				runBounds.Reset(runBounds.EndTagOffset, contentsBounds.EndTagOffset);
			}
			return retval;
		}
		private static List<XElement> GetAStrElements(byte[] xmlBytes, int ichMin, int ichLim)
		{
			var retval = new List<XElement>();
			var astrBounds = new ElementBounds(xmlBytes, s_tagsAStr, ichMin, ichLim);
			while (astrBounds.IsValid)
			{
				var astr = Encoding.UTF8.GetString(xmlBytes, astrBounds.BeginTagOffset, astrBounds.Length);
				var xAStr = XElement.Parse(astr);
				retval.Add(xAStr);
				astrBounds.Reset(astrBounds.EndTagOffset, ichLim);
			}
			return retval;
		}
		private static ElementBounds GetEnglishCommentBounds(byte[] xmlBytes, int ichMin, int ichLim)
		{
			var commentBounds = new ElementBounds(xmlBytes, s_tagsComment, ichMin, ichLim);
			if (!commentBounds.IsValid)
				return null;
			var astrBounds = new ElementBounds(xmlBytes, s_tagsAStr,
				commentBounds.BeginTagOffset, commentBounds.EndTagOffset);
			while (astrBounds.IsValid)
			{
				var ws = astrBounds.GetAttributeValue(s_wsAttr);
				if (ws == "en")
					return astrBounds;
				astrBounds.Reset(astrBounds.EndTagOffset, commentBounds.EndTagOffset);
			}
			return null;
		}