Libart's vector paths are built from the familiar PostScript opcodes such as moveto, lineto, and curveto. Paths can be composed of multiple closed sets of segments and thus have holes in them. Paths can also cross themselves any number of times.