diff --git a/index.html b/index.html index 313671b..ce246ba 100644 --- a/index.html +++ b/index.html @@ -3,150 +3,204 @@ fddl programming language - - - - - - - - + +
- -

fddl programming language

+
+ +

fddl programming language

+
-
-
+ + + +
+ -

Overview

-

fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust.

-

For years, I’ve tried to learn various programming languages, and while I could master the basics, the real-world projects often eluded me. And I wouldn't know who to turn to even if I knew where to start.

-

fddl was born out of this journey. fddl is my attempt to combine the aspects I appreciate from many languages into something uniquely my own.

-

I started learning Rust and have really liked it. I've been following tutorials and the Crafting Interpreters site as guides for this very problematic programming language.

-

I like aspects of so many programming languages, but I don't really like any of them, so I always found it hard to pick one and stick with it. But I had the same problem playing World of Warcraft, too.

-

So I, like many of you, decided to make a hobby programming language to see what may be able to be done with it. This is a brand new project as of September 2024 and I am one person.

-

The fact that I have a REPL working in this language is nothing short of amazing to me. It's fucking magic.

+
+

Overview

+

fddl is a small programming language inspired by various languages, designed to help learn language implementation concepts in Rust.

+

For years, I’ve tried to learn various programming languages, and while I could master the basics, the real-world projects often eluded me. And I wouldn't know who to turn to even if I knew where to start.

+

fddl was born out of this journey. fddl is my attempt to combine the aspects I appreciate from many languages into something uniquely my own.

+

I started learning Rust and have really liked it. I've been following tutorials and the Crafting Interpreters site as guides for this very problematic programming language.

+

I like aspects of so many programming languages, but I don't really like any of them, so I always found it hard to pick one and stick with it. But I had the same problem playing World of Warcraft, too.

+

So I, like many of you, decided to make a hobby programming language to see what may be able to be done with it. This is a brand new project as of September 2024 and I am one person.

+

The fact that I have a REPL working in this language is nothing short of amazing to me. It's fucking magic.

+
-

Features

-
    -
  • Custom syntax fddl introduces unique operators and keywords to make programming more intuitive and fun (at least for me)
  • -
  • Lexer currently is the only thing working. It tokenizes fddl scripts into understandable pieces of the language.
  • -
  • Tilde Operator (~ and ~=) when something almost equals something else. I had the idea from watching a video on Non-Euclidean Doom.
  • -
+
+

Features

+
  • Custom syntax: fddl introduces unique operators and keywords to make programming more intuitive and fun (at least for me).
  • +
  • Lexer: Tokenizes fddl scripts into understandable pieces of the language.
  • +
  • Parser: Currently under active development, the parser can successfully handle operators (including the Tilde Operator) and function calls. Work is ongoing to support more complex structures.
  • +
  • Tilde Operator (~ and ~=): For when something almost equals something else. I had the idea from watching a video on Non-Euclidean Doom.
  • +
+
-

Getting Started

-

Keep in mind, this is only at the lexer stage currently. It'll read your inputs and that's it.

-

To clone the repo:

-
git clone https://git.fddl.dev/fddl/fddl.git
-

To run the REPL:

-
cargo run
-

To parse a fddl script:

-
cargo run path/to/script.fddl
+
+

Getting Started

+

Keep in mind, this is only at the lexer stage currently. It'll read your inputs and that's it. (Consider updating this statement based on parser progress)

+

To clone the repo:

+
git clone https://git.fddl.dev/fddl/fddl.git
+

To run the REPL:

+
cargo run
+

To parse a fddl script:

+
cargo run path/to/script.fddl
+
-

Examples:

-
func main() {
-            // print statement
-            print("hello, world in fddl");
-        
-            // variable declaration
-            let y = 5;
-        
-            // if statement
-            if (x > 10) {
-                print("x is greater than 10");
-            }
-        
-            // while loop
-            while (x < 100) {
-                print(x);
-                let x = x + 1;
-            }
-        }
-

At least for right now. I still want to do something odd.

+
+

Examples:

+

(The following is an example of intended fddl syntax - actual runnable capability depends on current parser/interpreter state)

