private void SetOffsets(Match offsetMatch) { var offset1 = offsetMatch.Groups["offset1"].Value; var offset2 = offsetMatch.Groups["offset2"].Value; var flip = false; if (offset1.ToLower() == "top" || offset1.ToLower() == "bottom" || offset2.ToLower() == "right" || offset2.ToLower() == "left") flip = true; var offset1Position = ",top,bottom,right,left,center".IndexOf(offset1.ToLower()) > 0 ? ParseStringOffset(offset1) : ParseNumericOffset(offset1); var offset2Position = ",top,bottom,right,left,center".IndexOf(offset2.ToLower()) > 0 ? ParseStringOffset(offset2) : ParseNumericOffset(offset2); if (flip) { if(offset2Position.PositionMode != PositionMode.Percent || offset2Position.Offset > 0) XOffset = offset2Position; if(offset1Position.PositionMode != PositionMode.Percent || offset1Position.Offset > 0) YOffset = offset1Position; } else { if(offset1Position.PositionMode != PositionMode.Percent || offset1Position.Offset > 0) XOffset = offset1Position; if(offset2Position.PositionMode != PositionMode.Percent || offset2Position.Offset > 0) YOffset = offset2Position; } }
private Position ParseStringOffset(string offsetString) { var offset = new Position {PositionMode = PositionMode.Direction}; Direction direction; Enum.TryParse(offsetString, true, out direction); offset.Direction = direction; return offset; }
public BackgroundImageClass(string originalClassString, string parentCssUrl) { var offsetExplicitelySet = new bool[2]; OriginalClassString = originalClassString; var match = Regex.ImageUrlPattern.Match(originalClassString); if (match.Success) { OriginalImageUrl = match.Groups["url"].Value.Replace("'", "").Replace("\"", "").Trim(); if (OriginalImageUrl.Length > 0) { ImageUrl = RelativeToAbsoluteUtility.ToAbsolute(parentCssUrl, OriginalImageUrl); OriginalClassString = OriginalClassString.Replace(OriginalImageUrl, ImageUrl); } } var repeatMatch = Regex.RepeatPattern.Matches(originalClassString); if(repeatMatch.Count > 0) { Repeat = (RepeatStyle) Enum.Parse(typeof(RepeatStyle), repeatMatch[repeatMatch.Count-1].Value.Replace("-",""), true); } var widthMatch = Regex.WidthPattern.Matches(originalClassString); if (widthMatch.Count > 0) Width = Int32.Parse(widthMatch[widthMatch.Count - 1].Groups["width"].Value); var heightMatch = Regex.HeightPattern.Matches(originalClassString); if (heightMatch.Count > 0) Height = Int32.Parse(heightMatch[heightMatch.Count - 1].Groups["height"].Value); if(Width != null || Height != null) { var paddingMatches = Regex.PaddingPattern.Matches(originalClassString); if (paddingMatches.Count > 0) { var padVals = new int[4]; foreach (var pads in from Match paddingMatch in paddingMatches select GetPadding(paddingMatch)) { if (pads[0] != null) padVals[0] = (int)pads[0]; if (pads[1] != null) padVals[1] = (int)pads[1]; if (pads[2] != null) padVals[2] = (int)pads[2]; if (pads[3] != null) padVals[3] = (int)pads[3]; } if(Width != null) { if (padVals[1] < 0 || padVals[3] < 0) Width = null; else Width += (padVals[1] + padVals[3]); } if (Height != null) { if (padVals[0] < 0 || padVals[2] < 0) Height = null; else Height += (padVals[0] + padVals[2]); } } } var offsetMatches = Regex.OffsetPattern.Matches(originalClassString); if (offsetMatches.Count > 0) { foreach (Match offsetMatch in offsetMatches) SetOffsets(offsetMatch, offsetExplicitelySet); } if(XOffset.PositionMode == PositionMode.Direction && !offsetExplicitelySet[1]) YOffset = new Position(){PositionMode = PositionMode.Direction}; if (YOffset.PositionMode == PositionMode.Direction && !offsetExplicitelySet[0]) XOffset = new Position() { PositionMode = PositionMode.Direction }; }
private Position ParseNumericOffset(string offsetString) { var offset = new Position(); if (string.IsNullOrEmpty(offsetString)) return offset; if (offsetString.Length > 2 && "|in|cm|mm|em|ex|pt|pc".IndexOf(offsetString.Substring(offsetString.Length-2,2).ToLower()) > -1) return offset; var trim = 0; if (offsetString.EndsWith("%")) { trim = 1; offset.PositionMode = PositionMode.Percent; } else offset.PositionMode = PositionMode.Unit; if (offsetString.ToLower().EndsWith("px")) trim = 2; int units; Int32.TryParse(offsetString.Substring(0, offsetString.Length - trim), out units); offset.Offset = units; return offset; }
private void SetOffsets(Match offsetMatch, bool[] offsetExplicitelySet) { var offset1 = offsetMatch.Groups["offset1"].Value; var offset2 = offsetMatch.Groups["offset2"].Value; var flip = false; if (offset1.ToLower() == "top" || offset1.ToLower() == "bottom" || offset2.ToLower() == "right" || offset2.ToLower() == "left") flip = true; var offset1Position = ",top,bottom,right,left,center".IndexOf(offset1.ToLower()) > 0 ? ParseStringOffset(offset1) : ParseNumericOffset(offset1); var offset2Position = ",top,bottom,right,left,center".IndexOf(offset2.ToLower()) > 0 ? ParseStringOffset(offset2) : ParseNumericOffset(offset2); if (flip) { if(offset2Position.PositionMode != PositionMode.Percent || offset2Position.Offset > 0) XOffset = offset2Position; if(offset1Position.PositionMode != PositionMode.Percent || offset1Position.Offset > 0) YOffset = offset1Position; if (offset1.Length > 0) offsetExplicitelySet[1] = true; if (offset2.Length > 0) offsetExplicitelySet[0] = true; } else { if(offset1Position.PositionMode != PositionMode.Percent || offset1Position.Offset > 0) XOffset = offset1Position; if(offset2Position.PositionMode != PositionMode.Percent || offset2Position.Offset > 0) YOffset = offset2Position; if (offset1.Length > 0) offsetExplicitelySet[0] = true; if (offset2.Length > 0) offsetExplicitelySet[1] = true; } Important = offsetMatch.ToString().ToLower().Contains("!important"); }