From 1449ab29b1f993413063c0f21ffb096ecd3300a2 Mon Sep 17 00:00:00 2001 From: Ben Bulent Basaran Date: Fri, 13 Dec 2024 23:36:55 -0500 Subject: [PATCH] translation for sprite-boundary-polygon editor --- .../net/kogics/kojo/lite/Bundle_tr.properties | 1 + .../samples/tr/kojo-kilavuz/turler.kojo | 3 +- .../samples/tr/sprite-boundary-polygon.kojo | 70 ++++++ .../net/kogics/kojo/lite/i18n/tr/dict.scala | 5 +- .../net/kogics/kojo/lite/i18n/tr/dizik.scala | 211 ++++++++++++++++++ .../net/kogics/kojo/lite/i18n/tr/dizim.scala | 99 +------- .../net/kogics/kojo/lite/i18n/tr/resim.scala | 10 +- .../net/kogics/kojo/lite/i18n/trInit.scala | 12 +- 8 files changed, 304 insertions(+), 107 deletions(-) create mode 100644 src/main/resources/samples/tr/sprite-boundary-polygon.kojo create mode 100644 src/main/scala/net/kogics/kojo/lite/i18n/tr/dizik.scala diff --git a/src/main/resources/net/kogics/kojo/lite/Bundle_tr.properties b/src/main/resources/net/kogics/kojo/lite/Bundle_tr.properties index 8cf029e6..01832b86 100644 --- a/src/main/resources/net/kogics/kojo/lite/Bundle_tr.properties +++ b/src/main/resources/net/kogics/kojo/lite/Bundle_tr.properties @@ -146,6 +146,7 @@ S_InstructionPalette=Komut Paleti S_TurtleController=Kaplumbağa Yöneticisi S_ArduinoProgramming=Arduino Programlama S_StartingChallenges=Yeni Başlayanlar İçin Alıştırmalar +S_SpriteBoundaryPolygon=Kostümler İçin Çerçeve Düzenleyicisi S_Help=Yardım S_KojoDocs=Kojo Kullanım Kılavuzu diff --git a/src/main/resources/samples/tr/kojo-kilavuz/turler.kojo b/src/main/resources/samples/tr/kojo-kilavuz/turler.kojo index 22e86422..b9f1e2c2 100644 --- a/src/main/resources/samples/tr/kojo-kilavuz/turler.kojo +++ b/src/main/resources/samples/tr/kojo-kilavuz/turler.kojo @@ -140,7 +140,8 @@ yaz(hepsi)""" row("Dizi".c, "Seq".c, "".c), row("Dizik".c, "Array".c, "".c), row("Dizim".c, "Array".c, "".c, "Bu Dizik'in eskisi"), - row("EsnekDizim".c, "ArrayBuffer".c, "".c, "collection.mutable'dan"), + row("EsnekDizim".c, "ArrayBuffer".c, "".c, "eskisi. collection.mutable'dan"), + row("EsnekDizik".c, "ArrayBuffer".c, "".c, "collection.mutable'dan"), row("Dizin".c, "List".c, "".c), row("SıralıDizi".c, "IndexedSeq".c, "".c), row("Eşlek".c, "Map".c, "".c, "collection.immutable.Map"), diff --git a/src/main/resources/samples/tr/sprite-boundary-polygon.kojo b/src/main/resources/samples/tr/sprite-boundary-polygon.kojo new file mode 100644 index 00000000..ef899e74 --- /dev/null +++ b/src/main/resources/samples/tr/sprite-boundary-polygon.kojo @@ -0,0 +1,70 @@ +silipSakla() +çıktıyıSil() +ızgarayıGöster +eksenleriGöster + +// bir köstüm etrafına şöyle bir çokgen tanımlamak istiyoruz: +// dez örnek = Dizik(-0.5, -4.0, 90.5, -0.0, 77.5, 98.0, 110.5, 137.0, 105.5, 164.0, 70.5, 154.0, 45.5, 182.0, 25.5, 181.0, -2.5, 102.0, -0.5, -4.0) + +// örnek köstüm: +dez görünüş = Resim.imge(Görünüş.kadınElSallarken) +// kendi resmini diskten şöyle yükleyebilirsin +// dez resimDizini = "/senin/verilerin/resimler" +// dez görünüş = Resim.imge(s"$resimDizini/resim.png") + +çiz(görünüş) +// dizik ögeleri Kesir ya da UfakKesir olarak yazılabilir +dez kesirDiziği = doğru // UfakKesir için yanlış olmalı +// dez ufakKesirliÖrnek = Dizik(-47.5f, -19.0f, 141.5f, -3.0f, 146.5f, 207.0f, -2.5f, 188.0f, -47.5f, -19.0f) + +satıryaz("10. satırı değiştirerek istediğin kostümü yükle.\n") +satıryaz("Sonra onun etrafına tıklayarak bir çokgen çiz. Tıklamadan önce\ngerekirse tuvalde resme yaklaşabilirsin.\n") + +satıryaz("Son noktayı girmek için çift tıkla.\n") +satıryaz("Son nokta kendiliğinden ilk noktaya bağlanır. Bu da çokgeni tamamlar.\n") + +den noktalar = EsnekDizik.boş[Nokta] +den noktaResmi: Resim = Resim.dikdörtgen(0, 0) +noktaResmi.çiz() + +tanım çerçeveyiGüncelle() { + dez ilkNokta = noktalar.başı + dez noktaResmi2 = Resim.dizi( + Resim.daire(5) + .veKalemRengiyle(mavi).veBoya(mavi) + .veKondur(ilkNokta.x, ilkNokta.y), + Resim.noktadan { s => + s.başla() + noktalar.herbiriİçin { n => + s.nokta(n.x, n.y) + } + s.bitir() + }.veKalemRengiyle(mavi).veKalemKalınlığıyla(5) + ) + noktaResmi2.çiz() + noktaResmi.sil() + noktaResmi = noktaResmi2 + noktaResmi.çizBaştan() +} + +fareyeTıklıyınca { (x, y) => + noktalar.ekle(Nokta(x, y)) + çerçeveyiGüncelle() + + dez noktaSayısı = noktalar.boyu + eğer (noktalar(noktaSayısı - 2) == noktalar(noktaSayısı - 1)) { + noktalar.çıkar(noktaSayısı - 1) + noktalar.ekle(noktalar.başı) + dez nlar2 = noktalar + .düzİşle(n => Dizik(n.x, n.y)) + .işle(n => f"$n%.1f" + (eğer (kesirDiziği) "" yoksa "f")) + + satıryaz("Çerçeve:\n") + satıryaz(nlar2.yazıYap("Dizik(", ", ", ")")) + satıryaz("\nBu çerçeveyi kendi yazılımında kullan.") + çerçeveyiGüncelle() + noktalar = EsnekDizik.boş[Nokta] + } +} + +tuvaliEtkinleştir() diff --git a/src/main/scala/net/kogics/kojo/lite/i18n/tr/dict.scala b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dict.scala index a84865a9..791d94f4 100644 --- a/src/main/scala/net/kogics/kojo/lite/i18n/tr/dict.scala +++ b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dict.scala @@ -378,7 +378,8 @@ object dict { "Dizi" -> "Seq", "Dizik" -> "Array", "Dizim" -> "Array", - "EsnekDizim" -> "ArrayBuffer", + "EsnekDizim" -> "ArrayBuffer", // older impl + "EsnekDizik" -> "ArrayBuffer", "Dizin" -> "List", "SıralıDizi" -> "IndexedSeq", "Eşlek" -> "collection.immutable.Map", @@ -431,7 +432,7 @@ object dict { "Bellekteİmgeİşlemi" -> "BufferedImageOp", "ÇiniDünyası" -> "tiles", "ÇiniXY" -> "TileXY", - "BirSayfaKostüm" -> "SpriteSheet", + "BirSayfaKostüm" -> "SpriteSheet", // Giysi, Görünüş, Kostüm "Mp3Çalar" -> "KMP3", "Canlandırma" -> "Animation", "BKK" -> "URL", diff --git a/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizik.scala b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizik.scala new file mode 100644 index 00000000..3992df0b --- /dev/null +++ b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizik.scala @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2025 + * Bulent Basaran https://github.com/bulent2k2 + * Lalit Pant + * + * The contents of this file are subject to the GNU General Public License + * Version 3 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.gnu.org/copyleft/gpl.html + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ +package net.kogics.kojo.lite.i18n.tr + +trait DizikYöntemleri { + import scala.reflect.ClassTag + + type Dizik[T] = Array[T] + object Dizik { + def apply[T](ögeler: T*)(implicit arg: ClassTag[T]) = Array(ögeler: _*) + def boş[T](implicit arg: ClassTag[T]) = Array.empty + def boş[T: ClassTag](b1: Sayı) = Array.ofDim[T](b1) + def boş[T: ClassTag](b1: Sayı, b2: Sayı) = Array.ofDim[T](b1, b2) + def boş[T: ClassTag](b1: Sayı, b2: Sayı, b3: Sayı) = Array.ofDim[T](b1, b2, b3) + def doldur[T: ClassTag](b1: Sayı)(e: => T) = Array.fill[T](b1)(e) + def doldur[T: ClassTag](b1: Sayı, b2: Sayı)(e: => T) = Array.fill[T](b1, b2)(e) + def doldur[T: ClassTag](b1: Sayı, b2: Sayı, b3: Sayı)(e: => T) = Array.fill[T](b1, b2, b3)(e) + } + // todo: copied from dizi.scala + implicit class ArrayMethods[T](d: Dizik[T]) { + type Col = Dizik[T] + type Eşlek[A, D] = collection.immutable.Map[A, D] + def başı: T = d.head + def kuyruğu: Col = d.tail + def önü: Col = d.init + def sonu: T = d.last + def boyu: Sayı = d.length + def boşMu: İkil = d.isEmpty + def doluMu: İkil = d.nonEmpty + def ele(deneme: T => İkil): Col = d.filter(deneme) + def eleDeğilse(deneme: T => İkil): Col = d.filterNot(deneme) + // https://www.scala-lang.org/api/2.13.x/scala/Array.html + // map[B](f: (T) => B)(implicit ct: ClassTag[B]): Dizik[B] + // Builds a new array by applying a function to all elements of this array. + def işle[A](işlev: T => A)(implicit ct: ClassTag[A]): Dizik[A] = d.map(işlev)(ct) + def işleYerinde(işlev: (T) => T): Dizik[T] = d.mapInPlace(işlev) + def düzİşle[A: ClassTag](işlev: T => Dizik[A]): Dizik[A] = d.flatMap(işlev) + def sıralı(implicit ord: Ordering[T]): Col = d.sorted(ord) + def sırala[A](i: T => A)(implicit ord: Ordering[A]): Col = d.sortBy(i) + def sırayaSok(önce: (T, T) => İkil): Col = d.sortWith(önce) + def indirge[B >: T](işlem: (B, B) => B): B = d.reduce(işlem) + def soldanKatla[T2](z: T2)(işlev: (T2, T) => T2): T2 = d.foldLeft(z)(işlev) + def sağdanKatla[T2](z: T2)(işlev: (T, T2) => T2): T2 = d.foldRight(z)(işlev) + // https://github.com/scala/scala/blob/v2.12.7/src/library/scala/collection/TraversableOnce.scala#L1 + def topla[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.sum(num) // foldLeft(num.zero)(num.plus) + def çarp[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.product(num) // foldLeft(num.one)(num.times) + def yinelemesiz = d.distinct + def yinelemesizİşlevle[T2](işlev: T => T2): Col = d.distinctBy(işlev) + def yazıYap: Yazı = d.mkString + def yazıYap(ara: Yazı): Yazı = d.mkString(ara) + def yazıYap(başı: Yazı, ara: Yazı, sonu: Yazı): Yazı = d.mkString(başı, ara, sonu) + def tersi = d.reverse + def değiştir[S >: T: ClassTag](yeri: Sayı, değeri: S): Dizik[S] = d.updated(yeri, değeri) + def değiştirYerinde(yeri: Sayı, değeri: T): Birim = d.update(yeri, değeri) + def herbiriİçin[S](işlev: T => S): Birim = d.foreach(işlev) + def varMı(deneme: T => İkil): İkil = d.exists(deneme) + def hepsiDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) + def hepsiİçinDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) + // def içeriyorMu[S >: T](öge: S): İkil = d.contains(öge) + def içeriyorMu(öge: T): İkil = d.contains(öge) + def içeriyorMuDilim(dilim: Col): İkil = d.containsSlice(dilim) + def al(n: Sayı): Col = d.take(n) + def alDoğruKaldıkça(deneme: T => İkil): Col = d.takeWhile(deneme) + def alSağdan(n: Sayı): Col = d.takeRight(n) + def düşür(n: Sayı): Col = d.drop(n) + def düşürDoğruKaldıkça(deneme: T => İkil): Col = d.dropWhile(deneme) + def düşürSağdan(n: Sayı): Col = d.dropRight(n) + // def sırası[S >: T](öge: S): Sayı = d.indexOf(öge) + // def sırası[S >: T](öge: S, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) + // def sırasıSondan[S >: T](öge: S): Sayı = d.lastIndexOf(öge) + // def sırasıSondan[S >: T](öge: S, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) + def sırası(öge: T): Sayı = d.indexOf(öge) + def sırası(öge: T, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) + def sırasıSondan(öge: T): Sayı = d.lastIndexOf(öge) + def sırasıSondan(öge: T, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) + + def dizine = d.toList + def diziye = d.toSeq + def kümeye = d.toSet + def yöneye = d.toVector + def dizime[S >: T](implicit delil: scala.reflect.ClassTag[S]): Dizim[S] = new Dizim(d.toArray(delil)) + def eşleğe[A, D](implicit delil: T <:< (A, D)): Eşlek[A, D] = d.toMap + def eşleme[A, D](implicit delil: T <:< (A, D)): Eşlem[A, D] = Eşlem.değişmezden(d.toMap) + def say(işlev: T => İkil): Sayı = d.count(işlev) + + def dilim(nereden: Sayı, nereye: Sayı) = d.slice(nereden, nereye) + def ikile[S](öbürü: YinelenebilirBirKere[S]) = d.zip(öbürü) + def ikileSırayla = d.zipWithIndex + def ikileKonumla = d.zipWithIndex + def öbekle[A](iş: (T) => A): Eşlek[A, Col] = d.groupBy(iş) + + def enUfağı[B >: T](implicit sıralama: math.Ordering[B]): T = d.min(sıralama) + def enUfağı[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.minBy(iş)(karşılaştırma) + def enİrisi[B >: T](implicit sıralama: math.Ordering[B]): T = d.max(sıralama) + def enİrisi[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.maxBy(iş)(karşılaştırma) + // todo: more to come + } + +} + +trait EsnekDizikYöntemleri { + import collection.mutable.ArrayBuffer + + type EsnekDizik[T] = ArrayBuffer[T] + object EsnekDizik { + def apply[T](ögeler: T*): EsnekDizik[T] = ArrayBuffer(ögeler: _*) + def boş[T]: EsnekDizik[T] = ArrayBuffer.empty[T] + def doldur[T](b1: Sayı)(e: => T): EsnekDizik[T] = ArrayBuffer.fill[T](b1)(e) + def doldur[T](b1: Sayı, b2: Sayı)(e: => T): EsnekDizik[EsnekDizik[T]] = ArrayBuffer.fill[T](b1, b2)(e) + def doldur[T](b1: Sayı, b2: Sayı, b3: Sayı)(e: => T): EsnekDizik[EsnekDizik[EsnekDizik[T]]] = ArrayBuffer.fill[T](b1, b2, b3)(e) + def diziden[T](dizi: YinelenebilirBirKere[T]): EsnekDizik[T] = ArrayBuffer.from(dizi) + def birleştir[T](diziler: Yinelenebilir[T]*): EsnekDizik[T] = ArrayBuffer.concat(diziler: _*) + def yinele[T](ilk: T, uzunluk: Sayı)(işlev: (T) => T): EsnekDizik[T] = ArrayBuffer.iterate(ilk, uzunluk)(işlev); + // todo: more to come, tabulate, unfold, unapplySeq + } + // todo: copied from dizi.scala + implicit class ArrayBufferMethods[T](d: EsnekDizik[T]) { + type Col = EsnekDizik[T] + type Eşlek[A, D] = collection.immutable.Map[A, D] + def çıkar(yer: Sayı) = d.remove(yer) + def ekle(öge: T) = d.append(öge) + def başı: T = d.head + def kuyruğu: Col = d.tail + def önü: Col = d.init + def sonu: T = d.last + def boyu: Sayı = d.length + def boşMu: İkil = d.isEmpty + def doluMu: İkil = d.nonEmpty + def ele(deneme: T => İkil): Col = d.filter(deneme) + def eleDeğilse(deneme: T => İkil): Col = d.filterNot(deneme) + // https://www.scala-lang.org/api/2.13.3/scala/collection/mutable/ArrayBuffer$.html + // Builds a new array by applying a function to all elements of this array. + def işle[A](işlev: T => A): EsnekDizik[A] = d.map(işlev) + def işleYerinde(işlev: (T) => T): EsnekDizik[T] = d.mapInPlace(işlev) + def düzİşle[A](işlev: (T) => YinelenebilirBirKere[A]): EsnekDizik[A] = d.flatMap(işlev) + def sıralı(implicit ord: Ordering[T]): Col = d.sorted(ord) + def sırala[A](i: T => A)(implicit ord: Ordering[A]): Col = d.sortBy(i) + def sırayaSok(önce: (T, T) => İkil): Col = d.sortWith(önce) + def indirge[B >: T](işlem: (B, B) => B): B = d.reduce(işlem) + def soldanKatla[T2](z: T2)(işlev: (T2, T) => T2): T2 = d.foldLeft(z)(işlev) + def sağdanKatla[T2](z: T2)(işlev: (T, T2) => T2): T2 = d.foldRight(z)(işlev) + // https://github.com/scala/scala/blob/v2.12.7/src/library/scala/collection/TraversableOnce.scala#L1 + def topla[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.sum(num) // foldLeft(num.zero)(num.plus) + def çarp[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.product(num) // foldLeft(num.one)(num.times) + def yinelemesiz = d.distinct + def yinelemesizİşlevle[T2](işlev: T => T2): Col = d.distinctBy(işlev) + def yazıYap: Yazı = d.mkString + def yazıYap(ara: Yazı): Yazı = d.mkString(ara) + def yazıYap(başı: Yazı, ara: Yazı, sonu: Yazı): Yazı = d.mkString(başı, ara, sonu) + def tersi = d.reverse + def değiştir[S >: T](yeri: Sayı, değeri: S): EsnekDizik[S] = d.updated(yeri, değeri) + def değiştirYerinde(yeri: Sayı, değeri: T): Birim = d.update(yeri, değeri) + def herbiriİçin[S](işlev: T => S): Birim = d.foreach(işlev) + def varMı(deneme: T => İkil): İkil = d.exists(deneme) + def hepsiDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) + def hepsiİçinDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) + // def içeriyorMu[S >: T](öge: S): İkil = d.contains(öge) + def içeriyorMu(öge: T): İkil = d.contains(öge) + def içeriyorMuDilim(dilim: Col): İkil = d.containsSlice(dilim) + def al(n: Sayı): Col = d.take(n) + def alDoğruKaldıkça(deneme: T => İkil): Col = d.takeWhile(deneme) + def alSağdan(n: Sayı): Col = d.takeRight(n) + def düşür(n: Sayı): Col = d.drop(n) + def düşürDoğruKaldıkça(deneme: T => İkil): Col = d.dropWhile(deneme) + def düşürSağdan(n: Sayı): Col = d.dropRight(n) + // def sırası[S >: T](öge: S): Sayı = d.indexOf(öge) + // def sırası[S >: T](öge: S, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) + // def sırasıSondan[S >: T](öge: S): Sayı = d.lastIndexOf(öge) + // def sırasıSondan[S >: T](öge: S, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) + def sırası(öge: T): Sayı = d.indexOf(öge) + def sırası(öge: T, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) + def sırasıSondan(öge: T): Sayı = d.lastIndexOf(öge) + def sırasıSondan(öge: T, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) + + def dizine = d.toList + def diziye = d.toSeq + def kümeye = d.toSet + def yöneye = d.toVector + def dizime[S >: T](implicit delil: scala.reflect.ClassTag[S]): Dizim[S] = new Dizim(d.toArray(delil)) + def eşleğe[A, D](implicit delil: T <:< (A, D)): Eşlek[A, D] = d.toMap + def eşleme[A, D](implicit delil: T <:< (A, D)): Eşlem[A, D] = Eşlem.değişmezden(d.toMap) + def say(işlev: T => İkil): Sayı = d.count(işlev) + + def dilim(nereden: Sayı, nereye: Sayı) = d.slice(nereden, nereye) + def ikile[S](öbürü: YinelenebilirBirKere[S]) = d.zip(öbürü) + def ikileSırayla = d.zipWithIndex + def ikileKonumla = d.zipWithIndex + def öbekle[A](iş: (T) => A): Eşlek[A, Col] = d.groupBy(iş) + + def enUfağı[B >: T](implicit sıralama: math.Ordering[B]): T = d.min(sıralama) + def enUfağı[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.minBy(iş)(karşılaştırma) + def enİrisi[B >: T](implicit sıralama: math.Ordering[B]): T = d.max(sıralama) + def enİrisi[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.maxBy(iş)(karşılaştırma) + // todo: more to come + } + +} diff --git a/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizim.scala b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizim.scala index 993896a4..bf694bc5 100644 --- a/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizim.scala +++ b/src/main/scala/net/kogics/kojo/lite/i18n/tr/dizim.scala @@ -19,8 +19,8 @@ package net.kogics.kojo.lite.i18n.tr import scala.reflect.ClassTag import collection.mutable.ArrayBuffer - -// todo: this has only the bare essentials for Array and ArrayBuffer. Add more to the interface.. +// Note: this is old attempt. Used in some samples. Use EsnekDizik in dizik.scala +// todo: this has only the bare essentials for ArrayBuffer. Add more to the interface.. object EsnekDizim { def apply[T](ögeler: T*) = new EsnekDizim[T](ArrayBuffer.from(ögeler)) def boş[T] = new EsnekDizim[T](ArrayBuffer.empty[T]) @@ -48,6 +48,7 @@ class EsnekDizim[T](val a: ArrayBuffer[T]) { // todo: more to come } +// use Dizik below instead of this older type attempt object Dizim { def boş[T](implicit arg: ClassTag[T]) = new Dizim(Array.empty) def boş[T: ClassTag](b1: Sayı) = new Dizim(Array.ofDim[T](b1)) @@ -75,97 +76,3 @@ class Dizim[T](val a: Array[T]) { b } } - -trait DizikYöntemleri { - type Dizik[T] = Array[T] - object Dizik { - def apply[T](ögeler: T*)(implicit arg: ClassTag[T]) = Array(ögeler: _*) - def boş[T](implicit arg: ClassTag[T]) = Array.empty - def boş[T: ClassTag](b1: Sayı) = Array.ofDim[T](b1) - def boş[T: ClassTag](b1: Sayı, b2: Sayı) = Array.ofDim[T](b1, b2) - def boş[T: ClassTag](b1: Sayı, b2: Sayı, b3: Sayı) = Array.ofDim[T](b1, b2, b3) - def doldur[T: ClassTag](b1: Sayı)(e: => T) = Array.fill[T](b1)(e) - def doldur[T: ClassTag](b1: Sayı, b2: Sayı)(e: => T) = Array.fill[T](b1, b2)(e) - def doldur[T: ClassTag](b1: Sayı, b2: Sayı, b3: Sayı)(e: => T) = Array.fill[T](b1, b2, b3)(e) - } - // todo: copied from dizi.scala - implicit class ArrayMethods[T](d: Dizik[T]) { - type Col = Dizik[T] - type Eşlek[A, D] = collection.immutable.Map[A, D] - def başı: T = d.head - def kuyruğu: Col = d.tail - def önü: Col = d.init - def sonu: T = d.last - def boyu: Sayı = d.length - def boşMu: İkil = d.isEmpty - def doluMu: İkil = d.nonEmpty - def ele(deneme: T => İkil): Col = d.filter(deneme) - def eleDeğilse(deneme: T => İkil): Col = d.filterNot(deneme) - // https://www.scala-lang.org/api/2.13.x/scala/Array.html - // map[B](f: (T) => B)(implicit ct: ClassTag[B]): Dizik[B] - // Builds a new array by applying a function to all elements of this array. - def işle[A](işlev: T => A)(implicit ct: ClassTag[A]): Dizik[A] = d.map(işlev)(ct) - def işleYerinde(işlev: (T) => T): Dizik[T] = d.mapInPlace(işlev) - def düzİşle[A: ClassTag](işlev: T => Dizik[A]): Dizik[A] = d.flatMap(işlev) - def sıralı(implicit ord: Ordering[T]): Col = d.sorted(ord) - def sırala[A](i: T => A)(implicit ord: Ordering[A]): Col = d.sortBy(i) - def sırayaSok(önce: (T, T) => İkil): Col = d.sortWith(önce) - def indirge[B >: T](işlem: (B, B) => B): B = d.reduce(işlem) - def soldanKatla[T2](z: T2)(işlev: (T2, T) => T2): T2 = d.foldLeft(z)(işlev) - def sağdanKatla[T2](z: T2)(işlev: (T, T2) => T2): T2 = d.foldRight(z)(işlev) - // https://github.com/scala/scala/blob/v2.12.7/src/library/scala/collection/TraversableOnce.scala#L1 - def topla[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.sum(num) // foldLeft(num.zero)(num.plus) - def çarp[T2 >: T](implicit num: scala.math.Numeric[T2]) = d.product(num) // foldLeft(num.one)(num.times) - def yinelemesiz = d.distinct - def yinelemesizİşlevle[T2](işlev: T => T2): Col = d.distinctBy(işlev) - def yazıYap: Yazı = d.mkString - def yazıYap(ara: Yazı): Yazı = d.mkString(ara) - def yazıYap(başı: Yazı, ara: Yazı, sonu: Yazı): Yazı = d.mkString(başı, ara, sonu) - def tersi = d.reverse - def değiştir[S >: T: ClassTag](yeri: Sayı, değeri: S): Dizik[S] = d.updated(yeri, değeri) - def değiştirYerinde(yeri: Sayı, değeri: T): Birim = d.update(yeri, değeri) - def herbiriİçin[S](işlev: T => S): Birim = d.foreach(işlev) - def varMı(deneme: T => İkil): İkil = d.exists(deneme) - def hepsiDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) - def hepsiİçinDoğruMu(deneme: T => İkil): İkil = d.forall(deneme) - // def içeriyorMu[S >: T](öge: S): İkil = d.contains(öge) - def içeriyorMu(öge: T): İkil = d.contains(öge) - def içeriyorMuDilim(dilim: Col): İkil = d.containsSlice(dilim) - def al(n: Sayı): Col = d.take(n) - def alDoğruKaldıkça(deneme: T => İkil): Col = d.takeWhile(deneme) - def alSağdan(n: Sayı): Col = d.takeRight(n) - def düşür(n: Sayı): Col = d.drop(n) - def düşürDoğruKaldıkça(deneme: T => İkil): Col = d.dropWhile(deneme) - def düşürSağdan(n: Sayı): Col = d.dropRight(n) - // def sırası[S >: T](öge: S): Sayı = d.indexOf(öge) - // def sırası[S >: T](öge: S, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) - // def sırasıSondan[S >: T](öge: S): Sayı = d.lastIndexOf(öge) - // def sırasıSondan[S >: T](öge: S, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) - def sırası(öge: T): Sayı = d.indexOf(öge) - def sırası(öge: T, başlamaNoktası: Sayı): Sayı = d.indexOf(öge, başlamaNoktası) - def sırasıSondan(öge: T): Sayı = d.lastIndexOf(öge) - def sırasıSondan(öge: T, sonNokta: Sayı): Sayı = d.lastIndexOf(öge, sonNokta) - - def dizine = d.toList - def diziye = d.toSeq - def kümeye = d.toSet - def yöneye = d.toVector - def dizime[S >: T](implicit delil: scala.reflect.ClassTag[S]): Dizim[S] = new Dizim(d.toArray(delil)) - def eşleğe[A, D](implicit delil: T <:< (A, D)): Eşlek[A, D] = d.toMap - def eşleme[A, D](implicit delil: T <:< (A, D)): Eşlem[A, D] = Eşlem.değişmezden(d.toMap) - def say(işlev: T => İkil): Sayı = d.count(işlev) - - def dilim(nereden: Sayı, nereye: Sayı) = d.slice(nereden, nereye) - def ikile[S](öbürü: YinelenebilirBirKere[S]) = d.zip(öbürü) - def ikileSırayla = d.zipWithIndex - def ikileKonumla = d.zipWithIndex - def öbekle[A](iş: (T) => A): Eşlek[A, Col] = d.groupBy(iş) - - def enUfağı[B >: T](implicit sıralama: math.Ordering[B]): T = d.min(sıralama) - def enUfağı[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.minBy(iş)(karşılaştırma) - def enİrisi[B >: T](implicit sıralama: math.Ordering[B]): T = d.max(sıralama) - def enİrisi[B](iş: (T) => B)(implicit karşılaştırma: math.Ordering[B]): T = d.maxBy(iş)(karşılaştırma) - // todo: more to come - } - -} diff --git a/src/main/scala/net/kogics/kojo/lite/i18n/tr/resim.scala b/src/main/scala/net/kogics/kojo/lite/i18n/tr/resim.scala index 428c2a07..127fdce4 100644 --- a/src/main/scala/net/kogics/kojo/lite/i18n/tr/resim.scala +++ b/src/main/scala/net/kogics/kojo/lite/i18n/tr/resim.scala @@ -212,10 +212,14 @@ class Resim(var p: richBuiltins.Picture) { type BenzerDönüşüm = java.awt.geom.AffineTransform // todo. likewise type Küme[T] = Set[T] // duplicate in kume.scala type Belki[T] = Option[T] // in belki.scala + type PNokta = edu.umd.cs.piccolo.PNode + type Tuval = net.kogics.kojo.core.SCanvas - //def tuval = p.canvas - //def pnode = p.pnode // ?? - //def tnode = p.tnode // ?? + def tuval: Tuval = p.canvas // net.kogics.kojo.core.SCanvas + def pNokta: PNokta = p.pnode + def tNokta: PNokta = p.tnode + def çizBaştan(): Birim = p.tnode.repaint() + def yenidenÇiz(): Birim = p.tnode.repaint() def çiz(): Birim = p.draw() def çizili: İkil = p.isDrawn def sınırlar: PSınırlar = p.bounds diff --git a/src/main/scala/net/kogics/kojo/lite/i18n/trInit.scala b/src/main/scala/net/kogics/kojo/lite/i18n/trInit.scala index 48415c2b..e99de32b 100644 --- a/src/main/scala/net/kogics/kojo/lite/i18n/trInit.scala +++ b/src/main/scala/net/kogics/kojo/lite/i18n/trInit.scala @@ -26,14 +26,13 @@ import net.kogics.kojo.lite.Builtins import net.kogics.kojo.lite.CoreBuiltins import net.kogics.kojo.xscala.RepeatCommands -// Keep in alphabetical order +// Keep in alphabetical order! object TurkishAPI - extends tr.DizikYöntemleri - with tr.TakvimVeZamanYöntemleri - with tr.TuvalÇizimYöntemleri - with tr.CharMethodsInTurkish + extends tr.CharMethodsInTurkish with tr.CoreTypeMethodsInTurkish + with tr.DizikYöntemleri with tr.DosyaÇevirisi + with tr.EsnekDizikYöntemleri with tr.FutureMethodsInTurkish with tr.ÇizimYöntemleri with tr.GeoMethodsInTurkish @@ -55,6 +54,8 @@ object TurkishAPI with tr.SetMethodsInTurkish with tr.StringMethodsInTurkish with tr.arayuz.SwingWidgetMethodsInTurkish + with tr.TakvimVeZamanYöntemleri + with tr.TuvalÇizimYöntemleri with tr.TürÇevirileri with tr.UrlInTurkish with tr.VectorMethodsInTurkish { @@ -395,6 +396,7 @@ object TurkishAPI def tuşaBasılıMı(tuş: Sayı): İkil = rb.isKeyPressed(tuş) def tuşaBasınca(iş: Sayı => Birim): Birim = rb.tCanvas.onKeyPress(iş) def tuşuBırakınca(iş: Sayı => Birim): Birim = rb.tCanvas.onKeyRelease(iş) + def fareyeTıklayınca(iş: (Kesir, Kesir) => Birim): Birim = rb.tCanvas.onMouseClick(iş) def fareyeTıklıyınca(iş: (Kesir, Kesir) => Birim): Birim = rb.tCanvas.onMouseClick(iş) def fareyiSürükleyince(iş: (Kesir, Kesir) => Birim): Birim = rb.tCanvas.onMouseDrag(iş) def fareKımıldayınca(iş: (Kesir, Kesir) => Birim): Birim = rb.tCanvas.onMouseMove(iş)