public void CanParse() { Assert.Equal(Top | Left, CropAnchorHelper.Parse("tl")); Assert.Equal(Top | Right, CropAnchorHelper.Parse("tr")); Assert.Equal(Top, CropAnchorHelper.Parse("t")); Assert.Equal(Left, CropAnchorHelper.Parse("l")); Assert.Equal(Bottom, CropAnchorHelper.Parse("b")); Assert.Equal(Right, CropAnchorHelper.Parse("r")); Assert.Equal(Center, CropAnchorHelper.Parse("c")); // Full words Assert.Equal(Top, CropAnchorHelper.Parse("top")); Assert.Equal(Right, CropAnchorHelper.Parse("right")); Assert.Equal(Bottom, CropAnchorHelper.Parse("bottom")); Assert.Equal(Left, CropAnchorHelper.Parse("left")); }
// 100×100 // 100x100 // 100x100,contain // 100x100-c // resize(100,100,contain) public static ResizeTransform Parse(string segment) { int argStart = segment.IndexOf('(') + 1; if (argStart > 0) { segment = segment.Substring(argStart, segment.Length - argStart - 1); } int dashIndex = segment.IndexOf('-'); // {width}x{height}-{anchor} // e.g. 100x100-c if (dashIndex > -1) { return(new ResizeTransform( size: SizeHelper.Parse(segment.Substring(0, dashIndex)), anchor: CropAnchorHelper.Parse(segment.Substring(dashIndex + 1)) )); } else if (segment.IndexOf(',') > -1) { var args = ArgumentList.Parse(segment); Unit width = default; Unit height = default; ResizeFlags flags = default; CropAnchor? anchor = null; for (int i = 0; i < args.Length; i++) { ref Argument arg = ref args[i]; int xIndex = arg.Value.ToString().IndexOf('x'); if (i == 0 && xIndex > -1) { width = Unit.Parse(arg.Value.ToString().Substring(0, xIndex)); height = Unit.Parse(arg.Value.ToString().Substring(xIndex + 1)); continue; } if (i == 0 && width == default) { width = Unit.Parse(arg.Value.ToString()); } else if (i == 1 && height == default) { height = Unit.Parse(arg.Value.ToString()); } else { switch (arg.Name) { case "anchor": anchor = CropAnchorHelper.Parse(arg.Value.ToString()); break; case null: flags = ResizeFlagsHelper.Parse(arg.Value.ToString()); break; default: throw new Exception("Invalid resize argument:" + arg.Name); } } } return(new ResizeTransform(width, height, anchor, flags)); }