Added cue dsl

This commit is contained in:
Louis Burke 2024-09-16 22:10:11 -04:00
parent c95ff6e188
commit 7a14f48bd7
3 changed files with 306 additions and 0 deletions

93
dictionary.cue Normal file
View file

@ -0,0 +1,93 @@
package shenikan
// Tips: in python run
//
// import gensim.downloader
// model = gensim.downloader.load("glove-wiki-gigaword-50") # or other models @https://github.com/piskvorky/gensim-data
//
// Then find words related to what you want in model[] and do math on them.
// Then search through model to find nearby vectors using model.most_similar.
// e.g. model.most_similar(model['aunt'] - model['woman'] + model['man'])
dictionary: {
_glyphs: {
vowel: "i": ["outer"]
vowel: "e": ["outer", "slashed"]
vowel: "a": ["slashed"]
vowel: "o": ["inner", "slashed"]
vowel: "u": ["inner"]
vowel: "y": ["both"]
cluster: "θ": ["left", "top"]
cluster: "": ["left", "middle"]
cluster: "x": ["left", "bottom"]
cluster: "n": ["center", "middle"]
cluster: "p": ["right", "top"]
cluster: "t": ["right", "middle"]
cluster: "k": ["right", "bottom"]
cluster: "θl": ["left", "top", "tall"]
cluster: "∫l": ["left", "middle", "tall"]
cluster: "xl": ["left", "bottom", "tall"]
cluster: "nl": ["center", "middle", "tall"]
cluster: "pl": ["right", "top", "tall"]
cluster: "tl": ["right", "middle", "tall"]
cluster: "kl": ["right", "bottom", "tall"]
cluster: "θr": ["left", "top", "wide"]
cluster: "∫r": ["left", "middle", "wide"]
cluster: "xr": ["left", "bottom", "wide"]
cluster: "nr": ["center", "middle", "wide"]
cluster: "pr": ["right", "top", "wide"]
cluster: "tr": ["right", "middle", "wide"]
cluster: "kr": ["right", "bottom", "wide"]
cluster: "": ["left", "top", "both"]
cluster: "s∫": ["left", "middle", "both"]
cluster: "sx": ["left", "bottom", "both"]
cluster: "sn": ["center", "middle", "both"]
cluster: "sp": ["right", "top", "both"]
cluster: "st": ["right", "middle", "both"]
cluster: "sk": ["right", "bottom", "both"]
punctuation: "«": ["left"]
punctuation: ".": []
punctuation: "»": ["right"]
}
_dialects: {
"jukashenikan": {
"x": "ç"
"p": "j"
}
"gazhenigan": {
"k": "g"
"": "ʒ"
"s": "z"
"θ": "ð"
"t": "d"
}
}
_words: {
"t": {
noun: "thing": "See t - dmPenta for better meaning."
verb: "be"
}
}
_pentas: {
"n x": {
// name: "Pronouns"
extremes: {i: "Fully proximal", u: "Fully distal"}
i: pronoun: "I/me"
o: {}
}
}
_icosas: {
"n t x": {
name: "Tests"
ii: noun: "foo"
}
}
}

149
dsl.cue Normal file
View file

