def nOrMoreColourStops(n=1): #if ri(0,1) == 1 or n == 1: # return rc(colourStop) #else: # return "".join((lambda: rc(colourStop))()+", " for x in range(0,ri(n,10))) + rc(colourStop) return "".join((lambda: rc(colourStop))() + ", " for x in range(0, ri(n, 10))) + rc(colourStop)
def gradient(): ret = "" if ri(0, 2) == 2: ret = "repeating-" return ret + rc((linearGradient, radialGradient))()
def linearGradient(): return "linear-gradient({}, {})".format( rc((angle(), "to " + rc((rc(("left", "right")), rc( ("top", "bottom")))))), nOrMoreColourStops(2))
def radialGradient(): return rc(radials)()
# Generate a series of colour stops def nOrMoreColourStops(n=1): #if ri(0,1) == 1 or n == 1: # return rc(colourStop) #else: # return "".join((lambda: rc(colourStop))()+", " for x in range(0,ri(n,10))) + rc(colourStop) return "".join((lambda: rc(colourStop))() + ", " for x in range(0, ri(n, 10))) + rc(colourStop) radials = ( lambda: "radial-gradient(at {}, {})".format(position( ), nOrMoreColourStops(2)), lambda: "radial-gradient({} {}, {})".format( rc((rc( ("circle", "ellipse")) + " " + rc(extents), rc(extents) + " " + rc( ("circle", "ellipse")))), rc( ("at " + position(), "")), nOrMoreColourStops(2)), lambda: "radial-gradient({} {}, {})".format( rc(("ellipse", rc((length(allowNeg=False) + " " + length(allowNeg=False), percent(allowNeg=False) + " " + percent(allowNeg=False))), rc((length(allowNeg=False) + " " + length(allowNeg=False), percent(allowNeg=False) + " " + percent(allowNeg=False))) + " ellipse", "ellipse", rc((length(allowNeg=False) + " " + length(allowNeg=False), percent(allowNeg=False) + " " + percent(allowNeg=False))))), rc(("at " + position(), "")), nOrMoreColourStops(2)), lambda: "radial-gradient({} {}, {})".format( rc((rc(("circle", length(allowNeg=False))), "circle " + length( allowNeg=False), length(allowNeg=False) + " circle")),
def position(): return rc(positions)()
#!/usr/bin/env python3 from common import percent, length, rc, ri positions = ( lambda: "{}".format( rc( ("left", "center", "right", "top", "bottom", percent(), length()) ) ), lambda: "{} {}".format( rc( ("left", "center", "right", percent(), length()) ), rc( ("top", "center", "bottom", percent(), length()) ) ), rc(( lambda: "{} {}".format( rc( ( "center", rc(("left","right")) ) ), rc( ( "", rc( ( percent(), length() ) ) ) ) ), lambda: "{} {}".format( rc( ( "center", rc(("top","bottom")) ) ), rc( ( "", rc( ( percent(), length() ) ) ) ) ) )) ) # Generate a position # TODO: Implement optional ordering of keywords # TODO: Investigate invalid generations for radial-gradient def position(): return rc(positions)()
def __str__(self): return rc(self.colours)()
class colourC(): # Mozilla specific colours taken from MDN moz = ("-moz-ButtonDefault", "-moz-ButtonHoverFace", "-moz-ButtonHoverText", "-moz-CellHighlight", "-moz-CellHighlightText", "-moz-Combobox", "-moz-ComboboxText", "-moz-Dialog", "-moz-DialogText", "-moz-dragtargetzone", "-moz-EvenTreeRow", "-moz-Field", "-moz-FieldText", "-moz-html-CellHighlight", "-moz-html-CellHighlightText", "-moz-MenuHover", "-moz-MenuHoverText", "-moz-MenuBarText", "-moz-MenuBarHoverText", "-moz-nativehyperlinktext", "-moz-OddTreeRow", "-moz-win-communicationstext", "-moz-win-mediatext") # 'Deprecated' colours taken from MDN deprecated = ("ActiveBorder", "ActiveCaption", "AppWorkspace", "Background", "ButtonFace", "ButtonShadow", "ButtonText", "CaptionText", "GrayText", "Highlight", "HighlightText", "InactiveBorder", "InactiveCaption", "InactiveCaptionText", "InfoBackground", "InfoText", "Menu", "MenuText", "Scrollbar", "ThreeDDarkShadow", "ThreeDFace", "ThreeDHighlight", "ThreeDLightShadow", "ThreeDShadow", "Window", "WindowFrame", "WindowText", "ButtonHighlight") # Named colours named = ("black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "orange", "aliceblue", "antiquewhite", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "grey", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "limegreen", "linen", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet", "wheat", "whitesmoke", "yellowgreen", "rebeccapurple") colours = (rc((lambda: "rgb({},{},{})".format( integer(), integer(), integer(), ), lambda: "rgb({},{},{})".format( percent(), percent(), percent(), ))), rc(( lambda: "rgba({},{},{},{})".format(integer(), integer(), integer(), number()), lambda: "rgba({},{},{},{})".format(percent(), percent(), percent(), number()), )), lambda: "hsl({},{},{})".format(number(), percent(), percent()), lambda: "hsla({},{},{},{})".format( number(), percent(), percent(), number(), ), lambda: hexcol(rc((3, 6))), lambda: rc(colourC.named), lambda: rc(colourC.deprecated), lambda: rc(colourC.moz), lambda: rc(("currentcolor", "transparent"))) # Generate a random colour def __str__(self): return rc(self.colours)()
def hexcol(n=6): return "#" + "".join(rc("ABCDEF") for j in range(0, n))