mwot


Namemwot JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://codeberg.org/gramkraxor/mwot
SummaryConstrained writing as an encoding
upload_time2024-04-02 22:27:55
maintainerNone
docs_urlNone
authorGramkraxor
requires_python>=3.8
licenseUnlicense
keywords esolang esoteric language brainfuck
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # MWOT, an esolang


## The MWOT Language

MWOT is an esoteric language for writing individual bits as readable
text.
Or text that is entirely unreadable.
The only requirement is that each word have a number of letters equal to
the bit it represents, modulo 2.
The full rules of the language are:

- Words are separated by whitespace.
- A word with an odd number of letters (not including digits or
  punctuation) generates a 1.
- A word with an even number of letters generates a 0.
- A word with no letters is ignored.
- A shebang (a sequence at the very start of a file starting with "#!"
  and ending with a newline) is ignored.

MWOT's design allows perfectly valid data to be written as a poem, a
story, a manifesto, or a lot of nonsense.
Its broad definition of "letter" allows it to work with any written
language.
And its ability to conceal data in plain text gives it excellent
steganographic potential.

Because raw bits aren't very useful, MWOT compiles to two formats:
brainfuck and binary.

### Brainfuck MWOT

A true esoteric programming language.
Every three bits encode a brainfuck instruction.

| MWOT                    | bits | brainfuck |
| :---------------------- | :--- | :-------: |
| An Indirect Kiss        | 000  |    `>`    |
| Drop Beat Dad           | 001  |    `<`    |
| Greg the Babysitter     | 010  |    `+`    |
| On the Run              | 011  |    `-`    |
| Super Watermelon Island | 100  |    `.`    |
| Beach City Drift        | 101  |    `,`    |
| Story for Steven        | 110  |    `[`    |
| Catch and Release       | 111  |    `]`    |

### Binary MWOT

Bits are grouped into bytes.
Think of it like a really inefficient base64.

| MWOT                               | bits     | byte   |
| :--------------------------------- | :------- | :----: |
| I can show you how to be strong /  | 11011000 | `\xd8` |
| In the real way / And I know that  | 01011100 |  `\\`  |
| we can be strong / In the real way | 01000101 |  `E`   |

### Etymology

"MWOT" stands for Massive Wall Of Text, something that is unavoidable
when rendering even small amounts of data in this format.

Or maybe it stands for Massive Waste Of Time.
Do you know how long it takes to *write* a massive wall of text that
compiles to exactly what you wanted it to?


## The `mwot` Program

`mwot` can compile or decompile MWOT.
It also comes with a brainfuck interpreter built in.

Its options include:

- Free choice to take source code (also, interpreter input) from
  standard input, a file, or a string
- Shebang and executable permission control
- Multiple decompilers to try
- Full control of the brainfuck interpreter's implementation details

### Usage examples

