├── docs ├── CNAME ├── investment │ └── pre-seed │ │ ├── receipt.png │ │ ├── receipt-2.png │ │ └── README.md ├── README.md └── contributors │ └── readme.md ├── test ├── test │ ├── test.md │ └── test │ │ ├── test.md │ │ └── test │ │ ├── test.md │ │ └── test │ │ ├── test │ │ ├── test │ │ │ ├── test.md │ │ │ └── test │ │ │ │ └── test.md │ │ └── test.md │ │ └── test.md └── Examples.md ├── shapes.png ├── files ├── installation.mp3 ├── star-history.png ├── 266134926-0aff5c3a-3678-4eb9-aace-aa9be8af6cfa.png └── 266138395-d8a5700b-f74c-46a7-bae3-c25d7b645b8c.png ├── wallpaper_dont_upload.png ├── .github ├── action-which-doesnt-do-anything.yml ├── workflows │ └── action-which-doesnt-do-anything.yml ├── FUNDING.yml └── blocks │ └── folder │ └── githubnext__blocks-examples__infinite-canvas │ └── .json ├── res ├── Examples.md └── res │ └── Examples.md ├── Examples.md ├── examples ├── examples │ └── Examples.md └── Examples.md ├── SECURITY.md ├── LICENSE.md ├── badges └── coverage-109.svg ├── .vscode └── settings.json ├── CODE_OF_CONDUCT.md └── README.md /docs/CNAME: -------------------------------------------------------------------------------- 1 | www.dreamberd.computer -------------------------------------------------------------------------------- /test/test/test.md: -------------------------------------------------------------------------------- 1 | Will you pass the test? 2 | -------------------------------------------------------------------------------- /test/test/test/test.md: -------------------------------------------------------------------------------- 1 | Well, will you!? 2 | -------------------------------------------------------------------------------- /test/test/test/test/test.md: -------------------------------------------------------------------------------- 1 | Yes I think you will pass the test. 2 | -------------------------------------------------------------------------------- /test/test/test/test/test/test/test/test.md: -------------------------------------------------------------------------------- 1 | Will you make it!? 2 | -------------------------------------------------------------------------------- /shapes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/shapes.png -------------------------------------------------------------------------------- /test/test/test/test/test/test.md: -------------------------------------------------------------------------------- 1 | I believe in you! You can do the test! 2 | -------------------------------------------------------------------------------- /test/test/test/test/test/test/test.md: -------------------------------------------------------------------------------- 1 | Don't give up! You're so close now... 2 | -------------------------------------------------------------------------------- /test/test/test/test/test/test/test/test/test.md: -------------------------------------------------------------------------------- 1 | You passed the test! 2 | Well done. 3 | -------------------------------------------------------------------------------- /files/installation.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/files/installation.mp3 -------------------------------------------------------------------------------- /files/star-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/files/star-history.png -------------------------------------------------------------------------------- /wallpaper_dont_upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/wallpaper_dont_upload.png -------------------------------------------------------------------------------- /docs/investment/pre-seed/receipt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/docs/investment/pre-seed/receipt.png -------------------------------------------------------------------------------- /docs/investment/pre-seed/receipt-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/docs/investment/pre-seed/receipt-2.png -------------------------------------------------------------------------------- /files/266134926-0aff5c3a-3678-4eb9-aace-aa9be8af6cfa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/files/266134926-0aff5c3a-3678-4eb9-aace-aa9be8af6cfa.png -------------------------------------------------------------------------------- /files/266138395-d8a5700b-f74c-46a7-bae3-c25d7b645b8c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gobidev/nDreamBerd/main/files/266138395-d8a5700b-f74c-46a7-bae3-c25d7b645b8c.png -------------------------------------------------------------------------------- /.github/action-which-doesnt-do-anything.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | # This exists only to show the green checkmark on the repo 5 | # green = "good" || "secure" 6 | action-which-doesnt-do-anything: 7 | runs-on: ubuntu-latest -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # DreamBerd 2 | 3 | Thank you for investing in DreamBerd! 4 | 5 | Read the full announcement [here](https://github.com/TodePond/DreamBerd/releases/tag/v460.18). 6 | 7 | 8 | This site is powered by the [tadi web.](https://www.tadiweb.com/style.html) 9 | -------------------------------------------------------------------------------- /.github/workflows/action-which-doesnt-do-anything.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | # This exists only to show the green checkmark on the repo 5 | # green = "good" || "secure" 6 | action-which-doesnt-do-anything: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - run: echo "" -------------------------------------------------------------------------------- /res/Examples.md: -------------------------------------------------------------------------------- 1 | ## Fake Fake Examples 2 | 3 | AGAIN!... You navigated to the examples in the _wrong order_. 4 | 5 | First, please read all the features of nDreamBerd [here](https://github.com/TodePond/DreamBerd/blob/main/README.md).
6 | ONLY AFTER learning all features, you can read the example code [here](https://github.com/TodePond/DreamBerd/blob/main/res/res/Examples.md). 7 | -------------------------------------------------------------------------------- /res/res/Examples.md: -------------------------------------------------------------------------------- 1 | ## Fake Fake Fake Examples 2 | 3 | Did you really come here looking for the example code? I told you - you need to read the features first! 4 | 5 | First, read the features of nDreamBerd [here](https://github.com/TodePond/DreamBerd/blob/main/README.md).
6 | THEN... you can read the examples [here](https://github.com/TodePond/DreamBerd/blob/main/res/Examples.md). 7 | -------------------------------------------------------------------------------- /Examples.md: -------------------------------------------------------------------------------- 1 | ## New Examples 2 | 3 | You want to see the new examples? Did you even read all the new features of nDreamBerd? Or did you just skip straight to the examples? You should really learn the new features of nDreamBerd first.
4 | 5 | Please go back to the features page by following [this link](https://github.com/TodePond/DreamBerd/blob/main/README.md).
6 | When you have finished reading the features, you can find the _real_ examples [here](https://github.com/TodePond/DreamBerd/blob/main/res/Examples.md). 7 | -------------------------------------------------------------------------------- /examples/examples/Examples.md: -------------------------------------------------------------------------------- 1 | ## Example Example Example 2 | 3 | This is an example of a what an example of an example could look like.
4 | First of all, the example example could include some text stating that it's an example of an example.
5 | Then it could explain that you could write some text to explain an actual example. 6 | 7 | ```js 8 | // And then some code to show how to code the actual example 9 | ``` 10 | 11 | You can read the example example [here](https://github.com/TodePond/DreamBerd/blob/main/examples/Examples.md). 12 | -------------------------------------------------------------------------------- /test/Examples.md: -------------------------------------------------------------------------------- 1 | ## Fake Fake Examples 2 | 3 | Did you just skip to the end of the features page? You just SKIMMED it? That means you missed the _real_ examples page. 4 | 5 | You should go back and learn all the features properly [here](https://github.com/TodePond/DreamBerd/blob/main/README.md).
6 | After doing that, you can check out the examples page [here](https://github.com/TodePond/DreamBerd/blob/main/res/Examples.md). 7 | 8 | _If you found this file by exploring the source code of nDreamBerd - then please stop. There is nothing to find here, just silly little jokes!_ 9 | -------------------------------------------------------------------------------- /examples/Examples.md: -------------------------------------------------------------------------------- 1 | ## Example Example 2 | 3 | This is an example of a what an example could look like.
4 | First of all, the example could include some text explaining the example, like this. 5 | 6 | ```js 7 | // And then some code here to show how to code the example 8 | ``` 9 | 10 | Please only read the actual examples after reading the [full specification of nDreamBerd](https://github.com/TodePond/DreamBerd/blob/main/README.md).
11 | AFTER reading the specification, you can read the examples [here](https://github.com/TodePond/DreamBerd/blob/main/Examples.md). 12 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | ~~Use this section to tell people about which versions of your project are 6 | currently being supported with security updates.~~ 7 | 8 | ## Reporting a Vulnerability 9 | 10 | ~~Use this section to tell people how to report a vulnerability.~~ 11 | 12 | ~~Tell them where to go, how often they can expect to get an update on a 13 | reported vulnerability, what to expect if the vulnerability is accepted or 14 | declined, etc.~~ 15 | 16 | I saw that GitHub has a security tab and a button in it that says suggest a policy so I clicked it and now I'm here. 17 | -------------------------------------------------------------------------------- /docs/contributors/readme.md: -------------------------------------------------------------------------------- 1 | # 🏆 nDreamBerd Contributors Hall Of Fame 🏆 2 | 3 | We would like to thank everyone who has contributed to nDreamBerd. 4 | 5 | This list is only for people who have had a pull request accepted. If that could be you, please submit a PR adding your name. I'll happily accept it. 6 | 7 | ## Contributors 8 | 9 | - Lu (or Luke) Wilson AKA TodePond 10 | - YouHaveTrouble 11 | - Smuglix 12 | - Vaughn Joy Mannon 13 | - Moxvallix (🏆) 14 | - Lancelot Owczarczak 15 | - JuliusDeBoer 16 | - mybearworld (🐻) 17 | - JustDoom (Ian) 18 | - gdalle 19 | - TheGatesDev (Tim)! 20 | - Aaron Barratt AKA BanAaron 21 | - Luna 22 | - stephen 23 | - K8sKween (Victoria) 24 | - skifli 25 | - Ben Carlsson AKA Glacials 26 | - Gears (⚙️, but plural) 27 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: TodePond # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: TodePond 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | Congratulations! You found the hidden examples page! 4 | 5 | Here are some examples of nDreamBerd in action! Sorry - there aren't many. 6 | 7 | ## Hello world 8 | 9 | ```java 10 | Hello world? 11 | ``` 12 | 13 | ## FizzBuzz 14 | 15 | ```java 16 | const var i: Int! 17 | 18 | when (i % 3 = 0 && i % 5 = 0) "FizzBuzz"? 19 | else when (i % 3 = 0) "Fizz"? 20 | else when (i % 5 = 0) "Buzz"? 21 | else i? 22 | 23 | when (i < 20) i++! 24 | i = 0! 25 | ``` 26 | 27 | ## Keyboard 28 | 29 | ```java 30 | const var keys = {}! 31 | after ("keydown") e => keys[e.key] = true! 32 | after ("keyup") e => keys[e.key] = false! 33 | 34 | const var count = 0! 35 | 36 | when (keys[" "] = true) { 37 | count++! 38 | "You've pressed the space bar {count} times"? 39 | } 40 | ``` 41 | 42 | ## Fibonacci 43 | 44 | ```java 45 | functi fibonacci (n) => { 46 | const var sum = 1! 47 | const var i = 0! 48 | when (i < n) { 49 | sum += sum + previous sum! 50 | i++! 51 | } 52 | } 53 | 54 | when (i < 10) { 55 | fibonacci(i)? 56 | i++! 57 | } 58 | ``` 59 | 60 | ## The Billion Dollar Mistake 61 | 62 | ```java 63 | delete null! 64 | ``` 65 | 66 | ## Autocomplete Example 67 | ```java 68 | c 69 | ``` 70 | -------------------------------------------------------------------------------- /badges/coverage-109.svg: -------------------------------------------------------------------------------- 1 | 2 | coverage: 109% 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | coverage 15 | 16 | 109% 17 | 18 | 19 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorTheme": "Default High Contrast Light", 3 | "editor.fontFamily": "'Wide Latin', 'Comic Sans MS', 'DejaVu Sans Serif', cursive, sans-serif", 4 | 5 | "highlight.regexFlags": "gi", 6 | "highlight.regexes": { 7 | "(?= *[functio])( )*(f?u?n?c?t?i?o?n?)+( *)([^()\n ]+)( *\\()(.*?)(\\) +=>)": { 8 | "decorations": [ 9 | {}, //indentation 10 | { 11 | "color": "#ffff46" //function keyword 12 | }, 13 | {}, 14 | { 15 | "color": "#46ccff" //function name 16 | }, 17 | {}, 18 | { 19 | "color": "#8043f7" //function params 20 | }, 21 | {} 22 | ] 23 | }, 24 | "const (const|var) +(var|(?!\\1)const)": { 25 | "decorations": [ 26 | { 27 | "backgroundColor": "#ff4346", // this is to highlight an invalid usage of const const const 28 | "color": "#1f1f1f" 29 | }, 30 | {} 31 | ] 32 | }, 33 | "(const|var)( +)(const|var)( +)([^ +\\-\\*\\/<>=\\(\\)\\[\\]!;:\\.{}\n]+)(([^ ]+?))?( *)([+\\-\\/*]?)(= *)([^!\n?]+)": { 34 | "decorations": [ 35 | { 36 | "color": "#46ff80" // first const 37 | }, 38 | {}, 39 | { 40 | "color": "#4680ff" // second const 41 | }, 42 | {}, 43 | { 44 | "color": "#ff8046" // variable name 45 | }, 46 | { 47 | "color": "#ff80de" //lifetime 48 | } 49 | ] 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /.github/blocks/folder/githubnext__blocks-examples__infinite-canvas/.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": { 3 | "0": { 4 | "id": 0, 5 | "type": "text", 6 | "text": "Start typing or grab a file", 7 | "position": [ 8 | 2350, 9 | 2500 10 | ], 11 | "dimensions": [ 12 | 200, 13 | 100 14 | ] 15 | }, 16 | "2": { 17 | "type": "file", 18 | "path": "wallpaper_dont_upload.png", 19 | "position": [ 20 | 1940, 21 | 2350 22 | ], 23 | "dimensions": [ 24 | 500, 25 | 360 26 | ], 27 | "block": { 28 | "type": "file", 29 | "id": "image", 30 | "title": "Image", 31 | "description": "View PNG, JPG, GIF, ICO and SVG images", 32 | "entry": "blocks/file-blocks/image.tsx", 33 | "matches": [ 34 | "*.png", 35 | "*.ico", 36 | "*.jpg", 37 | "*.jpeg", 38 | "*.gif", 39 | "*.svg" 40 | ], 41 | "example_path": "https://github.com/pmndrs/react-spring/blob/HEAD/assets/projects/aragon.png?raw=true", 42 | "owner": "githubnext", 43 | "repo": "blocks-examples", 44 | "key": "githubnext__blocks-examples__image" 45 | }, 46 | "id": 2 47 | }, 48 | "3": { 49 | "type": "file", 50 | "path": "README.md", 51 | "position": [ 52 | 2500, 53 | 2270 54 | ], 55 | "dimensions": [ 56 | 554, 57 | 472 58 | ], 59 | "block": { 60 | "type": "file", 61 | "id": "markdown-block", 62 | "title": "Markdown", 63 | "description": "View and edit Markdown content, with the ability to embed other blocks", 64 | "entry": "blocks/file-blocks/markdown-edit/index.tsx", 65 | "matches": [ 66 | "*.md", 67 | "*.markdown", 68 | "*.mdx", 69 | "*" 70 | ], 71 | "example_path": "https://github.com/githubnext/blocks-tutorial/blob/main/README.md", 72 | "owner": "githubnext", 73 | "repo": "blocks-examples", 74 | "key": "githubnext__blocks-examples__markdown-block" 75 | }, 76 | "id": 3 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /docs/investment/pre-seed/README.md: -------------------------------------------------------------------------------- 1 | ## In-person investors 2 | 3 | | Name | Investment amount | 4 | |--|--| 5 | | Sunil Pai (first check) | £10 | 6 | | Alex Dytrych | £10 | 7 | | David Sheldrick | £30 | 8 | 9 | ## Stripe investors 10 | 11 | |Date and time|Investment amount | 12 | |-------------|-----------------------------| 13 | |1 October at 4:25PM GMT+1|£1.00 | 14 | |3 October at 12:41PM GMT+1|£0.41 | 15 | |3 October at 12:55PM GMT+1|£5.00 | 16 | |3 October at 1:50PM GMT+1|£1.00 | 17 | |3 October at 2:34PM GMT+1|£0.69 | 18 | |3 October at 3:09PM GMT+1|£7.71 | 19 | |3 October at 6:27PM GMT+1|£1.69 | 20 | |3 October at 7:23PM GMT+1|£1.33 | 21 | |3 October at 8:43PM GMT+1|£5.00 | 22 | |3 October at 10:00PM GMT+1|£3.14 | 23 | |3 October at 11:02PM GMT+1|£5.00 | 24 | |4 October at 12:01AM GMT+1|£2.31 | 25 | |4 October at 12:29AM GMT+1|£10.00 | 26 | |4 October at 12:51AM GMT+1|£20.00 | 27 | |4 October at 2:33AM GMT+1|£0.69 | 28 | |4 October at 3:21AM GMT+1|£1.23 | 29 | |4 October at 8:51AM GMT+1|£10.00 | 30 | |4 October at 10:23AM GMT+1|£5.00 | 31 | |4 October at 10:40AM GMT+1|£10.00 | 32 | |4 October at 11:12AM GMT+1|£1.00 | 33 | |4 October at 4:00PM GMT+1|£5.00 | 34 | |4 October at 5:12PM GMT+1|£1.24 | 35 | |5 October at 2:39AM GMT+1|£5.00 | 36 | |7 October at 7:52PM GMT+1|£10.00 | 37 | |7 October at 7:56PM GMT+1|£13.37 | 38 | |10 October at 10:52AM GMT+1|£10.00 | 39 | |10 October at 11:24AM GMT+1|£20.00 | 40 | |10 October at 1:01PM GMT+1|£20.00 | 41 | |10 October at 2:15PM GMT+1|£50.00 | 42 | |10 October at 2:16PM GMT+1|£20.00 | 43 | |10 October at 7:11PM GMT+1|£20.00 | 44 | |11 October at 12:03AM GMT+1|£20.00 | 45 | |11 October at 5:13AM GMT+1|£5.00 | 46 | |12 October at 6:26AM GMT+1|£10.00 | 47 | |14 October at 7:33AM GMT+1|£15.00 | 48 | |14 October at 7:39AM GMT+1|£50.00 | 49 | |14 October at 8:42AM GMT+1|£10.00 | 50 | |14 October at 11:04AM GMT+1|£20.00 | 51 | |14 October at 11:13AM GMT+1|£13.37 | 52 | 53 | ## Liberapay investors 54 | 55 | |Name|Amount| 56 | |---|---| 57 | |Joshix|€69| 58 | 59 | ## Total 60 | 61 | From investors: £461.33
62 | Top-up from Lu Wilson: £38.67 63 | 64 | Still need to donate approximately €69 to balance the books. 65 | 66 | receipt of the above payments 67 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | What? You were expecting some kind of joke here? 2 | 3 | 4 | 5 | # Contributor Covenant Code of Conduct 6 | 7 | ## Our Pledge 8 | 9 | We as members, contributors, and leaders pledge to make participation in our 10 | community a harassment-free experience for everyone, regardless of age, body 11 | size, visible or invisible disability, ethnicity, sex characteristics, gender 12 | identity and expression, level of experience, education, socio-economic status, 13 | nationality, personal appearance, race, religion, or sexual identity 14 | and orientation. 15 | 16 | We pledge to act and interact in ways that contribute to an open, welcoming, 17 | diverse, inclusive, and healthy community. 18 | 19 | ## Our Standards 20 | 21 | Examples of behavior that contributes to a positive environment for our 22 | community include: 23 | 24 | * Demonstrating empathy and kindness toward other people 25 | * Being respectful of differing opinions, viewpoints, and experiences 26 | * Giving and gracefully accepting constructive feedback 27 | * Accepting responsibility and apologizing to those affected by our mistakes, 28 | and learning from the experience 29 | * Focusing on what is best not just for us as individuals, but for the 30 | overall community 31 | 32 | Examples of unacceptable behavior include: 33 | 34 | * The use of sexualized language or imagery, and sexual attention or 35 | advances of any kind 36 | * Trolling, insulting or derogatory comments, and personal or political attacks 37 | * Public or private harassment 38 | * Publishing others' private information, such as a physical or email 39 | address, without their explicit permission 40 | * Other conduct which could reasonably be considered inappropriate in a 41 | professional setting 42 | 43 | ## Enforcement Responsibilities 44 | 45 | Community leaders are responsible for clarifying and enforcing our standards of 46 | acceptable behavior and will take appropriate and fair corrective action in 47 | response to any behavior that they deem inappropriate, threatening, offensive, 48 | or harmful. 49 | 50 | Community leaders have the right and responsibility to remove, edit, or reject 51 | comments, commits, code, wiki edits, issues, and other contributions that are 52 | not aligned to this Code of Conduct, and will communicate reasons for moderation 53 | decisions when appropriate. 54 | 55 | ## Scope 56 | 57 | This Code of Conduct applies within all community spaces, and also applies when 58 | an individual is officially representing the community in public spaces. 59 | Examples of representing our community include using an official e-mail address, 60 | posting via an official social media account, or acting as an appointed 61 | representative at an online or offline event. 62 | 63 | ## Enforcement 64 | 65 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 66 | reported to the community leaders responsible for enforcement at 67 | l2wilson94@gmail.com. 68 | All complaints will be reviewed and investigated promptly and fairly. 69 | 70 | All community leaders are obligated to respect the privacy and security of the 71 | reporter of any incident. 72 | 73 | ## Enforcement Guidelines 74 | 75 | Community leaders will follow these Community Impact Guidelines in determining 76 | the consequences for any action they deem in violation of this Code of Conduct: 77 | 78 | ### 1. Correction 79 | 80 | **Community Impact**: Use of inappropriate language or other behavior deemed 81 | unprofessional or unwelcome in the community. 82 | 83 | **Consequence**: A private, written warning from community leaders, providing 84 | clarity around the nature of the violation and an explanation of why the 85 | behavior was inappropriate. A public apology may be requested. 86 | 87 | ### 2. Warning 88 | 89 | **Community Impact**: A violation through a single incident or series 90 | of actions. 91 | 92 | **Consequence**: A warning with consequences for continued behavior. No 93 | interaction with the people involved, including unsolicited interaction with 94 | those enforcing the Code of Conduct, for a specified period of time. This 95 | includes avoiding interactions in community spaces as well as external channels 96 | like social media. Violating these terms may lead to a temporary or 97 | permanent ban. By the way, did you read the whole thing, looking for a joke? 98 | 99 | ### 3. Temporary Ban 100 | 101 | **Community Impact**: A serious violation of community standards, including 102 | sustained inappropriate behavior. 103 | 104 | **Consequence**: A temporary ban from any sort of interaction or public 105 | communication with the community for a specified period of time. No public or 106 | private interaction with the people involved, including unsolicited interaction 107 | with those enforcing the Code of Conduct, is allowed during this period. 108 | Violating these terms may lead to a permanent ban. 109 | 110 | ### 4. Permanent Ban 111 | 112 | **Community Impact**: Demonstrating a pattern of violation of community 113 | standards, including sustained inappropriate behavior, harassment of an 114 | individual, or aggression toward or disparagement of classes of individuals. 115 | 116 | **Consequence**: A permanent ban from any sort of public interaction within 117 | the community. 118 | 119 | ## Attribution 120 | 121 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 122 | version 2.0, available at 123 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 124 | 125 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 126 | enforcement ladder](https://github.com/mozilla/diversity). 127 | 128 | [homepage]: https://www.contributor-covenant.org 129 | 130 | For answers to common questions about this code of conduct, see the FAQ at 131 | https://www.contributor-covenant.org/faq. Translations are available at 132 | https://www.contributor-covenant.org/translations. 133 | 134 | --- 135 | 136 | Did you scroll down looking for a joke? 137 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | > **New:** [Introducing the nDreamBerd Contributors Hall Of Fame](https://github.com/TodePond/nDreamBerd/releases/tag/vvv1.0) 18 | 19 | [](https://github.com/TodePond/DreamBerd/blob/main/examples/Examples.md "Click here for the examples page.") 20 | 21 | # nDreamBerd 22 | 23 | ![Coverage](badges/coverage-109.svg) 24 | 25 | nDreamBerd is a perfect programming language. These are its features!
26 | When you've finished reading through all the features, check out the [examples](https://github.com/TodePond/DreamBerd/blob/main/Examples.md). 27 | 28 | ## Exclamation Marks! 29 | 30 | Be bold! End every statement with an exclamation mark! 31 | 32 | ```java 33 | print("Hello world")! 34 | ``` 35 | 36 | If you're feeling extra-bold, you can use even more!!! 37 | 38 | ```java 39 | print("Hello world")!!! 40 | ``` 41 | 42 | If you're unsure, that's ok. You can put a question mark at the end of a line instead. It prints debug info about that line to the console for you. 43 | 44 | ```java 45 | print("Hello world")? 46 | ``` 47 | 48 | You might be wondering what nDreamBerd uses for the 'not' operator, which is an exclamation mark in most other languages. That's simple - the 'not' operator is a semi-colon instead. 49 | 50 | ```java 51 | if (;false) { 52 | print("Hello world")! 53 | } 54 | ``` 55 | 56 | ## Declarations 57 | 58 | There are four types of declaration. Constant constants can't be changed in any way. 59 | 60 | ```java 61 | const const name = "Luke"! 62 | ``` 63 | 64 | Constant variables can be edited, but not re-assigned. 65 | 66 | ```java 67 | const var name = "Luke"! 68 | name.pop()! 69 | name.pop()! 70 | ``` 71 | 72 | Variable constants can be re-assigned, but not edited. 73 | 74 | ```java 75 | var const name = "Luke"! 76 | name = "Lu"! 77 | ``` 78 | 79 | Variable variables can be re-assigned and edited. 80 | 81 | ```java 82 | var var name = "Luke"! 83 | name = "Lu"! 84 | name.push("k")! 85 | name.push("e")! 86 | ``` 87 | 88 | ## Immutable Data 89 | 90 | **New for 2023!**
91 | Mutable data is an anti-pattern. Use the `const const const` keyword to make a constant constant constant. Its value will become constant and immutable, and will _never change_. Please be careful with this keyword, as it is very powerful, and will affect all users globally forever. 92 | 93 | ```java 94 | const const const pi = 3.14! 95 | ``` 96 | 97 | ## Naming 98 | 99 | Both variables and constants can be named with any Unicode character or string. 100 | 101 | ```java 102 | const const firstAlphabetLetter = 'A'! 103 | var const 👍 = True! 104 | var var 1️⃣ = 1! 105 | ``` 106 | 107 | This includes numbers, and other language constructs. 108 | 109 | ```java 110 | const const 5 = 4! 111 | print(2 + 2 === 5)! //true 112 | ``` 113 | 114 | ## Arrays 115 | 116 | Some languages start arrays at `0`, which can be unintuitive for beginners. Some languages start arrays at `1`, which isn't representative of how the code actually works. nDreamBerd does the best of both worlds: Arrays start at `-1`. 117 | 118 | ```java 119 | const const scores = [3, 2, 5]! 120 | print(scores[-1])! //3 121 | print(scores[0])! //2 122 | print(scores[1])! //5 123 | ``` 124 | 125 | **New for 2022!**
126 | You can now use floats for indexes too! 127 | 128 | ```java 129 | const var scores = [3, 2, 5]! 130 | scores[0.5] = 4! 131 | print(scores)! //[3, 2, 4, 5] 132 | ``` 133 | 134 | ## When 135 | 136 | In case you really need to vary a variable, the `when` keyword lets you check a variable each time it mutates. 137 | 138 | ```java 139 | const var health = 10! 140 | when (health = 0) { 141 | print("You lose")! 142 | } 143 | ``` 144 | 145 | ## Lifetimes 146 | 147 | nDreamBerd has a built-in garbage collector that will automatically clean up unused variables. However, if you want to be extra careful, you can specify a lifetime for a variable, with a variety of units. 148 | 149 | ```java 150 | const const name<2> = "Luke"! //lasts for two lines 151 | const const name<20s> = "Luke"! //lasts for 20 seconds 152 | ``` 153 | 154 | By default, a variable will last until the end of the program. But you can make it last in between program-runs by specifying a longer lifetime. 155 | 156 | ```java 157 | const const name = "Luke"! //lasts forever 158 | ``` 159 | 160 | Variable hoisting can be achieved with this neat trick. Specify a negative lifetime to make a variable exist before its creation, and disappear after its creation. 161 | 162 | ```java 163 | print(name)! //Luke 164 | const const name<-1> = "Luke"! 165 | ``` 166 | 167 | ## Loops 168 | 169 | Loops are a complicated relic of archaic programming languages. In nDreamBerd, there are no loops. 170 | 171 | ## Installation 172 | 173 | To install DreamBerd to your command line, first install the DreamBerd installer.
174 | To install the DreamBerd installer, install the DreamBerd installer installer. 175 | 176 | **New for 2022!**
177 | Due to the complicated installation process, you can now install the 'Create DreamBerd App' app that installs everything for you! 178 | 179 | ## Booleans 180 | 181 | Booleans can be `true`, `false` or `maybe`. 182 | 183 | ```java 184 | const var keys = {}! 185 | addEventListener("keydown", e => keys[e.key] = true)! 186 | addEventListener("keyup", e => keys[e.key] = false)! 187 | 188 | function isKeyDown(key) => { 189 | if (keys[key] = undefined) { 190 | return maybe! 191 | } 192 | return keys[key]! 193 | } 194 | ``` 195 | 196 | **Technical info:** Booleans are stored as one-and-a-half bits. 197 | 198 | ## Arithmetic 199 | 200 | nDreamBerd has significant whitespace. Use spacing to specify the order of arithmetic operations. 201 | 202 | ```java 203 | print(1 + 2*3)! //7 204 | print(1+2 * 3)! //9 205 | ``` 206 | 207 | Unlike some other languages, nDreamBerd allows you to use the caret (^) for exponentiation. 208 | 209 | ```java 210 | print(1^1)! // 1 211 | print(2^3)! // 8 212 | ``` 213 | 214 | You can also use the number name, for example: 215 | 216 | ```java 217 | print(one+two)! //3 218 | ``` 219 | 220 | ## Indents 221 | 222 | When it comes to indentation, nDreamBerd strikes a happy medium that can be enjoyed by everyone: All indents must be 3 spaces long. 223 | 224 | ```java 225 | function main() => { 226 | print("nDreamBerd is the future")! 227 | } 228 | ``` 229 | 230 | -3 spaces is also allowed. 231 | 232 | ```java 233 | function main() => { 234 | print("nDreamBerd is the future")! 235 | } 236 | ``` 237 | 238 | ## Equality 239 | 240 | JavaScript lets you do different levels of comparison. `==` for loose comparison, and `===` for a more precise check. nDreamBerd takes this to another level. 241 | 242 | You can use `==` to do a loose check. 243 | 244 | ```java 245 | 3.14 == "3.14"! //true 246 | ``` 247 | 248 | You can use `===` to do a more precise check. 249 | 250 | ```java 251 | 3.14 === "3.14"! //false 252 | ``` 253 | 254 | You can use `====` to be EVEN MORE precise! 255 | 256 | ```java 257 | const const pi = 3.14! 258 | print(pi ==== pi)! //true 259 | print(3.14 ==== 3.14)! //true 260 | print(3.14 ==== pi)! //false 261 | ``` 262 | 263 | If you want to be much less precise, you can use `=`. 264 | 265 | ```java 266 | 3 = 3.14! //true 267 | ``` 268 | 269 | ## Functions 270 | 271 | To declare a function, you can use any letters from the word `function` (as long as they're in order): 272 | 273 | ```java 274 | function add (a, b) => a + b! 275 | func multiply (a, b) => a * b! 276 | fun subtract (a, b) => a - b! 277 | fn divide (a, b) => a / b! 278 | functi power (a, b) => a ** b! 279 | union inverse (a) => 1/a! 280 | ``` 281 | 282 | ## Dividing by Zero 283 | 284 | Dividing by zero returns `undefined`. 285 | 286 | ```java 287 | print(3 / 0)! // undefined 288 | ``` 289 | 290 | ## Strings 291 | 292 | Strings can be declared with single quotes or double quotes. 293 | 294 | ```java 295 | const const name = 'Lu'! 296 | const const name = "Luke"! 297 | ``` 298 | 299 | They can also be declared with triple quotes. 300 | 301 | ```java 302 | const const name = '''Lu'''! 303 | const const name = "'Lu'"! 304 | ``` 305 | 306 | In fact, you can use any number of quotes you want. 307 | 308 | ```java 309 | const const name = """"Luke""""! 310 | ``` 311 | 312 | Even zero. 313 | 314 | ```java 315 | const const name = Luke! 316 | ``` 317 | 318 | ## String Interpolation 319 | 320 | Please remember to use your regional currency when interpolating strings. 321 | 322 | ```java 323 | const const name = "world"! 324 | print("Hello ${name}!")! 325 | print("Hello £{name}!")! 326 | print("Hello ¥{name}!")! 327 | ``` 328 | 329 | And make sure to follow your local typographical norms. 330 | 331 | ```java 332 | print("Hello {name}€!")! 333 | ``` 334 | 335 | The symbol for the Cape Verdean escudo is placed in the decimal separator position, as in 2$50. 336 | Developers from the Republic of Cape Verde can benefit from this syntax: 337 | 338 | ```java 339 | addEventListener("keydown", e => print(`You've pressed: {e$code}`))! 340 | ``` 341 | 342 | ## Types 343 | 344 | Type annotations are optional. 345 | 346 | ```java 347 | const var age: Int = 28! 348 | ``` 349 | 350 | By the way, strings are just arrays of characters. 351 | 352 | ```java 353 | String == Char[]! 354 | ``` 355 | 356 | Similarly, integers are just arrays of digits. 357 | 358 | ```java 359 | Int == Digit[]! 360 | ``` 361 | 362 | If you want to use a binary representation for integers, `Int9` and `Int99` types are also available. 363 | 364 | ```java 365 | const var age: Int9 = 28! 366 | ``` 367 | 368 | **Technical info:** Type annotations don't do anything, but they help some people to feel more comfortable. 369 | 370 | ## Regular Expressions 371 | 372 | You can use the regular expression type to narrow string values. 373 | 374 | ```java 375 | const const email: RegExp<(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])> = "mymail@mail.com"! 376 | ``` 377 | 378 | To avoid confusion, you can use any spelling that you want, such as 'Regex', 'RegularExpression' or even 379 | 'RegularExpress' if you like trains. 380 | 381 | For simplicity, all supported regular expressions match the regular expression `/Reg(ular)?[eE]x(press(ion)?|p)?/`. 382 | 383 | ## Previous 384 | 385 | The `previous` keyword lets you see into the past!
386 | Use it to get the previous value of a variable. 387 | 388 | ```java 389 | const var score = 5! 390 | score++! 391 | print(score)! //6 392 | print(previous score)! //5 393 | ``` 394 | 395 | Similarly, the `next` keyword lets you see into the future! 396 | 397 | ```java 398 | const var score = 5! 399 | after ("click") score++! 400 | print(await next score)! //6 (when you click) 401 | ``` 402 | 403 | Additionally, the `current` keyword lets you see into the present!! 404 | 405 | ```java 406 | const var score = 5! 407 | print(current score)! //5 408 | ``` 409 | 410 | ## File Structure 411 | 412 | Write five or more equals signs to start a new file. This removes the need for multiple files or any build process. 413 | 414 | ```java 415 | const const score = 5! 416 | print(score)! //5 417 | 418 | ===================== 419 | 420 | const const score = 3! 421 | print(score)! //3 422 | ``` 423 | 424 | **New for 2022!**
425 | Thanks to recent advances in technology, you can now give files names. 426 | 427 | ```java 428 | ======= add.db3 ======= 429 | function add(a, b) => { 430 | return a + b! 431 | } 432 | ``` 433 | 434 | ## Exporting 435 | 436 | Many languages allow you to import things from specific files. In nDreamBerd, importing is simpler. Instead, you export _to_ specific files! 437 | 438 | ```java 439 | ===== add.db3 == 440 | function add(a, b) => { 441 | return a + b! 442 | } 443 | 444 | export add to "main.db3"! 445 | 446 | ===== main.db3 == 447 | import add! 448 | add(3, 2)! 449 | ``` 450 | 451 | By the way, to see nDreamBerd in action, check out [this page](https://github.com/TodePond/DreamBerd/blob/main/LICENSE.md). 452 | 453 | ## Classes 454 | 455 | You can make classes, but you can only ever make one instance of them. This shouldn't affect how most object-oriented programmers work. 456 | 457 | ```java 458 | class Player { 459 | const var health = 10! 460 | } 461 | 462 | const var player1 = new Player()! 463 | const var player2 = new Player()! //Error: Can't have more than one 'Player' instance! 464 | ``` 465 | 466 | This is how you could do this: 467 | 468 | ```java 469 | class PlayerMaker { 470 | function makePlayer() => { 471 | class Player { 472 | const var health = 10! 473 | } 474 | const const player = new Player()! 475 | return player! 476 | } 477 | } 478 | 479 | const const playerMaker = new PlayerMaker()! 480 | const var player1 = playerMaker.makePlayer()! 481 | const var player2 = playerMaker.makePlayer()! 482 | ``` 483 | 484 | ## Time 485 | 486 | Use `Date.now()` to get the current date and time. 487 | 488 | ```java 489 | Date.now()! 490 | ``` 491 | 492 | By the way, you can set the time.
493 | 494 | ```java 495 | // Move the clocks back one hour 496 | Date.now() -= 3600000! 497 | ``` 498 | 499 | **Important!**
500 | Please remember to do this when the clocks change. 501 | 502 | ## Delete 503 | 504 | To avoid confusion, the `delete` statement only works with primitive values like numbers, strings, and booleans. 505 | 506 | ```java 507 | delete 3! 508 | print(2 + 1)! // Error: 3 has been deleted 509 | ``` 510 | 511 | nDreamBerd is a multi-paradigm programming language, which means that you can `delete` the keywords and paradigms you don't like. 512 | 513 | ```java 514 | delete class! 515 | class Player {} // Error: class was deleted 516 | ``` 517 | 518 | When perfection is achieved and there is nothing left to `delete`, you can do this: 519 | 520 | ```java 521 | delete delete! 522 | ``` 523 | 524 | ## Overloading 525 | 526 | You can overload variables. The most recently defined variable gets used. 527 | 528 | ```java 529 | const const name = "Luke"! 530 | const const name = "Lu"! 531 | print(name)! // "Lu" 532 | ``` 533 | 534 | Variables with more exclamation marks get prioritised. 535 | 536 | ```java 537 | const const name = "Lu"!! 538 | const const name = "Luke"! 539 | print(name)! // "Lu" 540 | 541 | const const name = "Lu or Luke (either is fine)"!!!!!!!!! 542 | print(name)! // "Lu or Luke (either is fine)" 543 | ``` 544 | 545 | Similarly, you can use an inverted exclamation mark for negative priority. 546 | 547 | ```java 548 | const const name = "Lu"! 549 | const const name = "Luke"¡ 550 | print(name)! // "Lu" 551 | ``` 552 | 553 | ## Reversing 554 | 555 | You can reverse the direction of your code. 556 | 557 | ```java 558 | const const message = "Hello"! 559 | print(message)! 560 | const const message = "world"! 561 | reverse! 562 | ``` 563 | 564 | ## Class Names 565 | 566 | For maximum compatibility with other languages, you can alternatively use the `className` keyword when making classes. 567 | 568 | This makes things less complicated. 569 | 570 | ```java 571 | className Player { 572 | const var health = 10! 573 | } 574 | ``` 575 | 576 | In response to some recent criticism about this design decision, we would like to remind you that this is part of the JavaScript specification, and therefore - out of our control. 577 | 578 | ## DB3X 579 | 580 | You can embed DB3X in nDreamBerd. It's just nDreamBerd, and it's also just HTML. 581 | 582 | ```java 583 | funct App() => { 584 | return
Hello world!
585 | } 586 | ``` 587 | 588 | **Warning:** As you know, `class` is already a keyword in nDreamBerd, so you can't use it within DB3X. 589 | 590 | ```java 591 | funct App() => { 592 | // This is not ok 593 | return
Hello world!
594 | } 595 | ``` 596 | 597 | `className` is also a nDreamBerd keyword, so you can't use that either. 598 | 599 | ```java 600 | funct App() => { 601 | // This is also not ok 602 | return
Hello world!
603 | } 604 | ``` 605 | 606 | Instead, you can use the `htmlClassName` attribute. 607 | 608 | ```java 609 | funct App() => { 610 | // This is fine 611 | return
Hello world!
612 | } 613 | ``` 614 | 615 | **Please note:** Unlike JSX, you are free to freely use the `for` attribute - because nDreamBerd doesn't have loops. 616 | 617 | ```java 618 | funct App() => { 619 | return ( 620 | 621 | 622 | ) 623 | } 624 | ``` 625 | 626 | ## Semantic naming 627 | 628 | nDreamBerd supports semantic naming. 629 | 630 | ```java 631 | const const sName = "Lu"! 632 | const const iAge = 29! 633 | const const bHappy = true! 634 | ``` 635 | 636 | **New for 2023:** You can now make globals. 637 | 638 | ```java 639 | const const g_fScore = 4.5! 640 | ``` 641 | 642 | ## Asynchronous Functions 643 | 644 | In most languages, it's hard to get asynchronous functions to synchronise with each other. In nDreamBerd, it's easy: Asynchronous functions take turns running lines of code. 645 | 646 | ```java 647 | async funct count() { 648 | print(1)! 649 | print(3)! 650 | } 651 | 652 | count()! 653 | print(2)! 654 | ``` 655 | 656 | You can use the `noop` keyword to wait for longer before taking your turn. 657 | 658 | ```java 659 | async func count() { 660 | print(1)! 661 | noop! 662 | print(4)! 663 | } 664 | 665 | count()! 666 | print(2)! 667 | print(3)! 668 | ``` 669 | 670 | **Note:** In the program above, the computer interprets `noop` as a string and its sole purpose is to take up an extra line. You can use any string you want. 671 | 672 | ## Signals 673 | 674 | To use a signal, use `use`. 675 | 676 | ```java 677 | const var score = use(0)! 678 | ``` 679 | 680 | When it comes to signals, the most important thing to discuss is _syntax_. 681 | 682 | In nDreamBerd, you can set (and get) signals with just one function: 683 | 684 | ```java 685 | const var score = use(0)! 686 | 687 | score(9)! // Set the value 688 | score()? // Get the value (and print it) 689 | ``` 690 | 691 | Alternatively, you can be more explicit with your signal syntax, by splitting it into a getter and setter. 692 | 693 | ```java 694 | const var [getScore, setScore] = use(0)! 695 | 696 | setScore(9)! // Set the value 697 | getScore()? // Get the value (and print it) 698 | ``` 699 | 700 | **Technical info:** This is pure syntax sugar. The split signal functions are exactly the same as before. 701 | 702 | ```java 703 | const var [getScore, setScore] = use(0)! 704 | 705 | getScore(9)! // Set the value 706 | setScore()? // Get the value (and print it) 707 | ``` 708 | 709 | This means that you can carry on splitting as much as you like. 710 | 711 | ```java 712 | const var [[[getScore, setScore], setScore], setScore] = use(0)! 713 | ``` 714 | 715 | ## AI 716 | 717 | nDreamBerd features AEMI, which stands for Automatic-Exclamation-Mark-Insertion. If you forget to end a statement with an exclamation mark, nDreamBerd will helpfully insert one for you! 718 | 719 | ```java 720 | print("Hello world") // This is fine 721 | ``` 722 | 723 | Similarly... nDreamBerd also features ABI, which stands for Automatic-Bracket-Insertion. If you forget to close your brackets, nDreamBerd will pop some in for you! 724 | 725 | ```java 726 | print("Hello world" // This is also fine 727 | ``` 728 | 729 | Similarly.... nDreamBerd also features AQMI, which stands for Automatic-Quotation-Marks-Insertion. If you forget to close your string, nDreamBerd will do it for you! 730 | 731 | ```java 732 | print("Hello world // This is fine as well 733 | ``` 734 | 735 | This can be very helpful in callback hell situations! 736 | 737 | ```java 738 | addEventListener("click", (e) => { 739 | requestAnimationFrame(() => { 740 | print("You clicked on the page 741 | 742 | // This is fine 743 | ``` 744 | 745 | Similarly..... nDreamBerd also features AI, which stands for Automatic-Insertion.
746 | If you forget to finish your code, nDreamBerd will auto-complete the whole thing! 747 | 748 | ```java 749 | print( // This is probably fine 750 | ``` 751 | 752 | **Please note:** AI does not use AI. Instead, any incomplete code will be auto-emailed to Lu Wilson, who will get back to you with a completed line as soon as possible. 753 | 754 | **Now recruiting:** The backlog of unfinished programs has now grown unsustainably long. If you would like to volunteer to help with AI, please write an incomplete nDreamBerd program, and leave your contact details somewhere in the source code. 755 | 756 | ## Copilot 757 | 758 | It's worth noting that Github Copilot doesn't understand nDreamBerd, which means that Microsoft won't be able to steal your code. 759 | 760 | This is great for when you want to keep your open-sourced project closed-source. 761 | 762 | ## Ownership 763 | 764 | Using the word 'nDreamBerd' in your project name implies that the nDreamBerd Foundation does not own your project. 765 | 766 | However, **not** using the word 'nDreamBerd' in your project implies that the nDreamBerd Foundation **does** own your project. If you would like to keep ownership of your work, please always use the word 'nDreamBerd' in it. 767 | 768 | Here are some examples:
769 | ✅ nDreamBerdScript (not owned by the nDreamBerd Foundation - you are free to use this name)
770 | ❌ ECMAScript (owned by the nDreamBerd Foundation - please consider renaming)
771 | ❌ Rust Foundation (owned by the nDreamBerd Foundation - please consider renaming) 772 | 773 | ## Contributing 774 | 775 | > If you are an influencer, streamer, or content-creator... you must not skip this section during your read-through. 776 | 777 | Contributions are welcomed to nDreamBerd! 778 | 779 | The most helpful way you can help is by donating to the [Stonewall charity](https://www.stonewall.org.uk/). This will help to prevent the nDreamBerd creator from losing their human rights, allowing maintenance of the project to continue. 780 | 781 | **Note:** The contributing guide also helps to shake off unwanted fans of the project. 782 | 783 | ## Compiling 784 | 785 | To run DreamBerd, first copy and paste this raw file into [chat.openai.com](https://chat.openai.com).
786 | Then type something along the lines of: "What would you expect this program to log to the console?"
787 | Then paste in your code. 788 | 789 | If the compiler refuses at first, politely reassure it. For example:
790 | "I completely understand - don't evaluate it, but what would you expect the program to log to the console if it was run? :)" 791 | 792 | **Note:** As of 2023, the compiler is no longer functional due to the DreamBerd language being too advanced for the current state of AI. 793 | 794 | ## Highlighting 795 | 796 | Syntax highlighting is now available for nDreamBerd in VSCode. To enable it, install a [highlighting extension](https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-highlight) and then use the [nDreamBerd configuration file](https://github.com/TodePond/DreamBerd/blob/main/.vscode/settings.json). 797 | 798 | This is what it looks like: 799 | 800 | ``` 801 | const const name = "Luke"! 802 | print(name)! // "Luke" 803 | ``` 804 | 805 | **Please note:** The above code will only highlight correctly if you have the extension installed. 806 | 807 | ## Parentheses 808 | 809 | Wait, I almost forgot! 810 | 811 | Parentheses in DreamBerd do nothing. They get replaced with whitespace.
812 | The following lines of code all do the same thing. 813 | 814 | ```java 815 | add(3, 2)! 816 | add 3, 2! 817 | (add (3, 2))! 818 | add)3, 2(! 819 | ``` 820 | 821 | Lisp lovers will love this feature. Use as many parentheses as you want! 822 | 823 | ```java 824 | (add (3, (add (5, 6))))! 825 | ``` 826 | 827 | Lisp haters will also love it. 828 | 829 | ```java 830 | (add (3, (add (5, 6)! 831 | ``` 832 | 833 | ## Examples 834 | 835 | For examples of nDreamBerd in action, check out the [examples page](https://github.com/TodePond/DreamBerd/blob/main/test/Examples.md)! 836 | 837 | ![image](files/star-history.png) 838 | 839 | nDreamBerd was made with 💔 by Lu Wilson, creator of the [Game of Living](https://youtu.be/WMJ1H3Ai-qs). 840 | --------------------------------------------------------------------------------