Last active
February 24, 2019 22:40
-
-
Save fergusq/0d1b2ed89377ee58cdc2 to your computer and use it in GitHub Desktop.
Graafinen pöytäkirjageneraattori GPK
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/röda | |
/* Asetukset */ | |
{ | |
jäsenet := -G () | |
varajäsenet := -G () | |
puheenjohtaja := -G "" | |
sihteeri := -G "" | |
} | |
record Kohta { | |
kokous : Kokous | |
numero : string = "" | |
otsikko : string = "" | |
sisältö : string = "" | |
alakohdat : list<Kohta> = new list<Kohta> | |
function tulostu { | |
self.tulostu_n "" | |
} | |
function tulostu_n sisennys { | |
if ($(self.otsikko = "")) do | |
print sisennys self.numero " " self.sisältö | |
else | |
print sisennys self.numero " " self.otsikko | |
print "\t" self.sisältö if [ self.sisältö != "" ] | |
done | |
alakohta.tulostu_n sisennys.." " for alakohta in self.alakohdat | |
} | |
function lisää_kohta numero otsikko sisältö { | |
kohta := new Kohta | |
kohta.numero = numero | |
kohta.otsikko = otsikko | |
kohta.sisältö = sisältö | |
kohta.kokous = self.kokous | |
kokous.kohtaluettelo[numero] = kohta | |
self.alakohdat += kohta | |
return kohta | |
} | |
} | |
record Kokous { | |
/* kaikkien osallistujien nimet */ | |
osallistujat : list = () | |
/* hallituksen jäsenten ja varajäsenten nimet */ | |
jäsenet : list = () | |
/* merkkijono, joka sisältää kaikki osallistujat LaTeXina */ | |
läsnäolijat : string | |
/* ne vieraat, jotka tarvitsevat puhe- ja läsnäolo-oikeuden */ | |
vieraat : string | |
/* pöytäkirjantarkastajat */ | |
tarkastajat : list | |
nro : string | |
aika : string | |
paikka : string | |
kohdat : list<Kohta> = new list<Kohta> | |
kohtaluettelo : map<Kohta> = new map<Kohta> | |
function tulostu { | |
print "0" | |
print "Pöytäkirja nro "..self.nro | |
print "Hallituksen kokous" | |
print kokous.aika | |
print kokous.paikka | |
kohta.tulostu for kohta in kokous.kohdat | |
print "---" | |
print "\\today" | |
print puheenjohtaja "\\\\ Puheenjohtaja" | |
print sihteeri "\\\\ Sihteeri" | |
print kokous.tarkastajat[0] "\\\\ Pöytäkirjantarkastaja" | |
print kokous.tarkastajat[1] "\\\\ Pöytäkirjantarkastaja" | |
} | |
function tallenna tiedosto { | |
self.tulostu | write tiedosto | |
} | |
function lisää_kohta numero otsikko sisältö { | |
kohta := new Kohta | |
kohta.numero = numero | |
kohta.otsikko = otsikko | |
kohta.sisältö = sisältö | |
kohta.kokous = self | |
self.kohtaluettelo[numero] = kohta | |
self.kohdat += kohta | |
return kohta | |
} | |
} | |
main { | |
kokous := -G new Kokous | |
aikapaikka | |
paikallaolijat | |
kokouksen_avaus | |
kokouksen_järjestäytyminen | |
kokouksen_laillisuuden_ja_päätösvaltaisuuden_toteaminen | |
{} while pääsilmukka | |
tietoikkuna "Pöytäkirja on tallennettu" "Pöytäkirja on tallennettu tiedostoon pk"..kokous.nro..".txt." | |
kokous.tulostu | |
} | |
aikapaikka { | |
tiedot := !({}|zenity --forms "--title=Kokouksen tiedot" "--text=Uusi kokous" | |
"--add-entry=Pöytäkirjan nro" | |
"--add-calendar=Kokouspäivämäärä" "--forms-date-format=%e. %Bta %Y" | |
"--add-entry=Esityslistan kellonaika" "--add-entry=Kokouspaikka" | split -s "\\|") | |
kokous.nro = tiedot[0] | |
kokous.aika = tiedot[1] | |
kokous.aika .= " klo " .. tiedot[2] | |
kokous.paikka = tiedot[3] | |
} | |
paikallaolijat { | |
jäsenet := !(valintalista "Valitse osanottajat" "Paikalla" "Nimi" | |
*!(("FALSE" jäsen) for jäsen in jäsenet)) | |
varajäsenet := !(valintalista "Valitse osanottajat" "Paikalla" "Nimi" | |
*!(("FALSE" jäsen) for jäsen in varajäsenet)) | |
muut := !(lomakeikkuna "Valitse osanottajat" "Erottele nimet pilkuilla" | |
"Opiskelijakunnan jäsenet" "Muut vieraat" "Ohjaava opettaja") | |
jäsenvieraat := !(split -s ",\\s*" muut[0] | push nimi for nimi if [ nimi=~".*\\w.*" ]) | |
muutvieraat := !(split -s ",\\s*" muut[1] | push nimi for nimi if [ nimi=~".*\\w.*" ]) | |
opettaja := muut[2] | |
pa := "Hallituksen jäsenet: "..jäsenet&", " | |
pa .= "\\\\ Varajäsenet: "..varajäsenet&", " if [ #varajäsenet > 0 ] | |
pa .= "\\\\ Vieraat: "..jäsenvieraat&"".." (opiskelijakunnan jäsen)" if [ #jäsenvieraat = 1 ] | |
pa .= "\\\\ Vieraat: "..jäsenvieraat&", ".." (opiskelijakunnan jäseniä)" if [ #jäsenvieraat > 1 ] | |
pa .= ", "..muutvieraat&", " if [ #jäsenvieraat > 0 && #muutvieraat > 0 ] | |
pa .= "\\\\ Vieraat: "..muutvieraat&", " if [ #jäsenvieraat = 0 && #muutvieraat > 0 ] | |
pa .= "\\\\ Ohjaava opettaja: "..opettaja if [ opettaja != "" ] | |
kokous.läsnäolijat = pa | |
kokous.jäsenet .= jäsenet | |
kokous.jäsenet .= varajäsenet | |
kokous.vieraat = muutvieraat&", " | |
kokous.osallistujat .= jäsenet | |
kokous.osallistujat .= varajäsenet | |
kokous.osallistujat .= !(split -s ", " r for r in muut | push nimi for nimi if [ nimi=~".*\\w.*" ]) | |
} | |
kokouksen_avaus { | |
varoitusikkuna "Kokous alkaa" "Paina nappia, kun puheenjohtaja avaa kokouksen. Kellonaika tallennetaan automaattisesti." | |
kokous.lisää_kohta "1." "Kokouksen avaus" "Puheenjohtaja "..puheenjohtaja.." avasi kokouksen ajassa "..!(exec -l "date" "+%H.%M")&"".."."|{} | |
} | |
kokouksen_järjestäytyminen { | |
kokous.lisää_kohta "2." "Kokouksen järjestäytyminen" "" | pull kohta | |
kohta.lisää_kohta "2.1" "Todetaan kokouksen läsnäolijat" kokous.läsnäolijat | {} | |
kohta.lisää_kohta "2.2" "Hyväksytään esityslista kokouksen työjärjestykseksi" "Hyväksyttiin esityslista kokouksen työjärjestykseksi." | {} | |
if ($(kokous.vieraat = "")) do | |
kohta.lisää_kohta "2.3" "Myönnetään puhe- ja läsnäolo-oikeus sitä pyytäville" "Puhe- ja läsnäolo-oikeutta pyytäviä ei ollut." | |
else | |
oikeudet = !(syöttöikkuna "Puhe- ja läsnäolo-oikeus" | |
"Seuraavat henkilöt pyytävät puhe- ja läsnäolo-oikeutta: "..kokous.vieraat\ | |
..". Anna nimet ulko ulkotulennossa (hänelle) ja erottele pikuilla sekä \"ja\"-sanalla.")&"" | |
kohta.lisää_kohta "2.3" "Myönnetään puhe- ja läsnäolo-oikeus sitä pyytäville" "Myönnettiin puhe- ja läsnäolo-oikeus "\ | |
..oikeudet.."." | |
done | {} | |
kokous.tarkastajat = !({}|zenity --forms "--title=Pöytäkirjantarkastajat" | |
"--add-combo=Ensimmäinen tarkastaja" | |
"--combo-values="..kokous.osallistujat&"|" | |
"--add-combo=Toinen tarkastaja" | |
"--combo-values="..kokous.osallistujat&"|" | split -s "\\|") | |
kohta.lisää_kohta "2.4" "Valitaan kokoukselle pöytäkirjantarkastajat"\ | |
"Valittiin kokouksen pöytäkirjantarkastajiksi "..kokous.tarkastajat&" ja ".."." | {} | |
} | |
kokouksen_laillisuuden_ja_päätösvaltaisuuden_toteaminen { | |
if ($(#kokous.jäsenet < 6)) do | |
varoitusikkuna "Kokouksen laillisuus ja päätösvaltaisuus"\ | |
"Kokous ei ole laillinen ja päätösvaltainen, sillä vain alle puolet hallituksen jäsenistä on paikalla." | |
done | |
kokous.lisää_kohta "3." "Kokouksen laillisuuden ja päätösvaltaisuuden toteaminen" "Todettiin kokous lailliseksi ja päätösvaltaiseksi." | {} | |
} | |
pääsilmukka { | |
kokous.tallenna "pk"..kokous.nro..".txt" | |
valinta := ![lista "Valitse toiminto" "Toiminto" "Näytä pöytäkirjan sisältö" "Lisää kohta" "Muokkaa kohtaa" "Valmis"] | |
sopimusikkuna "Pöytäkirjan sisältö" "pk"..kokous.nro..".txt" if [ valinta = "Näytä pöytäkirjan sisältö" ] | |
lisää_kohta if [ valinta = "Lisää kohta" ] | |
muokaa_kohtaa if [ valinta = "Muokkaa kohtaa" ] | |
return ![false] if [ valinta = "Valmis" ] | |
true | |
} | |
kaikki_numerot kohta &numerot { | |
numerot += kohta.numero | |
kaikki_numerot alakohta numerot for alakohta in kohta.alakohdat | |
} | |
lisää_kohta { | |
numerot := () | |
numerot += "JUURI" | |
kaikki_numerot kohta numerot for kohta in kokous.kohdat | |
yläkohta := ![lista "Valitse yläkohta" "Numero" *numerot] | |
if ($(yläkohta = "JUURI")) do | |
push kokous | |
else | |
push kokous.kohtaluettelo[yläkohta] | |
done | pull kohta | |
tiedot := !(lomakeikkuna "Lisää kohta" "Kohdan "..yläkohta.." uusi alakohta" "Numero" "Otsikko" "Teksti") | |
numero := tiedot[0] | |
otsikko := tiedot[1] | |
teksti := tiedot[2] | |
if ($(numero =~ ".*\\..*")) do | |
kohta.lisää_kohta numero otsikko teksti | |
else | |
if ($(yläkohta = "JUURI")) do | |
kohta.lisää_kohta numero.."." otsikko teksti | |
else | |
kohta.lisää_kohta yläkohta.."."..numero otsikko teksti | |
done | |
done | {} | |
} | |
muokkaa_kohtaa { | |
numerot := () | |
kaikki_numerot kohta numerot for kohta in kokous.kohdat | |
numero := ![lista "Valitse kohta" "Numero" *numerot] | |
kohta := kokous.kohtaluettelo[numero] | |
tiedot := !(lomakeikkuna "Lisää kohta" "Kohta "..numero "Otsikko" "Teksti") | |
kohta.otsikko = tiedot[0] | |
kohta.sisältö = tiedot[1] | |
} | |
/* ZENITY-rajapinta */ | |
{ | |
zenity := -G { |a...|; exec -l "zenity" *a } | |
} | |
lista otsikko a sisältö... { | |
{} | zenity --list "--height=400" "--title="..otsikko "--column="..a *sisältö | split -s "\\|" | |
} | |
valintalista otsikko a b sisältö... { | |
{} | zenity --list "--height=400" "--title="..otsikko --checklist "--column="..a "--column="..b *sisältö | split -s "\\|" | |
} | |
aikaikkuna otsikko { | |
{} | zenity --calendar "--title="..otsikko | |
} | |
syöttöikkuna otsikko teksti { | |
{} | zenity --entry "--title="..otsikko "--text="..teksti | |
} | |
sopimusikkuna otsikko tiedosto { | |
{} | zenity "--text-info" "--title="..otsikko "--filename="..tiedosto | |
} | |
tietoikkuna otsikko teksti { | |
{} | zenity "--info" "--title="..otsikko "--text="..teksti | |
} | |
varoitusikkuna otsikko teksti { | |
{} | zenity "--warning" "--title="..otsikko "--text="..teksti | |
} | |
lomakeikkuna otsikko teksti kohdat... { | |
tulokset := !({} | zenity "--forms" "--title="..otsikko "--text="..teksti *!(("--add-entry="..e) for e in kohdat) | split -s "\\|") | |
tulokset += "" while [ #tulokset < #kohdat ] | |
tulokset | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment