Skip to main content

Compact command-line conlang manager

Project description

Wer's Compact Conlang Manager, or WCCM, is a simple command-line tool designed to make conlanging ever so slightly faster and easier by converting a simple, customizeable syntax into clean and readable conlang dictionaries.

I built this because spreadsheets had too much visual clutter and other existing tools were really overkill. All you need to do is type your properties with shorthands you can customize, and you'll receive a nicely formatted text file.

For example, this:

Drink
$dɹINkH
%noun
%verb
+dirnks $ dɹINkHs
;gen :drink's
|3rd sg present /drinks
=beverage
=liquid
=sip
=gulp
=swallow
!food
!solid
!edible
!snack
!meal
?take (a liquid) into the mouth and swallow
?a liquid that can be swallowed as refreshment or nourishment

Turns into this:

Drink [dɹɪŋkʰ]
Meanings:
   - take (a liquid) into the mouth and swallow
   - a liquid that can be swallowed as refreshment or nourishment
plural: "drinks" [dɹɪŋkʰ]
Synonyms: 
    - beverage
    - liquid
    - sip
    - gulp
    - swallow
Antonyms: 
    - food
    - solid
    - edible
    - snack
    - meal
Parts Of Speech:  noun, verb
Conjugations:
    - 3rd sg present: drinks

Installation

  1. install Python 3.6 or newer from python.org
  2. download or clone this repository
  3. no additional packages are needed, uses only python standard library!

Usage:

Install it:

pip install wccm

Then you can just use it like this:

wccm file.wccm 

Outputs to Lexicon.txt by default.

Syntax

WCCM uses symbols to represent different properties. Their order is irrelevant, as long as the plain word is always first.

Lexicon

(Lexicon-related syntax goes in .wccm files).

Symbol Field Example
(None) Word Kat
$ IPA $kæt
# Semantic field #animal
~ Gender ~M
? Translation ?Cat
+ Plural form(s) +Cats
; and : Case name / case form ;gen :cat's
= Synonym(s) =feline
! Antonym(s) !dog
% Part of speech %noun
* Etymology *from 'kaltnaen'
| and / Conjugations |3rd sg present /does
@ and : Custom @class :animte
// Comment // what do I even put here
^ Identifier ^Q
> Example sentence

Example sentence syntax

>[sentence in conlang] $ [IPA] ? [meaning] >> [gloss]

Example:

>xle thronuth fa? $ xle TRonuT fa ? are you okay? >> good be.2sg Q

IMPORTANT NOTE: The symbols and their order is fixed. You cannot change the order in which the symbols appear, and said symbols are hardcoded to the defaults even if you've changed them in a .pref file. The spaces between symbols (? instead of ?) IS necessary, since the parser specifically looks for ? and does the same with the other symbols.

This is going to be improved in future updates.

Inventory

(Inventory-related information goes in .cmi files).

Symbol Field Example
. consonant .tH
, vowel ,3
^ Tone ^rising
- romanization -ñ :ny

Allophony

(allophony-related info goes in .allo files).

No more freaky symbols this time, this is how allophone files work:

change <phoneme> - <allophone>
env <rules>

For example, this:

change b - B
env V_V

would output this:

b → β / V_V


Don't like that set of symbols? That's completely fine! You can edit them anytime by going into config.json.

IPA

I know that typing IPA symbols can be tedious if you don't have the tools, which is why I implemented a function to let you map a character to an IPA sound, to make writing transcriptions easier!

Configuration

WCCM lets you customize:

  • what each symbol means (which property it represents)
  • IPA character mapping (e.g., : -> ː)
  • default output file

Default configurations:

{
    "ipa": {
        "S": "ʃ",
        "T": "θ",
        "R": "ɾ",
        "B": "β",
        "D": "ð",
        "N": "ŋ",
        "J": "ʲ",
        "Z": "ʒ",
        ":": "ː",
        "'": "ˈ",
        "ny": "ɲ",
        "W": "ʷ",
        "H": "ʰ",
        "A": "ɑ",
        "E": "ə",
        "I": "ɪ",
        "3": "ɛ",
        "O": "ɔ",
        "U": "ʊ",
        "^": "ʌ",
        "X": "χ"
    },
    "props": {
        "$": "ipa",
        "#": "field",
        "%": "pos",
        "//": "comment",
        "~": "gender",
        "=": "synonym",
        "!": "antonym",
        "+": "plural",
        "?": "meaning",
        "*": "etymology",
        ";": "case",
        "|": "conjugations",
        "@": "custom"
    },
    "inv":  {
        ".":  "consonant",
        ",": "vowel",
        "^": "tone",
        "-": "romanization"
    },
    "prefs": {
        "output": {
            "defaultFileName": "lexicon",
            "defaultFormat": "txt"
        }
    }
}

For the IPA replacement mapping, the character on the left is the character that the program will replace. So, essentially, if your IPA is "SaTaZ", with the default configurations (the ones showed above) it would turn into "ʃaθaʒ".

As you might've guessed, you can also choose the default name and format of the output file! The name can be anything you want, and the file extension can be either .txt or .md. A lexicon.json file is always automatically generated, which is why .json isn't an option in preferences.

All you have to do to change your configs is write your file, save it as .pref and just use it as an argument:

wccm configs.pref 

and that's it!

Here's how this works:

ipamap set <characters> to <IPA>
propmap set <symbol(s)> to <property name>
default output format set <file extension>
default file name set <name>
invnetorymap set <symbol(s)> to <property>

Limitations

If you ever want to remap a symbol, as said before, you're allowed (and encouraged) to do so! However, it is very important that you don't map \ to anything. Since i don't want to confuse you with tech talk, basically, \ is a special character and if you try to use it for mapping the configuration file is going to break.

And, for reasons that are truly beyond my knowledge, "field" (semantic field) and "comment" properties can't be modified? I'll try to fix it later; too tired to do it right now.

Other than that, you should be able to change pretty much anything!

About

WCCM started as just a little personal tool I developed because I'm stubborn and don't like any of the tools that already exist, and now I'm sharing it in case someone finds it useful as well.

Feedback is appreciated!

This is my first time actually finishing and sharing a project, so I'd genuinely love to hear suggestions or ideas for future versions, as well as bug reports and other stuff like that. Also, if you guys think that this is a bit "too technical" for the average conlanger, please let me know and I'll try my best to make it as intuitive and a little more non-coder friendly.

You can contact me pretty much any time in my twitter (I'm not calling it 'X') or my reddit!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wccm-0.5.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wccm-0.5.0-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file wccm-0.5.0.tar.gz.

File metadata

  • Download URL: wccm-0.5.0.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wccm-0.5.0.tar.gz
Algorithm Hash digest
SHA256 cf6d2a77a07b87ba2ec22f38391698f67a1385a3ccf46745d789f3528729a8d0
MD5 e7aa790c3e328cd74dd52cd7377e7279
BLAKE2b-256 2371935379118e40d2fae17baabbdf7fcb1a05de2acdf2c33481b86faa00fefd

See more details on using hashes here.

File details

Details for the file wccm-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: wccm-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wccm-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 835da54dab2cf40c666667c1aa522b10ff8cd6bb0ed6db198fa6ec59453e3d51
MD5 6291bc8140a97092e61b00c26e0d3fbc
BLAKE2b-256 51a1e0ab03c4c635061c13a551a5a05d4a9323b3e9cba0d1069089d0ad534700

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page