aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--documentation/bookmark/abstract_interpretation.md (renamed from documentation/bookmark/Abstract interpretation.md)1
-rw-r--r--documentation/bookmark/back_end/graal.md4
-rw-r--r--documentation/bookmark/back_end/haskell.md1
-rw-r--r--documentation/bookmark/back_end/micro_controller.md4
-rw-r--r--documentation/bookmark/back_end/wasm.md1
-rw-r--r--documentation/bookmark/concurrency/ownership.md8
-rw-r--r--documentation/bookmark/database.md1
-rw-r--r--documentation/bookmark/game_programming.md1
-rw-r--r--documentation/bookmark/lazy_evaluation.md1
-rw-r--r--documentation/bookmark/math.md4
-rw-r--r--documentation/bookmark/optimization.md6
-rw-r--r--documentation/bookmark/security.md9
-rw-r--r--documentation/bookmark/tool/text_editor.md4
-rw-r--r--documentation/bookmark/user_interface/localization_and_internationalization.md4
-rw-r--r--documentation/bookmark/web_browser.md (renamed from documentation/bookmark/browser.md)1
-rw-r--r--lux-js/commands.md6
-rw-r--r--lux-js/project.lux10
-rw-r--r--stdlib/project.clj2
-rw-r--r--stdlib/project.lux4
-rw-r--r--stdlib/source/library/lux/data/collection/list.lux18
-rw-r--r--stdlib/source/library/lux/data/format/css.lux115
-rw-r--r--stdlib/source/library/lux/data/format/css/property.lux24
-rw-r--r--stdlib/source/library/lux/data/format/css/query.lux2
-rw-r--r--stdlib/source/library/lux/data/format/css/selector.lux30
-rw-r--r--stdlib/source/library/lux/data/format/css/style.lux32
-rw-r--r--stdlib/source/library/lux/data/format/css/value.lux211
-rw-r--r--stdlib/source/library/lux/macro/syntax/export.lux6
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/lux.lux7
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/version.lux2
-rw-r--r--stdlib/source/library/lux/world/file.lux8
30 files changed, 328 insertions, 199 deletions
diff --git a/documentation/bookmark/Abstract interpretation.md b/documentation/bookmark/abstract_interpretation.md
index d98525f7c..ce790a93b 100644
--- a/documentation/bookmark/Abstract interpretation.md
+++ b/documentation/bookmark/abstract_interpretation.md
@@ -1,4 +1,5 @@
# Reference
+1. [Principles of Abstract Interpretation](https://mitpress.mit.edu/books/principles-abstract-interpretation)
1. ["Easy Abstract Interpretation with SPARTA" by Arnaud Venet and Jez Ng](https://www.youtube.com/watch?v=_fA7vkVJhF8)
diff --git a/documentation/bookmark/back_end/graal.md b/documentation/bookmark/back_end/graal.md
new file mode 100644
index 000000000..bd91d9218
--- /dev/null
+++ b/documentation/bookmark/back_end/graal.md
@@ -0,0 +1,4 @@
+# Reference
+
+1. [Anybody know how the graal project ties in with all of this? Is oracle effective... | Hacker News](https://news.ycombinator.com/item?id=19435964)
+
diff --git a/documentation/bookmark/back_end/haskell.md b/documentation/bookmark/back_end/haskell.md
index aa77d723f..a8621380f 100644
--- a/documentation/bookmark/back_end/haskell.md
+++ b/documentation/bookmark/back_end/haskell.md
@@ -1,4 +1,5 @@
# Reference
+1. [Thunks, Sharing, Laziness: The Haskell Heap Visualized – Joachim Breitner](https://www.youtube.com/watch?v=I4lnCG18TaY)
1. [Eta - Modern Haskell on the JVM](https://github.com/typelead/eta)
diff --git a/documentation/bookmark/back_end/micro_controller.md b/documentation/bookmark/back_end/micro_controller.md
new file mode 100644
index 000000000..2681cbf67
--- /dev/null
+++ b/documentation/bookmark/back_end/micro_controller.md
@@ -0,0 +1,4 @@
+# Reference
+
+1. [HaikuVM](http://haiku-vm.sourceforge.net/)
+
diff --git a/documentation/bookmark/back_end/wasm.md b/documentation/bookmark/back_end/wasm.md
index ba278fb2f..002c0b31d 100644
--- a/documentation/bookmark/back_end/wasm.md
+++ b/documentation/bookmark/back_end/wasm.md
@@ -1,5 +1,6 @@
# Platform
+1. [Wasmer Java](https://github.com/wasmerio/wasmer-java)
1. [WAVM: WAVM is a WebAssembly virtual machine, designed for use in non-web applications.](https://wavm.github.io/)
# Exemplar
diff --git a/documentation/bookmark/concurrency/ownership.md b/documentation/bookmark/concurrency/ownership.md
new file mode 100644
index 000000000..d9be9959f
--- /dev/null
+++ b/documentation/bookmark/concurrency/ownership.md
@@ -0,0 +1,8 @@
+# Reference
+
+1. []()
+
+# Language
+
+1. [Project Verona: Research programming language for concurrent ownership](https://microsoft.github.io/verona/)
+
diff --git a/documentation/bookmark/database.md b/documentation/bookmark/database.md
index 0e27f89cf..8c07f0279 100644
--- a/documentation/bookmark/database.md
+++ b/documentation/bookmark/database.md
@@ -197,6 +197,7 @@
## Graph
+1. ["Asami: Turn your JSON into a Graph in 2 Lines" by Paula Gearon](https://www.youtube.com/watch?v=-XegX_K6w-o)
1. https://github.com/hugegraph/hugegraph
1. https://github.com/Microsoft/GraphEngine
1. https://redislabs.com/blog/release-redisgraph-v1-0-preview/
diff --git a/documentation/bookmark/game_programming.md b/documentation/bookmark/game_programming.md
index d04e0def1..1865d7dd3 100644
--- a/documentation/bookmark/game_programming.md
+++ b/documentation/bookmark/game_programming.md
@@ -96,6 +96,7 @@
# Reference
+1. ["Game Development in Eight Bits" by Kevin Zurawel](https://www.youtube.com/watch?v=TPbroUDHG0s)
1. [How to Make an RPG](https://howtomakeanrpg.com/)
1. https://mod.io/
1. https://www.amazon.com/Game-Engine-Black-Book-Wolfenstein/dp/1539692876
diff --git a/documentation/bookmark/lazy_evaluation.md b/documentation/bookmark/lazy_evaluation.md
index e20487b81..8e9a785fd 100644
--- a/documentation/bookmark/lazy_evaluation.md
+++ b/documentation/bookmark/lazy_evaluation.md
@@ -1,4 +1,5 @@
# Reference
+1. [Promises Are Made to Be Broken: Migrating R to Strict Semantics](http://aviral.io/static/pdfs/promises-are-made-to-be-broken.pdf)
1. [Call-by-Need Is Clairvoyant Call-by-Value](http://www.cs.nott.ac.uk/~pszgmh/clairvoyant.pdf)
diff --git a/documentation/bookmark/math.md b/documentation/bookmark/math.md
index d27280e04..760e4d177 100644
--- a/documentation/bookmark/math.md
+++ b/documentation/bookmark/math.md
@@ -1,3 +1,7 @@
+# Logarithm
+
+1. [Logarithm: The Complete Guide (Theory & Applications)](https://mathvault.ca/logarithm-theory/)
+
# Ball arithmetic
1. [Ball arithmetic](http://www.texmacs.org/joris/ball/ball.html)
diff --git a/documentation/bookmark/optimization.md b/documentation/bookmark/optimization.md
index 6a773a929..a0492fb9f 100644
--- a/documentation/bookmark/optimization.md
+++ b/documentation/bookmark/optimization.md
@@ -8,6 +8,7 @@
# Compilation
+1. [CompilerGym: Making compiler optimizations accessible to all](https://ai.facebook.com/blog/compilergym-making-compiler-optimizations-accessible-to-all)
1. [Future Directions for Optimizing Compilers](https://arxiv.org/abs/1809.02161)
# Pre-fetching
@@ -24,7 +25,10 @@
# Reference
-1. [CompilerGym: Making compiler optimizations accessible to all](https://ai.facebook.com/blog/compilergym-making-compiler-optimizations-accessible-to-all)
+1. [Refterm Lecture Part 1 - Philosophies of Optimization](https://www.youtube.com/watch?v=pgoetgxecw8)
+1. [Optimizations enabled by -ffast-math](https://kristerw.github.io/2021/10/19/fast-math/)
+1. [Simple Code, High Performance](https://www.youtube.com/watch?v=Ge3aKEmZcqY)
+1. [Negotiating with Compilers](https://en.algorithmica.org/hpc/analyzing-performance/compilation/)
1. [Do Low-level Optimizations Matter?](https://cantrip.org/sortfast.html)
1. [Inline caching](https://bernsteinbear.com/blog/inline-caching/)
1. [Weird and Wonderful Division Tricks](https://saml98.github.io/jekyll/update/2020/02/21/weird-division.htmls)
diff --git a/documentation/bookmark/security.md b/documentation/bookmark/security.md
index ba0d282f2..7cfd9bc2a 100644
--- a/documentation/bookmark/security.md
+++ b/documentation/bookmark/security.md
@@ -1,3 +1,11 @@
+# Anti-Debugging
+
+1. [JavaScript AntiDebugging Tricks](https://x-c3ll.github.io/posts/javascript-antidebugging/)
+
+# Supply chain
+
+1. [chainguard](https://chainguard.dev/)
+
# Restraint | Sand-boxing
1. [JavaScript Restrictor](https://polcak.github.io/jsrestrictor/)
@@ -83,6 +91,7 @@
# Reference
+1. [Secure By Design](https://www.amazon.com/Secure-Design-Daniel-Deogun/dp/1617294357)
1. [Intro to Just-In-Time Access](https://compliance.dev/2021/04/29/introduction-to-just-in-time-access/)
1. https://www.nomoreransom.org/en/index.html
1. [Open Source Security Foundation (OpenSSF)](https://openssf.org/)
diff --git a/documentation/bookmark/tool/text_editor.md b/documentation/bookmark/tool/text_editor.md
index 3cd6aea03..c8d43be64 100644
--- a/documentation/bookmark/tool/text_editor.md
+++ b/documentation/bookmark/tool/text_editor.md
@@ -1,3 +1,7 @@
+# Code navigation
+
+1. ["Incremental, zero-config Code Nav using stack graphs" by Douglas Creager](https://www.youtube.com/watch?v=l2R1PTGcwrE)
+
# Rendering
1. [Text Rendering Hates You](https://gankra.github.io/blah/text-hates-you/)
diff --git a/documentation/bookmark/user_interface/localization_and_internationalization.md b/documentation/bookmark/user_interface/localization_and_internationalization.md
new file mode 100644
index 000000000..35d515e1c
--- /dev/null
+++ b/documentation/bookmark/user_interface/localization_and_internationalization.md
@@ -0,0 +1,4 @@
+# Reference
+
+1. [How to design in every language at once](https://canvatechblog.com/how-to-design-in-every-language-at-once-f2dd66a2780f)
+
diff --git a/documentation/bookmark/browser.md b/documentation/bookmark/web_browser.md
index 5fc699317..cc698019a 100644
--- a/documentation/bookmark/browser.md
+++ b/documentation/bookmark/web_browser.md
@@ -36,6 +36,7 @@
# Reference
+1. [Web Browser Engineering](https://browser.engineering/)
1. [Public Suffix List](https://publicsuffix.org/)
1. [Public Suffix List Problems](https://github.com/sleevi/psl-problems)
1. https://www.opera.com/gx
diff --git a/lux-js/commands.md b/lux-js/commands.md
index 5c6da5e51..ddf91109d 100644
--- a/lux-js/commands.md
+++ b/lux-js/commands.md
@@ -10,6 +10,10 @@ cd ~/lux/lux-js/ && lein clean && lein lux auto test
```
cd ~/lux/lux-js/ \
&& lux clean \
+&& lux with js auto build
+
+cd ~/lux/lux-js/ \
+&& lux clean \
&& lux with js build \
&& mv target/program.js lux.js
@@ -52,6 +56,6 @@ cd ~/lux/stdlib/ \
```
cd ~/lux/lux-js/ \
-&& mvn install:install-file -Dfile=lux.js -DgroupId=com.github.luxlang -DartifactId=lux-js -Dversion=0.7.0-SNAPSHOT -Dpackaging=js
+&& mvn install:install-file -Dfile=target/program.js -DgroupId=com.github.luxlang -DartifactId=lux-js -Dversion=0.6.3-SNAPSHOT -Dpackaging=js
```
diff --git a/lux-js/project.lux b/lux-js/project.lux
index 5bd0019e2..d64419dd7 100644
--- a/lux-js/project.lux
+++ b/lux-js/project.lux
@@ -1,5 +1,5 @@
[""
- ["identity" ["com.github.luxlang" "lux-js" "0.6.2"]
+ ["identity" ["com.github.luxlang" "lux-js" "0.6.3-SNAPSHOT"]
"info" ["url" "https://github.com/LuxLang/lux"
"scm" "https://github.com/LuxLang/lux.git"
"licenses" [["name" "Lux License v0.1.2"
@@ -15,14 +15,14 @@
"repositories" ["https://oss.sonatype.org/content/repositories/snapshots/"
"https://oss.sonatype.org/service/local/staging/deploy/maven2/"]
- "dependencies" [["com.github.luxlang" "stdlib" "0.6.2" "tar"]]
+ "dependencies" [... ["com.github.luxlang" "stdlib" "0.6.3" "tar"]
+ ]
"program" "program"]
"js"
- ["compiler" ["com.github.luxlang" "lux-js" "0.6.1" "js"]
- "dependencies" [["org.openjdk.nashorn" "nashorn-core" "15.1" "jar"]]]
+ ["compiler" ["com.github.luxlang" "lux-js" "0.6.2" "js"]]
"jvm"
- ["compiler" ["com.github.luxlang" "lux-jvm" "0.6.2" "jar"]
+ ["compiler" ["com.github.luxlang" "lux-jvm" "0.6.3" "jar"]
"dependencies" [["org.openjdk.nashorn" "nashorn-core" "15.1" "jar"]]]]
diff --git a/stdlib/project.clj b/stdlib/project.clj
index 9cc874af8..e05e908ad 100644
--- a/stdlib/project.clj
+++ b/stdlib/project.clj
@@ -3,7 +3,7 @@
(def sonatype-releases "https://oss.sonatype.org/service/local/staging/deploy/maven2/")
(def sonatype-snapshots "https://oss.sonatype.org/content/repositories/snapshots/")
-(defproject com.github.luxlang/stdlib #=(identity version)
+(defproject com.github.luxlang/stdlib "0.6.3-SNAPSHOT" ;; #=(identity version)
:description "Standard library for the Lux programming language."
:url ~repo
diff --git a/stdlib/project.lux b/stdlib/project.lux
index 496763b00..57cc54d90 100644
--- a/stdlib/project.lux
+++ b/stdlib/project.lux
@@ -2,7 +2,7 @@
[... An optional identity for the project.
... It can also be specified or overriden in a non-default profile.
... This will be the name given to the project when installed/deployed as a dependency.
- "identity" ["com.github.luxlang" "stdlib" "0.6.2"]
+ "identity" ["com.github.luxlang" "stdlib" "0.6.3-SNAPSHOT"]
... Every piece of information, and the whole "info" bundle, are optional.
"info" ["url" "https://github.com/LuxLang/lux"
@@ -52,7 +52,7 @@
]
"js"
- ["compiler" ["com.github.luxlang" "lux-js" "0.6.2" "js"]
+ ["compiler" ["com.github.luxlang" "lux-js" "0.6.3-SNAPSHOT" "js"]
... The OS command to use when running JS tests. The default is described below.
... "js" ["node" "--stack_size=8192"]
]
diff --git a/stdlib/source/library/lux/data/collection/list.lux b/stdlib/source/library/lux/data/collection/list.lux
index 63f3cf3f6..37e944bb8 100644
--- a/stdlib/source/library/lux/data/collection/list.lux
+++ b/stdlib/source/library/lux/data/collection/list.lux
@@ -129,15 +129,15 @@
(def: .public (split_at n xs)
(All (_ a)
(-> Nat (List a) [(List a) (List a)]))
- (if (n.> 0 n)
- (case xs
- {.#End}
- [{.#End} {.#End}]
-
- {.#Item x xs'}
- (let [[tail rest] (split_at (-- n) xs')]
- [{.#Item x tail} rest]))
- [{.#End} xs]))
+ (case n
+ 0 [{.#End} xs]
+ _ (case xs
+ {.#End}
+ [{.#End} {.#End}]
+
+ {.#Item x xs'}
+ (let [[tail rest] (split_at (-- n) xs')]
+ [{.#Item x tail} rest]))))
(def: (split_when' predicate ys xs)
(All (_ a)
diff --git a/stdlib/source/library/lux/data/format/css.lux b/stdlib/source/library/lux/data/format/css.lux
index c4ac78db3..f4dd728df 100644
--- a/stdlib/source/library/lux/data/format/css.lux
+++ b/stdlib/source/library/lux/data/format/css.lux
@@ -1,26 +1,28 @@
(.using
- [library
- [lux {"-" and}
- [control
- ["[0]" maybe]]
- [data
- [number
- ["[0]" nat]]
- ["[0]" text
- ["%" format {"+" format}]
- ["[0]" encoding {"+" Encoding}]]
- [collection
- ["[0]" list ("[1]#[0]" functor)]]]
- [type
- abstract]
- [world
- [net {"+" URL}]]]]
- ["[0]" / "_"
- ["[1][0]" selector {"+" Selector Combinator}]
- ["[1][0]" value {"+" Value Animation Percentage}]
- ["[1][0]" font {"+" Font}]
- ["[1][0]" style {"+" Style}]
- ["[1][0]" query {"+" Query}]])
+ [library
+ [lux {"-" and}
+ [control
+ ["[0]" maybe]]
+ [data
+ ["[0]" text
+ ["%" format {"+" format}]
+ ["[0]" encoding {"+" Encoding}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]]]
+ [math
+ [number
+ ["[0]" nat]]]
+ [type
+ [abstract {"-" Frame}]]
+ [world
+ [net {"+" URL}]]]]
+ ["[0]" / "_"
+ ["[1][0]" selector {"+" Selector Combinator Specializer Generic}]
+ ["[1][0]" value {"+" Value Animation Percentage}]
+ ["[1][0]" property {"+" Property}]
+ ["[1][0]" font {"+" Font}]
+ ["[1][0]" style]
+ ["[1][0]" query {"+" Query}]])
(abstract: .public Common Any)
(abstract: .public Special Any)
@@ -33,12 +35,15 @@
(|>> :representation))
(def: .public empty
- (CSS Common)
+ (CSS Any)
(:abstraction ""))
+ (type: .public Style
+ (List (Ex (_ brand) [(Property brand) (Value brand)])))
+
(def: .public (rule selector style)
(-> (Selector Any) Style (CSS Common))
- (:abstraction (format (/selector.selector selector) "{" (/style.inline style) "}")))
+ (:abstraction (format (/selector.selector selector) "{" (/style.inline (/style.style style)) "}")))
(def: .public char_set
(-> Encoding (CSS Special))
@@ -65,7 +70,7 @@
with_unicode)
(list#each (function (_ [property value])
(format property ": " value ";")))
- (text.interposed /style.separator)
+ text.together
(text.enclosed ["{" "}"])
(format "@font-face")
:abstraction)))
@@ -81,12 +86,12 @@
"")
";")))
- (def: css_separator
+ (def: separator
text.new_line)
(type: .public Frame
(Record
- [#when Percentage
+ [#when (Value Percentage)
#what Style]))
(def: .public (key_frames animation frames)
@@ -94,33 +99,38 @@
(:abstraction (format "@keyframes " (/value.value animation) " {"
(|> frames
(list#each (function (_ frame)
- (format (/value.percentage (value@ #when frame)) " {"
- (/style.inline (value@ #what frame))
+ (format (/value.value (value@ #when frame)) " {"
+ (/style.inline (/style.style (value@ #what frame)))
"}")))
- (text.interposed ..css_separator))
+ (text.interposed ..separator))
"}")))
(template: (!composite <pre> <post>)
- (:abstraction (format (:representation <pre>) ..css_separator
- (:representation <post>))))
+ [(:abstraction
+ (format (:representation <pre>)
+ ..separator
+ (:representation <post>)))])
(def: .public (and pre post)
- (-> (CSS Any) (CSS Any) (CSS Any))
+ (All (_ kind) (-> (CSS kind) (CSS kind) (CSS kind)))
(!composite pre post))
- (def: .public (alter combinator selector css)
+ (def: .public (in_context combinator selector css)
(-> Combinator (Selector Any) (CSS Common) (CSS Common))
(|> css
:representation
- (text.all_split_by ..css_separator)
- (list#each (|>> (format (/selector.selector (|> selector (combinator (/selector.tag "")))))))
- (text.interposed ..css_separator)
+ (text.all_split_by ..separator)
+ (list#each (let [prefix (|> selector
+ (combinator (/selector.tag ""))
+ /selector.selector)]
+ (|>> (format prefix))))
+ (text.interposed ..separator)
:abstraction))
(def: .public (dependent combinator selector style inner)
(-> Combinator (Selector Any) Style (CSS Common) (CSS Common))
(!composite (..rule selector style)
- (..alter combinator selector inner)))
+ (..in_context combinator selector inner)))
(template [<name> <combinator>]
[(def: .public <name>
@@ -130,4 +140,33 @@
[with_descendants /selector.in]
[with_children /selector.sub]
)
+
+ (def: .public (in_case specializer selector css)
+ (All (_ kind)
+ (-> (Specializer kind) (Selector (Generic Any)) (CSS Common) (CSS Common)))
+ (|> css
+ :representation
+ (text.all_split_by ..separator)
+ (list#each (let [prefix (|> selector
+ (specializer (:expected (/selector.tag "")))
+ /selector.selector)]
+ (|>> (format prefix))))
+ (text.interposed ..separator)
+ :abstraction))
+
+ (def: .public (specialized combinator selector style inner)
+ (All (_ kind)
+ (-> (Specializer kind) (Selector (Generic Any)) Style (CSS Common) (CSS Common)))
+ (!composite (..rule selector style)
+ (..in_case combinator selector inner)))
+
+ (template [<name> <combinator>]
+ [(def: .public <name>
+ (-> (Selector (Generic Any)) Style (CSS Common) (CSS Common))
+ (..specialized <combinator>))]
+
+ [with_case /selector.and]
+ [with_part /selector.at]
+ [with_element /selector.for]
+ )
)
diff --git a/stdlib/source/library/lux/data/format/css/property.lux b/stdlib/source/library/lux/data/format/css/property.lux
index 707e3edd3..155297f84 100644
--- a/stdlib/source/library/lux/data/format/css/property.lux
+++ b/stdlib/source/library/lux/data/format/css/property.lux
@@ -1,9 +1,11 @@
(.using
[library
- [lux {"-" All Cursor}
+ [lux {"-" All Location}
[control
[parser
["s" code]]]
+ [data
+ ["[0]" text]]
[type
abstract]
[macro
@@ -34,7 +36,7 @@
Display Empty
Filter
Flex_Direction Flex_Wrap
- Font Font_Kerning Font_Size Font_Variant
+ Font Font_Kerning Font_Size Font_Stretch Font_Style Font_Weight Font_Variant
Grid Grid_Content Grid_Flow Grid_Span Grid_Template
Hanging_Punctuation Hyphens Isolation
List_Style_Position List_Style_Type
@@ -333,10 +335,17 @@
[]
[["font-size"]]]
- [Number
+ [Font_Stretch
[]
- [["font-size-adjust"]
- ["opacity"]]]
+ [["font-stretch"]]]
+
+ [Font_Style
+ []
+ [["font-style"]]]
+
+ [Font_Weight
+ []
+ [["font-weight"]]]
[Font_Variant
[]
@@ -388,6 +397,11 @@
[]
[["list-style-type"]]]
+ [Number
+ []
+ [["font-size-adjust"]
+ ["opacity"]]]
+
[Overflow
[]
[["overflow"]
diff --git a/stdlib/source/library/lux/data/format/css/query.lux b/stdlib/source/library/lux/data/format/css/query.lux
index 251429815..8251fcb06 100644
--- a/stdlib/source/library/lux/data/format/css/query.lux
+++ b/stdlib/source/library/lux/data/format/css/query.lux
@@ -5,7 +5,7 @@
[parser
["s" code]]]
[data
- [text
+ ["[0]" text
["%" format {"+" format}]]]
[macro
["[0]" template]
diff --git a/stdlib/source/library/lux/data/format/css/selector.lux b/stdlib/source/library/lux/data/format/css/selector.lux
index bb6656d6e..35893766a 100644
--- a/stdlib/source/library/lux/data/format/css/selector.lux
+++ b/stdlib/source/library/lux/data/format/css/selector.lux
@@ -1,16 +1,17 @@
(.using
[library
- [lux {"-" or and for same? not}
+ [lux {"-" Label or and for same? not}
+ ["[0]" locale {"+" Locale}]
[data
["[0]" text
- ["%" format {"+" format}]]
+ ["%" format {"+" format}]]]
+ [math
[number
["i" int]]]
[type
abstract]
[macro
- ["[0]" template]]
- ["[0]" locale {"+" Locale}]]])
+ ["[0]" template]]]])
(type: .public Label Text)
@@ -57,23 +58,23 @@
[class Class "." Can_Chain]
)
- (template [<right> <left> <combo> <combinator>+]
+ (template [<right> <left> <combinator>+]
[(`` (template [<combinator> <name>]
[(def: .public (<name> right left)
- (-> (Selector <right>) (Selector <left>) (Selector <combo>))
+ (-> (Selector <right>) (Selector <left>) (Selector Composite))
(:abstraction (format (:representation left)
<combinator>
(:representation right))))]
(~~ (template.spliced <combinator>+))))]
- [Can_Chain (Generic Any) Can_Chain
+ [Can_Chain (Generic Any)
[["" and]]]
- [Unique (Generic Any) Composite
- [["" for]]]
- [Specific (Generic Any) Composite
+ [Specific (Generic Any)
[["" at]]]
- [Any Any Composite
+ [Unique (Generic Any)
+ [["" for]]]
+ [Any Any
[["," or]
[" " in]
[">" sub]
@@ -81,6 +82,9 @@
["~" later]]]
)
+ (type: .public (Specializer kind)
+ (-> (Selector kind) (Selector (Generic Any)) (Selector Composite)))
+
(type: .public Combinator
(-> (Selector Any) (Selector Any) (Selector Composite)))
@@ -104,7 +108,7 @@
(template [<kind> <pseudo>+]
[(`` (template [<name> <pseudo>]
[(def: .public <name>
- (Selector Can_Chain)
+ (Selector <kind>)
(:abstraction <pseudo>))]
(~~ (template.spliced <pseudo>+))))]
@@ -199,8 +203,8 @@
[nth_child ":nth-child"]
[nth_last_child ":nth-last-child"]
- [nth_last_of_type ":nth-last-of-type"]
[nth_of_type ":nth-of-type"]
+ [nth_last_of_type ":nth-last-of-type"]
)
)
)
diff --git a/stdlib/source/library/lux/data/format/css/style.lux b/stdlib/source/library/lux/data/format/css/style.lux
index bd8d26787..8ec6a207f 100644
--- a/stdlib/source/library/lux/data/format/css/style.lux
+++ b/stdlib/source/library/lux/data/format/css/style.lux
@@ -1,14 +1,16 @@
(.using
- [library
- [lux "*"
- [data
- [text
- ["%" format {"+" format}]]]
- [type
- abstract]]]
- ["[0]" // "_"
- ["[1][0]" value {"+" Value}]
- ["[1][0]" property {"+" Property}]])
+ [library
+ [lux "*"
+ [data
+ [text
+ ["%" format {"+" format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" mix)]]]
+ [type
+ abstract]]]
+ ["[0]" // "_"
+ ["[1][0]" value {"+" Value}]
+ ["[1][0]" property {"+" Property}]])
(abstract: .public Style
Text
@@ -17,18 +19,20 @@
Style
(:abstraction ""))
- (def: .public separator
- " ")
-
(def: .public (with [property value])
(All (_ brand)
(-> [(Property brand) (Value brand)]
(-> Style Style)))
(|>> :representation
- (format (//property.name property) ": " (//value.value value) ";" ..separator)
+ (format (//property.name property) ": " (//value.value value) ";")
:abstraction))
(def: .public inline
(-> Style Text)
(|>> :representation))
+
+ (def: .public (style config)
+ (-> (List (Ex (_ brand) [(Property brand) (Value brand)]))
+ Style)
+ (list#mix ..with ..empty config))
)
diff --git a/stdlib/source/library/lux/data/format/css/value.lux b/stdlib/source/library/lux/data/format/css/value.lux
index a68d0b263..9b2de87f3 100644
--- a/stdlib/source/library/lux/data/format/css/value.lux
+++ b/stdlib/source/library/lux/data/format/css/value.lux
@@ -1,58 +1,59 @@
(.using
- [library
- [lux {"-" All Cursor and static false true}
- [control
- ["[0]" maybe]
- [parser
- ["s" code]]]
- [data
- ["[0]" color]
- ["[0]" product]
- [number
- ["n" nat]
- ["i" int]
- ["r" rev]
- ["f" frac]]
- ["[0]" text
- ["%" format {"+" Format format}]]
- [collection
- ["[0]" list ("[1]#[0]" functor)]]]
- [type
- abstract]
- [macro
- ["[0]" template]
- ["[0]" code]
- [syntax {"+" syntax:}]]
- [world
- [net {"+" URL}]]]]
- [//
- [selector {"+" Label}]])
-
-(syntax: (text_symbol [symbol s.text])
+ [library
+ [lux {"-" Label All Location and static false true}
+ [control
+ ["[0]" maybe]
+ [parser
+ ["<[0]>" code]]]
+ [data
+ ["[0]" color]
+ ["[0]" product]
+ ["[0]" text
+ ["%" format {"+" Format format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]]]
+ [macro
+ [syntax {"+" syntax:}]
+ ["[0]" template]
+ ["[0]" code]]
+ [math
+ [number
+ ["n" nat]
+ ["i" int]
+ ["r" rev]
+ ["f" frac]]]
+ [type
+ abstract]
+ [world
+ [net {"+" URL}]]]]
+ [//
+ [selector {"+" Label}]])
+
+(syntax: (text_symbol [symbol <code>.text])
(in (list (code.local_symbol (text.replaced "-" "_" symbol)))))
(template: (enumeration: <abstraction> <representation> <out> <sample>+ <definition>+)
- (abstract: .public <abstraction>
- <representation>
+ [(abstract: .public <abstraction>
+ <representation>
- (def: .public <out>
- (-> <abstraction> <representation>)
- (|>> :representation))
+ (def: .public <out>
+ (-> <abstraction> <representation>)
+ (|>> :representation))
- (`` (template [<name> <value>]
- [(def: .public <name> <abstraction> (:abstraction <value>))]
+ (`` (template [<name> <value>]
+ [(def: .public <name> <abstraction> (:abstraction <value>))]
- (~~ (template.spliced <sample>+))
- ))
+ (~~ (template.spliced <sample>+))
+ ))
- (template.spliced <definition>+)))
+ (template.spliced <definition>+))])
(template: (multi: <multi> <type> <separator>)
- (def: .public (<multi> pre post)
- (-> (Value <type>) (Value <type>) (Value <type>))
- (:abstraction (format (:representation pre)
- <separator>
- (:representation post)))))
+ [(def: .public (<multi> pre post)
+ (-> (Value <type>) (Value <type>) (Value <type>))
+ (:abstraction (format (:representation pre)
+ <separator>
+ (:representation post))))])
(def: (%number value)
(Format Frac)
@@ -75,7 +76,21 @@
[inherit "inherit"]
[unset "unset"]
)
-
+
+ (abstract: .public (Numeric kind) Any)
+
+ (template [<name>]
+ [(with_expansions [<name>' (template.symbol [<name> "'"])]
+ (abstract: .public <name>' Any)
+ (type: .public <name>
+ (Numeric <name>')))]
+
+ [Number]
+ [Length]
+ [Time]
+ [Percentage]
+ )
+
(template [<brand> <alias>+ <value>+]
[(abstract: .public <brand> Any)
@@ -98,18 +113,6 @@
[]
[]]
- [Number
- []
- []]
-
- [Length
- []
- []]
-
- [Time
- []
- []]
-
[Thickness
[]
[["medium"]
@@ -969,49 +972,41 @@
)
)
- (abstract: .public Percentage
- Text
+ (def: percentage_limit Nat (.++ 100))
- (def: .public percentage
- (-> Percentage Text)
- (|>> :representation))
+ (def: .public (%% value)
+ (-> Nat (Value Percentage))
+ (:abstraction (format (%.nat (n.% percentage_limit value)) "%")))
- (def: percentage_limit Nat (.++ 100))
-
- (def: .public (%% value)
- (-> Nat Percentage)
- (:abstraction (format (%.nat (n.% percentage_limit value)) "%")))
-
- (def: .public slice_percent/1
- (-> Percentage (Value Slice))
- (|>> :representation (:abstraction Value)))
-
- (def: .public (slice_percent/2 horizontal vertical)
- (-> Percentage Percentage (Value Slice))
- (:abstraction Value (format (:representation horizontal) ..slice_separator
- (:representation vertical))))
-
- (template [<input> <pre> <function>+]
- [(`` (template [<name> <function>]
- [(def: .public <name>
- (-> <input> (Value Filter))
- (|>> <pre> (list) (..apply <function>)))]
-
- (~~ (template.spliced <function>+))))]
-
- [Nat (<| (:representation Value) ..px n.frac)
- [[blur "blur"]]]
- [Nat (<| ..angle ..degree)
- [[hue_rotate "hue-rotate"]]]
- [Percentage (:representation Percentage)
- [[brightness "brightness"]
- [contrast "contrast"]
- [grayscale "grayscale"]
- [invert "invert"]
- [opacity "opacity"]
- [saturate "saturate"]
- [sepia "sepia"]]]
- )
+ (def: .public slice_percent/1
+ (-> (Value Percentage) (Value Slice))
+ (|>> :transmutation))
+
+ (def: .public (slice_percent/2 horizontal vertical)
+ (-> (Value Percentage) (Value Percentage) (Value Slice))
+ (:abstraction (format (:representation horizontal) ..slice_separator
+ (:representation vertical))))
+
+ (template [<input> <pre> <function>+]
+ [(`` (template [<name> <function>]
+ [(def: .public <name>
+ (-> <input> (Value Filter))
+ (|>> <pre> (list) (..apply <function>)))]
+
+ (~~ (template.spliced <function>+))))]
+
+ [Nat (<| :representation ..px n.frac)
+ [[blur "blur"]]]
+ [Nat (<| ..angle ..degree)
+ [[hue_rotate "hue-rotate"]]]
+ [(Value Percentage) :representation
+ [[brightness "brightness"]
+ [contrast "contrast"]
+ [grayscale "grayscale"]
+ [invert "invert"]
+ [opacity "opacity"]
+ [saturate "saturate"]
+ [sepia "sepia"]]]
)
(def: .public svg_filter
@@ -1329,4 +1324,22 @@
(multi: multi_image Image ",")
(multi: multi_shadow Shadow ",")
(multi: multi_content Content " ")
+
+ ... https://developer.mozilla.org/en-US/docs/Web/CSS/calc()
+ (template [<name> <parameter>]
+ [(def: .public (<name> parameter subject)
+ (.All (_ kind)
+ (-> (Value <parameter>) (Value (Numeric kind))
+ (Value (Numeric kind))))
+ (|> (format (:representation subject)
+ (template.text [" " <name> " "])
+ (:representation parameter))
+ (text.enclosed ["calc(" ")"])
+ :abstraction))]
+
+ [+ (Numeric kind)]
+ [- (Numeric kind)]
+ [* Number]
+ [/ Number]
+ )
)
diff --git a/stdlib/source/library/lux/macro/syntax/export.lux b/stdlib/source/library/lux/macro/syntax/export.lux
index aa482c559..7a87e30fd 100644
--- a/stdlib/source/library/lux/macro/syntax/export.lux
+++ b/stdlib/source/library/lux/macro/syntax/export.lux
@@ -14,8 +14,8 @@
(def: policy
(Parser Code)
(do [! <>.monad]
- [candiate <code>.next]
- (case candiate
+ [candidate <code>.next]
+ (case candidate
[_ {.#Symbol ["" _]}]
(in default_policy)
@@ -23,7 +23,7 @@
[_ {.#Symbol _}])
(do !
[_ <code>.any]
- (in candiate))
+ (in candidate))
_
(in default_policy))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/lux.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/lux.lux
index 602aedfd0..a0ed6f3e6 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/lux.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/lux.lux
@@ -193,6 +193,7 @@
[directive directive' /////generation.learn_directive]
)
+... TODO: Get rid of this function ASAP.
(def: (refresh expander host_analysis)
(All (_ anchor expression directive)
(-> Expander /////analysis.Bundle (Operation anchor expression directive Any)))
@@ -201,12 +202,14 @@
.let [eval (/////analysis/evaluation.evaluator expander
(value@ [/////directive.#synthesis /////directive.#state] state)
(value@ [/////directive.#generation /////directive.#state] state)
- (value@ [/////directive.#generation /////directive.#phase] state))]]
+ (value@ [/////directive.#generation /////directive.#phase] state))
+ previous_analysis_extensions (value@ [/////directive.#analysis /////directive.#state ///.#bundle] state)]]
(phase.set_state [bundle
(revised@ [/////directive.#analysis /////directive.#state]
(: (-> /////analysis.State+ /////analysis.State+)
(|>> product.right
- [(///analysis.bundle eval host_analysis)]))
+ [(|> previous_analysis_extensions
+ (dictionary.merged (///analysis.bundle eval host_analysis)))]))
state)])))
(def: (announce_definition! short type)
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/version.lux b/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
index 733188447..714ceb58a 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
@@ -6,4 +6,4 @@
(def: .public version
Version
- 00,06,02)
+ 00,06,03)
diff --git a/stdlib/source/library/lux/world/file.lux b/stdlib/source/library/lux/world/file.lux
index 7c19c1963..de56b54a2 100644
--- a/stdlib/source/library/lux/world/file.lux
+++ b/stdlib/source/library/lux/world/file.lux
@@ -380,13 +380,13 @@
[process_load [global process mainModule constructor _load]]
)
- (def: (require _)
- (-> [] (-> ffi.String Any))
+ (def: (require module)
+ (-> ffi.String Any)
(case [(normal_require []) (global_require []) (process_load [])]
(^or [{.#Some require} _ _]
[_ {.#Some require} _]
[_ _ {.#Some require}])
- require
+ (require module)
_
(undefined)))
@@ -394,7 +394,7 @@
(template [<name> <module> <type>]
[(def: (<name> _)
(-> [] <type>)
- (:as <type> (..require [] <module>)))]
+ (:as <type> (..require <module>)))]
[node_fs "fs" ..Fs]
[node_path "path" ..JsPath]