summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMohamed Abdelnour <mohamed.k.abdelnour@gmail.com>2021-05-30 10:07:25 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2021-06-01 22:36:56 +0200
commit768189859ab7737dc5a071a4126f90ad944f99dd (patch)
tree0835587c86f498b7b6bf1777d0e8e922b3971522 /tests
parent6e5a2a5c519cd39eb0fcb673ecb6e19b1c955949 (diff)
Add Stylus syntax test file
Diffstat (limited to 'tests')
-rw-r--r--tests/syntax-tests/highlighted/Stylus/gradients.styl90
-rw-r--r--tests/syntax-tests/source/Stylus/LICENSE.md24
-rw-r--r--tests/syntax-tests/source/Stylus/gradients.styl90
3 files changed, 204 insertions, 0 deletions
diff --git a/tests/syntax-tests/highlighted/Stylus/gradients.styl b/tests/syntax-tests/highlighted/Stylus/gradients.styl
new file mode 100644
index 00000000..b9a083a1
--- /dev/null
+++ b/tests/syntax-tests/highlighted/Stylus/gradients.styl
@@ -0,0 +1,90 @@
+@import 'config'
+
+/*
+ * Implicit color stop position.
+ */
+
+pos-in-stops(i, stops)
+ len = length(stops)
+ if len - 1 == i
+ 100%
+ else if i
+ unit(i / len * 100, '%')
+ else
+ 0
+
+/*
+ * Normalize color stops:
+ *
+ * - (color pos) -> (pos color)
+ * - (color) -> (implied-pos color)
+ *
+ */
+
+normalize-stops(stops)
+ stops = clone(stops)
+ for stop, i in stops
+ if length(stop) == 1
+ color = stop[0]
+ stop[0] = pos-in-stops(i, stops)
+ stop[1] = color
+ else if typeof(stop[1]) == 'unit'
+ pos = stop[1]
+ stop[1] = stop[0]
+ stop[0] = pos
+ stops
+
+/*
+ * Join color stops with the given translation function.
+ */
+
+join-stops(stops, translate)
+ str = ''
+ len = length(stops)
+ for stop, i in stops
+ str += ', ' if i
+ pos = stop[0]
+ color = stop[1]
+ str += translate(color, pos)
+ unquote(str)
+
+/*
+ * Standard color stop.
+ */
+
+std-stop(color, pos)
+ '%s %s' % (color pos)
+
+/*
+ * Create a linear gradient with the given start position
+ * and variable number of color stops.
+ *
+ * Examples:
+ *
+ * background: linear-gradient(top, red, green, blue)
+ * background: linear-gradient(bottom, red, green 50%, blue)
+ * background: linear-gradient(bottom, red, 50% green, blue)
+ * background: linear-gradient(bottom, red, 50% green, 90% white, blue)
+ *
+ */
+
+linear-gradient(start, stops...)
+ error('color stops required') unless length(stops)
+
+ unquote('linear-gradient(' + join(', ',arguments) + ')')
+
+/*
+ * Create a linear gradient image with the given start position
+ * and variable number of color stops.
+ */
+
+linear-gradient-image(start, stops...)
+ error('node-canvas is required for linear-gradient-image()') unless has-canvas
+ stops = stops[0] if length(stops) == 1
+ error('gradient image size required') unless start[0] is a 'unit'
+ size = start[0]
+ start = start[1] or 'top'
+ grad = create-gradient-image(size, start)
+ stops = normalize-stops(stops)
+ add-color-stop(grad, stop[0], stop[1]) for stop in stops
+ 'url(%s)' % gradient-data-uri(grad)
diff --git a/tests/syntax-tests/source/Stylus/LICENSE.md b/tests/syntax-tests/source/Stylus/LICENSE.md
new file mode 100644
index 00000000..6b067382
--- /dev/null
+++ b/tests/syntax-tests/source/Stylus/LICENSE.md
@@ -0,0 +1,24 @@
+The `gradients.styl` file has been added from https://github.com/stylus/nib under the following license:
+
+```text
+The MIT License (MIT)
+
+Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+```
diff --git a/tests/syntax-tests/source/Stylus/gradients.styl b/tests/syntax-tests/source/Stylus/gradients.styl
new file mode 100644
index 00000000..9f39610b
--- /dev/null
+++ b/tests/syntax-tests/source/Stylus/gradients.styl
@@ -0,0 +1,90 @@
+@import 'config'
+
+/*
+ * Implicit color stop position.
+ */
+
+pos-in-stops(i, stops)
+ len = length(stops)
+ if len - 1 == i
+ 100%
+ else if i
+ unit(i / len * 100, '%')
+ else
+ 0
+
+/*
+ * Normalize color stops:
+ *
+ * - (color pos) -> (pos color)
+ * - (color) -> (implied-pos color)
+ *
+ */
+
+normalize-stops(stops)
+ stops = clone(stops)
+ for stop, i in stops
+ if length(stop) == 1
+ color = stop[0]
+ stop[0] = pos-in-stops(i, stops)
+ stop[1] = color
+ else if typeof(stop[1]) == 'unit'
+ pos = stop[1]
+ stop[1] = stop[0]
+ stop[0] = pos
+ stops
+
+/*
+ * Join color stops with the given translation function.
+ */
+
+join-stops(stops, translate)
+ str = ''
+ len = length(stops)
+ for stop, i in stops
+ str += ', ' if i
+ pos = stop[0]
+ color = stop[1]
+ str += translate(color, pos)
+ unquote(str)
+
+/*
+ * Standard color stop.
+ */
+
+std-stop(color, pos)
+ '%s %s' % (color pos)
+
+/*
+ * Create a linear gradient with the given start position
+ * and variable number of color stops.
+ *
+ * Examples:
+ *
+ * background: linear-gradient(top, red, green, blue)
+ * background: linear-gradient(bottom, red, green 50%, blue)
+ * background: linear-gradient(bottom, red, 50% green, blue)
+ * background: linear-gradient(bottom, red, 50% green, 90% white, blue)
+ *
+ */
+
+linear-gradient(start, stops...)
+ error('color stops required') unless length(stops)
+
+ unquote('linear-gradient(' + join(', ',arguments) + ')')
+
+/*
+ * Create a linear gradient image with the given start position
+ * and variable number of color stops.
+ */
+
+linear-gradient-image(start, stops...)
+ error('node-canvas is required for linear-gradient-image()') unless has-canvas
+ stops = stops[0] if length(stops) == 1
+ error('gradient image size required') unless start[0] is a 'unit'
+ size = start[0]
+ start = start[1] or 'top'
+ grad = create-gradient-image(size, start)
+ stops = normalize-stops(stops)
+ add-color-stop(grad, stop[0], stop[1]) for stop in stops
+ 'url(%s)' % gradient-data-uri(grad)