Menu

Tree [3dd55a] master /
 History

HTTPS access


File Date Author Commit
 .github 2025-05-10 Gabor de Mooij Gabor de Mooij [1399cc] verbeter tests
 bin 2023-04-28 Gabor de Mooij Gabor de Mooij [3173c3] Add gitkeeps.
 i18n 2025-07-29 Gabor de Mooij Gabor de Mooij [5fdf4f] voeg ondersteuning toe voor tijdmachine
 misc 2025-08-21 Gabor de Mooij Gabor de Mooij [3dd55a] add nl assets
 mods 2025-07-11 Gabor de Mooij Gabor de Mooij [454921] behoud mods/media voor testen
 plugins 2025-08-19 Gabor de Mooij Gabor de Mooij [d8647e] remove unused variable
 tests 2025-08-06 Gabor de Mooij Gabor de Mooij [55541f] make test for decreasing speed issue
 .gitignore 2025-03-24 Gabor de Mooij Gabor de Mooij [f91760] Update gitignore
 LICENSE 2023-10-07 Gabor de Mooij Gabor de Mooij [dcf8fa] Update dictionary files for media plugin.
 README.md 2024-08-11 Gabor de Mooij Gabor de Mooij [fd346d] Update README
 base.c 2025-08-02 Gabor de Mooij Gabor de Mooij [581efa] make procedure consume CtrStdContinue flows, ev...
 citrine.c 2025-06-24 Gabor de Mooij Gabor de Mooij [77501f] wasm tweaks
 citrine.h 2025-07-29 Gabor de Mooij Gabor de Mooij [6ffa66] fix issue with lowering speed
 collections.c 2025-07-22 Gabor de Mooij Gabor de Mooij [e8ca11] ctr_array_has
 file.c 2022-09-03 Gabor de Mooij Gabor de Mooij [1a5a40] Improved support for Windows 64-bit.
 lexer.c 2024-09-27 Gabor de Mooij Gabor de Mooij [696b5b] Add translation modifier to lexer.
 makefile 2024-07-27 Gabor de Mooij Gabor de Mooij [63f180] Simplify ASCII, remove parser logic and move AS...
 makefile.bsd 2024-07-27 Gabor de Mooij Gabor de Mooij [63f180] Simplify ASCII, remove parser logic and move AS...
 makefile.haiku 2024-07-27 Gabor de Mooij Gabor de Mooij [63f180] Simplify ASCII, remove parser logic and move AS...
 makefile.mac 2025-01-25 Gabor de Mooij Gabor de Mooij [1a9122] Merge with mac-branch.
 makefile.wasm 2025-08-18 Gabor de Mooij Gabor de Mooij [3b8bb6] clean-up makefiles
 makefile.win32 2024-07-27 Gabor de Mooij Gabor de Mooij [63f180] Simplify ASCII, remove parser logic and move AS...
 makefile.win64 2025-07-11 Gabor de Mooij Gabor de Mooij [04ad5c] begin testen met mockmedia
 memory.c 2025-05-15 Gabor de Mooij Gabor de Mooij [00307d] opschonen
 mk.sh 2025-05-11 Gabor de Mooij Gabor de Mooij [a7694b] mk-script bijwerken
 parser.c 2025-03-18 Gabor de Mooij Gabor de Mooij [cf0159] No longer allow empty task with parameter (empt...
 portability.c 2025-05-10 Gabor de Mooij Gabor de Mooij [1399cc] verbeter tests
 runtests.sh 2025-08-06 Gabor de Mooij Gabor de Mooij [55541f] make test for decreasing speed issue
 siphash.c 2015-11-28 Gabor de Mooij Gabor de Mooij [ecfb56] Added SipHash.
 siphash.h 2015-11-28 Gabor de Mooij Gabor de Mooij [ecfb56] Added SipHash.
 system.c 2025-07-29 Gabor de Mooij Gabor de Mooij [587dd9] set default version time
 test.c 2025-05-10 Gabor de Mooij Gabor de Mooij [1399cc] verbeter tests
 translator.c 2024-10-19 Gabor de Mooij Gabor de Mooij [cce2b5] Fix translation modifier issue.
 utf8.c 2022-06-26 Gabor de Mooij Gabor de Mooij [228e1e] Fix signed/unsigned comparisons.
 util.c 2025-05-15 Gabor de Mooij Gabor de Mooij [00307d] opschonen
 walker.c 2025-06-16 Gabor de Mooij Gabor de Mooij [7a7f9c] ondersteuning voor wasm
 world.c 2025-07-29 Gabor de Mooij Gabor de Mooij [5fdf4f] voeg ondersteuning toe voor tijdmachine
 i18nsel 2025-05-10 Gabor de Mooij Gabor de Mooij [1399cc] verbeter tests

Read Me

Citrine

Welcome to the Citrine Programming Language Project.

Citrine is a general-purpose, localised scripting language. It aims to foster readable
and maintainable code, while remaining simple and easy to learn by focusing on syntactical
and conceptual minimalism:

>> greeting := ['Hello country!'].

greeting country: ['Great Britain'].

Out write: greeting.

Hello Great Britain!

Citrine is wholly free and
open-source software, released under the 2-clause BSD
License (see the file LICENSE).

For more information (including more examples and an on-line demo), please see the
official website.

Installation

Citrine is cross-platform and should run on a variety of operating systems, but the
installation procedure for some is currently lacking in support. Help to improve the
situation is very welcome.

Please make sure you are using the latest official release of Citrine, in order to have
the newest features and bug fixes.

Using a precompiled binary

The easiest way to get started is by using a precompiled binary, currently available on
the official website for the following systems:

  • GNU/Linux
  • Microsoft Windows
  • OpenBSD

Compiling the source code

Source code for the latest official release may likewise be acquired from the official
website
. If you choose to compile it yourself,
there’s an installation script, mk.sh, included to automate the process. You may run it
as follows:

./mk.sh

This should generate a separate binary for every supported language in the bin
directory, in a subdirectory matching your system. Now you can install Citrine with all of
the compiled binaries using make:

make install

You can adjust the path the files get installed to by setting the variable prefix, if
the default value doesn’t work well for your setup:

make prefix='/usr/local' install

Compiling only some languages

Compiling binaries for all the languages can take a while. If you know for sure that you
won’t be needing all of those, you can choose to only compile binaries for a subset of the
languages instead, by passing their codes as arguments to mk.sh:

./mk.sh en nl  #Compile English and Dutch only.

Without arguments, mk.sh compiles all the languages listed in the i18nsel directory.
By default, this is only a symbolic link to the actual directory i18n, where all of the
available languages are really stored.

Manual compilation

In case mk.sh doesn’t work for you, here’s an explanation of how to compile Citrine
manually, but still using make:

First, a binary for every language is compiled separately. Every time you run make on
the appropriate makefile, the environment variable ISO of your shell should contain the
ISO code of the language you want to compile. Likewise, the variable OS should contain
an identifier of your operating system. For example:

ISO='hi' OS='Haiku' make -f makefile all

Given the above, make would fetch Hindi vocabularies from the language’s files in
i18n/hi, compile them into a binary named ctr, and copy the binary to the Haiku
system’s directory at bin/Haiku, with the language’s code attached to the filename.

Now’s a good opportunity to use the binary to compose a dictionary of translations between
two languages. Just point Citrine to each language’s dictionary.h file to make a one-way
translation dictionary:

./ctr -g i18n/nl/dictionary.h i18n/hi/dictionary.h > dict/nlhi.dict
./ctr -g i18n/hi/dictionary.h i18n/nl/dictionary.h > dict/hinl.dict

These two commands would produce two dictionaries in the dict directory: one for
translating from Dutch to Hindi, and another for translating from Hindi to Dutch.

Having done all this, you can clean up the files produced during compilation and move on
to the next language:

make -f makefile clean

Once you’ve compiled all the languages you want, you will find the binaries in bin. You
can start using them right away, but you might want to install them under your system’s
standard binary path first.

And with this, you should be done!

Contributing

If you’d like to contribute to the project, you can get in touch using e-mail or GitHub.
Forms of contribution include, but are not limited to:

Citrine and its plugins are written in the C programming language. The Citrine Project
is apolitical.

CitrineCI

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.