This little passion of mine took a serious backseat to other interests over the last several years.
To hopefully rekindle my interest in the thing, I’ve decided to rebuild everything from scratch, starting with a focus on redesigning the data-entry interface.
Just in case anybody else is interested in this for whatever reason, I’ll occasionally update this thread with progress and interesting challenges (and/or design decisions, etc.).
I’m pretty sure the viewer interface will be the similar or same, but I may refactor things if the mood strikes me.
The primary focus is all about major improvements to data entry. With a keen eye on revisiting data structures to better fit the complexity of the domain.
All nouns having a gender, there are some nouns that have a matching noun for the opposite gender.
I’m not going to have distinct tiddlers for each gender. Each gender will share the same tiddler.
However, each word will have a distinct link in the dictionary, but words that are just opposite genders will link to the same tiddler.
For example, in the case of “darnier” (meaning: the last one in a group, of a masculine gender) and “darniére” (meaning: the last one in a group, of a feminine gender), the words are both in the same tiddler, but each word appears distinctly in the dictionary, and their links bring up the same tiddler:
A little early to figure out verbs. Pretty sure the conjugation of verbs will all be fields in one tiddler. Which tiddler? Likely the same tiddler as the one describing the word.
Right now, I’m locked into this design quagmire using “darnier” (standard French: dernier) as an example: darnier is a noun, but is also an adjective. I want a tiddler for the noun, and a distinct tiddler for the adjective. However, both have some things in common (for example: Phonetic attributes), which I’d rather have only existing once (so a shared tiddler).
Since I’ve got a shared tiddler for the phonetic side of things, it would also make sense to have a shared tiddler for the feminine form of the word, which is also the same for the noun and the adjective.
I don’t know if you’re looking for input on this design decision. If not, feel free to ignore the rest of this message and ask me to shut up.
It sounds like you might have a common many-to-many relationship between word tiddlers and phonetic ones. I don’t know how common heteronyms are in French; they’re not particularly rare in English (“For the record, I’m going to record this conversation.”)
But I could image
title: p/12345
tags: Phonetic
pronunciation:/dɛʁ.nje/
More phonetic info
and then using templates to pull things together.
title:w/dernier
caption: dernier
tag: Word
gender: masculine
part-of-speech: noun
All about dernier
We have a known word: darnier. That word has certain attributes that are common regardless of the word context.
That word is in a tiddler.
The word has two word contexts: one context as a noun, the other as an adjective. Each one of those contexts has certain attributes related to the context. Each one of these contexts has a tiddler. Both of them are children of the word.
In either context, the phonetic attributes are the same. What is the same regardless of context sits in the word tiddler.
A phonetic context (for example: “êr” sound becomes “ar”) is indeed something that applies to many words. So that phonetic context exists in a tiddler, linked to however many words have that phonetic context. (examples: darnier, farmier, pardre, varte, barceau … all of these “er” letters replaced with “ar”).
The phonetic context will be linked to a word by tagging the word with the context. Each context for a word will be linked to that word via a tag for that word.
Now that I’ve had some time to reacquaint myself with my old project and some of the design challenges (playing around with some elements in the new incarnation of the project), time to do a little bit of domain analysis.
“Word Type Instance” tiddler, I don’t like the moniker at all.
A group of words defined together in one tiddler, I think I want to call that a “Word Ensemble” tiddler. Because it is a little bit like an “ensemble cast”.
When the checkbox is left unchecked, clicking the “Enregistrer / Save” button will close the current dialog and open up the Word editing dialog right away.
However, when the checkbox is checked, I can repeatedly add words without the dialog closing, and each word added (in this “batch” process) is displayed so I can keep track of where I’m at.
The no fuss no muss prototyping code if you are interested:
<table style="border:none;">
<$checkbox tiddler={{$:/temp/BatchAddWords!!title}} field="text" checked="stay_open" unchecked="" default=""> Je souhaite saisir plusieurs nouveaux mots. / I want to enter multiple new words.</$checkbox>
Nouveau Mot / New Word:
<$edit-text tiddler="$:/temp/NewTiddlerName" field="text" tag="input" default=""/>
<$let wordValidate={{{ [{$:/temp/NewTiddlerName!!text}is[blank]then[BLANK]] [{$:/temp/NewTiddlerName!!text}is[tiddler]then[EXISTS]] +[else[OK]] }}}>
<div style={{{ [[text-align:center;border:3px dotted ]] [<wordValidate>match[OK]then[green]else[red]] [[;]] +[join[]]}}}>
//<$text text={{{ [<wordValidate>match[BLANK]then[Aucun mot saisi.]] [<wordValidate>match[OK]then[C'est un mot qui peut être ajouté.]] [<wordValidate>match[EXISTS]then[Ce mot existe déjà.]] }}}/><br>
/ <$text text={{{ [<wordValidate>match[BLANK]then[No word entered.]] [<wordValidate>match[OK]then[That is a word that can be added.]] [<wordValidate>match[EXISTS]then[That word already exists.]] }}}/>
//
</div>
<div style="text-align:center;">
<$button disabled={{{ [<wordValidate>match[OK]then[no]else[yes]] }}}>
<$action-createtiddler $basetitle={{$:/temp/NewTiddlerName!!text}} tags="mot">
<!-- <$action-sendmessage $message="tm-modal" $param={{Détails de mot / Word Details!!title}} wordTiddler=<<createTiddler-title>>/> -->
<$action-setfield $tiddler="$:/temp/NewTiddlerName" added_words={{{ [{$:/temp/NewTiddlerName!!added_words}!is[blank]] [{$:/temp/NewTiddlerName!!text}] +[join[, ]] }}}/>
</$action-createtiddler>
<$action-setfield $tiddler="$:/temp/NewTiddlerName" text=""/>
<$list variable="check" filter="[{$:/temp/BatchAddWords!!text}!match[stay_open]]"> <$action-sendmessage $message="tm-close-tiddler" $param=<<currentTiddler>>/> </$list>
✔ Enregistrer / Save
</$button>
<$button>
<$action-sendmessage $message="tm-close-tiddler" $param=<<currentTiddler>>/>
❌ Annuler / Cancel
</$button>
<br><br>
<hr>
<$list variable="check" filter="[{$:/temp/BatchAddWords!!text}match[stay_open]]">
!! Mots ajoutés / Added Words
__Dans l'ordre saisi / In the order entered__<br>
{{$:/temp/NewTiddlerName!!added_words}}<br>
__Trié par ordre alphabétique / Sorted alphabetically__<br>
<$text text={{{ [{$:/temp/NewTiddlerName!!added_words}split[, ]sort[]join[, ]] }}}/><br>
</$list>
</div>
</$let>
</table>
To filter the list of words in the dictionary, I sometimes want to see only those words that start with a particular letter. This has to take into consideration words that start with accented characters. I’m treating all accented characters as their unaccented versions:
Many Acadian French words are the Standard French words pronounced differently.
Some words might actually be spelled differently to reflect the different pronunciation, but some words might retain the spelling of the Standard French word and simply be pronounced the Acadian French way.
I’ll be setting up the dictionary so that words are spelled as they are pronounced by a native Acadian French speaker. For those words, I’ll be doing two things: also store the word as spelled in Standard French, and include “notations” to explain the phonetic transformations going on, tagging words with one or more of the applicable Phonetic Aspects going on.
For example: recule (meaning “back up”)
In Acadian French, the pronunciation of that word is “ertchule”. The “re” flipped to “er”, and the “c” (the “k” sound) replaced with the “tch” (like the “tch” in the word “itch”)
Eventually, all of these Phonetic Aspects will be properly documented. For now, I’ve just got a basic directory of them setup:
For example, " vwar→ wèr", tagging the word “saouaire”
“saouaire” (the typical French-Acadian spelling) is the pronunciation of the Standard French word “savoir”
To keep things simple (i.e not using the symbols of the international phonetic alphabet), the phonetic representation of “ouaire” is “wèr”, and the phonetic representation of “voir” is “vwar”.
So “saouaire” is the phonetic transformation ( vwar→ wèr) of the word “savoir”.
Yeah, I seriously geek out on this kind of stuff …
Although I haven’t yet setup the data-entry GUI elements, I now have the architectural elements setup to identify 1 or more definition “ensembles” for a word.
A word may have multiple definitions, and for each definition a related word type.
Each definition is an “ensemble” because the definition may apply to more than one word (for example: same definition applicable to the different genders for a word, like “beau” and “belle”, for example.
For verbs, the definition of that verb might be an ensemble that applies to all of the conjugations of that verb.
Something like that.
In the example below, the word “darnier” can mean the adjective word type, or might mean the noun word type. In both ensembles, “darnier” is the masculine version of the word, and “darniére” is the feminine version of the word .
When we view the word details of either “darnier” or “darniére”, we see the relationship between these two words via their common definition ensembles.