text:
[gd_scene load_steps=2 format=2]

[sub_resource type="GDScript" id=1]
script/source = "extends Control

const TLICUDataLoader = preload(\"res://addons/libgdtl/classes/tl_icu_data_loader.gdns\")
const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLFontFace = preload(\"res://addons/libgdtl/classes/tl_font_face.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLBitmapFontFace = preload(\"res://addons/libgdtl/classes/tl_bitmap_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLShapedAttributedString = preload(\"res://addons/libgdtl/classes/tl_shaped_attributed_string.gdns\")
const TLShapedParagraph = preload(\"res://addons/libgdtl/classes/tl_shaped_paragraph.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

const FileList = [\"\", \"gqergerth45y245hygn\", \"AwamiNastaliq-Regular.ttf\", \"Montserrat-BlackItalic.ttf\", \"NotoNaskhArabicUI.fnt\", \"NotoSans-Regular.ttf\", \"ComicNeue-Bold.otf\", \"Montserrat-Italic.ttf\", \"NotoNaskhArabicUI_0.png\", \"NotoSansRegular.fnt\", \"ComicNeue-BoldOblique.otf\", \"Montserrat-Regular.ttf\", \"NotoNaskhArabicUI_0.png.import\", \"NotoSansRegular_0.png\", \"ComicNeue-Oblique.otf\", \"NotoColorEmoji-subset.ttf\", \"NotoNastaliqUrdu-Regular.ttf\", \"NotoSansRegular_0.png.import\", \"ComicNeue-Regular.otf\", \"NotoFull\", \"NotoSans-Bold.ttf\", \"NotoSansThai-Bold.ttf\", \"LICENSE_OFL.txt\", \"NotoNaskhArabic-Bold.ttf\", \"NotoSans-BoldItalic.ttf\", \"NotoSerifThai-Regular.ttf\", \"Montserrat-Black.ttf\", \"NotoNaskhArabic-Regular.ttf\", \"NotoSans-Italic.ttf\"]

var nt_fam_full
var content = []

var RANGE : int = 650001
var tooo = -2

func _ready():
	randomize()
	var data_loader = TLICUDataLoader.new()
	data_loader.load(\"res://fonts/icudt67l.dat\")

	nt_fam_full = TLFontFamily.new()

	var ms_rg_base = TLDynamicFontFace.new()
	ms_rg_base.load(\"res://fonts/NotoFull/NotoSans-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_base)

	var ms_rg_aghm = TLDynamicFontFace.new()
	ms_rg_aghm.load(\"res://fonts/NotoFull/NotoSansCaucasianAlbanian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_aghm, \"aghm\")

	var ms_rg_ahom = TLDynamicFontFace.new()
	ms_rg_ahom.load(\"res://fonts/NotoFull/NotoSerifAhom-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_ahom, \"ahom\")

	var ms_rg_bhks = TLDynamicFontFace.new()
	ms_rg_bhks.load(\"res://fonts/NotoFull/NotoSansBhaiksuki-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_bhks, \"bhks\")

	var ms_rg_dupl = TLDynamicFontFace.new()
	ms_rg_dupl.load(\"res://fonts/NotoFull/NotoSansDuployan-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_dupl, \"dupl\")

	var ms_rg_elba = TLDynamicFontFace.new()
	ms_rg_elba.load(\"res://fonts/NotoFull/NotoSansElbasan-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_elba, \"elba\")

	var ms_rg_gran = TLDynamicFontFace.new()
	ms_rg_gran.load(\"res://fonts/NotoFull/NotoSansGrantha-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_gran, \"gran\")

	var ms_rg_hatr = TLDynamicFontFace.new()
	ms_rg_hatr.load(\"res://fonts/NotoFull/NotoSansHatran-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_hatr, \"hatr\")

	var ms_rg_hmng = TLDynamicFontFace.new()
	ms_rg_hmng.load(\"res://fonts/NotoFull/NotoSansPahawhHmong-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_hmng, \"hmng\")

	var ms_rg_hung = TLDynamicFontFace.new()
	ms_rg_hung.load(\"res://fonts/NotoFull/NotoSansOldHungarian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_hung, \"hung\")

	var ms_rg_khoj = TLDynamicFontFace.new()
	ms_rg_khoj.load(\"res://fonts/NotoFull/NotoSansKhojki-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_khoj, \"khoj\")

	var ms_rg_mahj = TLDynamicFontFace.new()
	ms_rg_mahj.load(\"res://fonts/NotoFull/NotoSansMahajani-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mahj, \"mahj\")

	var ms_rg_mani = TLDynamicFontFace.new()
	ms_rg_mani.load(\"res://fonts/NotoFull/NotoSansManichaean-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mani, \"mani\")

	var ms_rg_marc = TLDynamicFontFace.new()
	ms_rg_marc.load(\"res://fonts/NotoFull/NotoSansMarchen-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_marc, \"marc\")

	var ms_rg_mend = TLDynamicFontFace.new()
	ms_rg_mend.load(\"res://fonts/NotoFull/NotoSansMendeKikakui-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mend, \"mend\")

	var ms_rg_modi = TLDynamicFontFace.new()
	ms_rg_modi.load(\"res://fonts/NotoFull/NotoSansModi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_modi, \"modi\")

	var ms_rg_mero = TLDynamicFontFace.new()
	ms_rg_mero.load(\"res://fonts/NotoFull/NotoSansMeroitic-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mero, \"mero\")

	var ms_rg_mroo = TLDynamicFontFace.new()
	ms_rg_mroo.load(\"res://fonts/NotoFull/NotoSansMro-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mroo, \"mroo\")

	var ms_rg_mult = TLDynamicFontFace.new()
	ms_rg_mult.load(\"res://fonts/NotoFull/NotoSansMultani-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mult, \"mult\")

	var ms_rg_narb = TLDynamicFontFace.new()
	ms_rg_narb.load(\"res://fonts/NotoFull/NotoSansOldNorthArabian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_narb, \"narb\")

	var ms_rg_nbat = TLDynamicFontFace.new()
	ms_rg_nbat.load(\"res://fonts/NotoFull/NotoSansNabataean-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_nbat, \"nbat\")

	var ms_rg_newa = TLDynamicFontFace.new()
	ms_rg_newa.load(\"res://fonts/NotoFull/NotoSansNewa-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_newa, \"newa\")

	var ms_rg_palm = TLDynamicFontFace.new()
	ms_rg_palm.load(\"res://fonts/NotoFull/NotoSansPalmyrene-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_palm, \"palm\")

	var ms_rg_pauc = TLDynamicFontFace.new()
	ms_rg_pauc.load(\"res://fonts/NotoFull/NotoSansPauCinHau-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_pauc, \"pauc\")

	var ms_rg_perm = TLDynamicFontFace.new()
	ms_rg_perm.load(\"res://fonts/NotoFull/NotoSansOldPermic-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_perm, \"perm\")

	var ms_rg_phlp = TLDynamicFontFace.new()
	ms_rg_phlp.load(\"res://fonts/NotoFull/NotoSansPsalterPahlavi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_phlp, \"phlp\")

	var ms_rg_plrd = TLDynamicFontFace.new()
	ms_rg_plrd.load(\"res://fonts/NotoFull/NotoSansMiao-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_plrd, \"plrd\")

	var ms_rg_shrd = TLDynamicFontFace.new()
	ms_rg_shrd.load(\"res://fonts/NotoFull/NotoSansSharada-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_shrd, \"shrd\")

	var ms_rg_sind = TLDynamicFontFace.new()
	ms_rg_sind.load(\"res://fonts/NotoFull/NotoSansKhudawadi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_sind, \"sind\")

	var ms_rg_sora = TLDynamicFontFace.new()
	ms_rg_sora.load(\"res://fonts/NotoFull/NotoSansSoraSompeng-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_sora, \"sora\")

	var ms_rg_takr = TLDynamicFontFace.new()
	ms_rg_takr.load(\"res://fonts/NotoFull/NotoSansTakri-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_takr, \"takr\")

	var ms_rg_tirh = TLDynamicFontFace.new()
	ms_rg_tirh.load(\"res://fonts/NotoFull/NotoSansTirhuta-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_tirh, \"tirh\")

	var ms_rg_wara = TLDynamicFontFace.new()
	ms_rg_wara.load(\"res://fonts/NotoFull/NotoSansWarangCiti-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_wara, \"wara\")

	var ms_rg_hluw = TLDynamicFontFace.new()
	ms_rg_hluw.load(\"res://fonts/NotoFull/NotoSansAnatolianHieroglyphs-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_hluw, \"hluw\")

	var ms_rg_mymr = TLDynamicFontFace.new()
	ms_rg_mymr.load(\"res://fonts/NotoFull/NotoSansMyanmar-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_mymr)

	var ms_rg_telu = TLDynamicFontFace.new()
	ms_rg_telu.load(\"res://fonts/NotoFull/NotoSansTelugu-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_telu)

	var ms_rg_guru = TLDynamicFontFace.new()
	ms_rg_guru.load(\"res://fonts/NotoFull/NotoSansGurmukhi-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_guru)

	var ms_rg_orya = TLDynamicFontFace.new()
	ms_rg_orya.load(\"res://fonts/NotoFull/NotoSansOriya-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_orya)

	var ms_rg_thai = TLDynamicFontFace.new()
	ms_rg_thai.load(\"res://fonts/NotoFull/NotoSansThai-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_thai)

	var ms_rg_knda = TLDynamicFontFace.new()
	ms_rg_knda.load(\"res://fonts/NotoFull/NotoSansKannada-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_knda)

	var ms_rg_osge = TLDynamicFontFace.new()
	ms_rg_osge.load(\"res://fonts/NotoFull/NotoSansOsage-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_osge, \"osge\")

	var ms_rg_tibt = TLDynamicFontFace.new()
	ms_rg_tibt.load(\"res://fonts/NotoFull/NotoSansTibetan-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_tibt)

	var ms_rg_mlym = TLDynamicFontFace.new()
	ms_rg_mlym.load(\"res://fonts/NotoFull/NotoSansMalayalam-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_mlym)

	var ms_rg_sinh = TLDynamicFontFace.new()
	ms_rg_sinh.load(\"res://fonts/NotoFull/NotoSansSinhala-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_sinh)

	var ms_rg_taml = TLDynamicFontFace.new()
	ms_rg_taml.load(\"res://fonts/NotoFull/NotoSansTamil-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_taml)

	var ms_rg_adlm = TLDynamicFontFace.new()
	ms_rg_adlm.load(\"res://fonts/NotoFull/NotoSansAdlam-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_adlm, \"adlm\")

	var ms_rg_hani = TLDynamicFontFace.new()
	ms_rg_hani.load(\"res://fonts/NotoFull/NotoSansCJKjp-Regular.otf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_hani)

	var ms_rg_deva = TLDynamicFontFace.new()
	ms_rg_deva.load(\"res://fonts/NotoFull/NotoSansDevanagari-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_deva)

	var ms_rg_khar = TLDynamicFontFace.new()
	ms_rg_khar.load(\"res://fonts/NotoFull/NotoSansKharoshthi-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_khar)

	var ms_rg_arab = TLDynamicFontFace.new()
	ms_rg_arab.load(\"res://fonts/NotoFull/NotoSansArabic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_arab)

	var ms_rg_cans = TLDynamicFontFace.new()
	ms_rg_cans.load(\"res://fonts/NotoFull/NotoSansCanadianAboriginal-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_cans)

	var ms_rg_ethi = TLDynamicFontFace.new()
	ms_rg_ethi.load(\"res://fonts/NotoFull/NotoSansEthiopic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_ethi)

	var ms_rg_khmr = TLDynamicFontFace.new()
	ms_rg_khmr.load(\"res://fonts/NotoFull/NotoSansKhmer-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_khmr)

	var ms_rg_armn = TLDynamicFontFace.new()
	ms_rg_armn.load(\"res://fonts/NotoFull/NotoSansArmenian-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_armn)

	var ms_rg_cakm = TLDynamicFontFace.new()
	ms_rg_cakm.load(\"res://fonts/NotoFull/NotoSansChakma-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_cakm, \"cakm\")

	var ms_rg_geor = TLDynamicFontFace.new()
	ms_rg_geor.load(\"res://fonts/NotoFull/NotoSansGeorgian-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_geor)

	var ms_rg_laoo = TLDynamicFontFace.new()
	ms_rg_laoo.load(\"res://fonts/NotoFull/NotoSansLao-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_laoo)

	var ms_rg_beng = TLDynamicFontFace.new()
	ms_rg_beng.load(\"res://fonts/NotoFull/NotoSansBengali-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_beng)

	var ms_rg_cher = TLDynamicFontFace.new()
	ms_rg_cher.load(\"res://fonts/NotoFull/NotoSansCherokee-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_cher)

	var ms_rg_gujr = TLDynamicFontFace.new()
	ms_rg_gujr.load(\"res://fonts/NotoFull/NotoSansGujarati-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_gujr)

	var ms_rg_buhd = TLDynamicFontFace.new()
	ms_rg_buhd.load(\"res://fonts/NotoFull/NotoSansBuhid-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_buhd)

	var ms_rg_dsrt = TLDynamicFontFace.new()
	ms_rg_dsrt.load(\"res://fonts/NotoFull/NotoSansDeseret-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_dsrt)

	var ms_rg_hebr = TLDynamicFontFace.new()
	ms_rg_hebr.load(\"res://fonts/NotoFull/NotoSansHebrew-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_hebr)

	var ms_rg_avst = TLDynamicFontFace.new()
	ms_rg_avst.load(\"res://fonts/NotoFull/NotoSansAvestan-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_avst, \"avst\")

	var ms_rg_bali = TLDynamicFontFace.new()
	ms_rg_bali.load(\"res://fonts/NotoFull/NotoSansBalinese-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_bali)

	var ms_rg_bamu = TLDynamicFontFace.new()
	ms_rg_bamu.load(\"res://fonts/NotoFull/NotoSansBamum-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_bamu, \"bamu\")

	var ms_rg_batk = TLDynamicFontFace.new()
	ms_rg_batk.load(\"res://fonts/NotoFull/NotoSansBatak-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_batk, \"batk\")

	var ms_rg_brah = TLDynamicFontFace.new()
	ms_rg_brah.load(\"res://fonts/NotoFull/NotoSansBrahmi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_brah, \"brah\")

	var ms_rg_bugi = TLDynamicFontFace.new()
	ms_rg_bugi.load(\"res://fonts/NotoFull/NotoSansBuginese-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_bugi)

	var ms_rg_cari = TLDynamicFontFace.new()
	ms_rg_cari.load(\"res://fonts/NotoFull/NotoSansCarian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_cari, \"cari\")

	var ms_rg_copt = TLDynamicFontFace.new()
	ms_rg_copt.load(\"res://fonts/NotoFull/NotoSansCoptic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_copt)

	var ms_rg_xsux = TLDynamicFontFace.new()
	ms_rg_xsux.load(\"res://fonts/NotoFull/NotoSansCuneiform-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_xsux)

	var ms_rg_cprt = TLDynamicFontFace.new()
	ms_rg_cprt.load(\"res://fonts/NotoFull/NotoSansCypriot-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_cprt)

	var ms_rg_egyp = TLDynamicFontFace.new()
	ms_rg_egyp.load(\"res://fonts/NotoFull/NotoSansEgyptianHieroglyphs-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_egyp, \"egyp\")

	var ms_rg_glag = TLDynamicFontFace.new()
	ms_rg_glag.load(\"res://fonts/NotoFull/NotoSansGlagolitic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_glag)

	var ms_rg_goth = TLDynamicFontFace.new()
	ms_rg_goth.load(\"res://fonts/NotoFull/NotoSansGothic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_goth)

	var ms_rg_hano = TLDynamicFontFace.new()
	ms_rg_hano.load(\"res://fonts/NotoFull/NotoSansHanunoo-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_hano)

	var ms_rg_armi = TLDynamicFontFace.new()
	ms_rg_armi.load(\"res://fonts/NotoFull/NotoSansImperialAramaic-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_armi, \"armi\")

	var ms_rg_phli = TLDynamicFontFace.new()
	ms_rg_phli.load(\"res://fonts/NotoFull/NotoSansInscriptionalPahlavi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_phli, \"phli\")

	var ms_rg_prti = TLDynamicFontFace.new()
	ms_rg_prti.load(\"res://fonts/NotoFull/NotoSansInscriptionalParthian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_prti, \"prti\")

	var ms_rg_java = TLDynamicFontFace.new()
	ms_rg_java.load(\"res://fonts/NotoFull/NotoSansJavanese-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_java, \"java\")

	var ms_rg_kthi = TLDynamicFontFace.new()
	ms_rg_kthi.load(\"res://fonts/NotoFull/NotoSansKaithi-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_kthi, \"kthi\")

	var ms_rg_kali = TLDynamicFontFace.new()
	ms_rg_kali.load(\"res://fonts/NotoFull/NotoSansKayahLi-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_kali)

	var ms_rg_lepc = TLDynamicFontFace.new()
	ms_rg_lepc.load(\"res://fonts/NotoFull/NotoSansLepcha-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_lepc)

	var ms_rg_limb = TLDynamicFontFace.new()
	ms_rg_limb.load(\"res://fonts/NotoFull/NotoSansLimbu-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_limb)

	var ms_rg_lina = TLDynamicFontFace.new()
	ms_rg_lina.load(\"res://fonts/NotoFull/NotoSansLinearA-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_lina, \"lina\")

	var ms_rg_linb = TLDynamicFontFace.new()
	ms_rg_linb.load(\"res://fonts/NotoFull/NotoSansLinearB-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_linb)

	var ms_rg_lisu = TLDynamicFontFace.new()
	ms_rg_lisu.load(\"res://fonts/NotoFull/NotoSansLisu-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_lisu, \"lisu\")

	var ms_rg_lyci = TLDynamicFontFace.new()
	ms_rg_lyci.load(\"res://fonts/NotoFull/NotoSansLycian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_lyci, \"lyci\")

	var ms_rg_lydi = TLDynamicFontFace.new()
	ms_rg_lydi.load(\"res://fonts/NotoFull/NotoSansLydian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_lydi, \"lydi\")

	var ms_rg_mand = TLDynamicFontFace.new()
	ms_rg_mand.load(\"res://fonts/NotoFull/NotoSansMandaic-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mand, \"mand\")

	var ms_rg_mtei = TLDynamicFontFace.new()
	ms_rg_mtei.load(\"res://fonts/NotoFull/NotoSansMeeteiMayek-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_mtei, \"mtei\")

	var ms_rg_mong = TLDynamicFontFace.new()
	ms_rg_mong.load(\"res://fonts/NotoFull/NotoSansMongolian-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_mong)

	var ms_rg_nkoo = TLDynamicFontFace.new()
	ms_rg_nkoo.load(\"res://fonts/NotoFull/NotoSansNKo-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_nkoo)

	var ms_rg_talu = TLDynamicFontFace.new()
	ms_rg_talu.load(\"res://fonts/NotoFull/NotoSansNewTaiLue-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_talu)

	var ms_rg_ogam = TLDynamicFontFace.new()
	ms_rg_ogam.load(\"res://fonts/NotoFull/NotoSansOgham-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_ogam)

	var ms_rg_olck = TLDynamicFontFace.new()
	ms_rg_olck.load(\"res://fonts/NotoFull/NotoSansOlChiki-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_olck)

	var ms_rg_ital = TLDynamicFontFace.new()
	ms_rg_ital.load(\"res://fonts/NotoFull/NotoSansOldItalic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_ital)

	var ms_rg_xpeo = TLDynamicFontFace.new()
	ms_rg_xpeo.load(\"res://fonts/NotoFull/NotoSansOldPersian-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_xpeo)

	var ms_rg_sarb = TLDynamicFontFace.new()
	ms_rg_sarb.load(\"res://fonts/NotoFull/NotoSansOldSouthArabian-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_sarb, \"sarb\")

	var ms_rg_orkh = TLDynamicFontFace.new()
	ms_rg_orkh.load(\"res://fonts/NotoFull/NotoSansOldTurkic-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_orkh, \"orkh\")

	var ms_rg_osma = TLDynamicFontFace.new()
	ms_rg_osma.load(\"res://fonts/NotoFull/NotoSansOsmanya-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_osma)

	var ms_rg_phag = TLDynamicFontFace.new()
	ms_rg_phag.load(\"res://fonts/NotoFull/NotoSansPhagsPa-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_phag, \"phag\")

	var ms_rg_phnx = TLDynamicFontFace.new()
	ms_rg_phnx.load(\"res://fonts/NotoFull/NotoSansPhoenician-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_phnx, \"phnx\")

	var ms_rg_rjng = TLDynamicFontFace.new()
	ms_rg_rjng.load(\"res://fonts/NotoFull/NotoSansRejang-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_rjng)

	var ms_rg_runr = TLDynamicFontFace.new()
	ms_rg_runr.load(\"res://fonts/NotoFull/NotoSansRunic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_runr)

	var ms_rg_samr = TLDynamicFontFace.new()
	ms_rg_samr.load(\"res://fonts/NotoFull/NotoSansSamaritan-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_samr, \"samr\")

	var ms_rg_saur = TLDynamicFontFace.new()
	ms_rg_saur.load(\"res://fonts/NotoFull/NotoSansSaurashtra-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_saur)

	var ms_rg_shaw = TLDynamicFontFace.new()
	ms_rg_shaw.load(\"res://fonts/NotoFull/NotoSansShavian-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_shaw)

	var ms_rg_sund = TLDynamicFontFace.new()
	ms_rg_sund.load(\"res://fonts/NotoFull/NotoSansSundanese-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_sund)

	var ms_rg_sylo = TLDynamicFontFace.new()
	ms_rg_sylo.load(\"res://fonts/NotoFull/NotoSansSylotiNagri-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_sylo)

	var ms_rg_syrc = TLDynamicFontFace.new()
	ms_rg_syrc.load(\"res://fonts/NotoFull/NotoSansSyriacEastern-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_syrc)

	var ms_rg_tglg = TLDynamicFontFace.new()
	ms_rg_tglg.load(\"res://fonts/NotoFull/NotoSansTagalog-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_tglg)

	var ms_rg_tagb = TLDynamicFontFace.new()
	ms_rg_tagb.load(\"res://fonts/NotoFull/NotoSansTagbanwa-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_tagb)

	var ms_rg_tale = TLDynamicFontFace.new()
	ms_rg_tale.load(\"res://fonts/NotoFull/NotoSansTaiLe-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_tale)

	var ms_rg_lana = TLDynamicFontFace.new()
	ms_rg_lana.load(\"res://fonts/NotoFull/NotoSansTaiTham-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_lana, \"lana\")

	var ms_rg_tavt = TLDynamicFontFace.new()
	ms_rg_tavt.load(\"res://fonts/NotoFull/NotoSansTaiViet-Regular.ttf\")
	nt_fam_full.add_face_for_script(\"Regular\", ms_rg_tavt, \"tavt\")

	var ms_rg_thaa = TLDynamicFontFace.new()
	ms_rg_thaa.load(\"res://fonts/NotoFull/NotoSansThaana-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_thaa)

	var ms_rg_tfng = TLDynamicFontFace.new()
	ms_rg_tfng.load(\"res://fonts/NotoFull/NotoSansTifinagh-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_tfng)

	var ms_rg_ugar = TLDynamicFontFace.new()
	ms_rg_ugar.load(\"res://fonts/NotoFull/NotoSansUgaritic-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_ugar)

	var ms_rg_vaii = TLDynamicFontFace.new()
	ms_rg_vaii.load(\"res://fonts/NotoFull/NotoSansVai-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_vaii)

	var ms_rg_yiii = TLDynamicFontFace.new()
	ms_rg_yiii.load(\"res://fonts/NotoFull/NotoSansYi-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_yiii)

	var ms_rg_cham = TLDynamicFontFace.new()
	ms_rg_cham.load(\"res://fonts/NotoFull/NotoSansCham-Regular.ttf\")
	nt_fam_full.add_face(\"Regular\", ms_rg_cham)

	var dir = Directory.new()
	if dir.open(\"res://text_source\") == OK:
		dir.list_dir_begin()
		var file_name = dir.get_next()
		while (file_name != \"\"):
			if file_name.get_extension() == \"txt\" and file_name != \"attributions.txt\":
				if !dir.current_is_dir():
					var file = File.new()
					file.open(\"res://text_source\".plus_file(file_name), File.READ)
					content.push_back(file.get_as_text().replace(\"\\n\", \"\"))
			file_name = dir.get_next()

var xxx = PoolByteArray([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0])
func _randintarray():
	for i in range(xxx.size() - 1):
		xxx[i] = randi() % 255 + 1
	return xxx

func _randstr():
	return _randintarray().get_string_from_utf8()

func _process(delta):
	OS.set_window_title(\"Run: \" + str(tooo))
	tooo = tooo + 1
	if (tooo <= 0):
		#skip some frames
		update()
	else:
		_fuzz_tlshapedparagraph()

func _fuzz_tlshapedparagraph():
	var para1 = TLShapedParagraph.new()
	var para2 = TLShapedParagraph.new()

	for i in range(2):
		if randi() % 6 == 0:
			para1.copy_properties(para2)

		para1.get_lines()
		para1.get_line(randi() % RANGE - RANGE / 2)

		if randi() % 3 == 0:
			para1.set_width(randf() * 1000)
		para1.get_width()

		if randi() % 3 == 0:
			para1.set_indent(randf() * 10)
		para1.get_indent()

		if randi() % 3 == 0:
			para1.set_back_color(Color(randf(),randf(),randf(),randf()))
		para1.get_back_color()

		if randi() % 3 == 0:
			para1.set_line_spacing(randf() * 10)
		para1.get_line_spacing()

		if randi() % 3 == 0:
			para1.set_string(_fuzz_tlattributedshapedstring())
		if randi() % 3 == 0:
			para1.set_string(_fuzz_tlshapedstring())
		para1.get_string()

		if randi() % 3 == 0:
			para1.set_brk_flags(randi() % RANGE - RANGE / 2)
		para1.get_brk_flags()

		if randi() % 3 == 0:
			para1.set_jst_flags(randi() % RANGE - RANGE / 2)
		para1.get_jst_flags()

		if randi() % 3 == 0:
			para1.set_halign(randi() % RANGE - RANGE / 2)
		para1.get_halign()

		para1.get_size()
		para1.get_word_bounds()
		para1.get_line_bounds()

		if randi() % 3 == 0:
			para2 = para1
	return para1

func _fuzz_tlattributedshapedstring():
	var str1 = TLShapedAttributedString.new()
	var str2 = TLShapedAttributedString.new()

	for i in range(2):
		if randi() % 6 == 0:
			str1.add_attribute(randi() % RANGE - RANGE / 2, _randintarray(), randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		if randi() % 2 == 0:
			str1.add_attribute(1, _fuzz_tlfontfamily(), randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		if randi() % 3 == 0:
			str1.remove_attribute(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.has_attribute(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_attribute(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_attribute_start(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_attribute_end(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		if randi() % 10 == 0:
			str1.remove_attributes(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		if randi() % 10 == 0:
			str1.clear_attributes()

		str1.get_embedded_rects()

		if randi() % 6 == 0:
			str1.load_attributes_dict(_randintarray())
		str1.save_attributes_dict()

		if randi() % 3 == 0:
			str2 = _fuzz_tlshapedstring()
		if randi() % 3 == 0:
			str1.copy_properties(str2)
		if randi() % 3 == 0:
			str1.add_sstring(str2)
		if randi() % 3 == 0:
			str1.replace_sstring(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, str2)

		if randi() % 3 == 0:
			str1.set_base_direction(randi() % RANGE - RANGE / 2)
		str1.get_base_direction()
		str1.get_para_direction()

		if randi() % 3 == 0:
			str1.set_text(_randstr())
			str1.get_text()
			str1.add_text(_randstr())
			str1.replace_text(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randstr())
		elif randi() % 3 == 0:
			str1.get_utf8()
			str1.set_utf8(_randintarray())
			str1.add_utf8(_randintarray())
			str1.replace_utf8(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())
		elif randi() % 3 == 0:
			str1.get_utf16()
			str1.set_utf16(_randintarray())
			str1.add_utf16(_randintarray())
			str1.replace_utf16(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())
		elif randi() % 3 == 0:
			str1.set_text(content[randi() % (content.size() - 1)])
		else:
			str1.get_utf32()
			str1.set_utf32(_randintarray())
			str1.add_utf32(_randintarray())
			str1.replace_utf32(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())

		if randi() % 3 == 0:
			str1.set_base_font(_fuzz_tlfontfamily())
		else:
			str1.set_base_font(nt_fam_full)
		str1.get_base_font();

		if randi() % 3 == 0:
			str1.set_base_font_style(_randstr())
		str1.get_base_font_style();

		if randi() % 3 == 0:
			str1.set_base_font_size(randf() * 255)
		str1.get_base_font_size()

		if randi() % 3 == 0:
			str1.set_features(_randstr())
		str1.get_features()

		if randi() % 3 == 0:
			str1.set_language(_randstr())
		str1.get_language();

		if randi() % 3 == 0:
			str1.set_preserve_control(bool(randi()%2))
		str1.get_preserve_control()

		if randi() % 3 == 0:
			str1.shape()
		str1.is_valid()
		str1.empty()
		str1.length()
		str1.char_count()

		str1.get_ascent()
		str1.get_descent()
		str1.get_width()
		str1.get_height()

		str1.break_words()
		str1.break_jst()
		if randi() % 3 == 0:
			str1.break_lines(randf() * 1000, randi() % RANGE - RANGE / 2)
		if randi() % 3 == 0:
			str2 = str1.substr(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, bool(randi()%2))
		if randi() % 3 == 0:
			str1.extend_to_width(randf() * 1000, randi() % RANGE - RANGE / 2);

		str1.clusters();
		str1.get_cluster_index(randi() % RANGE - RANGE / 2)
		str1.get_cluster_face(randi() % RANGE - RANGE / 2)
		str1.get_cluster_face_size(randi() % RANGE - RANGE / 2)
		str1.get_cluster_trailing_edge(randi() % RANGE - RANGE / 2)
		str1.get_cluster_leading_edge(randi() % RANGE - RANGE / 2)
		str1.get_cluster_start(randi() % RANGE - RANGE / 2)
		str1.get_cluster_end(randi() % RANGE - RANGE / 2)
		str1.get_cluster_ascent(randi() % RANGE - RANGE / 2)
		str1.get_cluster_descent(randi() % RANGE - RANGE / 2)
		str1.get_cluster_width(randi() % RANGE - RANGE / 2)
		str1.get_cluster_height(randi() % RANGE - RANGE / 2)
		str1.get_cluster_rect(randi() % RANGE - RANGE / 2)
		str1.get_cluster_debug_info(randi() % RANGE - RANGE / 2)

		str1.get_cluster_glyphs(randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph_offset(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph_advance(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)

		str1.get_highlight_shapes(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cursor_positions(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_char_direction(randi() % RANGE - RANGE / 2)
		str1.hit_test(randf())
		str1.hit_test_cluster(randf())

		str1.draw_cluster(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()))
		str1.draw(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()))

		str1.draw_dbg(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))
		str1.draw_as_hex(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))
		str1.draw_logical_as_hex(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))

		str1.pos_u16_to_wcs(randi() % RANGE - RANGE / 2)
		str1.pos_wcs_to_u16(randi() % RANGE - RANGE / 2)

		str1.next_safe_bound(randi() % RANGE - RANGE / 2)
		str1.prev_safe_bound(randi() % RANGE - RANGE / 2)
	return str1

func _fuzz_tlshapedstring():
	var str1 = TLShapedString.new()
	var str2 = TLShapedString.new()

	for i in range(2):
		if randi() % 3 == 0:
			str1.copy_properties(str2)
		if randi() % 3 == 0:
			str1.add_sstring(str2)
		if randi() % 3 == 0:
			str1.replace_sstring(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, str2)

		if randi() % 3 == 0:
			str1.set_base_direction(randi() % RANGE - RANGE / 2)
		str1.get_base_direction()
		str1.get_para_direction()

		if randi() % 3 == 0:
			str1.set_text(_randstr())
			str1.get_text()
			str1.add_text(_randstr())
			str1.replace_text(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randstr())
		elif randi() % 3 == 0:
			str1.get_utf8()
			str1.set_utf8(_randintarray())
			str1.add_utf8(_randintarray())
			str1.replace_utf8(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())
		elif randi() % 3 == 0:
			str1.get_utf16()
			str1.set_utf16(_randintarray())
			str1.add_utf16(_randintarray())
			str1.replace_utf16(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())
		elif randi() % 3 == 0:
			str1.set_text(content[randi() % (content.size() - 1)])
		else:
			str1.get_utf32()
			str1.set_utf32(_randintarray())
			str1.add_utf32(_randintarray())
			str1.replace_utf32(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, _randintarray())

		if randi() % 3 == 0:
			str1.set_base_font(_fuzz_tlfontfamily())
		else:
			str1.set_base_font(nt_fam_full)
		str1.get_base_font();

		if randi() % 3 == 0:
			str1.set_base_font_style(_randstr())
		str1.get_base_font_style();

		if randi() % 3 == 0:
			str1.set_base_font_size(randf() * 255)
		str1.get_base_font_size()

		if randi() % 3 == 0:
			str1.set_features(_randstr())
		str1.get_features()

		if randi() % 3 == 0:
			str1.set_language(_randstr())
		str1.get_language();

		if randi() % 3 == 0:
			str1.set_preserve_control(bool(randi()%2))
		str1.get_preserve_control()

		if randi() % 3 == 0:
			str1.shape()
		str1.is_valid()
		str1.empty()
		str1.length()
		str1.char_count()

		str1.get_ascent()
		str1.get_descent()
		str1.get_width()
		str1.get_height()

		str1.break_words()
		str1.break_jst()
		if randi() % 3 == 0:
			str1.break_lines(randf() * 1000, randi() % RANGE - RANGE / 2)
		if randi() % 3 == 0:
			str2 = str1.substr(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2, bool(randi()%2))
		if randi() % 3 == 0:
			str1.extend_to_width(randf() * 1000, randi() % RANGE - RANGE / 2);

		str1.clusters();
		str1.get_cluster_index(randi() % RANGE - RANGE / 2)
		str1.get_cluster_face(randi() % RANGE - RANGE / 2)
		str1.get_cluster_face_size(randi() % RANGE - RANGE / 2)
		str1.get_cluster_trailing_edge(randi() % RANGE - RANGE / 2)
		str1.get_cluster_leading_edge(randi() % RANGE - RANGE / 2)
		str1.get_cluster_start(randi() % RANGE - RANGE / 2)
		str1.get_cluster_end(randi() % RANGE - RANGE / 2)
		str1.get_cluster_ascent(randi() % RANGE - RANGE / 2)
		str1.get_cluster_descent(randi() % RANGE - RANGE / 2)
		str1.get_cluster_width(randi() % RANGE - RANGE / 2)
		str1.get_cluster_height(randi() % RANGE - RANGE / 2)
		str1.get_cluster_rect(randi() % RANGE - RANGE / 2)
		str1.get_cluster_debug_info(randi() % RANGE - RANGE / 2)

		str1.get_cluster_glyphs(randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph_offset(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cluster_glyph_advance(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)

		str1.get_highlight_shapes(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_cursor_positions(randi() % RANGE - RANGE / 2, randi() % RANGE - RANGE / 2)
		str1.get_char_direction(randi() % RANGE - RANGE / 2)
		str1.hit_test(randf())
		str1.hit_test_cluster(randf())

		str1.draw_cluster(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()))
		str1.draw(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()))

		str1.draw_dbg(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))
		str1.draw_as_hex(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))
		str1.draw_logical_as_hex(get_canvas_item(), Vector2(randf(),randf()), Color(randf(),randf(),randf(),randf()), bool(randi()%2), bool(randi()%2))

		str1.pos_u16_to_wcs(randi() % RANGE - RANGE / 2)
		str1.pos_wcs_to_u16(randi() % RANGE - RANGE / 2)

		str1.next_safe_bound(randi() % RANGE - RANGE / 2)
		str1.prev_safe_bound(randi() % RANGE - RANGE / 2)
	return str1

func _fuzz_tlfontfamily():
	var fam = TLFontFamily.new()
	for i in range(2):
		var s = _randstr()
		if randi() % 3 == 0:
			s = \"Regular\"

		if randi() % 3 == 0:
			fam.remove_style(s)
		if randi() % 3 == 0:
			fam.has_style(s)

		if randi() % 3 == 0:
			fam.add_face(s, _fuzz_tlfontface())
		if randi() % 3 == 0:
			fam.add_face_unlinked(s, _fuzz_tlfontface())
		if randi() % 3 == 0:
			fam.add_face_for_script(s, _fuzz_tlfontface(), _randstr())
		if randi() % 3 == 0:
			fam.add_face_for_language(s, _fuzz_tlfontface(), _randstr())

		if randi() % 3 == 0:
			fam.add_face(s, _fuzz_tldynamicfontface())
		if randi() % 3 == 0:
			fam.add_face_unlinked(s, _fuzz_tldynamicfontface())
		if randi() % 3 == 0:
			fam.add_face_for_script(s, _fuzz_tldynamicfontface(), _randstr())
		if randi() % 3 == 0:
			fam.add_face_for_language(s, _fuzz_tldynamicfontface(), _randstr())

		if randi() % 3 == 0:
			fam.add_face(s, _fuzz_tlbitmapfontface())
		if randi() % 3 == 0:
			fam.add_face_unlinked(s, _fuzz_tlbitmapfontface())
		if randi() % 3 == 0:
			fam.add_face_for_script(s, _fuzz_tlbitmapfontface(), _randstr())
		if randi() % 3 == 0:
			fam.add_face_for_language(s, _fuzz_tlbitmapfontface(), _randstr())

		fam.get_face(s)
		fam.get_face_for_script(s, _randstr())
		fam.get_face_for_language(s, _randstr())
	return fam

func _fuzz_tlfontface():
	var face1 = TLFontFace.new()
	var f = randi() % (FileList.size() + 1)
	if f != FileList.size():
		face1.load(\"res://fonts/\" + FileList[f])

	for i in range(2):
		face1.draw_glyph(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.draw_glyph_outline(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.get_glyph_outline(Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, randf() * 256)

		face1.get_ascent(randi() % RANGE - RANGE / 2)
		face1.get_descent(randi() % RANGE - RANGE / 2)
		face1.get_height(randi() % RANGE - RANGE / 2)

		face1.get_base_size()

		face1.get_font_path();

		if randi() % 3 == 0:
			face1.set_texture_flags(randi() % RANGE - RANGE / 2)
		face1.get_texture_flags()

		face1.unicode_scripts_supported()
	return face1

func _fuzz_tlbitmapfontface():
	var face1 = TLBitmapFontFace.new()
	var f = randi() % (FileList.size() + 1)
	if f != FileList.size():
		face1.load(\"res://fonts/\" + FileList[f])

	for i in range(2):
		face1.draw_glyph(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.draw_glyph_outline(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.get_glyph_outline(Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, randf() * 256)

		face1.get_ascent(randi() % RANGE - RANGE / 2)
		face1.get_descent(randi() % RANGE - RANGE / 2)
		face1.get_height(randi() % RANGE - RANGE / 2)

		face1.get_base_size()

		face1.get_font_path();

		if randi() % 3 == 0:
			face1.set_texture_flags(randi() % RANGE - RANGE / 2)
		face1.get_texture_flags()

		face1.unicode_scripts_supported()
	return face1

func _fuzz_tldynamicfontface():
	var face1 = TLDynamicFontFace.new()
	var f = randi() % (FileList.size() + 1)
	if f != FileList.size():
		face1.load(\"res://fonts/\" + FileList[f])

	for i in range(2):
		if randi() % 3 == 0:
			face1.set_force_autohinter(bool(randi()%2))
		face1.get_force_autohinter()
		if randi() % 3 == 0:
			face1.set_hinting(bool(randi()%2))
		face1.get_hinting()
		if randi() % 3 == 0:
			face1.set_oversampling(bool(randi()%2))
		face1.get_oversampling()
		face1.has_graphite()

		face1.draw_glyph(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.draw_glyph_outline(get_canvas_item(), Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, Color(randf(),randf(),randf(),randf()), randf() * 256)
		face1.get_glyph_outline(Vector2(randf(),randf()), randi() % RANGE - RANGE / 2, randf() * 256)

		face1.get_ascent(randi() % RANGE - RANGE / 2)
		face1.get_descent(randi() % RANGE - RANGE / 2)
		face1.get_height(randi() % RANGE - RANGE / 2)

		face1.get_base_size()

		face1.get_font_path();

		if randi() % 3 == 0:
			face1.set_texture_flags(randi() % RANGE - RANGE / 2)
		face1.get_texture_flags()

		face1.unicode_scripts_supported()
	return face1

"

[node name="root" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = SubResource( 1 )


text:
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
;   [section] ; section goes between []
;   param=value ; assign values to parameters

config_version=4

_global_script_classes=[  ]
_global_script_class_icons={
}

[application]

config/name="libgdtl test (gdnative)"
run/main_scene="res://main.tscn"
config/icon="res://icon.png"

[autoload]

TLConstants="*res://addons/libgdtl/constants.gd"

[display]

window/size/width=1400
window/size/resizable=false

[editor_plugins]

enabled=PoolStringArray( "libgdtl" )

[rendering]

environment/default_environment="res://default_env.tres"

repo_language: C

mime_type: text/x-c


text:
[gd_resource type="Environment" load_steps=2 format=2]

[sub_resource type="ProceduralSky" id=1]
sky_top_color = Color( 0.647059, 0.839216, 0.945098, 1 )
sky_horizon_color = Color( 0.839216, 0.917647, 0.980392, 1 )
ground_bottom_color = Color( 0.156863, 0.184314, 0.211765, 1 )
ground_horizon_color = Color( 0.423529, 0.396078, 0.372549, 1 )

[resource]
background_mode = 2
background_sky = SubResource( 1 )


text:
[gd_scene load_steps=16 format=2]

[sub_resource type="GDScript" id=1]
script/source = "extends Control

const TLICUDataLoader = preload(\"res://addons/libgdtl/classes/tl_icu_data_loader.gdns\")

func _on_item_selected(ID):
	for c in range($demos.get_child_count()):
		if ID == c:
			$demos.get_child(c).show()
			$source_view.text = $demos.get_child(c).get_script().source_code
		else:
			$demos.get_child(c).hide()

func _ready():
	var data_loader = TLICUDataLoader.new()
	data_loader.load(\"res://fonts/icudt67l.dat\")

	for c in $demos.get_children():
		$demos_opt.add_item(\"Demo: \" + c.get_full_name())
		c.init()
	$source_view.text = $demos.get_child(0).get_script().source_code
"

[sub_resource type="GDScript" id=2]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var sstring1

func get_full_name():
	return \"libgdtl\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)
	#font1.add_face()

	sstring1 = TLShapedString.new()
	sstring1.set_base_font_size(72)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"libgdtl (gdnative)\")

func _draw():
	var w = (700 - sstring1.get_width()) / 2
	var h = (500 - sstring1.get_height()) / 2
	sstring1.draw(get_canvas_item(), Vector2(w, h + sstring1.get_ascent()), Color(0, 0, 0))
"

[sub_resource type="GDScript" id=3]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var sstring1

func get_full_name():
	return \"Font substitution: no substitution\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	sstring1 = TLShapedString.new()
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(20)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία.\")

func _draw():
	sstring1.draw(get_canvas_item(), Vector2(20, sstring1.get_ascent() + 20), Color(0, 0, 0))
"

[sub_resource type="GDScript" id=4]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var sstring1

func get_full_name():
	return \"Font substitution: substitution using fallback font\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	var face2 = TLDynamicFontFace.new()
	face2.load(\"res://fonts/NotoSans-Regular.ttf\")
	font1.add_face(\"Default\", face2)

	sstring1 = TLShapedString.new()
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(20)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία.\")

func _draw():
	sstring1.draw(get_canvas_item(), Vector2(20, sstring1.get_ascent() + 20), Color(0, 0, 0))
"

[sub_resource type="GDScript" id=5]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var sstring1

func get_full_name():
	return \"Font substitution: substitution using script linking\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	var face2 = TLDynamicFontFace.new()
	face2.load(\"res://fonts/NotoSans-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)
	font1.add_face_for_script(\"Default\", face2, \"grek\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(20)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία.\")

func _draw():
	sstring1.draw(get_canvas_item(), Vector2(20, sstring1.get_ascent() + 20), Color(0, 0, 0))
"

[sub_resource type="GDScript" id=6]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1
var sstring2

func get_full_name():
	return \"Drawing shaped string - Dynamic font\"

func init():
	var face1en = TLDynamicFontFace.new()
	face1en.load(\"res://fonts/NotoSans-Regular.ttf\")

	var face1ar = TLDynamicFontFace.new()
	face1ar.load(\"res://fonts/NotoNaskhArabic-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1en)
	font1.add_face_for_script(\"Default\", face1ar, \"arab\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_LTR)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"OpenType Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

	sstring2 = TLShapedString.new()
	sstring2.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring2.set_base_font(font1)
	sstring2.set_base_font_size(24)
	sstring2.set_base_font_style(\"Default\")
	sstring2.set_text(\"OpenType Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

func _draw():
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring1.get_descent() + sstring2.get_ascent() + 20
	sstring2.draw(get_canvas_item(), Vector2(20, ofs), Color(1, 0, 0))"

[sub_resource type="GDScript" id=7]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1
var sstring2

func get_full_name():
	return \"Drawing shaped string - Dynamic font (Graphite2)\"

func init():
	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/AwamiNastaliq-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_LTR)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	if face1.has_graphite():
		sstring1.set_text(\"Graphite Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	else:
		sstring1.set_text(\"[Graphite not supported] حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

	sstring2 = TLShapedString.new()
	sstring2.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring2.set_base_font(font1)
	sstring2.set_base_font_size(24)
	sstring2.set_base_font_style(\"Default\")
	if face1.has_graphite():
		sstring2.set_text(\"Graphite Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	else:
		sstring2.set_text(\"[Graphite not supported] حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

func _draw():
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring1.get_descent() + sstring2.get_ascent() + 20
	sstring2.draw(get_canvas_item(), Vector2(20, ofs), Color(1, 0, 0))"

[sub_resource type="GDScript" id=8]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLBitmapFontFace = preload(\"res://addons/libgdtl/classes/tl_bitmap_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1
var sstring2

func get_full_name():
	return \"Drawing shaped string - Bitmap font\"

func init():
	var face1en = TLBitmapFontFace.new()
	face1en.load(\"res://fonts/NotoSansRegular.fnt\")
	face1en.set_texture_flags(Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER | Texture.FLAG_ANISOTROPIC_FILTER)

	var face1ar = TLBitmapFontFace.new()
	face1ar.load(\"res://fonts/NotoNaskhArabicUI.fnt\")
	face1ar.set_texture_flags(Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER | Texture.FLAG_ANISOTROPIC_FILTER)

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1en)
	font1.add_face_for_script(\"Default\", face1ar, \"arab\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_LTR)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(32)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"OpenType Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

	sstring2 = TLShapedString.new()
	sstring2.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring2.set_base_font(font1)
	sstring2.set_base_font_size(32)
	sstring2.set_base_font_style(\"Default\")
	sstring2.set_text(\"OpenType Test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

func _draw():
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring1.get_descent() + sstring2.get_ascent() + 20
	sstring2.draw(get_canvas_item(), Vector2(20, ofs), Color(1, 0, 0))"

[sub_resource type="GDScript" id=9]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1
var spara1 = []

func get_full_name():
	return \"Line breaking and justification\"

func init():
	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/NotoSerifThai-Regular.ttf\")
	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	sstring1 = TLShapedString.new()
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(16)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"สอนของพระพุทธเจ้าเป็นภาษาอันศักดิ์สิทธิ์และเป็นมงคล เมื่อคนไทยต้องการตั้งชื่อประเทศว่า\")
	var bounds = sstring1.break_lines(200, TLConstants.TextBreak.TEXT_BREAK_MANDATORY_AND_WORD_BOUND)

	var prev = 0
	for b in bounds:
		var line = sstring1.substr(prev, b, TLConstants.TextTrimMode.TEXT_TRIM_BREAK_AND_WHITESPACE)
		line.extend_to_width(200, TLConstants.TextJustification.TEXT_JUSTIFICATION_KASHIDA_AND_WHITESPACE)
		spara1.push_back(line)
		prev = b

func _draw():
	draw_line(Vector2(20, 40), Vector2(20, 500), Color(1, 0, 1))
	draw_line(Vector2(220, 40), Vector2(220, 500), Color(1, 0, 1))
	var line_spacing = 2
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, 20), Color(0, 0, 1))
	ofs += sstring1.get_descent() + line_spacing
	for line in spara1:
		ofs += line.get_ascent()
		line.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 0))
		ofs += line.get_descent() + line_spacing"

[sub_resource type="GDScript" id=10]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1
var spara1 = []
var sstring2
var spara2 = []
var sstring3
var spara3 = []

func get_full_name():
	return \"Line breaking modes\"

func init():
	var face1en = TLDynamicFontFace.new()
	face1en.load(\"res://fonts/NotoSans-Regular.ttf\")

	var face1ar = TLDynamicFontFace.new()
	face1ar.load(\"res://fonts/NotoNaskhArabic-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1en)
	font1.add_face_for_script(\"Default\", face1ar, \"arab\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"Looooooooongword test\\n test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	var bounds = sstring1.break_lines(200, TLConstants.TextBreak.TEXT_BREAK_MANDATORY_AND_WORD_BOUND)

	var prev = 0
	for b in bounds:
		var line = sstring1.substr(prev, b, TLConstants.TextTrimMode.TEXT_TRIM_BREAK_AND_WHITESPACE)
		spara1.push_back(line)
		prev = b

	sstring2 = TLShapedString.new()
	sstring2.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring2.set_base_font(font1)
	sstring2.set_base_font_size(24)
	sstring2.set_base_font_style(\"Default\")
	sstring2.set_text(\"Looooooooongword test\\n test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	bounds = sstring2.break_lines(200, TLConstants.TextBreak.TEXT_BREAK_MANDATORY_AND_ANYWHERE)

	prev = 0
	for b in bounds:
		var line = sstring2.substr(prev, b, TLConstants.TextTrimMode.TEXT_TRIM_BREAK_AND_WHITESPACE)
		spara2.push_back(line)
		prev = b

	sstring3 = TLShapedString.new()
	sstring3.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring3.set_base_font(font1)
	sstring3.set_base_font_size(24)
	sstring3.set_base_font_style(\"Default\")
	sstring3.set_text(\"Looooooooongword test\\n test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	bounds = sstring3.break_lines(200, TLConstants.TextBreak.TEXT_BREAK_MANDATORY)

	prev = 0
	for b in bounds:
		var line = sstring3.substr(prev, b, TLConstants.TextTrimMode.TEXT_TRIM_BREAK_AND_WHITESPACE)
		spara3.push_back(line)
		prev = b

func _draw():
	draw_line(Vector2(20, 20), Vector2(20, 500), Color(1, 0, 1))
	draw_line(Vector2(220, 20), Vector2(220, 500), Color(1, 0, 1))
	var line_spacing = 2
	var ofs = 20
	for line in spara1:
		ofs += line.get_ascent()
		line.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 1, 0))
		ofs += line.get_descent() + line_spacing
	ofs += 20
	for line in spara2:
		ofs += line.get_ascent()
		line.draw(get_canvas_item(), Vector2(20, ofs), Color(1, 0, 0))
		ofs += line.get_descent() + line_spacing
	ofs += 20
	for line in spara3:
		ofs += line.get_ascent()
		line.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
		ofs += line.get_descent() + line_spacing"

[sub_resource type="GDScript" id=11]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var font2

var sstring1
var sstring2
var sstring3
var sstring4
var sstring5
var sstring6

func get_full_name():
	return \"Justification modes\"

func init():
	var face1en = TLDynamicFontFace.new()
	face1en.load(\"res://fonts/NotoSans-Regular.ttf\")

	var face1ar = TLDynamicFontFace.new()
	face1ar.load(\"res://fonts/NotoNaskhArabic-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1en)
	font1.add_face_for_script(\"Default\", face1ar, \"arab\")

	var face2ar = TLDynamicFontFace.new()
	face2ar.load(\"res://fonts/NotoNastaliqUrdu-Regular.ttf\")

	font2 = TLFontFamily.new()
	font2.add_face(\"Default\", face1en)
	font2.add_face_for_script(\"Default\", face2ar, \"arab\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"KS & WS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring1.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_KASHIDA_AND_WHITESPACE)

	sstring2 = TLShapedString.new()
	sstring2.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring2.set_base_font(font2)
	sstring2.set_base_font_size(24)
	sstring2.set_base_font_style(\"Default\")
	sstring2.set_text(\"KS & WS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring2.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_KASHIDA_AND_WHITESPACE)

	sstring3 = TLShapedString.new()
	sstring3.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring3.set_base_font(font1)
	sstring3.set_base_font_size(24)
	sstring3.set_base_font_style(\"Default\")
	sstring3.set_text(\"KS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring3.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_KASHIDA_ONLY)

	sstring4 = TLShapedString.new()
	sstring4.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring4.set_base_font(font2)
	sstring4.set_base_font_size(24)
	sstring4.set_base_font_style(\"Default\")
	sstring4.set_text(\"KS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring4.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_KASHIDA_ONLY)

	sstring5 = TLShapedString.new()
	sstring5.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring5.set_base_font(font1)
	sstring5.set_base_font_size(24)
	sstring5.set_base_font_style(\"Default\")
	sstring5.set_text(\"WS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring5.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_WHITESPACE_ONLY)

	sstring6 = TLShapedString.new()
	sstring6.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring6.set_base_font(font2)
	sstring6.set_base_font_size(24)
	sstring6.set_base_font_style(\"Default\")
	sstring6.set_text(\"WS حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")
	sstring6.extend_to_width(600, TLConstants.TextJustification.TEXT_JUSTIFICATION_WHITESPACE_ONLY)

func _draw():
	draw_line(Vector2(20, 20), Vector2(20, 500), Color(1, 0, 1))
	draw_line(Vector2(620, 20), Vector2(620, 500), Color(1, 0, 1))
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring1.get_descent() + sstring2.get_ascent() + 20
	sstring2.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring2.get_descent() + sstring3.get_ascent() + 20
	sstring3.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring3.get_descent() + sstring4.get_ascent() + 20
	sstring4.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring4.get_descent() + sstring5.get_ascent() + 20
	sstring5.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
	ofs +=sstring5.get_descent() + sstring6.get_ascent() + 20
	sstring6.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))
"

[sub_resource type="GDScript" id=12]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1

func get_full_name():
	return \"OpenType features\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_RTL)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"Small caps, Small caps, 1234567890, 1234567890\")
	sstring1.set_features(\"+smcp[0:10]=1,+onum[24:35]=1\")

func _draw():
	var ofs = sstring1.get_ascent() + 20
	sstring1.draw(get_canvas_item(), Vector2(20, ofs), Color(0, 0, 1))"

[sub_resource type="GDScript" id=13]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedAttributedString = preload(\"res://addons/libgdtl/classes/tl_shaped_attributed_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var font2
var font3

var image1 = preload(\"res://icon.png\")

var sastring1

func get_full_name():
	return \"Drawing attributed shaped string\"

func init():

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")
	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	var face2 = TLDynamicFontFace.new()
	face2.load(\"res://fonts/NotoSans-Regular.ttf\")
	font2 = TLFontFamily.new()
	font2.add_face(\"Default\", face2)

	var face3 = TLDynamicFontFace.new()
	face3.load(\"res://fonts/NotoColorEmoji-subset.ttf\")
	font3 = TLFontFamily.new()
	font3.add_face(\"Default\", face3)

	#note: On Windows Godot sting unable to handle characters outside BMP, using raw UTF-16 string instead.
	#text: Attrib Test - 123 - Test [emote] Test

	var bytes = PoolByteArray([0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x62, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x3D, 0xD8, 0x04, 0xDE, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00])

	sastring1 = TLShapedAttributedString.new()
	sastring1.set_base_font(font1)
	sastring1.set_base_font_size(20)
	sastring1.set_base_font_style(\"Default\")
	sastring1.set_utf16(bytes)
	bytes.resize(0) #cleanup fix to https://github.com/GodotNativeTools/godot-cpp/issues/223

	#set custom font and colors
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT, font2, 7, 11)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_COLOR, Color(0, 1, 0), 0, 4)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OUTLINE_COLOR, Color(0, 0, 1), 2, 6)

	#lines
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_UNDERLINE_COLOR, Color(0, 0, 1), 1, 6)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_UNDERLINE_WIDTH, 2, 2, 4)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_STRIKETHROUGH_COLOR, Color(1, 0, 0), 0, 1)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_STRIKETHROUGH_WIDTH, 3, 0, 1)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OVERLINE_COLOR, Color(0, 1, 0), 4, 9)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OVERLINE_WIDTH, 2, 4, 7)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_HIGHLIGHT_COLOR, Color(1, 1, 0), 10, 14)

	#embed images
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 14, 15)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_TOP, 14, 15)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 15, 16)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_CENTER, 15, 16)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 16, 17)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_BOTTOM, 16, 17)

	#set emoji font
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT, font3, 24, 26)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT_SIZE, 64, 24, 26)
	#note: this emoji occupies two codepoints, it's character code is U+1F604, in UTF-16 it is encoded as 0xD83D 0xDE04 surrogate pair

func _draw():
	sastring1.draw(get_canvas_item(), Vector2(20, sastring1.get_ascent() + 20), Color(0, 0, 0))"

[sub_resource type="GDScript" id=14]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedString = preload(\"res://addons/libgdtl/classes/tl_shaped_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1

var sstring1

var x = -1;
var x_end = -1;
var crect = Rect2()
var crect_lead
var cursors = []
var cursors_end = []
var selection_rects = []

func get_full_name():
	return \"Hit test, cursors, selection and cluster info (plain string)\"

func init():
	set_focus_mode(FOCUS_ALL);

	var face1en = TLDynamicFontFace.new()
	face1en.load(\"res://fonts/NotoSans-Regular.ttf\")

	var face1ar = TLDynamicFontFace.new()
	face1ar.load(\"res://fonts/NotoNaskhArabic-Regular.ttf\")

	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1en)
	font1.add_face_for_script(\"Default\", face1ar, \"arab\")

	sstring1 = TLShapedString.new()
	sstring1.set_base_direction(TLConstants.TextDirection.TEXT_DIRECTION_LTR)
	sstring1.set_base_font(font1)
	sstring1.set_base_font_size(24)
	sstring1.set_base_font_style(\"Default\")
	sstring1.set_text(\"maintained in their own test حسنِ مہ گرچہ بہ ہنگامِ کمال اچّھا ہے\")

func _draw():
	#draw selection
	for r in selection_rects:
		draw_rect(Rect2(r.position + Vector2(20, 20), r.size), Color(1, 1, 0), true)

	#draw string
	sstring1.draw(get_canvas_item(), Vector2(20, sstring1.get_ascent() + 20), Color(0, 0, 0.4))

	#draw cursors
	for c in cursors:
		draw_line(Vector2(20 + c, 20), Vector2(20 + c, sstring1.get_height() + 20), Color(1, 0, 0, 0.4), 2)
	for c in cursors_end:
		draw_line(Vector2(20 + c, 20), Vector2(20 + c, sstring1.get_height() + 20), Color(1, 0, 1, 0.4), 2)

	#draw cluster bounding rect
	if crect != Rect2() :
		draw_rect(Rect2(crect.position + Vector2(20, sstring1.get_ascent() + 20), crect.size), Color(0, 1, 0, 0.5), false)
		draw_circle(Vector2(20 + crect_lead, crect.position.y + sstring1.get_ascent() + 20 + crect.size.y), 3, Color(1, 0, 1))

func _on_hit_test_gui_input(event):
	if event is InputEventMouseMotion:
		#cluster bounding rect
		crect = Rect2()
		if (event.position.y >= 20) and (event.position.y < 20 + sstring1.get_height()):
			var y = sstring1.hit_test_cluster(event.position.x - 20)
			crect = sstring1.get_cluster_rect(y)
			crect_lead = sstring1.get_cluster_leading_edge(y)
			$info.text = \"Cluster: %d of %d, Codepoint positions: %d...%d of %d, Ascent: %f, Descent: %f\" % [y, sstring1.clusters(), sstring1.get_cluster_start(y), sstring1.get_cluster_end(y), sstring1.length(), sstring1.get_cluster_ascent(y), sstring1.get_cluster_descent(y)]

	if event is InputEventMouseButton:
		if event.get_shift():
			#selection end
			cursors_end.clear()
			x_end = - 1
			if (event.position.y >= 20) and (event.position.y < 20 + sstring1.get_height()):
				x_end = sstring1.hit_test(event.position.x - 20)
				cursors_end = sstring1.get_cursor_positions(x_end, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
		else:
			#selection start / cursor
			cursors.clear()
			cursors_end.clear()
			x = - 1
			x_end = - 1
			if (event.position.y >= 20) and (event.position.y < 20 + sstring1.get_height()):
				x = sstring1.hit_test(event.position.x - 20)
				cursors = sstring1.get_cursor_positions(x, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
		selection_rects.clear()

	if event is InputEventKey:
		if event.is_pressed():
			if event.get_shift():
				cursors_end.clear()
				if event.scancode == KEY_LEFT:
					if x_end == -1:
						x_end = x
					if x_end > 0:
						x_end -= 1
				if event.scancode == KEY_RIGHT:
					if x_end == -1:
						x_end = x
					if x_end < sstring1.length():
						x_end += 1
				cursors_end = sstring1.get_cursor_positions(x_end, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
			else:
				cursors.clear()
				cursors_end.clear()
				x_end = - 1
				if event.scancode == KEY_LEFT:
					if x > 0:
						x -= 1
				if event.scancode == KEY_RIGHT:
					if x < sstring1.length():
						x += 1
				cursors = sstring1.get_cursor_positions(x, TLConstants.TextDirection.TEXT_DIRECTION_LTR)

	if (x != -1) and (x_end != -1):
		#capture selection rects
		selection_rects = sstring1.get_highlight_shapes(min(x, x_end), max(x, x_end))
	else:
		selection_rects = []

	accept_event()
	update()
"

[sub_resource type="GDScript" id=15]
script/source = "extends ColorRect

const TLFontFamily = preload(\"res://addons/libgdtl/classes/tl_font_family.gdns\")
const TLDynamicFontFace = preload(\"res://addons/libgdtl/classes/tl_dynamic_font_face.gdns\")
const TLShapedAttributedString = preload(\"res://addons/libgdtl/classes/tl_shaped_attributed_string.gdns\")
const TLConstants = preload(\"res://addons/libgdtl/constants.gd\")

var font1
var font2
var font3

var image1 = preload(\"res://icon.png\")

var sastring1

var x = -1;
var x_end = -1;
var crect = Rect2()
var crect_lead
var cursors = []
var cursors_end = []
var selection_rects = []

func get_full_name():
	return \"Hit test, cursors, selection and cluster info (attributed string)\"

func init():
	set_focus_mode(FOCUS_ALL);

	var face1 = TLDynamicFontFace.new()
	face1.load(\"res://fonts/Montserrat-Black.ttf\")
	font1 = TLFontFamily.new()
	font1.add_face(\"Default\", face1)

	var face2 = TLDynamicFontFace.new()
	face2.load(\"res://fonts/NotoSans-Regular.ttf\")
	font2 = TLFontFamily.new()
	font2.add_face(\"Default\", face2)

	var face3 = TLDynamicFontFace.new()
	face3.load(\"res://fonts/NotoColorEmoji-subset.ttf\")
	font3 = TLFontFamily.new()
	font3.add_face(\"Default\", face3)

	#note: On Windows Godot sting unable to handle characters outside BMP, using raw UTF-16 string instead.
	#text: Attrib Test - 123 - Test [emote] Test

	var bytes = PoolByteArray([0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, 0x62, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x3D, 0xD8, 0x04, 0xDE, 0x54, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00])

	sastring1 = TLShapedAttributedString.new()
	sastring1.set_base_font(font1)
	sastring1.set_base_font_size(20)
	sastring1.set_base_font_style(\"Default\")
	sastring1.set_utf16(bytes)
	bytes.resize(0) #cleanup to fix https://github.com/GodotNativeTools/godot-cpp/issues/223

	#set custom font and colors
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT, font2, 7, 11)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_COLOR, Color(0, 1, 0), 0, 4)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OUTLINE_COLOR, Color(0, 0, 1), 2, 6)

	#lines
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_UNDERLINE_COLOR, Color(0, 0, 1), 1, 6)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_UNDERLINE_WIDTH, 2, 2, 4)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_STRIKETHROUGH_COLOR, Color(1, 0, 0), 0, 1)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_STRIKETHROUGH_WIDTH, 3, 0, 1)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OVERLINE_COLOR, Color(0, 1, 0), 4, 9)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_OVERLINE_WIDTH, 2, 4, 7)

	#embed images
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 14, 15)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_TOP, 14, 15)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 15, 16)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_CENTER, 15, 16)

	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_IMAGE, image1, 16, 17)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_REPLACEMENT_VALIGN, TLConstants.TextVAlign.TEXT_VALIGN_BOTTOM, 16, 17)

	#set emoji font
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT, font3, 24, 26)
	sastring1.add_attribute(TLConstants.TextAttribute.TEXT_ATTRIBUTE_FONT_SIZE, 26, 24, 26)
	#note: this emoji occupies two codepoints, it's character code is U+1F604, in UTF-16 it is encoded as 0xD83D 0xDE04 surrogate pair

func _draw():
	#draw selection
	for r in selection_rects:
		draw_rect(Rect2(r.position + Vector2(20, 20), r.size), Color(1, 1, 0), true)

	#draw string
	sastring1.draw(get_canvas_item(), Vector2(20, sastring1.get_ascent() + 20), Color(0, 0, 0))

	#draw cursors
	for c in cursors:
		draw_line(Vector2(20 + c, 20), Vector2(20 + c, sastring1.get_height() + 20), Color(1, 0, 0, 0.4), 2)
	for c in cursors_end:
		draw_line(Vector2(20 + c, 20), Vector2(20 + c, sastring1.get_height() + 20), Color(1, 0, 1, 0.4), 2)

	#draw cluster bounding rect
	if crect != Rect2() :
		draw_rect(Rect2(crect.position + Vector2(20, sastring1.get_ascent() + 20), crect.size), Color(0, 1, 0, 0.5), false)
		draw_circle(Vector2(20 + crect_lead, crect.position.y + sastring1.get_ascent() + 20 + crect.size.y), 3, Color(1, 0, 1))

func _on_hit_test_gui_input(event):
	if event is InputEventMouseMotion:
		#cluster bounding rect
		crect = Rect2()
		if (event.position.y >= 20) and (event.position.y < 20 + sastring1.get_height()):
			var y = sastring1.hit_test_cluster(event.position.x - 20)
			crect = sastring1.get_cluster_rect(y)
			crect_lead = sastring1.get_cluster_leading_edge(y)
			$info.text = \"Cluster: %d of %d, Codepoint positions: %d...%d of %d, Ascent: %f, Descent: %f\" % [y, sastring1.clusters(), sastring1.get_cluster_start(y), sastring1.get_cluster_end(y), sastring1.length(), sastring1.get_cluster_ascent(y), sastring1.get_cluster_descent(y)]

	if event is InputEventMouseButton:
		if event.get_shift():
			#selection end
			cursors_end.clear()
			x_end = - 1
			if (event.position.y >= 20) and (event.position.y < 20 + sastring1.get_height()):
				x_end = sastring1.hit_test(event.position.x - 20)
				cursors_end = sastring1.get_cursor_positions(x_end, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
		else:
			#selection start / cursor
			cursors.clear()
			cursors_end.clear()
			x = - 1
			x_end = - 1
			if (event.position.y >= 20) and (event.position.y < 20 + sastring1.get_height()):
				x = sastring1.hit_test(event.position.x - 20)
				cursors = sastring1.get_cursor_positions(x, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
		selection_rects.clear()

	if event is InputEventKey:
		if event.is_pressed():
			if event.get_shift():
				cursors_end.clear()
				if event.scancode == KEY_LEFT:
					if x_end == -1:
						x_end = x
					if x_end > 0:
						x_end -= 1
				if event.scancode == KEY_RIGHT:
					if x_end == -1:
						x_end = x
					if x_end < sastring1.length():
						x_end += 1
				cursors_end = sastring1.get_cursor_positions(x_end, TLConstants.TextDirection.TEXT_DIRECTION_LTR)
			else:
				cursors.clear()
				cursors_end.clear()
				x_end = - 1
				if event.scancode == KEY_LEFT:
					if x > 0:
						x -= 1
				if event.scancode == KEY_RIGHT:
					if x < sastring1.length():
						x += 1
				cursors = sastring1.get_cursor_positions(x, TLConstants.TextDirection.TEXT_DIRECTION_LTR)

	if (x != -1) and (x_end != -1):
		#capture selection rects
		selection_rects = sastring1.get_highlight_shapes(min(x, x_end), max(x, x_end))
	else:
		selection_rects = []

	accept_event()
	update()"

[node name="root" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = SubResource( 1 )

[node name="demos_opt" type="OptionButton" parent="."]
margin_left = 80.0
margin_top = 20.0
margin_right = 710.0
margin_bottom = 50.0

[node name="label" type="Label" parent="."]
margin_left = 10.0
margin_top = 20.0
margin_right = 70.0
margin_bottom = 50.0
text = "Demo:"
valign = 1

[node name="demos" type="Control" parent="."]
margin_left = 10.0
margin_top = 70.0
margin_right = 710.0
margin_bottom = 600.0

[node name="intro" type="ColorRect" parent="demos"]
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 2 )

[node name="no_sub" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 3 )

[node name="fb_sub" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 4 )

[node name="lnk_sub" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 5 )

[node name="shaped_str_dyn" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 6 )

[node name="shaped_str_dyn_graphite" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 7 )

[node name="shaped_str_bmp" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 8 )

[node name="line_brk" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 9 )

[node name="line_brk_modes" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 10 )

[node name="line_just" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 11 )

[node name="ot_feat" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 12 )

[node name="attrib" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 13 )

[node name="hit_test" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 14 )

[node name="info" type="Label" parent="demos/hit_test"]
margin_left = 10.0
margin_top = 480.0
margin_right = 690.0
margin_bottom = 494.0
custom_colors/font_color = Color( 0, 0, 0, 1 )

[node name="controls" type="Label" parent="demos/hit_test"]
margin_left = 10.0
margin_top = 350.0
margin_right = 690.0
margin_bottom = 432.0
custom_colors/font_color = Color( 0, 0, 0, 1 )
text = "Instructions:

 - Click / Shift+Click or use arrow keys to move cursor and make selection.
 - Move mouse cursor over text to view cluster info and boundig box."

[node name="hit_test_att" type="ColorRect" parent="demos"]
visible = false
margin_right = 700.0
margin_bottom = 500.0
script = SubResource( 15 )

[node name="info" type="Label" parent="demos/hit_test_att"]
margin_left = 10.0
margin_top = 480.0
margin_right = 690.0
margin_bottom = 494.0
custom_colors/font_color = Color( 0, 0, 0, 1 )

[node name="controls" type="Label" parent="demos/hit_test_att"]
margin_left = 10.0
margin_top = 350.0
margin_right = 690.0
margin_bottom = 432.0
custom_colors/font_color = Color( 0, 0, 0, 1 )
text = "Instructions:

 - Click / Shift+Click or use arrow keys to move cursor and make selection.
 - Move mouse cursor over text to view cluster info and boundig box."

[node name="source_view" type="TextEdit" parent="."]
margin_left = 720.0
margin_top = 20.0
margin_right = 1390.0
margin_bottom = 570.0
readonly = true
syntax_highlighting = true

[connection signal="item_selected" from="demos_opt" to="." method="_on_item_selected"]
[connection signal="gui_input" from="demos/hit_test" to="demos/hit_test" method="_on_hit_test_gui_input"]
[connection signal="gui_input" from="demos/hit_test_att" to="demos/hit_test_att" method="_on_hit_test_gui_input"]


text: Nascinu tutti l’omi libari è pari di dignità è di diritti. Pussedinu a raghjoni è a cuscenza è li tocca ad agiscia trà elli di modu fraternu.


text: Ⰰ Ⰱ Ⰲ Ⰳ Ⰴ Ⰵ Ⰶ Ⰷ Ⰸ Ⰹ Ⰺ Ⰻ Ⰼ Ⰽ Ⰾ Ⰿ Ⱀ Ⱁ Ⱂ Ⱃ Ⱄ Ⱅ Ⱆ Ⱇ Ⱈ Ⱉ Ⱊ Ⱋ Ⱌ Ⱍ Ⱎ Ⱏ Ⱐ Ⱑ Ⱒ Ⱓ Ⱔ Ⱕ Ⱖ Ⱗ Ⱘ Ⱙ Ⱚ Ⱛ Ⱜ Ⱝ Ⱞ ⰰ ⰱ ⰲ ⰳ ⰴ ⰵ ⰶ ⰷ ⰸ ⰹ ⰺ ⰻ ⰼ ⰽ ⰾ ⰿ ⱀ


text: सबै व्यक्ति हरू जन्मजात स्वतन्त्र हुन ती सबैको समान अधिकार र महत्व छ। निजहरूमा विचार शक्ति र सद्धिचार भएकोले निजहरूले आपसमा भातृत्वको भावना बाट व्यवहार गर्नु पर्छ।


text: Bantu nyonso, na mbutukulu kevwandaka na kimpwanza ya bawu, ngenda mpe baluve ya mutindu mosi. Mayela na mbanzulu je na bawu, ni yawu yina bafwana kusalasana na bumpangi.


text:
α ά ὰ ᾶ β γ δ ε έ ὲ ζ η ή ὴ ῆ θ ι ί ὶ ῖ ϊ ΐ ῒ ῗ κ λ μ ν ξ ο ό ὸ π ρ σ ς τ υ ὖ ὗ ύ ὺ ῦ ϋ ΰ ῢ ῧ φ χ ψ ω ὤ ὢ ὦ ὥ ὣ ὧ ώ ὼ ῶ
Α Ά Ὰ Β Γ Δ Ε Έ Ὲ Ζ Η Ή Ὴ Θ Ι Ί Ὶ Ϊ Κ Λ Μ Ν Ξ Ο Ό Ὸ Π Ρ Σ Σ Τ Υ Ὗ Ύ Ὺ Ϋ Φ Χ Ψ Ω Ὤ Ὢ Ὦ Ὥ Ὣ Ὧ Ώ Ὼ


text: Ончо улус ак‐јарыкка јайым ла теҥ‐тай тап‐эриктӱ туулат. Олор санааукаалу ла чек кӱӱн‐тапту болуп бӱткен ле бой‐бойын карындаш кирези кӧрӧр лӧ јӱрер учурлу.


text: Ⲁ ⲁ Ⲃ ⲃ Ⲅ ⲅ Ⲇ ⲇ Ⲉ ⲉ Ⲋ ⲋ Ⲍ ⲍ Ⲏ ⲏ Ⲑ ⲑ Ⲓ ⲓ Ⲕ ⲕ Ⲗ ⲗ Ⲙ ⲙ Ⲛ ⲛ Ⲝ ⲝ Ⲟ ⲟ Ⲡ ⲡ Ⲣ ⲣ Ⲥ ⲥ Ⲧ ⲧ Ⲩ ⲩ Ⲫ ⲫ Ⲭ ⲭ Ⲯ ⲯ Ⲱ ⲱ


text: Bantu bonsu badi baledibwa badikadile ne badi ne makokeshi amwe. Badi ne lungenyi lwa bumuntu ne kondo ka moyo, badi ne bwa kwenzelangana malu mu buwetu.


text: Opakatu ava yoro’a nda’ei tembigwaigwa oyoyatupri, sekotupri, vaëra, imboeteisara, oikatu ipi’a yemoñeta, imbaekua, ndiyai yurekorairai ñepëi pëi ambua rese.


text: 𑚀 𑚁 𑚂 𑚃 𑚄 𑚅 𑚆 𑚇 𑚈 𑚉 𑚊 𑚋 𑚌 𑚍 𑚎 𑚏 𑚐 𑚑 𑚒 𑚓 𑚔 𑚕 𑚖 𑚗 𑚘 𑚙 𑚚 𑚛 𑚜 𑚝 𑚞 𑚟 𑚠 𑚡 𑚢 𑚣 𑚤 𑚥 𑚦 𑚧 𑚨 𑚩 𑚪 𑚫 𑚬 𑚭 𑚮 𑚯 𑚰 𑚱 𑚲 𑚳 𑚴 𑚵 𑚶 𑚷


text: Semua orang dilahirkan merdeka dan mempunyai martabat dan hak-hak yang sama. Mereka dikaruniai akal dan hati nurani dan hendaknya bergaul satu sama lain dalam semangat persaudaraan.


text: ມະນຸດທຸກຄົນເກີດມາມີກຽດສັກສີ, ສິດທິ, ເສຣີພາບແລະຄວາມສເມີພາບເທົ່າທຽມກັນ. ທຸກໆຄົນມີເຫດຜົນແລະຄວາມຄິດຄວາມເຫັນສ່ວນຕົວຂອງໃຜຂອງມັນ, ແຕ່ວ່າມະນຸດທຸກໆຄົນຄວນປະພຶດຕໍ່ກັນຄືກັນກັບເປັນອ້າຍນ້ອງກັນ.


text: ᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬᝮᝯᝰᝲᝳ


text: 𖩀 𖩁 𖩂 𖩃 𖩄 𖩅 𖩆 𖩇 𖩈 𖩉 𖩊 𖩋 𖩌 𖩍 𖩎 𖩏 𖩐 𖩑 𖩒 𖩓 𖩔 𖩕 𖩖 𖩗 𖩘 𖩙 𖩚 𖩛 𖩜 𖩝 𖩞 𖩠 𖩡 𖩢 𖩣 𖩤 𖩥 𖩦 𖩧 𖩨 𖩩


text: Si'apai aide'oyë kua'ye peoye kui'ne siayë'kë maka pa'iye kui'ne tutupaye koni, jaje kuasase'sëtepi kuaju'i'ne peoye ñese saiye pa'iji ko̱kaijë yekë paireje.


text: Bütün insanlar ləyaqət və hüquqlarına görə azad bərabər doğulurlar. Onarın şüuralrı və vicdanları var və bir-birlərinə münasibətdə qardaşlıq runhunda davranmalıdırlar.


text: 𑐀 𑐁 𑐂 𑐃 𑐄 𑐅 𑐆 𑐇 𑐈 𑐉 𑐊 𑐋 𑐌 𑐍 𑐎 𑐏 𑐐 𑐑 𑐒 𑐓 𑐔 𑐕 𑐖 𑐗 𑐘 𑐙 𑐚 𑐛 𑐜 𑐝 𑐞 𑐟 𑐠 𑐡 𑐢 𑐣 𑐤 𑐥 𑐦 𑐧 𑐨 𑐩 𑐪 𑐫 𑐬 𑐭 𑐮 𑐯 𑐰 𑐱 𑐲 𑐳 𑐴 𑐵 𑐶 𑐷 𑐸 𑐹 𑐺 𑐻 𑐼 𑐽 𑐾 𑐿 𑑀 𑑁 𑑂 𑑃 𑑄 𑑅 𑑆 𑑇 𑑈 𑑉 𑑊 𑑋 𑑌 𑑍 𑑎 𑑏 𑑐 𑑑 𑑒 𑑓 𑑔 𑑕 𑑖 𑑗 𑑘 𑑙


text: Saoláitear na daoine uile saor agus comhionann ina ndínit agus ina gcearta. Tá bauidh an réasúin agus an choinsiasa acu agus dlíd iad féin d'iompar de mheon bhrthreachais i leith a chéile.


text: Hadamaden bɛɛ danmakɛɲɛnen bɛ bange, danbe ni josira la. Hakili ni taasi b’u bɛɛ la, wa u ka kan ka badenɲasira de waleya u ni ɲɔgɔn cɛ.


text: Цӏыху псори щхьэхуиту, я щӏыхьымрэ я хуэфащэхэмрэкӏэ зэхуэдэу къалъхур. Акъылрэ зэхэщӏыкӏ гъуазэрэ яӏэщи, зыр зым зэкъуэш зэхащІэ яку дэлъу зэхущытын хуейхэщ.


text: A mụrụ mmadụ nile n'ohere nakwa nha anya ugwu na ikike. E nyere ha uche na mmụọ ime ihe ziri ezi nke na ha kwesiri ịkpaso ibe ha agwa n'obi nwanne na nwanne.


text: Tous les êtres humains naissent libres et égaux en dignité et en droits. Ils sont doués de raison et de conscience et doivent agir les uns envers les autres dans un esprit de fraternité.


text: Aantu ayehe oya valwa ye na emanguluko noye na ondilo yi thike pamwe osho wo uuthemba. Oye na omaipulo goondunge neiuvo onkene naa kalathane mombepo yuumwainathana.


text: Dötes les porsones nasc lëdies y cun la medema dignité y i medemi dërć. Ares à na rajun y na cosciënza y mëss s’incuntè öna cun l’atra te n spirit de fraternité.


text: Mayma yvypóra ou ko yvy ári iñapytl'yre ha eteĩcha dignidad ha derecho jeguerekópe; ha ikatu rupi oikuaa añetéva ha añete'yva, iporãva ha ivaíva, tekotevê pehenguéicha oiko oñondivekuéra.


text: ᑭᑲᓇᐌᓀᓐ ᑲᐱᒪᑎᓯᐗᑦ ᓂᑕᐎᑭᐗᒃ ᑎᐯᓂᒥᑎᓱᐎᓂᒃ ᒥᓇ ᑕᐱᑕ ᑭᒋᐃᓀᑕᑯᓯᐎᓐ ᑲᔦ ᑌᐸᑫᑕᑯᓯᐎᓐ. ᐅᑕᔦᓇᐗ ᒥᑲᐎᐎᓐ ᑲᔦ ᓂᑄᑲᐎᓐ ᒥᓇᐗ ᑕᔥ ᒋᐃᔑᑲᓇᐗᐸᑎᐗᐸᓐ ᐊᒐᑯ ᒥᓄᐎᒋᐎᑎᐎᓂᒃ.


text: 人人生而自由，在尊严同权利上一律平等。佢丁人赋有理性同好心田，并应以兄弟关系个精神相对待。


text: પ્રતિષ્ઠા અને અધિકારોની દૃષ્ટિએ સર્વ માનવો જન્મથી સ્વતંત્ર અને સમાન હોય છે. તેમનામાં વિચારશક્તિ અને અંતઃકરણ હોય છે અને તેમણે પરસ્પર બંધુત્વની ભાવનાથી વર્તવું જોઇએ.


text: ꢂ ꢃ ꢄ ꢅ ꢆ ꢇ ꢈ ꢉ ꢊ ꢋ ꢌ ꢍ ꢎ ꢏ ꢐ ꢑ ꢒ ꢓ ꢔ ꢕ ꢖ ꢗ ꢘ ꢙ ꢚ ꢛ ꢜ ꢝ ꢞ ꢟ ꢠ ꢡ ꢢ ꢣ ꢤ ꢥ ꢦ ꢧ ꢨ ꢩ ꢪ ꢫ ꢬ ꢭ ꢮ ꢯ ꢰ ꢱ ꢲ ꢳ


text: ꀀ ꀁ ꀂ ꀃ ꀄ ꀅ ꀆ ꀇ ꀈ ꀉ ꀊ ꀋ ꀌ ꀍ ꀎ ꀏ ꀐ ꀑ ꀒ ꀓ ꀔ ꀕ ꀖ ꀗ ꀘ ꀙ ꀚ ꀛ ꀜ ꀝ ꀞ ꀟ ꀠ ꀡ ꀢ ꀣ ꀤ ꀥ ꀦ ꀧ ꀨ ꀩ ꀪ ꀫ ꀬ ꀭ ꀮ ꀯ ꀰ ꀱ ꀲ ꀳ ꀴ ꀵ ꀶ ꀷ ꀸ ꀹ ꀺ ꀻ


text: Alle mennesker er født frie og med samme menneskeverd og menneskerettigheter. De er utstyrt med fornuft og samvittighet og bør handle mot hverandre i brorskapets ånd.


text: Il-bnedmin kollha jitwieldu ħielsa u ugwali fid-dinjità u d-drittijiet. Huma mogħnija bir-raġuni u bil-kuxjenza u għandhom iġibu ruħhom ma’ xulxin bi spirtu ta’ aħwa.


text: Bantu nyonso, na mbutukulu kevwandaka na kimpwanza ya bawu, ngenda mpe baluve ya mutindu mosi. Mayela na mbanzulu je na bawu, ni yawu yina bafwana kusalasana na bumpangi.


text: ࠀ ࠁ ࠂ ࠃ ࠄ ࠅ ࠆ ࠇ ࠈ ࠉ ࠊ ࠋ ࠌ ࠍ ࠎ ࠏ ࠐ ࠑ ࠒ ࠓ ࠔ ࠕ ࠖ ࠗ ࠘ ࠙ ࠚ ࠛ ࠜ ࠝ ࠞ ࠟ ࠠ ࠡ ࠢ ࠣ ࠤ ࠥ ࠦ ࠧ ࠨ ࠩ ࠪ ࠫ ࠬ ࠭ ࠰ ࠱ ࠲ ࠳ ࠴ ࠵ ࠶ ࠷ ࠸ ࠹ ࠺ ࠻ ࠼ ࠽ ࠾


text: Muntu wejima wasemuka walukbuka wesekana hamu ni akwawu mukumulemesha. Wenkewa kutong'ojoka nikuzatila hamu nimukwawu muntu muwunta'a.


text: Всички хора се раждат свободни и равни по достойнство и права. Tе са надарени с разум и съвест и следва да се отнасят помежду си в дух на братство.


text: ꪹꪕꪸꪉ ꪀꪱ ꪋꪴ ꫛ ꪎꪲꪉ ꪮꪮꪀ ꪣꪱ ꪻꪠ ꪁꪷ ꪻꪬ ꪼꪒ ꪕꪳ ꪕꪱꪉ ꪀꪾꪚ ꪹꪋꪷꪉ ꪝꪸꪉ ꪕꪮꪥ ꪩꪾ ꫛ ꪶꪔꪙ ꪠꪴ - ꪋꪴ ꪬꪺ ꫛ ꪻꪠ ꪁꪷ ꪻꪬ ꪣꪲ ꪁꪫꪸꪙ ꪎꪱꪉ ꪶꪎꪣ ꪩꪺꪉ ꪹꪥꪸꪒ ꫛ ꪀꪾꪚ ꪹꪥꪸꪒ ꪻꪊ ꪚꪴꪙ ꪀꪾꪚ ꪼꪒ ꪹꪚꪷꪉ ꪒꪲ ꪀꪾꪚ ꪫꪸꪀ ꪭꪰꪀ ꪵꪝꪉ ꪹꪏꪉ ꪹꪭꪙ ꪒꪸꪫ.


text: ꔀ ꔁ ꔂ ꔃ ꔄ ꔅ ꔆ ꔇ ꔈ ꔉ ꔊ ꔋ ꔌ ꔍ ꔎ ꔏ ꔐ ꔑ ꔒ ꔓ ꔔ ꔕ ꔖ ꔗ ꔘ ꔙ ꔚ ꔛ ꔜ ꔝ ꔞ ꔟ ꔠ ꔡ ꔢ ꔣ ꔤ ꔥ ꔦ ꔧ ꔨ ꔩ ꔪ ꔫ ꔬ ꔭ ꔮ ꔯ ꔰ ꔱ ꔲ ꔳ ꔴ ꔵ ꔶ ꔷ ꔸ ꔹ ꔺ ꔻ


text: ھەممە ئادەم زانىدىنلا ئەركىن، ئىززەت-ھۆرمەت ۋە ھوقۇقتا باپباراۋەر بولۇپ تۇغۇلغان. ئۇلار ئەقىلغە ۋە ۋىجدانغا ئىگە ھەمدە بىر-بىرىگە قېرىنداشلىق مۇناسىۋىتىگە خاس روھ بىلەن موئامىلە قىلىشى كېرەك.


text: سارے انسان ازادا تے حقوق تے عزت دے اعتبار نال ہکو ڄئے پیدا تھیندن ۔ قدرت ولوں انہاں کوں عقل تے سمجھ عطا تھیندی اے ۔ ہیں کیتے ہک ڋوجھے نال بھرپی داسلوک کرڻا چاہی دا اے ۔


text: Vanu voxe vakasemuka mu cizango co mumo lika mu vulemu co kulimanena. Vakevo vakala na mangana co na mbunge co vana pande kulinga vamo na vakwavo na mbunge ya vuna yina.


text: Avzangf max pyvccuf byv syvnax zyxyyv ef, lifxingx ningx lyangvxinx alf, taixrav angvnikxrav gwanxxix mix syv av duixdaix.


text: Tut ils humans neschan libers ed eguals en dignitad ed en dretgs. Els ein dotai cun raschun e cunscienzia e duein agir in viers l’auter en spért da fraternitad.


text: सभ मानव जन्मतः स्वतन्त्र अछि तथा गरिमा आʼ अधिकारमे समान अछि। सभकेँ अपन–अपन बुद्धि आʼ विवेक छैक आओर सभकेँ एक दोसराक प्रति सौहार्दपूर्ण व्यवहार करबाक चाही।


text: 𑘀 𑘁 𑘂 𑘃 𑘄 𑘅 𑘆 𑘇 𑘈 𑘉 𑘊 𑘋 𑘌 𑘍 𑘎 𑘏 𑘐 𑘑 𑘒 𑘓 𑘔 𑘕 𑘖 𑘗 𑘘 𑘙 𑘚 𑘛 𑘜 𑘝 𑘞 𑘟 𑘠 𑘡 𑘢 𑘣 𑘤 𑘥 𑘦 𑘧 𑘨 𑘩 𑘪 𑘫 𑘬 𑘭 𑘮 𑘯 𑘰 𑘱 𑘲 𑘳 𑘴 𑘵 𑘶 𑘷 𑘸 𑘹 𑘺 𑘻 𑘼 𑘽 𑘾 𑘿 𑙀 𑙁 𑙂 𑙃 𑙄 𑙐 𑙑 𑙒 𑙓 𑙔 𑙕 𑙖 𑙗 𑙘 𑙙


text: Бәнде” ӈанасанә” ӈәтукәнды” нендя”туо” ӈонә хонсы хелиде” ӈиле мәнәй (правай). Сытыӈ хонды” ӈиле ӈонда ӈонә сяру, дүзытәндыӈ ихүтүӈ нягәә” сүөарусә”.


text: ꚠ ꚡ ꚢ ꚣ ꚤ ꚥ ꚦ ꚧ ꚨ ꚩ ꚪ ꚫ ꚬ ꚭ ꚮ ꚯ ꚰ ꚱ ꚲ ꚳ ꚴ ꚵ ꚶ ꚷ ꚸ ꚹ ꚺ ꚻ ꚼ ꚽ ꚾ ꚿ ꛀ ꛁ ꛂ ꛃ ꛄ ꛅ ꛆ ꛇ ꛈ ꛉ ꛊ ꛋ ꛌ ꛍ ꛎ ꛏ ꛐ ꛑ ꛒ ꛓ ꛔ ꛕ ꛖ ꛗ ꛘ ꛙ ꛚ ꛛ


text: 𐍐 𐍑 𐍒 𐍓 𐍔 𐍕 𐍖 𐍗 𐍘 𐍙 𐍚 𐍛 𐍜 𐍝 𐍞 𐍟 𐍠 𐍡 𐍢 𐍣 𐍤 𐍥 𐍦 𐍧 𐍨 𐍩 𐍪 𐍫 𐍬 𐍭 𐍮 𐍯 𐍰 𐍱 𐍲 𐍳 𐍴 𐍵 𐍶 𐍷 𐍸 𐍹 𐍺


text: Totes los èssers umans naisson liures e egals en dignitat e en dreches. Son dotats de rason e de consciéncia e se devon comportar los unes amb los autres dins un esperit de fraternitat.


text: Бүтүн инсанлар ләјагәт вә һүгугларына ҝөрә азад бәрабәр доғулурлар. Онларын шүурлары вә виҹданлары вар вә бир-бирләринә мүнасибәтдә гардашлыг руһунда давранмалыдырлар.


text: Á dzə̀ə́ wir dzə̀m réŋréŋ fó ghvəm wùn à fó ghày, á yo’ dzə̀ə́ wir msòŋ ji kwàn. Wìr dzə̀m k̀m k fómo woo fó kwà’tì wùn à fó vifii, a wù kér fó a yiì e wùmò’ woo wír moo fə́r və.


text: Abantu bose bavuka aliko bakwiye agaciro no kwubahwa kimwe. Bose bavukana ubwenge n'umutima, bagomba kugilirana kivandimwe.


text: Igooyoo pɛɛ hʋn taa. Bɔ pɛɛ jabaga bɔrɔ. Hɔ ya gʋʋn’n bɔɔ hɛ pɛɛ, hɔ hɛ gusɛgɛ’n.


text: Barcha odamlar erkin, qadr‐qimmat va huquqlarda teng boʻlib tugʻiladilar. Ular aql va vijdon sohibidirlar va bir‐birlariga birodarlarcha muomala qilishlari zarur.


text: Тамоми одамон озод ва аз лиҳози шарафу ҳуқуқ ба ҳам баробар ба дунё меоянд. Онҳо соҳиби ақлу виҷдонанд ва бояд бо якдигар муносибати бародарона дошта бошанд.


text: Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima. Ona su obdarena razumom i sviješću i trebaju jedna prema drugima postupati u duhu bratstva.


text: 모든 인간은 태어날 때부터 자유로우며 그 존엄과 권리에 있어 동등하다. 인간은 천부적으로 이성과 양심을 부여받았으며 서로 형제애의 정신으로 행동하여야 한다.


text: Tuti i essari Umani nasse liberi e uguaƚi in teƚa dignità e diriti. I xe dotai de raxón e de cosiensa e i gà da agire cò spirito de fraternità lun l’altro.


text: Tutti gli esseri umani nascono liberi ed eguali in dignità e diritti. Essi sono dotati di ragione e di coscienza e devono agire gli uni verso gli altri in spirito di fratellanza.


text: ̄ ̅ ̈ ̱  𐌰 𐌱 𐌲 𐌳 𐌴 𐌵 𐌶 𐌷 𐌸 𐌹 𐌺 𐌻 𐌼 𐌽 𐌾 𐌿 𐍀 𐍁 𐍂 𐍃 𐍄 𐍅 𐍆 𐍇 𐍈 𐍉 𐍊


text: יעדער מענטש װערט געבױרן פֿרײַ און גלײַך אין כּבֿוד און רעכט. יעדער װערט באַשאָנקן מיט פֿאַרשטאַנד און געװיסן; יעדער זאָל זיך פֿירן מיט אַ צװײטן אין אַ געמיט פֿון ברודערשאַפֿט.


text: Gotho nu kja'ni i mu̱i ra zoo i gotho ro kuchti, i tu'ni nu ro ña padä bini i da budi, da mu̱i ra zoo koyu gotho yu kja'ni i yo kuadi.


text: ᐃ ᐄ ᐅ ᐆ ᐊ ᐋ ᐱ ᐲ ᐳ ᐴ ᐸ ᐹ ᑉ ᑎ ᑏ ᑐ ᑑ ᑕ ᑖ ᑦ ᑭ ᑮ ᑯ ᑰ ᑲ ᑳ ᒃ ᒋ ᒌ ᒍ ᒎ ᒐ ᒑ ᒡ ᒥ ᒦ ᒧ ᒨ ᒪ ᒫ ᒻ ᓂ ᓃ ᓄ ᓅ ᓇ ᓈ ᓐ ᓕ ᓖ ᓗ ᓘ ᓚ ᓛ ᓪ ᓯ ᓰ ᓱ ᓲ ᓴ


text: Menli muala di bɛ ti anwo na eza noko bɛsɛ wɔ dibilɛ nee adenlenyianlɛ nu. Bɛlɛ ndwenlenwo nee adwenle, yemɔti ɔwɔ kɛ bɛkile adiemayɛlɛ bɛmaa bɛ nwo ngoko.


text: Totu sos èsseres umanos naschint lìberos e eguales in dinnidade e in deretos. Issos tenent sa resone e sa cussèntzia e depent operare s'unu cun s'àteru cun ispìritu de fraternidade.


text: 𞤀 𞤁 𞤂 𞤃 𞤄 𞤅 𞤆 𞤇 𞤈 𞤉 𞤊 𞤋 𞤌 𞤍 𞤎 𞤏 𞤐 𞤑 𞤒 𞤓 𞤔 𞤕 𞤖 𞤗 𞤘 𞤙 𞤚 𞤛 𞤜 𞤝 𞤞 𞤟 𞤠 𞤡 𞤢 𞤣 𞤤 𞤥 𞤦 𞤧 𞤨 𞤩 𞤪 𞤫 𞤬 𞤭 𞤮 𞤯 𞤰 𞤱 𞤲 𞤳 𞤴 𞤵 𞤶 𞤷 𞤸 𞤹 𞤺 𞤻 𞤼 𞤽 𞤾 𞤿 𞥀 𞥁 𞥂 𞥃 𞥞 𞥟 𞥐 𞥑 𞥒 𞥓 𞥔 𞥕 𞥖 𞥗 𞥘 𞥙


text: सबहि लोकानि आजादे जम्मेला आओर ओखिनियो के बराबर सम्मान आओर अधिकार प्राप्त हवे। ओखिनियो के पास समझ-बूझ आओर अंत:करण के आवाज होखता आओर हुनको के दोसरा के साथ भाईचारा के बेवहार करे के होखला।


text: ๆ ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ า ำ เ แ โ ใ ไ ๅ


text: 𑱰 𑱱 𑱲 𑱳 𑱴 𑱵 𑱶 𑱷 𑱸 𑱹 𑱺 𑱻 𑱼 𑱽 𑱾 𑱿 𑲀 𑲁 𑲂 𑲃 𑲄 𑲅 𑲆 𑲇 𑲈 𑲉 𑲊 𑲋 𑲌 𑲍 𑲎 𑲏 𑲒 𑲓 𑲔 𑲕 𑲖 𑲗 𑲘 𑲙 𑲚 𑲛 𑲜 𑲝 𑲞 𑲟 𑲠 𑲡 𑲢 𑲣 𑲤 𑲥 𑲦 𑲧 𑲩 𑲪 𑲫 𑲬 𑲭 𑲮 𑲯 𑲰 𑲱 𑲲 𑲳 𑲴 𑲵 𑲶


text: Innama aadeeji fof poti, ndimɗidi e jibinannde to bannge hakkeeji. Eɓe ngoodi miijo e hakkilantaagal ete eɓe poti huufo ndirde e nder ɓ iynguyummaagu.


text: 𑊀 𑊁 𑊂 𑊃 𑊄 𑊅 𑊆 𑊈 𑊊 𑊋 𑊌 𑊍 𑊏 𑊐 𑊑 𑊒 𑊓 𑊔 𑊕 𑊖 𑊗 𑊘 𑊙 𑊚 𑊛 𑊜 𑊝 𑊟 𑊠 𑊡 𑊢 𑊣 𑊤 𑊥 𑊦 𑊧 𑊨 𑊩


text: Ситe чoвeчки суштeствa сe рaѓaaт слoбoдни и eднaкви пo дoстoинствo и прaвa. Tиe сe oбдaрeни сo рaзум и сoвeст и трeбa дa сe oднeсувaaт eдeн кoн друг вo дуxoт нa oпштo чoвeчкaтa припaднoст.


text: সমস্ত মানুষ স্বাধীনভাবে সমান মর্যাদা এবং অধিকার নিয়ে জন্মগ্রহণ করে। তাঁদের বিবেক এবং বুদ্ধি আছে; সুতরাং সকলেরই একে অপরের প্রতি ভ্রাতৃত্বসুলভ মনোভাব নিয়ে আচরণ করা উচিত।


text: Bilaʼashdaʼii tʼáá ałtsoh yiníkʼehgo bidizhchįh dóó aheełtʼeego ílį́į́go bee baahóchįʼ. Eíí háníʼ dóó hánítshakees hwiihdaasyaʼ eíí binahjį́ʼ ahidiníłnáhgo álíleekʼehgo kʼé bee ahił niidlį́.


text: 𐡀 𐡁 𐡂 𐡃 𐡄 𐡅 𐡆 𐡇 𐡈 𐡉 𐡊 𐡋 𐡌 𐡍 𐡎 𐡏𐡐 𐡑 𐡒 𐡓 𐡔 𐡕 𐡗 𐡘 𐡙 𐡚 𐡛 𐡜 𐡝 𐡞 𐡟


text: Kawiriaja kayapuina ichaukui ta nuka pucha panicha kupanimajicha cha nuka nishima ikicha kiniana panicha tamanuka kanata ikimajicha.


text: Tut igls humans neschan libers ad eguals an dignitad ad an dretgs. Els en dotos cun raschùn a cunzienzia a den agir egn anviers l’oter an spiert da fraternitad.


text: Tut ils umans naschan libers ed eguals en dignitad ed en dretgs. Els èn dotads cun raschun e conscienza e duain agir in vers l’auter en spiert da fraternitad.


text: Alle Menschen sind frei und gleich an Würde und Rechten geboren. Sie sind mit Vernunft und Gewissen begabt und sollen einander im Geist der Brüderlichkeit begegnen.


text: Banhu bose bubyalagwa biyagalulile, n’ikujo haki zilenganelile.


text: ప్రతిపత్తిస్వత్వముల విషయమున మానవులెల్లరును జన్మతః స్వతంత్రులును సమానులును నగుదురు. వారు వివేదనాంతఃకరణ సంపన్నులగుటచే పరస్పరము భ్రాతృభావముతో వర్తింపవలయును.


text: ᚁ ᚂ ᚃ ᚄ ᚅ ᚆ ᚇ ᚈ ᚉ ᚊ ᚋ ᚌ ᚍ ᚎ ᚏ ᚐ ᚑ ᚒ ᚓ ᚔ ᚕ ᚖ ᚗ ᚘ ᚙ ᚚ ᚛ ᚜


text: 𑆀 𑆁 𑆂 𑆃 𑆄 𑆅 𑆆 𑆇 𑆈 𑆉 𑆊 𑆋 𑆌 𑆍 𑆎 𑆏 𑆐 𑆑 𑆒 𑆓 𑆔 𑆕 𑆖 𑆗 𑆘 𑆙 𑆚 𑆛 𑆜 𑆝 𑆞 𑆟 𑆠 𑆡 𑆢 𑆣 𑆤 𑆥 𑆦 𑆧 𑆨 𑆩 𑆪 𑆫 𑆬 𑆭 𑆮 𑆯 𑆰 𑆱 𑆲 𑆳 𑆴 𑆵 𑆶 𑆷 𑆸 𑆹 𑆺 𑆻 𑆼 𑆽 𑆾 𑆿 𑇀 𑇁 𑇂 𑇃 𑇄 𑇅 𑇆 𑇇 𑇈 𑇉 𑇊 𑇋 𑇌 𑇍 𑇐 𑇑 𑇒 𑇓 𑇔 𑇕 𑇖 𑇗 𑇘 𑇙 𑇚 𑇛 𑇜 𑇝 𑇞 𑇟


text: Ꭰ Ꭱ Ꭲ Ꭳ Ꭴ Ꭵ Ꭶ Ꭷ Ꭸ Ꭹ Ꭺ Ꭻ Ꭼ Ꭽ Ꭾ Ꭿ Ꮀ Ꮁ Ꮂ Ꮃ Ꮄ Ꮅ Ꮆ Ꮇ Ꮈ Ꮉ Ꮊ Ꮋ Ꮌ Ꮍ Ꮎ Ꮏ Ꮐ Ꮑ Ꮒ Ꮓ Ꮔ Ꮕ Ꮖ Ꮗ Ꮘ Ꮙ Ꮚ Ꮛ Ꮜ Ꮝ Ꮞ Ꮟ Ꮠ Ꮡ Ꮢ Ꮣ Ꮤ Ꮥ Ꮦ Ꮧ Ꮨ Ꮩ Ꮪ Ꮫ


text: 𒀀 𒀁 𒀂 𒀃 𒀄 𒀅 𒀆 𒀇 𒀈 𒀉 𒀊 𒀋 𒀌 𒀍 𒀎 𒀏 𒀐 𒀑 𒀒 𒀓 𒀔 𒀕 𒀖 𒀗 𒀘 𒀙 𒀚 𒀛 𒀜 𒀝 𒀞 𒀟 𒀠 𒀡 𒀢 𒀣 𒀤 𒀥 𒀦 𒀧 𒀨 𒀩 𒀪 𒀫 𒀬 𒀭 𒀮 𒀯


text: 𑂃 𑂄 𑂅 𑂆 𑂇 𑂈 𑂉 𑂊 𑂋 𑂌 𑂍 𑂎 𑂏 𑂐 𑂑 𑂒 𑂓 𑂔 𑂕 𑂖 𑂗 𑂘 𑂙 𑂚 𑂛 𑂜 𑂝 𑂞 𑂟 𑂠 𑂡 𑂢 𑂣 𑂤 𑂥 𑂦 𑂧 𑂨 𑂩 𑂪 𑂫 𑂬 𑂭 𑂮 𑂯


text: 𐒻𐒷 𐓈𐓂𐒷 𐒷𐒼𐒻𐓄𐓇𐒷 𐒼𐓂͘𐒴𐒰. 𐓒𐒰𐓁𐒻 𐓏𐒰𐓏𐒻𐒹𐓃 𐓄𐒻 𐒼𐓂͘𐒴𐒰. 𐓏𐒰𐓓𐒰𐓓𐒷 𐒻𐒷 𐓏𐒰͘𐓍𐒰𐒼𐒻𐒼𐒰͘ 𐒼𐓂͘𐒴𐒰. 𐓍𐒰𐒿𐒻 𐓓𐒰𐓀𐒻𐒷. 𐒰͘𐓏𐒰𐓇𐒼𐒰͘ 𐓈𐒳͘ 𐒰͘𐒼𐒰𐓍𐒷.


text: Gubine gidii mani gargeleg nga faileng nibapuf mattʼawen nge rogon. Bay laniyan nipii e nam, ere ngauda ted mattʼaawen e chaa niba chugur ngoded nimod walag dad.


text: 人人生而平等，喺尊严同埋权利上一律平等。佢哋有理性同埋良心，而且应当以兄弟关系嘅精神相对待。


text: Хемме адамлар өз мертебеси ве хукуклары боюнча дең ягдайда дүнйә инйәрлер. Олара аң хем выҗдан берлендир ве олар бир‐бирлери билен доганлык рухундакы гарайышда болмалыдырлар.


text: Spisil winiketik te ya xbejk´ajik ta k´inalil ay jrerechotik, mayuk mach´a chukul ya xbejka, ya jnatik stojol te jpisiltik ay snopibal sok sbijil joltik, ja´ me k´ux ya kaibatik ta jujun tul.


text: Wo wanadamu piya wo uzalwa na uhuriya na usawa waki undru na uhaki. Wo upwawa ankili na urambuzi hayizo yilazimu warwaliyane hazitrendwa na fikira zaki unanya.


text: Ĉiuj homoj estas denaske liberaj kaj egalaj laŭ digno kaj rajtoj. Ili posedas racion kaj konsciencon, kaj devus konduti unu al alia en spirito de frateco.


text: Anthu onse amabadwa mwa ufulu ndiponso olinganga m' makhalidwe ao. Iwo amakhala ndi nzeru za cibadwidwe kotero ayenera kucitirana zabwino wina ndi mnzace.


text: က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ ဣ ဤ ဥ ဦ ဧ ဩ ဪ ဿ


text: Tum akijpxa xa ve’e jayu kye’ex, ve’em ax jö’n tyukidaakjüva tijaty mëkin; ve’empa axjö’n jä jyööjtykin di yaknaxy, jats oy myujatyöö’tëjk di mëët nayjavajüt.


text: تمام افراد بشر آزاد به دنیا می‌آیند و از لحاظ حیثیت و حقوق با هم برابرند. همه دارای عقل و وجدان هستند و باید نسبت به یکدیگر با روح برادری رفتار کنند.


text: Yudabu dasibi jabiaskadi akin, xinantidubuki. Javen taea jau jaibunamenunbunven.


text: ყველა ადამიანი იბადება თავისუფალი და თანასწორი თავისი ღირსებითა და უფლებებით. მათ მინიჭებული აქვთ გონება და სინდისი და ერთმანეთის მიმართ უნდა იქცეოდნენ ძმობის სულისკვეთებით.


text: ໆ ກ ຂ ຄ ງ ຈ ສ ຊ ຍ ດ ຕ ຖ ທ ນ ບ ປ ຜ ຝ ພ ຟ ມ ຢ ຣ ລ ວ ຫ ໜ ໝ ອ ຮ ຯ ະ າ ຳ ຽ ເ ແ ໂ ໃ ໄ


text: 𐬀 𐬁 𐬂 𐬃 𐬄 𐬅 𐬆 𐬇 𐬈 𐬉 𐬊 𐬋 𐬌 𐬍 𐬎 𐬏 𐬐 𐬑 𐬒 𐬓 𐬔 𐬕 𐬖 𐬗 𐬘 𐬙 𐬚 𐬛 𐬜 𐬝 𐬞 𐬟 𐬠 𐬡 𐬢 𐬣 𐬤 𐬥 𐬦 𐬧 𐬨 𐬩 𐬪 𐬫 𐬬 𐬭 𐬮 𐬯 𐬰 𐬱 𐬲 𐬳 𐬴 𐬵


text: Taka ma ñayi nguiakoi ñayivi ñatu na ja'a tnu'u ja kusa'a ndeva'ña-i, su'uva kajito va'aña-i, yuka ku ja jiniñu'u ja kukototna-i.


text: Sininna rupa tau ri jajiangngi rilinoe nappunnai manengngi riasengnge alebbireng . Nappunai riasengnge akkaleng, nappunai riasengnge ati marennni na sibole bolena pada sipakatau pada massalasureng.


text: Tudu nguê di mundu ca nancê livli e igual ni dignidade e ni dirêtu. Punda nen ca pensá e nen tê cunxensa, selá nen fé tudu cuá cu tençón de lumón.


text: All human beings are born free and equal in dignity and rights. They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.


text: ꊿꂷꃅꄿꐨꐥ，ꌅꅍꀂꏽꐯꒈꃅꐥꌐ。ꊿꊇꉪꍆꌋꆀꁨꉌꑌꐥ，ꄷꀋꁨꂛꊨꅫꃀꃅꐥꄡꑟ。


text: Anthu onse amabadwa aufulu ndiponso ofanana mu ulemu ndi ufulu wao. Iwowa ndi wodalitsidwa ndi mphamvu zoganiza ndi chikumbumtima ndipo achitirane wina ndi mnzake mwaubale.


text: Όλοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα. Είναι προικισμένοι με λογική και συνείδηση, και οφείλουν να συμπεριφέρονται μεταξύ τους με πνεύμα αδελφοσύνης.


text:
á à â ấ ầ ẩ ä ã ą ā ả ɓ c ď ɗ é è ê ë ę ə ɛ ğ í ì î İ ı ɨ ɩ ñ ṅ ŋ ó ò ô ö ő œ ɔ q ř ś ṣ ș ß ť ú ù û ů ü ű ū ʋ x ÿ ź ʼ ꞌ
Á À Â Ấ Ầ Ẩ Ä Ã Ą Ā Ả Ɓ C Ď Ɗ É È Ê Ë Ę Ə Ɛ Ğ Í Ì Î I Ɨ Ɩ Ñ Ṅ Ŋ Ó Ò Ô Ö Ő Œ Ɔ Q Ř Ś Ṣ Ș Ť Ú Ù Û Ů Ü Ű Ū Ʋ X Ÿ Ź Ꞌ


text: Agbetɔwo pleŋu vanɔ gbɛmɛ ko vovoɖeka gbeswɛgbeswɛ, sɔto amɛnyinyi ko acɛwo gomɛ; wo xɔnɔ susunywin ko jimɛnywi so esexwe. Wo ɖo a wɛ nɔvi ɖaɖa wowo nɔnɔwo gbɔ.


text: Upla sut ba kulkanka lakara, airaitka nanira bara pri, sin, aikuki, baku takisa. Bamna sins laka bri baku, lukanka bain pri baku aimuihni lakara, pana pana tabaikan kaiasa.


text: Wɔwo adasa nyina to fahodzi mu, na hɔn nyina yɛ pɛr wɔ enyimnyam na ndzinoa mu. Wɔmaa hɔn nyina adwen na tsibowa, na ɔwɔ dɛ hɔn nkitahodzi mu ndzeyɛɛ da no edzi dɛ wɔyɛ enuanom.


text: سموا مأنسي دلاهيركن بيبس دان سامرات دري سڬي كموليأن دان حق٢. مريك ممڤوڽاي ڤميكيرن دان ڤراسأن هاتي دان هندقله برتيندق د انتارا ساتو سام لائن دڠن سماڠت ڤرساودارأن.


text: ཀ ཁ ག ང ཅ ཆ ཇ ཉ ཊ ཋ ཌ ཎ ཏ ཐ ད ན པ ཕ བ མ ཙ ཚ ཛ ཝ ཞ ཟ འ ཡ ར ཪ ལ ཤ ཥ ས ཧ ཨ


text: ⴰ ⴱ ⴳ ⴶ ⴷ ⴹ ⴻ ⴼ ⴽ ⴾ ⵀ ⵂ ⵃ ⵄ ⵅ ⵆ ⵇ ⵈ ⵉ ⵊ ⵌ ⵍ ⵎ ⵏ ⵑ ⵓ ⵔ ⵕ ⵖ ⵗ ⵙ ⵚ ⵛ ⵜ ⵟ ⵡ ⵢ ⵣ ⵤ ⵥ


text: Ba tɔmbu kpuro marawa ba tii mɔ, ba nɛ, girima ka saria sɔɔ. Ba ra bwisiku, ba dasabu mɔ, ma n weene ba n waasinɛ mɛrobisiru sɔɔ.


text: Esap wor och mettoch epwe appeti aramas seni fansoun ar uputiu non ar tufich me rait. Ar ekiek epwe mecheres o esap pet ren och sakkun mettoch pun ir repwe nonnomfengen non kinamwe o pwipwi annim.


text: 𐩠 𐩡 𐩢 𐩣 𐩤 𐩥 𐩦 𐩧 𐩨 𐩩 𐩪 𐩫 𐩬 𐩭 𐩮 𐩯𐩰 𐩱 𐩲 𐩳 𐩴 𐩵 𐩶 𐩷 𐩸 𐩹 𐩺 𐩻 𐩼 𐩽 𐩾 𐩿


text: 𑰀 𑰁 𑰂 𑰃 𑰄 𑰅 𑰆 𑰇 𑰈 𑰊 𑰋 𑰌 𑰍 𑰎 𑰏 𑰐 𑰑 𑰒 𑰓 𑰔 𑰕 𑰖 𑰗 𑰘 𑰙 𑰚 𑰛 𑰜 𑰝 𑰞 𑰟 𑰠 𑰡 𑰢 𑰣 𑰤 𑰥 𑰦 𑰧 𑰨 𑰩 𑰪 𑰫 𑰬 𑰭 𑰮 𑰯 𑰰 𑰱 𑰲 𑰳 𑰴 𑰵 𑰶 𑰸 𑰹 𑰺 𑰻 𑰼 𑰽 𑰾 𑰿 𑱀 𑱁 𑱂 𑱃 𑱄 𑱅 𑱐 𑱑 𑱒 𑱓 𑱔 𑱕 𑱖 𑱗 𑱘 𑱙 𑱚 𑱛 𑱜 𑱝 𑱞 𑱟 𑱠 𑱡 𑱢 𑱣 𑱤 𑱥 𑱦 𑱧 𑱨 𑱩 𑱪 𑱫 𑱬


text: Nnipa nyinaa yɛ pɛ. Na wɔde adwene ne nyansa na abɔ obiara. Ɛno nti, ɛsɛ sɛ obiara dɔ ne yɔnko, bu ne yɔnko, di ne yɔnko ni.