feat: use different color schemes depending on the language

This commit is contained in:
Araozu 2024-11-29 07:35:58 -05:00
parent c38eae1eeb
commit 85a530ea1b
4 changed files with 128 additions and 11 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);
} }

View File

@ -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