feat: use different color schemes depending on the language
This commit is contained in:
parent
c38eae1eeb
commit
85a530ea1b
@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
:root {
|
:root {
|
||||||
--c-thp: #f472b6;
|
--c-thp: #f472b6;
|
||||||
|
--c-php: #4f5b93;
|
||||||
|
--c-html: #dc4a20;
|
||||||
|
--c-zig: #f7a41d;
|
||||||
|
|
||||||
--font-display: "Atkinson Hyperlegible", sans-serif;
|
--font-display: "Atkinson Hyperlegible", sans-serif;
|
||||||
--font-body: "Atkinson Hyperlegible", sans-serif;
|
--font-body: "Atkinson Hyperlegible", sans-serif;
|
||||||
|
@ -27,6 +27,48 @@
|
|||||||
--code-theme-punctuation: #dedede;
|
--code-theme-punctuation: #dedede;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.language-html {
|
||||||
|
--code-theme-border-color: var(--c-html);
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-zig {
|
||||||
|
--code-theme-border-color: var(--c-zig);
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-php {
|
||||||
|
--code-theme-bg-color: rgb(7, 9, 15);
|
||||||
|
--code-theme-border-color: var(--c-php);
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-ebnf, .language-c {
|
||||||
|
--code-theme-bg-color: rgb(7, 9, 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: light) {
|
||||||
|
.language-ebnf, .language-c {
|
||||||
|
--code-theme-bg-color: #eff1f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.language-php {
|
||||||
|
--code-theme-bg-color: white;
|
||||||
|
--code-theme-border-color: var(--c-php);
|
||||||
|
--code-theme-comment: rgb(79,91,147);
|
||||||
|
/* number */
|
||||||
|
--code-theme-c1: #336699;
|
||||||
|
/* keyword */
|
||||||
|
--code-theme-c2: #669933;
|
||||||
|
--code-theme-c3: #39adb5;
|
||||||
|
/* string */
|
||||||
|
--code-theme-c4: #cc3333;
|
||||||
|
/* declaration */
|
||||||
|
--code-theme-c5: #336699;
|
||||||
|
/* function */
|
||||||
|
--code-theme-c7: #336699;
|
||||||
|
|
||||||
|
--code-theme-punctuation: #669933;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
:root {
|
:root {
|
||||||
--code-theme-color: #3a3a3a;
|
--code-theme-color: #3a3a3a;
|
||||||
|
@ -11,12 +11,14 @@ export function highlightOnDom() {
|
|||||||
|
|
||||||
let indicator_bg_class = "";
|
let indicator_bg_class = "";
|
||||||
if (language === "php") {
|
if (language === "php") {
|
||||||
indicator_bg_class = "bg-[#4f5b93]";
|
indicator_bg_class = "bg-[var(--c-php)] text-white";
|
||||||
} else if (language === "html") {
|
} else if (language === "html") {
|
||||||
indicator_bg_class = "bg-[#dc4a20]";
|
indicator_bg_class = "bg-[var(--c-html)] text-white";
|
||||||
|
} else if (language === "zig") {
|
||||||
|
indicator_bg_class = "bg-[var(--c-zig)] text-black";
|
||||||
}
|
}
|
||||||
|
|
||||||
indicator.className = `absolute top-1 right-0 inline-block text-sm select-none opacity-85 ${indicator_bg_class} px-2 rounded-full`;
|
indicator.className = `absolute top-0 right-0 inline-block text-sm select-none opacity-85 ${indicator_bg_class} px-2 rounded-bl-md`;
|
||||||
indicator.innerText = language;
|
indicator.innerText = language;
|
||||||
pre_el.appendChild(indicator);
|
pre_el.appendChild(indicator);
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,7 @@ type system, better syntax and semantics, and better integration with tooling.
|
|||||||
## Compiler architecture
|
## Compiler architecture
|
||||||
|
|
||||||
<Info>
|
<Info>
|
||||||
This is subject to change. At this moment, only Lexical Analysis is
|
This is subject to change. We are still rewriting from Rust to Zig.
|
||||||
being worked on.
|
|
||||||
</Info>
|
</Info>
|
||||||
|
|
||||||
The compiler will have 5 phases:
|
The compiler will have 5 phases:
|
||||||
@ -47,7 +46,7 @@ Using CRLF will lead to a compiler error.
|
|||||||
This document uses a modified version of EBNF which allows the use of
|
This document uses a modified version of EBNF which allows the use of
|
||||||
RegExp-like modifiers. An example is as follows:
|
RegExp-like modifiers. An example is as follows:
|
||||||
|
|
||||||
```abnf
|
```ebnf
|
||||||
; single line comments
|
; single line comments
|
||||||
|
|
||||||
literal = "a"
|
literal = "a"
|
||||||
@ -180,7 +179,7 @@ does so.
|
|||||||
|
|
||||||
## Basic characters
|
## Basic characters
|
||||||
|
|
||||||
```abnf
|
```ebnf
|
||||||
newline = "\n"
|
newline = "\n"
|
||||||
character = '\0'..'\255' ; any ASCII character
|
character = '\0'..'\255' ; any ASCII character
|
||||||
|
|
||||||
@ -202,6 +201,32 @@ operator_char = "+" | "-" | "=" | "*" | "!" | "/" | "|"
|
|||||||
|
|
||||||
## Tokens
|
## Tokens
|
||||||
|
|
||||||
|
This is a summary of all tokens:
|
||||||
|
|
||||||
|
```zig
|
||||||
|
pub const TokenType = enum {
|
||||||
|
Int,
|
||||||
|
Float,
|
||||||
|
Identifier,
|
||||||
|
Datatype,
|
||||||
|
Operator,
|
||||||
|
Comment,
|
||||||
|
String,
|
||||||
|
// grouping signs
|
||||||
|
LeftParen,
|
||||||
|
RightParen,
|
||||||
|
LeftBracket,
|
||||||
|
RightBracket,
|
||||||
|
LeftBrace,
|
||||||
|
RightBrace,
|
||||||
|
// punctiation that carries special meaning
|
||||||
|
Comma,
|
||||||
|
Newline,
|
||||||
|
// Each keyword will have its own token
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### Number
|
### Number
|
||||||
|
|
||||||
A decimal integer **cannot** have a leading zero. This: `0644` is
|
A decimal integer **cannot** have a leading zero. This: `0644` is
|
||||||
@ -237,7 +262,7 @@ Float = decimal_digit+, ".", decimal_digit+, scientific_notation?
|
|||||||
scientific_notation = "e", ("+" | "-"), decimal_digit+
|
scientific_notation = "e", ("+" | "-"), decimal_digit+
|
||||||
```
|
```
|
||||||
|
|
||||||
## Identifier & Datatypes
|
### Identifier & Datatypes
|
||||||
|
|
||||||
```ebnf
|
```ebnf
|
||||||
Identifier = (underscore | lowercase_letter), identifier_letter*
|
Identifier = (underscore | lowercase_letter), identifier_letter*
|
||||||
@ -249,7 +274,7 @@ identifier_letter = underscore | lowercase_letter | uppercase_letter | decimal_d
|
|||||||
Datatype = uppercase_letter, indentifier_letter*
|
Datatype = uppercase_letter, indentifier_letter*
|
||||||
```
|
```
|
||||||
|
|
||||||
## Operator
|
### Operator
|
||||||
|
|
||||||
If 2 or more operator chars are together, they count as a single operator. That is,
|
If 2 or more operator chars are together, they count as a single operator. That is,
|
||||||
`+-` always becomes a single token, not 2 `+` `-` tokens. The lexer is not aware of
|
`+-` always becomes a single token, not 2 `+` `-` tokens. The lexer is not aware of
|
||||||
@ -259,12 +284,12 @@ any operator.
|
|||||||
Operator = operator_char+
|
Operator = operator_char+
|
||||||
```
|
```
|
||||||
|
|
||||||
## Comments
|
### Comments
|
||||||
|
|
||||||
At this time, only single line comments are allowed.
|
At this time, only single line comments are allowed.
|
||||||
|
|
||||||
|
|
||||||
## Strings
|
### Strings
|
||||||
|
|
||||||
Strings in THP only use double quotes.
|
Strings in THP only use double quotes.
|
||||||
|
|
||||||
@ -279,3 +304,48 @@ double_quote = '"'
|
|||||||
string_char = any_except_newline_and_double_quote
|
string_char = any_except_newline_and_double_quote
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Grouping signs
|
||||||
|
|
||||||
|
Each grouping sign has its own token.
|
||||||
|
|
||||||
|
```ebnf
|
||||||
|
LeftParen = "("
|
||||||
|
RightParen = ")"
|
||||||
|
LeftBracket = "["
|
||||||
|
RightBracket = "]"
|
||||||
|
LeftBrace = "{"
|
||||||
|
RightBrace = "}"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Syntax & AST
|
||||||
|
|
||||||
|
On this section of the grammar plain strings are used instead of
|
||||||
|
keywords productions.
|
||||||
|
|
||||||
|
### Variable binding
|
||||||
|
|
||||||
|
Variable bindings have 2 forms: immutable & mutable.
|
||||||
|
Immutable bindings use the `val` keyword, mutable bindings
|
||||||
|
use `var`.
|
||||||
|
|
||||||
|
Bindings can have type annotations, placed between the keyword and
|
||||||
|
the identifier.
|
||||||
|
|
||||||
|
If the binding is immutable and has a datatype, the `val` keyword
|
||||||
|
can be dropped. Mutable bindings cannot drop the var keyword.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```ebnf
|
||||||
|
ImmutableBinding = "val", Datatype?, Identifier, "=", Expression
|
||||||
|
| Datatype, Identifier, "=", Expression
|
||||||
|
|
||||||
|
MutableBinding = "var", Datatype?, Identifier, "=", Expression
|
||||||
|
```
|
||||||
|
|
||||||
|
### Expression
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user