@ -0,0 +1,149 @@
package shenikan
import ( "strings"
// Generate json output via `cue export -p shenikan`
)
dictionary: {
_glyphs: vowel: [Orthography=_]: [...#VowelAttribute] | *null
_glyphs: cluster: [Orthography=_]: [...#ClusterAttribute] | *null
_glyphs: punctuation: [Orthography=_]: [...#PunctuationAttribute] | *null
_glyphs: numeric: [Orthography=_]: [...#NumericAttribute] | *null
glyphs: [
for k, datum in _glyphs
for o, glyph in datum {
kind: k
ortho: o
attrs: glyph
},
for v, vglyph in _glyphs.vowel
for c, cglyph in _glyphs.cluster {
kind: "syllable"
ortho: c + v
attrs: vglyph + cglyph
},
]
_dialects: [Name=_]: [Old=_]: string
dialects: [
for d, dialect in _dialects {
name: d
replacements: [
for o, n in dialect {
old: o
new: n
},
]
},
]
#RawDefinition: string | {[string]: string} | *""
_words: [Orthography=_]: {
[#PartOfSpeech]: #RawDefinition
}
// create { _defn: ..., { _#Definition } } to populate a proper definition
_#Definition: {
_defn: string | {[string]: string}
short: _defn & string | [for brief, long in _defn {brief}][0]
_long: *([for brief, long in _defn {long}][0]) | null
if _long != null {
long: _long
}
}
words: [
for o, word in _words {
spelling: o
definitions: [
for p, defn in word {
_defn: defn
pos: p
{_#Definition}
},
]
},
for o, penta in _pentas
for v in _vowels
if penta["\(v)"] != null {
spelling: strings.Replace(o, " ", v, 1)
definitions: [
for p, defn in penta["\(v)"] {
_defn: defn
pos: p
{_#Definition}
},
]
},
for o, icosa in _icosas
for v1 in _vowels
for v2 in _vowels
if icosa["\(v1)\(v2)"] != null {
spelling: strings.Replace(strings.Replace(o, " ", v1, 1), " ", v2, 1)
definitions: [
for p, defn in icosa["\(v1)\(v2)"] {
_defn: defn
pos: p
{_#Definition}
},
]
},
]
_pentas: [Orthography=_]: {
name?: string
extremes: {
i?: string
u?: string
}
for v in _vowels {
"\(v)": {[#PartOfSpeech]: #RawDefinition} | *null
}
}
pentas: [
for o, penta in _pentas {
if penta.name != _|_ {name: penta.name}
if penta.extremes != _|_ {
extremes: {
if penta.extremes.i != _|_ {i: penta.extremes.i}
if penta.extremes.u != _|_ {u: penta.extremes.u}
}
}
},
]
_icosas: [Orthography=_]: {
name?: string
extremes: {
ix?: string
ux?: string
xi?: string
xu?: string
}
for v1 in _vowels
for v2 in _vowels {
"\(v1)\(v2)": {[#PartOfSpeech]: #RawDefinition} | *null
}
}
icosas: [
for o, icosa in _icosas {
if icosa.name != _|_ {name: icosa.name}
if icosa.extremes != _|_ {
extremes: {
if icosa.extremes.ix != _|_ {ix: icosa.extremes.ix}
if icosa.extremes.ux != _|_ {ux: icosa.extremes.ux}
if icosa.extremes.xi != _|_ {xi: icosa.extremes.xi}
if icosa.extremes.xu != _|_ {xu: icosa.extremes.xu}
}
}
},
]
}

64
types.cue Normal file
View file

@ -0,0 +1,64 @@
package shenikan
_vowels: ["i", "e", "a", "o", "u"]
#VowelAttribute: "outer" | "slashed" | "inner" | "both"
#ClusterAttribute: "left" | "center" | "right" | "top" | "middle" | "bottom" |
"tall" | "wide" | "both"
#PunctuationAttribute: "left" | "right"
#NumericAttribute: "circle" | "dash" | "vee" | "hump" | "dot"
#SyllableAttribute: #VowelAttribute | #ClusterAttribute
#Glyph: #VowelGlyph | #ClusterGlyph | #PunctuationGlyph | #NumericGlyph |
#SyllableGlyph
#VowelGlyph: {kind: "vowel", ortho: string, attrs: [...#VowelAttribute]}
#ClusterGlyph: {kind: "cluster", ortho: string, attrs: [...#ClusterAttribute]}
#PunctuationGlyph: {kind: "punctuation", ortho: string, attrs: [...#PunctuationAttribute]}
#NumericGlyph: {kind: "numeric", ortho: string, attrs: [...#NumericAttribute]}
#SyllableGlyph: {kind: "syllable", ortho: string, attrs: [...#SyllableAttribute]}
#Replacement: {
old: string
new: string
}
#Dialect: {
name: string
replacements: [...#Replacement]
}
#PartOfSpeech: "noun" | "pronoun" | "verb" | "adjective" | "adverb" | "syntax"
#Definition: {
pos: #PartOfSpeech
short: string
long?: string
}
#Word: {
spelling: string
definitions: [...#Definition]
}
#Penta: {
name?: string
extremes?: {
i?: string
u?: string
}
}
#Icosa: {
name?: string
extremes?: {
ix?: string
ux?: string
xi?: string
xu?: string
}
}
dictionary: {
glyphs: [...#Glyph]
dialects: [...#Dialect]
words: [...#Word]
pentas: [...#Penta]
icosas: [...#Icosa]
}