Skip to content

Instantly share code, notes, and snippets.

@fergusq
Last active February 24, 2019 22:40
Show Gist options
  • Save fergusq/0d1b2ed89377ee58cdc2 to your computer and use it in GitHub Desktop.
Save fergusq/0d1b2ed89377ee58cdc2 to your computer and use it in GitHub Desktop.
Graafinen pöytäkirjageneraattori GPK
#!/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