+
func main() {
+    // print statement
+    print("hello, world in fddl");
 
-        

Running the Project

-

Make sure your project compiles and the tests pass:

+ // variable declaration + let y = 5; -
cargo build
+    // if statement
+    if (x > 10) {
+        print("x is greater than 10");
+    }
+
+    // while loop
+    while (x < 100) {
+        print(x);
+        let x = x + 1;
+    }
+}
+

At least for right now. I still want to do something odd.

+
+ +
+

Running the Project

+

Make sure your project compiles and the tests pass:

+
cargo build
 cargo test
 cargo run
-

Again, cargo run only starts the REPL for testing.

-

running fddl examples.fddl (from the git repo) produces the following.

+

Again, cargo run only starts the REPL for testing.

+

running fddl examples.fddl (from the git repo) produces the following.

+
-
-

Goals and Projections:

+
+

Goals and Projections

Note: This is not a final list; it's words on paper (metaphorically) at the time of writing.

+

Lexer:

-
    +
    • Built and tested for basic syntax and operators.
    • Supports single-line and documentation comments.
    • Add support for more complex syntax and features.
    +

    Parser:

    -
      +
      • Parser parsing tilde and minus successfully.
      • Parser parsing the rest of the operators. (mostly complete)
      • Parser parsing function calls.
      • Working on building out functions to parse simple functionality in the language (if, while, for), and to read their expressions and values
      • Implement parsing for function calls, expressions, checks, literally everything.
      +

      Compiler:

      -
        +
        • Currently a placeholder. We're a long way from here. If I see this step I'll be lucky.
        +

        Comments:

        -
          +
          • Added support for single-line and documentation comments.
          • Implement multi-line comments.
          • Implement document building comments.
          +

          Error Handling:

          -
            -
          • Replace stderr with a more robust error handling mechanism..
          • +
              +
            • Replace stderr with a more robust error handling mechanism.
            +

            Testing:

            -
              +
              • Added initial lexer tests.
              • Expand tests to cover more syntax and edge cases.
              -
+
-

License

-

This project is licensed under the GPL.

+
+

License

+

This project is licensed under the GPL.

+
- +

Contact & Links

+

Contact via Email

Git repo

+
+ - - + + - + - + \ No newline at end of file diff --git a/styles.css b/styles.css index b342974..74d72ab 100644 --- a/styles.css +++ b/styles.css @@ -1,104 +1,235 @@ body { margin: 0; font-family: 'Roboto', sans-serif; - background-color: #1e1e1e; - color: #c0c0c0; - line-height: 1.6; + background-color: #121212; /* Slightly darker background */ + color: #e0e0e0; /* Lighter text for better contrast */ + line-height: 1.7; + font-size: 16px; } -header { - background-color: #282828; - padding: 20px; - display: flex; - align-items: center; - justify-content: center; - max-width: 100%; -} -header h1 { - color: #ffffff; - margin: 0; - font-size: 2.5em; -} -.logo { - max-width: 80%; - padding: 20px; -} -main { - max-width: 800px; - margin: 20px auto; + +.container { + max-width: 900px; + margin: 0 auto; padding: 0 20px; } + +/* Header */ +header { + background-color: #1e1e1e; + padding: 25px 0; + text-align: center; + border-bottom: 1px solid #333; +} + +header .logo { + max-width: 70px; /* Adjusted size */ + margin-bottom: 10px; + vertical-align: middle; +} + +header h1 { + color: #ffffff; + margin: 0 0 0 15px; + font-size: 2.8em; + display: inline-block; + vertical-align: middle; +} + +/* Navigation */ +nav { + background-color: #282828; + padding: 15px 0; + text-align: center; + position: sticky; + top: 0; + z-index: 1000; + border-bottom: 1px solid #333; +} + +nav ul { + list-style: none; + padding: 0; + margin: 0; +} + +nav ul li { + display: inline-block; + margin: 0 15px; +} + +nav ul li a { + color: #569cd6; + text-decoration: none; + font-size: 1.1em; + padding: 5px 10px; + border-radius: 4px; + transition: background-color 0.3s ease; +} + +nav ul li a:hover, nav ul li a.active { + background-color: #333; + text-decoration: none; +} + +/* Main Content */ +main { + padding: 30px 0; +} + +section { + background-color: #1e1e1e; + padding: 25px; + margin-bottom: 30px; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0,0,0,0.2); +} + h2 { color: #ffffff; - border-bottom: 1px solid #444; - padding-bottom: 5px; - margin-top: 40px; + border-bottom: 2px solid #569cd6; /* Accent border */ + padding-bottom: 10px; + margin-top: 0; /* Removed default margin-top for consistency inside sections */ + margin-bottom: 20px; + font-size: 2em; } + p { - margin-bottom: 15px; + margin-bottom: 18px; + color: #c0c0c0; /* Slightly softer than main text for paragraphs */ } + +/* Code Blocks */ pre { - background-color: #2e2e2e; - padding: 15px; + background-color: #2c2c2c; /* Slightly different shade for pre */ + padding: 20px; overflow-x: auto; font-family: 'Source Code Pro', monospace; color: #dcdcdc; - border-radius: 5px; + border-radius: 6px; + border: 1px solid #383838; + font-size: 0.95em; } -code { + +code { /* Inline code */ color: #acacac; font-family: 'Source Code Pro', monospace; - background-color: #2e2e2e; - padding: 2px 4px; - border-radius: 3px; + background-color: #2c2c2c; + padding: 3px 6px; + border-radius: 4px; + font-size: 0.9em; } + +pre code { /* Code inside pre, reset some properties */ + padding: 0; + background-color: transparent; + font-size: inherit; /* Inherit font size from pre */ +} + + a { color: #569cd6; text-decoration: none; + transition: color 0.3s ease; } + a:hover { + color: #79b8f3; /* Lighter shade on hover */ text-decoration: underline; } -.images { + +/* Image Gallery */ +.image-gallery { text-align: center; + margin-bottom: 20px; +} + +.image-gallery img { + max-width: calc(50% - 20px); /* Display two images per row on larger screens */ + height: auto; + border: 2px solid #444; + border-radius: 6px; + margin: 10px; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.image-gallery img:hover { + transform: scale(1.03); + box-shadow: 0 0 15px rgba(86, 156, 214, 0.5); +} + +/* For smaller screens, stack images */ +@media (max-width: 768px) { + .image-gallery img { + max-width: calc(100% - 20px); /* Full width on smaller screens */ + } +} + + +/* Goals and Projections Section (previously .notes) */ +.goals-projections { + background-color: #232323; /* Slightly different background */ + padding: 25px; margin: 30px 0; + border-radius: 8px; + border-left: 5px solid #569cd6; /* Accent border */ } -.images img { - max-width: 100%; - border: 1px solid #444; - border-radius: 5px; - margin: 10px 0; + +.goals-projections h2 { + margin-top: 0; + border-bottom: none; /* Remove border as section already distinct */ } -footer { - background-color: #282828; - padding: 10px; - text-align: center; - color: #808080; - margin-top: 40px; - display: flex; - justify-content: center; + +.goals-projections p { + color: #b0b0b0; } -.contact { - margin-top: 40px; - text-align: center; + +.goals-projections strong { + color: #ffffff; /* Make strong tags stand out more */ } -.notes { - background-color: #2e2e2e; - padding: 20px; - margin: 20px 0; - border-radius: 5px; -} -ul { + +/* Task List Styling */ +ul.task-list { /* Added a class for better targeting */ list-style: none; padding-left: 0; } -li::before { - content: "• "; - color: #569cd6; + +ul.task-list li.task-list-item { + margin-bottom: 12px; /* Increased spacing */ + padding-left: 25px; /* Indent for custom bullet */ + position: relative; + font-size: 1.05em; } -.task-list-item { - margin-bottom: 5px; + +ul.task-list li.task-list-item::before { + content: ""; /* Remove default bullet to use checkbox */ + position: absolute; + left: 0; + top: 5px; /* Adjust alignment with text */ + /* Custom checkbox styling can be done here if not using input[type=checkbox] */ } -.task-list-item input { - margin-right: 10px; + +.task-list-item input[type="checkbox"] { + margin-right: 12px; vertical-align: middle; + transform: scale(1.2); /* Slightly larger checkboxes */ + cursor: not-allowed; /* Since they are disabled */ } + +/* Footer */ +footer { + background-color: #1e1e1e; + padding: 25px 0; + text-align: center; + color: #808080; + margin-top: 40px; + border-top: 1px solid #333; + font-size: 0.9em; +} + +/* Contact Section (styling for items within .contact-section if needed) */ +.contact-section { + text-align: center; /* This was in .contact before */ +} +.contact-section p { + margin-bottom: 10px; +} \ No newline at end of file