```sh
# Compile `hello.mwot` as brainfuck
mwot -cb hello.mwot -o hello.b

# Decompile `goodbye.txt` as binary data
mwot -dy goodbye.txt -o goodbye.txt.mwot

# Execute brainfuck
mwot -xb hello.b

# Compile `hello.mwot` to an executable brainfuck script
mwot -cbSX hello.mwot -o hello

# Generate a very literal `hello.mwot`, using standard I/O
mwot -db -D basic --vocab 'zero one' < hello.b > hello-literal.mwot

# Execute brainfuck with strict settings and no input
mwot -xb --eof=-1 --wraparound false --no-shebang-in --input '' hello.b

# Execute brainfuck MWOT without compiling to a file
mwot -ib hello.mwot
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://codeberg.org/gramkraxor/mwot",
    "name": "mwot",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "esolang, esoteric language, brainfuck",
    "author": "Gramkraxor",
    "author_email": "gram@krax.dev",
    "download_url": "https://files.pythonhosted.org/packages/f4/41/625a170627c09de715a574ed11374170c7149a85550c86ae939c3de5a38f/mwot-0.1.1.tar.gz",
    "platform": null,
    "description": "# MWOT, an esolang\n\n\n## The MWOT Language\n\nMWOT is an esoteric language for writing individual bits as readable\ntext.\nOr text that is entirely unreadable.\nThe only requirement is that each word have a number of letters equal to\nthe bit it represents, modulo 2.\nThe full rules of the language are:\n\n- Words are separated by whitespace.\n- A word with an odd number of letters (not including digits or\n  punctuation) generates a 1.\n- A word with an even number of letters generates a 0.\n- A word with no letters is ignored.\n- A shebang (a sequence at the very start of a file starting with \"#!\"\n  and ending with a newline) is ignored.\n\nMWOT's design allows perfectly valid data to be written as a poem, a\nstory, a manifesto, or a lot of nonsense.\nIts broad definition of \"letter\" allows it to work with any written\nlanguage.\nAnd its ability to conceal data in plain text gives it excellent\nsteganographic potential.\n\nBecause raw bits aren't very useful, MWOT compiles to two formats:\nbrainfuck and binary.\n\n### Brainfuck MWOT\n\nA true esoteric programming language.\nEvery three bits encode a brainfuck instruction.\n\n| MWOT                    | bits | brainfuck |\n| :---------------------- | :--- | :-------: |\n| An Indirect Kiss        | 000  |    `>`    |\n| Drop Beat Dad           | 001  |    `<`    |\n| Greg the Babysitter     | 010  |    `+`    |\n| On the Run              | 011  |    `-`    |\n| Super Watermelon Island | 100  |    `.`    |\n| Beach City Drift        | 101  |    `,`    |\n| Story for Steven        | 110  |    `[`    |\n| Catch and Release       | 111  |    `]`    |\n\n### Binary MWOT\n\nBits are grouped into bytes.\nThink of it like a really inefficient base64.\n\n| MWOT                               | bits     | byte   |\n| :--------------------------------- | :------- | :----: |\n| I can show you how to be strong /  | 11011000 | `\\xd8` |\n| In the real way / And I know that  | 01011100 |  `\\\\`  |\n| we can be strong / In the real way | 01000101 |  `E`   |\n\n### Etymology\n\n\"MWOT\" stands for Massive Wall Of Text, something that is unavoidable\nwhen rendering even small amounts of data in this format.\n\nOr maybe it stands for Massive Waste Of Time.\nDo you know how long it takes to *write* a massive wall of text that\ncompiles to exactly what you wanted it to?\n\n\n## The `mwot` Program\n\n`mwot` can compile or decompile MWOT.\nIt also comes with a brainfuck interpreter built in.\n\nIts options include:\n\n- Free choice to take source code (also, interpreter input) from\n  standard input, a file, or a string\n- Shebang and executable permission control\n- Multiple decompilers to try\n- Full control of the brainfuck interpreter's implementation details\n\n### Usage examples\n\n```sh\n# Compile `hello.mwot` as brainfuck\nmwot -cb hello.mwot -o hello.b\n\n# Decompile `goodbye.txt` as binary data\nmwot -dy goodbye.txt -o goodbye.txt.mwot\n\n# Execute brainfuck\nmwot -xb hello.b\n\n# Compile `hello.mwot` to an executable brainfuck script\nmwot -cbSX hello.mwot -o hello\n\n# Generate a very literal `hello.mwot`, using standard I/O\nmwot -db -D basic --vocab 'zero one' < hello.b > hello-literal.mwot\n\n# Execute brainfuck with strict settings and no input\nmwot -xb --eof=-1 --wraparound false --no-shebang-in --input '' hello.b\n\n# Execute brainfuck MWOT without compiling to a file\nmwot -ib hello.mwot\n```\n",
    "bugtrack_url": null,
    "license": "Unlicense",
    "summary": "Constrained writing as an encoding",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://codeberg.org/gramkraxor/mwot"
    },
    "split_keywords": [
        "esolang",
        " esoteric language",
        " brainfuck"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "07574da077a1f0a46dfb5eb8abbc5d499e5613f50c4ef5c72163e4995bc3dd72",
                "md5": "856f1397f7d03c9e6456495092e26fa4",
                "sha256": "f22afb1e34fc4185fb78ca0409813da1143b4735593a7e872c57ca3faf045e93"
            },
            "downloads": -1,
            "filename": "mwot-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "856f1397f7d03c9e6456495092e26fa4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 19852,
            "upload_time": "2024-04-02T22:27:54",
            "upload_time_iso_8601": "2024-04-02T22:27:54.088957Z",
            "url": "https://files.pythonhosted.org/packages/07/57/4da077a1f0a46dfb5eb8abbc5d499e5613f50c4ef5c72163e4995bc3dd72/mwot-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f441625a170627c09de715a574ed11374170c7149a85550c86ae939c3de5a38f",
                "md5": "9f0699898471e7123f8fc403dddd3944",
                "sha256": "63639188fd339eb586293551ab4b66c5462856e9494b85c20248826b872215fa"
            },
            "downloads": -1,
            "filename": "mwot-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9f0699898471e7123f8fc403dddd3944",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 17294,
            "upload_time": "2024-04-02T22:27:55",
            "upload_time_iso_8601": "2024-04-02T22:27:55.986548Z",
            "url": "https://files.pythonhosted.org/packages/f4/41/625a170627c09de715a574ed11374170c7149a85550c86ae939c3de5a38f/mwot-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-02 22:27:55",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": true,
    "codeberg_user": "gramkraxor",
    "codeberg_project": "mwot",
    "lcname": "mwot"
}
        
Elapsed time: 0.33056s