Successfully reported this slideshow.
Your SlideShare is downloading. ×

PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 84 Ad

PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介

Download to read offline

第24回プログラミングおよびプログラミング言語ワークショップ(PPL 2022, https://jssst-ppl.org/workshop/2022/index.html )にて招待講演として発表させて頂いた際のスライドです.

以下のページでも閲覧可能です:

https://gfngfn.github.io/ja/posts/2022-05-11-slides-ppl2022-invited/

第24回プログラミングおよびプログラミング言語ワークショップ(PPL 2022, https://jssst-ppl.org/workshop/2022/index.html )にて招待講演として発表させて頂いた際のスライドです.

以下のページでも閲覧可能です:

https://gfngfn.github.io/ja/posts/2022-05-11-slides-ppl2022-invited/

Advertisement
Advertisement

More Related Content

Advertisement

PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介

  1. 1. gfngfn
  2. 2. 45:4'*ʢαςΟεϑΝΠʣͱ͸ w ߨԋऀ͕೥౓*1ະ౿ࣄ‫ۀ‬ͷϓϩδΣΫτͱͯ͠։ൃͨ͠ ൺֱత৽͍͠૊൛ॲཧγεςϜ w ੩త‫͖ͭܕ‬ͷ͍ΘΏΔവ਺‫ܕ‬ͷϓϩάϥϛϯά‫Ͱޠݴ‬ ύοέʔδ΍จॻຊମ͕ॻ͚Δ r ҰൠతͳϓϩάϥϜͱಉ͡ཁྖͰಡΈॻ͖Ͱ͖ΔͷͰ ΧελϚΠζੑ͕ߴ͍ w DG59- 59ɿෳࡶͳҙຯ࿦Ώ͑ʹύοέʔδ࡞੒ʹ͸஁࿉Λཁ͢Δ্ɼ ख़࿅ऀͰ΋ଞਓͷॻ͍࣮ͨ૷͸ಡΜͰվม͢Δͷ͕೉͍͠ r ‫هͨͬޡ‬ड़Λͨ͠ͱ͖΋ɼ‫ʹࠪݕܕ‬Αͬͯਝ଎ʢయ‫ܕ‬తʹ͸ඵ΄Ͳʣ ͔ͭ‫ݪ‬ҼͷղΓ΍͍͢ΤϥʔใࠂΛग़ͯ͘͠ΕΔ܏޲ʹ͋Δ w DG59- 59ɿࠣࡉͳϛεͰ΋े਺ඵ଴͔ͬͯΒղΓʹ͍͘Τϥʔ͕ग़͕ͪ ֓ཁ
  3. 3. 45:4'*ͷ঺հ w ։ൃಈ‫ػ‬ɾ໨తҙࣝͷ‫ڞ‬༗ w 11-ʹࢀՃ͞ΕΔํʑͷؔ৺ͱরΒ͠߹Θͤɼ ૊൛ॲཧɾจॻ࡞੒ͱ͍ͬͨ༻్ʹཁ੥͞Εͯ 45:4'*ʹͲΜͳEPNBJOTQFDJpDͳҙຯ࿦΍‫ܕ‬γεςϜ͕ ౥ࡌ͞Ε͍ͯΔ͔Λ֓આ w ͦͷଞɼ༗ࢤͷํʑʹΑΔ45:4'*ύοέʔδ΍पลπʔϧͷ঺հ ຊߨԋͷ಺༰
  4. 4. w։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ w จࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ w ߦ෼ׂॲཧͷ࢓૊Έ w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  5. 5. େผͯ͠छྨɿ จॻ࡞੒ιϑτ΢ΣΞͷ‫ܗ‬ଶ 8:4*8:(ΤσΟλ ϚʔΫΞοϓ‫ޠݴ‬ʴॲཧ‫ܥ‬ troff [Microsoft 1983] [Adobe 1991] [Quark 1987] [Lamport 1985] [Knuth 1978] [Gruber 2004] [Osanna 1973] ɾ RE:VIEW [੨໦ et al. 2002] લॲཧ༻్
  6. 6. 8:4*8:(ΤσΟλํࣜͱൺ΂ͯɼ܏޲ͱͯ͠ɿ ϚʔΫΞοϓ‫ࣜํޠݴ‬ͷੑ࣭ 😄 😩 • Ϣʔβ͕ෆద֨ͳίʔυΛ ೖྗͱͯ͠༩͑΍͍͢ • ࠩ෼؅ཧ͕୯७ • ϢʔβఆٛίϚϯυʹΑΓɿ • ෳࡶͳࣗಈॲཧ͕࣮‫ݱ‬Մೳ • จॻͷମࡋ͕ ‫͔ޙ‬ΒॊೈʹมߋՄೳ ͜ͷಛ௃Λ‫͍͔ͨ͠׆‬ਓ͕૝ఆϢʔβ ͲͷΑ͏ʹΤϥʔ͕ใࠂ͞ΕΔ͔͕ ࣥචޮ཰ʹӨ‫ڹ‬
  7. 7. ྫɿ59- 59 w Τϥʔใࠂ͕ෆ਌੾Ͱ஗͍܏޲ʹ͋Δ r ͜ΕΏ͑ʹɼগ͠‫ॲͨͬڽ‬ཧΛఆٛ͠Α͏ͱ͢Δͱσόοά͕ࠔ೉ r ॲཧ‫ܥ‬ͷ࣮૷͕ଵଦͳͷͰ͸ͳ͘ɼ59ͷ΋ͭૢ࡞తҙຯ࿦ͷ౎߹্ ෆ਌੾ͳΤϥʔʹͳΒ͟ΔΛಘͳ͍ͱ͍͏ଆ໘͕େ͖͍ खͷࠐΜͩࣗಈॲཧ͕ఆٛͰ͖ͭͭɼl໌Β͔ͳϛεzʹ͸਌੾ͳΤϥʔ͕ ग़ͤΔΑ͏ͳߏจɾҙຯ࿦ͷ‫͍ͨ͠ʹޠݴ‬ ‫ط‬ଘγεςϜͷऑ఺ ! Undefined control sequence. ! Missing $ inserted. ! Missing number, treated as zero.
  8. 8. ੩త‫Ͱ͖ͭܕ‬ɼ59- 59ίʔυΛग़ྗ͢ΔΑ͏ͳ ‫ޠݴ‬Λ૑Ε͹Α͍ͷͰ͸ͳ͍͔ʁ ೥ࠒʹ.BDSPEPXOͱ͍͏.-‫͠૷࣮ͯ͠ͱޠݴܥ‬ɼ ͦΕͳΓʹ࢖͑Δ΋ͷʹ͸ͳͬͨ ‫ࡏݦ‬Խͨ͠ऑ఺ɿ w ϖʔδ਺΍ࢴ໘্ͷ෯ͱ͍ͬͨ૊൛্ͷ֓೦ʹґଘ͢Δॲཧ͸ XSBQQFSଆͰ࣮૷͠ʹ͘͘ɼґવͱͯ͠-59ଆͰͷ࣮૷͕ඞཁ r ಛʹΫϥεϑΝΠϧͷ࣮૷ͳͲ͸XSBQQFSଆͰ͸౸ఈ‫͍ͳ݁͠׬‬͸ͣ ࠷ॳͷҊɿ‫͖ͭܕ‬ͷXSBQQFSΛͭ͘Δ
  9. 9. XSBQQFS‫͕ޠݴ‬༩͑ʹ͔ͬͨ͘ΓΤϥʔใࠂ͕ෆ਌੾ͩͬͨΓ͢Δ ཁҼ͸ɼओʹ59ͷ΋ͭૢ࡞తҙຯ࿦ͷෳࡶո‫͋ʹ͞ح‬Δɿ w ࣈ۟ղੳʹ͍ۙ͜ͱ͸͢Δ͕ɼந৅ߏจ໦ͷ֓೦͸ͳ͍ w ੍‫ޚ‬௲ʢfooʣͷల։͸‫ޙ‬ଓτʔΫϯྻʹର͢ΔύλʔϯϚονϯά r l‫{ހׅ‬ʜ}͕௼Γ߹͍ύλʔϯʹ߹க͢Δ࠷୹ͷτʔΫϯྻzΛҾ਺ͱΈͳ͢ w ഁյతʹมߋՄೳͳม਺ͷ‫͕ߏػ‬ଟ༻͞ΕΔ w ࣈ۟ղੳ͸lMB[ZzͰɼલํͰධՁ૬౰ͷॲཧ͕ߦͳΘΕ͍ͯͯ΋ ‫ํޙ‬͸·ͩτʔΫϯԽ͞Ε͍ͯͳ͍จࣈྻͰ͋Γɼ લํͷධՁ݁Ռ͕‫ํޙ‬ͷࣈ۟ղੳํ๏Λมߋ͠͏Δ w Ҏ্ͷΑ͏ͳෳࡶͳ‫͕ߏػ‬૊൛ॲཧͱີ݁߹Ͱɼආ͚ʹ͍͘ ੩తʹಛఆͷੑ࣭Λอূ͢Δͱ͍͏ࢼΈ͸͋·Γ๬Έ͕࣋ͯͳ͍ খ͍͞αϒηοτͰ΋͋·Γ‫͍ڧ‬อূ͸Ͱ͖ͳ͍༷ࢠSEXFH0TUFSNBOO l59‫ޠݴ‬zͷૢ࡞తҙຯ࿦ͷ֓આ
  10. 10. - 59όοΫΤϯυΛXSBQͨ͠‫ʹͣͤ·ࡁͰޠݴ‬ɼ ࣗલͰ૊൛ॲཧ·Ͱߦͳ͑Δ‫ॲͱޠݴ‬ཧ‫ܥ‬Λઃ‫ܭ‬ɾ࣮૷͍ͨ͠ ओཁͳཁ݅ɿ w ຊ࣭తʹ૊൛ॲཧʹؔΘΔΑ͏ͳෳࡶͳࣗಈॲཧ͕Ͱ͖Δ͜ͱ r ଞਓͷॻ͍ͨࣗಈॲཧͷ࣮૷΋େ͖ͳࢧোͳ͘ಡΜͰվม͠΍͍͢͜ͱ΋‫ؚ‬Ή w ໌Β͔ͳΤϥʔʹ͍ͭͯ͸੩తʹʢʹ૊൛ॲཧΛ࢝ΊΔΑΓલʹʣ‫ݕ‬஌͠ɼ ͦͷ‫ݪ‬ҼΛͳΔ΂͘ಛఆ͠΍͍͢‫Ͱܗ‬ใࠂͰ͖Δ͜ͱ ໨తҙࣝ
  11. 11. (*‫ͯ͑׶‬΍΍௅ઓతʹॻ͘ͳΒɿ w 59- 59͸΋ͪΖΜ҃Δ໘Ͱ͸ૉ੖Β͍͠ιϑτ΢ΣΞ͕ͩɼ ͜Ε͚ͩ‫ޠݴ‬ઃ‫ܭ‬ͷ஌‫͍ͯͬ·ཷ͕ݟ‬Δ‫Ͱࡏݱ‬΋ ѻ͍ʹ͍͘ҙຯ࿦Λ΋ͭ59ʹͣͬͱґଘ͠ଓ͚Δͷ͸ ޻ֶతʹ݈શͳঢ়ଶͱ͸‫͍͘ʹ͍ݴ‬ͷͰ͸ͳ͍͔ʁ r DG൚༻ͷ‫Ͱޠݴػࢉܭ‬͸༷ʑͳ‫ޠݴ‬ઃ‫͕ܭ‬೔໷ఏҊ͞Ε͍ͯΔ w ೔ʑϓϩάϥϜͷੑ࣭Λ੩తʹอূ͢Δ͜ͱΛͻͨ͢Β೤৺ʹ ߟ͍͑ͯΔͷʹɼ͍͟࿦จΛॻ͘ࡍͷಓ۩Ͱ͸ͦͷ݁ՌΛ‫ڗ‬डͤͣ ෆ਌੾ͳΤϥʔ͹͔Γ‫͍ͯݟ‬Δͷ͸ɼࠠ԰ͷന‫Ͱއ‬͸ͳ͍͔ʁ *) ऄ଍ɿ΋ͬͱࡶͳ໰୊ҙࣝ
  12. 12. ৽͍͠૊൛ॲཧγεςϜ ੒Ռ෺ https://github.com/gfngfn/SATySFi Static Analysis-based TYpesetting System for Functional Implementation ʢ͔ͳΓ‫ڧ‬Ҿͳ͚ͭ͜͡ʣ
  13. 13. ߏจ͕େผͯ͠૚ʹ෼͔Ε͍ͯΔ ಛ௃ +section{SATySFi;ͷ‫}ྫߘݪ‬ +p{ PPLͰ͸emph{2ճ໨ͷൃද}Ͱ͢ɽ ͓ੈ࿩ʹͳΓ·͢ɽ } let-inline ctx emph it = let ctx = ctx | set-font Latin italic-font in read-inline ctx it lϚʔΫΞοϓ૚z lϓϩάϥϜ૚z • -59෩ • ΠϯϥΠϯ{ʜ}ͱ ϒϩοΫʜͷ۠ผ͕͋Δ • 0$BNM෩
  14. 14. lϓϩάϥϜ૚zͰ͸ίϚϯυఆ͕ٛ0$BNM෩ͷ‫͚ॻͰޠݴ‬Δ w lάϩʔόϧͳঢ়ଶzΛ͋·Γ‫ॲʹͣͤʹؾ‬ཧ͕ॻ͚Δ r ˞ࢭΉΛಘͣNVUBCMFSFGFSFODFͷ‫ػ‬ೳ͸͋Γɼ࠾൪ͳͲʹ࢖༻ w ‫ܕ‬γεςϜΛ༻͍ͨ੩తͳʢʹ૊൛ॲཧʹઌཱͬͨʣΤϥʔใࠂೳྗ r ௨ৗͷMFUଟ૬ʴЋఔ౓ w Ϩίʔυ‫ࢉܭ‬0IPSJ3ÉNZ(BTUFS+POFT w ΦϓγϣϯҾ਺ r ґଘ‫ܕ‬΍ᝲ‫ܕ‬͸ແ͠ r ૊൛ॲཧ΍υΩϡϝϯτॲཧʹؔΘΔଟ਺ͷ‫ج‬ຊ‫ͱܕ‬૊ࠐΈവ਺ w ͜Ε͕ࠓճ঺հ͢Δओͳର৅ ಛ௃
  15. 15. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ wಈ࡞σϞ w จࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ w ߦ෼ׂॲཧͷ࢓૊Έ w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  16. 16. ಈ࡞σϞɿਖ਼ৗ‫ܥ‬ ʢσϞө૾ɿhttps://drive.google.com/file/d/ 1muaWGgyAGfIYJNyKfKvvAzN8vur1sTG3/view?usp=sharingʣ
  17. 17. ҎԼͷΑ͏ͳʮ͍Ζ͸ՎΛ෯DNͷ࿮Ͱғͬͯ૊Ήʯग़ྗΛ͠Α͏ͱͯ͠ ΍Γ͕ͪͳෆద֨ͳίʔυΛॻ͍ͯ͠·ͬͨͱ͖ͷΤϥʔใࠂΛ - 59ͱ45:4'*Ͱൺֱ ಈ࡞σϞɿҟৗ‫ܥ‬
  18. 18. - 59ͷ৔߹ ʢσϞө૾ɿhttps://drive.google.com/file/d/ 1r14gHwCUxe3DQjoxkGHDWWkwtHWqMwaY/view?usp=sharingʣ
  19. 19. 45:4'*ͷ৔߹ ʢσϞө૾ɿhttps://drive.google.com/file/d/ 1DyKB0V2xIKz6SMYNGdEWnupPAxXkWCeE/view?usp=sharingʣ
  20. 20. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ w จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ w ߦ෼ׂॲཧͷ࢓૊Έ w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  21. 21. ϑϩϯτΤϯυʢ‫ߏػࠪݕ‬ʣʴόοΫΤϯυʢΠϯλϓϦλʣ ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ ֤ϖʔδͷ಺༰ ϖʔδ෼ׂॲཧ ߦͷ࿈ͳΓ ߦ෼ׂॲཧ “ശ” ͷਫฏͳ࿈ͳΓ ม‫ث׵‬ PDFग़ྗ‫ߏػ‬ OpenType ϑΥϯτ ʢίϚϯυΛ‫ؚ‬Ήʣ ςΩετ ධՁ‫ث‬ จॻ ίϚϯυू ߏจ ղੳ‫ث‬ ‫ثࠪݕܕ‬ ύοέʔδ‫܈‬
  22. 22. ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ ֤ϖʔδͷ಺༰ ϖʔδ෼ׂॲཧ ߦͷ࿈ͳΓ ߦ෼ׂॲཧ “ശ” ͷਫฏͳ࿈ͳΓ ม‫ث׵‬ PDFग़ྗ‫ߏػ‬ จॻ ίϚϯυू OpenType ϑΥϯτ ʢίϚϯυΛ‫ؚ‬Ήʣ ςΩετ ධՁ‫ث‬ ߏจ ղੳ‫ث‬ ‫ثࠪݕܕ‬ ύοέʔδ‫܈‬ ϑϩϯτΤϯυʢ‫ߏػࠪݕ‬ʣʴόοΫΤϯυʢΠϯλϓϦλʣ
  23. 23. ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ ֤ϖʔδͷ಺༰ ϖʔδ෼ׂॲཧ ߦͷ࿈ͳΓ ߦ෼ׂॲཧ “ശ” ͷਫฏͳ࿈ͳΓ ม‫ث׵‬ PDFग़ྗ‫ߏػ‬ OpenType ϑΥϯτ ʢίϚϯυΛ‫ؚ‬Ήʣ ςΩετ ධՁ‫ث‬ ‫ثࠪݕܕ‬ {The quick brown fox ʜ } ʜ ʜ ʜ
  24. 24. ॲཧ‫ܥ‬ͷߏ੒ͷ໛ࣜਤ ֤ϖʔδͷ಺༰ ϖʔδ෼ׂॲཧ ߦͷ࿈ͳΓ ߦ෼ׂॲཧ “ശ” ͷਫฏͳ࿈ͳΓ ม‫ث׵‬ PDFग़ྗ‫ߏػ‬ OpenType ϑΥϯτ ʢίϚϯυΛ‫ؚ‬Ήʣ ςΩετ ධՁ‫ث‬ ‫ثࠪݕܕ‬ ࣗಈॲཧͷ࣮૷Ͱ͸ ͜ͷ͋ͨΓͷ૊൛ॲཧʹ հೖͰ͖ͯ΄͍͠ ࣗಈॲཧͷఆ͕ٛ‫ʹࠪݕܕ‬௨Ε͹ɼ ධՁ࣌ʹ͜͜Ͱ σʔλͷෆ੔߹͕‫͍ͳ͖ى‬Α͏ͳ ‫ܕ‬γεςϜΛ༻ҙ͍ͨ͠
  25. 25. Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ ϕʔεϥΠϯ ࢀর఺ άϦϑgͷ ਐߦ෯ ࣍ͷࢀর఺ Ξ΢τϥΠϯΛͳ͢ ͭͷ#É[JFS‫ۂ‬ઢ͕ ͭ͘ΔgͷྖҬ w άϦϑ glyph ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ w άϦϑ͸ϕʔεϥΠϯ baseline Λ‫ج‬४ʹͯ͠ฒͿ w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ r Ξ΢τϥΠϯɿࢀর఺ reference point ͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ r ਐߦ෯ advance width ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔
  26. 26. Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ ϕʔεϥΠϯ ࢀর఺ άϦϑgͷ ਐߦ෯ ߴ͞ ਂ͞ ͞ΒʹҎԼͰߴ͞ͱਂ͞Λఆٛ͠ɼ άϦϑ͸Ծ૝తͳlശzΛ΋ͭͱΈͳ͢ w ߴ͞ɿNBY ด‫ۂ‬ઢͷ࠷ߴ౸ୡ࠲ඪ w ਂ͞ɿNBY — ด‫ۂ‬ઢͷ࠷௿౸ୡ࠲ඪ ˞͜Ε͸ීวతͳఆࣜԽͱ·Ͱ͸‫͕͍ͳ͑ݴ‬ɼ গͳ͘ͱ΋59ͷ૊൛ॲཧ,OVUIͰ͸ ࣮࣭తʹ͜Εʹ૬౰͢Δํ๏Λ࠾͓ͬͯΓɼ 45:4'*Ͱ΋౿ऻ w άϦϑ glyph ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ w άϦϑ͸ϕʔεϥΠϯ baseline Λ‫ج‬४ʹͯ͠ฒͿ w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ r Ξ΢τϥΠϯɿࢀর఺ reference point ͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ r ਐߦ෯ advance width ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔
  27. 27. w άϦϑ glyph ɿਤ‫ͯ͠ͱܗ‬ͷจࣈΛѻ͏୯Ґ w άϦϑ͸ϕʔεϥΠϯ baseline Λ‫ج‬४ʹͯ͠ฒͿ w ֤άϦϑ͸ҎԼͷσʔλΛ΋ͭɿ r Ξ΢τϥΠϯɿࢀর఺ reference point ͔Βͷ૬ର࠲ඪͰ‫ه‬࿥͞Εͨด‫ۂ‬ઢ r ਐߦ෯ advance width ɿͦͷจࣈͷ഑ஔʹΑͬͯࢀর఺ΛͲΕ͚ͩਐΊΔ͔ Ұൠͷ૊൛ॲཧʹԙ͚Δจࣈͷѻ͍ํ ϕʔεϥΠϯ จࣈ໨ͷ ࢀর఺ จࣈ໨ͷ ࢀর఺ άϦϑgͷ ਐߦ෯
  28. 28. Ξ΢τϥΠϯͱਐߦ෯͚ͩͰ͸ࢧোΛ͖ͨ͢৔߹΋͋ΔͷͰɼ ಛผͳ૊Έ߹Θͤʹରͯ͠ͷΈద༻͞ΕΔॲཧ͕͋Δ w ϑΥϯτϑΝΠϧ಺ʹͦͷͨΊͷσʔλ͕֨ೲ͞Ε͍ͯΔ ૊൛ॲཧʹԙ͚ΔจࣈͷఆࣜԽ ߹ࣈ ligature ɿ ૬ੑ͕ѱ͍‫ܗ‬ঢ়ͷάϦϑ͕ฒͿͱ͖͸ ߹ମͯ͠άϦϑʹ͢Δ Χʔχϯά kerning ɿ ਐߦ෯ʹै͏ͱࣈ͕ؒෆࣗવʹͳΔ ૊Έ߹ΘͤͰ͸ௐ੔Λߦͳ͏
  29. 29. ࣮ࡍʹ૊·Εͨ߹ࣈɾΧʔχϯάͷྫʢσϞ࠶‫ܝ‬ʣ
  30. 30. άϦϑͷlശz͸ਫฏํ޲ʹฒΜͰlߦzΛͳ͢ w ͜ͷlߦzΛΠϯϥΠϯϘοΫεྻͱ‫Ϳݺ‬ lߦz͸ߦ෼ׂॲཧ line breaking ʹΑͬͯ੾Γ෼͚ΒΕͯlஈམzʹͳΔ w ۭനͳͲ͸ద੾ʹ৳ॖ͠ɼߦ௕͕ἧ͏Α͏ʹ੔‫ܗ‬ w lஈམz΋ԣʹࡉ௕͍lശz͕Ԗ௚ํ޲ʹ࿈ͳͬͨ΋ͷͰɼ ϒϩοΫϘοΫεྻͱ‫Ϳݺ‬ lശzͷ࿈ͳΓͱͯ͠ͷߦ΍ஈམ ʜ ʜ ʜ ΠϯϥΠϯํ޲ ϒ ϩ ỽ Ϋ ํ ޲
  31. 31. ΠϯϥΠϯϘοΫεྻΛϓϩάϥϜͰૢ࡞͢Δର৅ͱͯ͠௥Ճɿ ૢ࡞ର৅ͱͯ͠ͷϘοΫεྻͷఆࣜԽ v ::= λx . e | ⋯ | ib ib ::= [ib]* ib ::= | | ⋯ | | ⋯ | ⋮ άϦϑ ۭന ஋ ΠϯϥΠϯ ϘοΫεྻ ‫ݸ‬Ҏ্ͷ ༗‫ݸݶ‬ͷྻ ΠϯϥΠϯϘοΫεྻʹ͸ྻશମͰ ͱ͍͏‫ج‬ຊ‫ܕ‬Λ͚ͭΔɿ ҎԼͷ૊ࠐΈവ਺Ͱ࿈݁Ͱ͖Δɿ inlineboxes Γ ⊢ ib : inlineboxes (++): inlineboxes → inlineboxes → inlineboxes
  32. 32. ϒϩοΫϘοΫεྻ΋ૢ࡞ର৅ͱͯ͠௥Ճɿ ૢ࡞ର৅ͱͯ͠ͷϘοΫεྻͷఆࣜԽ v ::= λx . e | ⋯ | bb bb ::= [bb]* ஋ ϒϩοΫ ϘοΫεྻ ‫ݸ‬Ҏ্ͷ༗‫ݸݶ‬ͷྻɼ ௚‫ͯ͠ͱ؍‬͸ॎʹ࿈ͳ͍ͬͯΔ bb ::= | | ⋮ ߦͷ಺༰ ߦؒͷۭന ⋯ ϒϩοΫϘοΫεྻʹ͸ྻશମͰ ͱ͍͏‫ج‬ຊ‫ܕ‬Λ͚ͭΔɿ ΍͸Γ૊ࠐΈവ਺Ͱ࿈݁Ͱ͖Δɿ blockboxes Γ ⊢ bb : blockboxes (+++): blockboxes → blockboxes → blockboxes
  33. 33. ҎԼͷΑ͏ͳ૊ࠐΈവ਺line-breakͱͯ͠ ߦ෼ׂॲཧΛఏ‫ͯ͠ڙ‬Ϣʔβ͕࢖༻Ͱ͖ΔͱΑͦ͞͏ɿ ૊ࠐΈവ਺ʹΑΔߦ෼ׂॲཧͷఏ‫ڙ‬ line-break v1 ⋯ vn ʜ ʜ ʜ ⏞ ԿΒ͔ͷઃఆ஋ʢߦ௕ͳͲʣ line-breakͷ‫ܕ‬͸ҎԼͷ‫ܗ‬ɿ τ1 → ⋯ → τn → inlineboxes → blockboxes
  34. 34. w άϦϑͷͳ͢lശz͕ਫฏʹฒΜͩ΋ͷɿΠϯϥΠϯϘοΫεྻ w ࡉ௕͍lߦͷശz͕ॎʹฒΜͩ΋ͷɿϒϩοΫϘοΫεྻ w ‫ج‬ຊ‫ܕ‬ͷ௥Ճɿ w ߦ෼ׂॲཧ͸ҎԼͷ૊ࠐΈവ਺Ͱఏ‫ڙ‬ɿ ib bb ͜͜·Ͱͷ·ͱΊ τ ::= ⋯ | | inlineboxes blockboxes line-break: τ1 → ⋯ → τn → inlineboxes → blockboxes v ::= ⋯ | | w ͷྫɿ w ͷྫɿ ib bb ʜ ʜ ʜ ib bb
  35. 35. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ w ߦ෼ׂॲཧͷ࢓૊Έ w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  36. 36. ͜͜·ͰͰϘοΫεྻͷॲཧํ๏ͷେ࿮͸ఆࣜԽͰ͖͕ͨɼ ౰વͳ͕ΒΤϯυϢʔβ͕άϦϑΛ௚઀༩͑ͨΓ͸͠ͳ͍ͷͰɼ ԿΒ͔ͷϚʔΫΞοϓ͕ࢪ͞ΕͨςΩετ‫ࣜܗ‬ͷ‫͔ߘݪ‬Β ϘοΫεྻ΁ͱม‫࠷ͯ͠׵‬ऴతʹจॻΛ૊ΊΔΑ͏ͳ࢓૊Έ͕ඞཁ ͲΜͳ‫هͰࣜܗ‬ड़͢Δ‫͢ʹޠݴ‬Δ͔ʁ ໨తҙ͔ࣝΒͯ͠ҎԼΛຬ͍ͨͯ͠Δ͜ͱ͕؊ཁɿ w ԿΒ͔ͷํ๏Ͱ੩తʹଥ౰ੑΛ‫͖Ͱࠪݕ‬Δ w Ϣʔβࣗ਎͕ϚʔΫΞοϓʹ࢖͏ίϚϯυΛ৽‫ʹن‬ఆٛͰ͖Δ จॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ
  37. 37. 9.-ʹ͍ۙཁྖͰɼ‫ߘݪ‬Λ%5ʢ୅਺తσʔλ‫ܕ‬ʣͰѻ͏ʁ ΫϥεϑΝΠϧ͕%5Λఆٛ͢Δ͜ͱͰϚʔΫΞοϓํ๏Λ‫ن‬ఆ͢Δͱɼ ΫϥεϑΝΠϧΛ࢖͏ΤϯυϢʔβଆͰ͸ϚʔΫΞοϓͷఆٛΛ֦ு͠ʹ͍͘ w ͍ΘΏΔYQSFTTJPOQSPCMFN w 0QFOEBUBUZQFT-ÖI)JO[F͕͋Ε͹֦ுͰ͖Δ͕ɼ σʔλΛ࢖͏ଆͷവ਺ͷෳࡶԽ͕ґવආ͚ʹ͍͘ r 0$BNMͰ͍͏type += of YQSFTTJPOQSPCMFNͱແԑʹͳΔΑ͏ͳఆࣜԽ͸Ͱ͖ͳ͍͔ʁ ͍ΘΏΔ5BHMFTTpOBMతͳఆࣜԽΛ͢ΔͱΑͦ͞͏ t C τ %5Ͱ‫ߘݪ‬Λ‫ه‬ड़͢Δʹ͸໰୊͋Γ
  38. 38. ‫ߘݪ‬ͷྫʢ࠶‫ܝ‬ʣɿ ‫ݱ‬ঢ়ͷ‫هߘݪ‬ड़ํ๏ +section{SATySFi;ͷ‫}ྫߘݪ‬ +p{ PPLͰ͸emph{2ճ໨ͷൃද}Ͱ͢ɽ ͓ੈ࿩ʹͳΓ·͢ɽ } w {ʜ}ɿΠϯϥΠϯςΩετ w ʜɿϒϩοΫςΩετ w fooɿΠϯϥΠϯίϚϯυ r ΠϯϥΠϯςΩετதͷϚʔΫΞοϓ w +fooɿϒϩοΫίϚϯυ r ϒϩοΫςΩετதͷϚʔΫΞοϓ ΠϯϥΠϯςΩετ{ }ͷ‫ࣜܗ‬ɿ it it ::= [it]* it ::= char | [e]* จࣈʢʹ6OJDPEFίʔυϙΠϯτʣ ίϚϯυద༻ foo
  39. 39. ·ͣɼίϚϯυద༻͕ͳ͘จࣈྻ͚ͩͷ৔߹ͷม‫׵‬͸؆୯ɿ ‫ݱ‬ঢ়ͷ‫ॲߘݪ‬ཧํ๏ͷఆࣜԽ {The quick brown fox jumps ʜ } ʜ ม‫ʹ׵‬ඞཁͳ෇Ճ৘ใ w ϑΥϯτϑΝϛϦʔ w จࣈαΠζ w จࣈ৭ w ⋮ ෇Ճ৘ใ͸ͦΕΒΛશ෦ूΊͨϨίʔυͷΑ͏ͳ஋ͱͯ͠ ϓϩάϥϜ্Ͱѻ͏͜ͱʹ͠ɼ͜ͷ஋ΛςΩετॲཧจ຺ͱ‫Ϳݺ‬
  40. 40. ςΩετॲཧจ຺ͷఆࣜԽ τ ::= ⋯ | context Γ ⊢ Ctx : context ҆қʹߋ৽Ͱ͖ͯ΄͘͠ͳ͍಺༰΋͋ΔͷͰɼ ϨίʔυͰ͋Δ͜ͱ͸Ϣʔβ͔Β͸‫ͣ͑ݟ‬ɼ ֤߲໨ͷlHFUUFSzͱlTFUUFSz͕૊ࠐΈവ਺ͱͯ͠ఆٛ͞Ε͍ͯΔɿ w get-font-size r ֨ೲ͞Ε͍ͯΔจࣈαΠζΛऔΓग़͢ w set-font-size r ( | set-font-size )ͰจࣈαΠζΛ ʹߋ৽ͨ͠ Λฦ͢ : context → length : length → context → context Ctx ℓ ℓ Ctx v ::= ⋯ | Ctx Ctx ::= {fontsize = ℓ, …} ௕͞ఆ਺ʢྫɿ12ptʣ ௕͞ͷ‫ܕ‬
  41. 41. ҎԼͷΑ͏ͳ૊ࠐΈവ਺read-inlineͱͯ͠ఏ‫ڙ‬ɿ ϘοΫεྻ΁ͷม‫׵‬ͷ૊ࠐΈവ਺ read-inline {The quick brown fox jumpsʜ} Ctx ʜ ‫ܕ‬͸read-inline: context → inlinetext → inlineboxes ΠϯϥΠϯςΩετʹͭ͘‫ج‬ຊ‫ܕ‬
  42. 42. ίϚϯυΛద੾ʹఆٛ͢Ε͹ҎԼͷཁྖͰม‫͖Ͱ׵‬ΔΑ͏ʹ͍ͨ͠ɿ ίϚϯυద༻Λ‫ؚ‬Ή৔߹ʹҰൠԽ read-inline {The emph{quick brown} foxʜ} Ctx ʜ {The emph{quick brown} fox ʜ } ͜ͷద༻ͷ෦෼ΛʮςΩετॲཧจ຺Λड͚औΔͱ ΠϯϥΠϯϘοΫεྻʹͳΔ΋ͷʯͱଊ͑Δ emph{quick brown} ͱΈͳͤΔ : context → inlineboxes emph ͱΈͳͤΔ : inlinetext → context → inlineboxes
  43. 43. emph ͸ҎԼͷΑ͏ʹఆٛͰ͖ͦ͏ɿ : inlinetext → context → inlineboxes ίϚϯυఆٛ let emph (it : inline-text) (ctx : context) = let ctx = ctx | set-italic-font in read-inline ctx it ϑΥϯτΛΠλϦοΫମʹߋ৽͢Δɼ ‫ܕ‬ͷิॿവ਺ context → context let-inline ctx emph it = let ctx = ctx | set-italic-font in read-inline ctx it ࣮ࡍͷ45:4'*Ͱ͸ҎԼͰemphΛఆٛ͢Δɿ ςΩετॲཧจ຺Λड͚औΔม਺͕ ߏจ্Ͱखલʹདྷ͚ͨͩ
  44. 44. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ The emph{quick brown} foxʜ Ctx
  45. 45. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx
  46. 46. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx let-inline ctx emph it = let ctx = ctx | set-italic-font in read-inline ctx it
  47. 47. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx let-inline ctx emph it = let ctx = ctx | set-italic-font in read-inline ctx it ͷϑΥϯτΛΠλϦοΫʹߋ৽ͨ͠จ຺ ͕ͭ͘ΒΕɼ ೖΕࢠͰread-inline {quick brown}͕ධՁ͞ΕΔ Ctx Ctx′ Ctx′
  48. 48. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx quick brown Ctx′
  49. 49. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx brown Ctx′
  50. 50. ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ emph{quick brown} foxʜ Ctx Ctx′
  51. 51. foxʜ ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ Ctx ໭Γ஋͕ίϚϯυద༻ͷ͋ͬͨՕॴʹૠೖ͞ΕΔ
  52. 52. foxʜ ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ Ctx
  53. 53. ʜ ίϚϯυద༻ͷධՁͷΠϝʔδ read-inline {The emph{quick brown} foxʜ} Ctx ʜ ͱ͍͏ධՁͷ్த‫ܦ‬աΛ‫ͯݟ‬ΈΔ Ctx
  54. 54. emph͸࣮ࡍͷ45:4'*Ͱ͸ ‫͚͕ͭܕ‬ΒΕΔ w લड़ͷ௨Γҙຯ࿦తʹ͸ ‫ܕ‬ͷവ਺ [inlinetext] inlinecmd inlinetext → context → inlineboxes ίϚϯυͷ‫ܕ‬ let-inline ctx emph it = let ctx = ctx | set-italic-font in read-inline ctx it ΑΓҰൠʹɼ ‫ܕ‬ͷҾ਺ΛͱΔ Ҿ਺ͷίϚϯυ͸ ‫͚͕ͭܕ‬ΒΕΔ w ҙຯ࿦తʹ͸ ‫ܕ‬ͷവ਺ w ͜ͷ‫ʹ͚ͭܕ‬ΑΓɼ‫ߘݪ‬Λॻ͘ࡍ͸ςΩετॲཧจ຺Λҙࣝ͢Δඞཁ͕ͳ͘ͳΔ τ1, …, τn n [τ1; …; τn] inlinecmd τ1 → ⋯ → τn → context → inlineboxes
  55. 55. ϒϩοΫίϚϯυ΋ಉ༷ʹ ‫ܕ‬ͷ വ਺ͱΈͳͤͯɼ ‫ܕ‬Λ͚ͭͯѻ͏ ஈམΛ૊ΉίϚϯυ+p͸ҎԼͷ‫Ͱܗ‬ఆٛͰ͖ɼ ‫ܕ‬ τ1 → ⋯ → τn → context → blockboxes [τ1; …; τn] blockcmd [inlinetext] blockcmd ϒϩοΫςΩετͷ৔߹ let-block ctx +p it = ʜ ʢ+pͷ࣮૷ํ๏͸࣍અͰ‫ޙ‬ड़ʣ ϒϩοΫςΩετ ͷཁૉ͸ίϚϯυద༻ͷΈɿ bt bt ::= [bt]* bt ::= [e]* +foo read-block: context → blocktext → blockboxes
  56. 56. w ΠϯϥΠϯςΩετɼϒϩοΫςΩετɼςΩετॲཧจ຺Λ௥Ճɿ w ૊ࠐΈവ਺ r line-break r read-inline r read-block r ςΩετॲཧจ຺ͷHFUUFSͱTFUUFS w get-font-size : τ1 → ⋯ → τn → inlinetext → inlineboxes : context → inlinetext → inlineboxes : context → inlinetext → inlineboxes : context → length ͜͜·Ͱͷ·ͱΊ τ ::= ⋯ | inlineboxes | blockboxes | | | | | | inlinetext blocktext context [[τ]*] inlinecmd [[τ]*] blockcmd length v ::= ⋯ | ib | bb | | | bt { } it Ctx it ::= [it]* it ::= char | [e]* bt ::= [bt]* bt ::= [e]* foo +foo
  57. 57. ͜͜·Ͱͷ·ͱΊ ΠϯϥΠϯ ϒϩοΫ Ϙ ỽ Ϋ ε ྻ ς Ω ε τ +p{ The quick brown fox ʜ } ʜ ʜ ʜ {The quick brown fox jumps ʜ } read-inline read-block line-break
  58. 58. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ wߦ෼ׂॲཧͷ࢓૊Έ w ଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  59. 59. ࣮ࡍͷߦ෼ׂॲཧͷ૊ࠐΈവ਺ line-break b1 b2 Ctx ʜ ʜ ʜ line-break w ɼ ɿͭͷਅِ஋ r ߦ෼ׂॲཧࣗମͱؔΘΔઃఆ஋Ͱ͸ͳ͍ͷͰࠓճ͸৮Εͳ͍ w ɿςΩετॲཧจ຺ r ߦ௕ͳͲɼߦ෼ׂॲཧʹඞཁͳઃఆ஋͸͔͜͜ΒऔΓग़ͯ͠࢖͏ : bool → bool → context → inlineboxes → blockboxes b1 b2 Ctx
  60. 60. 45:4'*ͷߦ෼ׂॲཧͰ͸ɼ59ͷͨΊʹఏҊ͞Εͨ ,OVUIr1MBTTΞϧΰϦζϜ,OVUI1MBTTͷఆࣜԽΛ౿ऻ w ଟগͷಠ֦ࣗு͋Γ ߦ෼ׂॲཧͷ࢓૊Έ ߦ෼ׂॲཧ໰୊ w ೖྗɿΠϯϥΠϯϘοΫεྻ ɼॴ๬ͷߦ௕ r ଞͷύϥϝʔλ͸ᘭ຤ͳͷͰࠓճ͸ࣺ৅͢Δ w ग़ྗɿ ΛۭനΛద੾ʹ৳ॖ͢ΔͳͲ֤ͯ͠ߦͷ௕͕͞ ʹͳΔΑ͏ʹ ੾Γ෼͚ͯͰ͖ΔϒϩοΫϘοΫεྻͷ͏ͪ࠷΋‫ݟ‬ө͑ͷྑ͍΋ͷ r ‫ݟ‬ө͑ͷྑ͞͸ԿΒ͔ͷධՁํ๏Ͱద੾ʹఆٛ͢Δඞཁ͋Γ ib ℓ ib ℓ ˞lલ͔Βॱʹ٧Ί͍͖ͯɼᷓΕͨΒͦ͜Ͱߦ෼ׂzͱ͍͏ᩦཉ๏Ͱ͸ Ұൠʹ͸࠷ྑͷ݁Ռʹ͸ͳΒͳ͍
  61. 61. ߦ෼ׂॲཧ໰୊ΛॏΈ͖ͭ༗޲ඇ८ճάϥϑ্ͷ࠷୹‫ܦ‬࿏໰୊ʹ‫ؼ‬ண͢Δ ಺༰ ͱߦ௕ࢦఆ ͔Β Λߏ੒ w ௖఺ू߹ r ໛ࣜਤɿ w ลʢ ಺Ͱ ͸ ΑΓ΋खલͷ఺ʣ r l Ͱߦ෼ׂͯͦ͠ͷ࣍ʹ Ͱߦ෼ׂͨ͠ͱ͖ɼ ͱ ͷؒͷ಺༰Λ ௕͕͞ ʹͳΔΑ͏ʹߦͱͯ͠૊Ήͱɼͦͷ‫ݟ‬ө͑ͷධՁ͸ z w ͸େ͖͍΄Ͳ‫ݟ‬ө͕͑ѱ͍͜ͱΛද͢ϖφϧςΟ஋ʢܾఆํ๏͸࣍ทͰઆ໌ʣ ͷʮઌ಄ʯ͔Βʮ຤ඌʯ΁ࢸΔ࠷୹‫ܦ‬࿏Λ‫ٻ‬ΊΔͱɼͦΕ͕௨Δ֤௖఺͕ ϖφϧςΟ૯࿨Λ࠷খԽ͢Δʢʹ࠷΋‫ݟ‬ө͑ͷྑ͘ͳΔʣ੾Γ෼͚Օॴ ib ℓ G = (V, E; d) V := ( ib தͷߦ෼ׂՄೳͳՕॴશମ ) ⊎ {ઌ಄, ຤ඌ} ib v v′ v v′ v v′ ℓ p p G ,OVUIr1MBTTΞϧΰϦζϜ v v′ p ʜ v1 v2 v3 v4 v5 ઌ಄ ຤ඌ ,OVUI 1MBTT
  62. 62. ߦ෼ׂީิՕॴ ͱͦͷ࣍ͷީิՕॴ ΛܾΊͨΒɼۭനΛ৳ॖͯ͠ ͱ ͷؒͷ಺༰͕௕͞ ʹͳΔΑ͏ʹ͠ɼͦͷ‫ݟ‬ө͑ΛධՁ v v′ v v′ ℓ ߦͷ‫ݟ‬ө͑ͷධՁํ๏ ℓ v v′ ‫ݟ‬ө͑ධՁͷͨΊʹɼۭന͸ ࣗવ௕ ৳ͼΔ‫ڐ‬༰ྔ ॖΉ‫ڐ‬༰ྔ ͱ͍͏ͭͷύϥϝʔλΛ͍࣋ͬͯΔ w όωͷΑ͏ͳΠϝʔδ w ࣗવ௕ʹ͍ۙ΄Ͳ‫ݟ‬ө͕͑ྑ͍ ͜ͱΛද͢ɼԼʹತͳධՁവ਺Λ΋ͭ ࣗ વ ௕ ࠷΋ ृѱ ࠷ྑ ϖ φ ϧ ς ỹ ஋ ࠷ ୹ ࠷ ௕ ,OVUI1MBTT
  63. 63. ࣮ࡍͷߦ෼ׂՄೳՕॴ͸୯‫ؒޠ‬ͷۭന͚ͩͱ͸‫ݶ‬Βͣɼ ΋͏গ͠ҰൠԽ͞Εͨ࢓૊Έʹͳ͍ͬͯΔ ҰൠԽ͞Εͨߦ෼ׂՄೳՕॴͷࢦఆํ๏ ib ::= [ib]* { ib0 ib1 / ib2} p l͜͜Ͱߦ෼ׂ͢Δ͔͠ͳ͍͔બ΂Δɽ ߦ෼ׂ͠ͳ͍ͳΒ ͱ౳ՁͰ͋Γɼ Ұํ͜͜Ͱߦ෼ׂ͢ΔͳΒखલͷߦ຤ʹ Λɼ ‫ํޙ‬ͷߦ಄ʹ ΛͦΕͧΕ݁߹͠ɼ͔ͭ ෼ׂͦͷ΋ͷʹΑΓϖφϧςΟ ͕ੜ͡Δz ib0 ib1 ib2 p ɿ {ε / ε} 100 ୯‫ؒޠ‬ͷۭന͸ͱද‫͞ݱ‬ΕΔ ib ::= | ⋯ | | ⋯ | | { ib ib / ib} p άϦϑ ৳ॖ͢Δۭന EJTDSFUJPOBSZCSFBL ⋮ ɿۭྻ ε
  64. 64. EJTDSFUJPOBSZCSFBLͷ࢓૊ΈʹΑΓ༷ʑͳߦ෼ׂํ๏͕ද‫͖Ͱݱ‬Δɿ w ϋΠϑωʔγϣϯʹΑΔ୯‫ޠ‬தͰͷߦ෼ׂɿ r ୯‫ޠ‬தͷҰ෦Օॴ͸ߦ෼ׂͯ͠Α͘ɼ෼ׂ࣌͸खલͷߦ຤ʹϋΠϑϯ͕ೖΔ w ྫɿlUBCMFz͸lUBCMFzͱ෼ׂͯ͠Α͍ͷͰ্ਤͷΑ͏ʹѻ͏ w ӳ‫ͱͩޠ‬෼ׂͯ͠Α͍Օॴ͸୯‫͍ͯͬ·ܾʹͱ͝ޠ‬Δ͕ɼ۪௚ʹදҾ͖ͤͣͱ΋ -JBOHr,OVUIΞϧΰϦζϜ-JBOHͱ͍͏ਪఆํ๏͕࢖͑Δ r ϋΠϑωʔγϣϯ͸୯‫Ͱؒޠ‬ͷ෼ׂΑΓ΋޷·͘͠ͳ͍ͱ͍͏͜ͱΛ൓ө͠ɼ ϖφϧςΟΛߴΊʹઃఆ r ࣮ࡍ͸୯‫ޠ‬தͰ෼ׂ͢Δ͔͠ͳ͍͔Ͱ߹ࣈʹ͢Δ͔΍Χʔχϯά͢Δ͔͕ มΘΓ͏ΔͷͰ΋͏গ͠ෳࡶͳ࢓૊Έ %JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬ { ε / ε} 1000
  65. 65. w ࿨จ૊൛ r ҎԼͷΑ͏ͳ‫ن‬ଇʹ͓͓Αͦ४‫ڌ‬ w ʰ೔ຊ‫ޠ‬૊൛ॲཧͷཁ݅ʱɼ௨শ+-SFR8$೔ຊ‫ޠ‬૊൛λεΫϑΥʔε w 6OJDPEF-JOF#SFBLJOHMHPSJUIN6OJDPEF$POTPSUJVN r େ఍ͷจࣈؒ͸ߦ෼ׂͯ͠Α͍ w ‫ݪ‬ଇͱ֤ͯ͠จࣈؒʹࣗવ௕ͷۭനΛ΋ͭEJTDSFUJPOBSZCSFBL͕ೖΔ r ͨͩ͠ɼߦ಄ߦ຤‫ې‬ଇ͸͋Δ w ߦ಄ෆՄͷจࣈɿด͡‫ހׅ‬ɼ۟ಡ఺ɼʮΌʯɼʮʔʯͳͲ w ߦ຤ෆՄͷจࣈɿ։͖‫Ͳͳހׅ‬ %JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬ {ε / ε} 100 {ε / ε} 100 {ε / ε} 100 {ε / ε} 100 {ε / ε} 100
  66. 66. r ߦ಄ͷ։͖‫ހׅ‬ͷ௚લ΍ɼߦ຤ͷด͡‫ހׅ‬΍۟ಡ఺ͷ௚‫ޙ‬͸ɼ ߦதͱ͸ҟͳΓೋ෼ΞΩʢʹ͍ΘΏΔ൒֯෯ͷۭനʣΛೖΕͳ͍ w ֘౰Օॴ͸ࣗવ௕͕ೋ෼ΞΩͷۭനΛ΋ͭEJTDSFUJPOBSZCSFBLʹͳΔ %JTDSFUJPOBSZCSFBLʹΑΔछʑͷߦ෼ׂͷද‫ݱ‬ {ε / ε} 100 {ε / ε} 100 {ε / ε} 100 {ε / ε} 100 {ε / ε} 100
  67. 67. ߦ෼ׂॲཧͷར༻ྫ ஈམΛ૊ΉίϚϯυ+p ͸ ૊ࠐΈവ਺line-breakΛ༻͍࣮ͯ૷ɿ ଞͷ૊ࠐΈവ਺ɿ w inline-skip r ࢦఆͨ͠௕͞ͷ৳ॖͰ͖ͳ͍ۭനΛฦ͢ r ͜͜Ͱ͸ஈམ๯಄ͷࣈԼ͛ʹ࢖༻ w inline-fil r ࣗવ௕͕Ͱɼ͔ͭϖφϧςΟͳ͘Ͳ͜·Ͱ΋৳ͼΒΕΔಛघͳۭന r ͜͜Ͱ͸ʮஈམ࠷ऴߦ͸ߦ຤·Ͱ౸ୡ͠ͳͯ͘Α͍ʯ͜ͱͷ࣮‫༻࢖ʹݱ‬ : [inlinetext] blockcmd : length → inlineboxes : inlineboxes let-block ctx +p it = let ib = read-inline ctx it in let indent = inline-skip (get-font-size ctx) in line-break true true ctx (indent ++ ib ++ inline-fil) ʜ indent inline-fil ib
  68. 68. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ wߦ෼ׂॲཧͷ࢓૊Έ wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  69. 69. w ੩తʹ‫Ͱ͔͓͕͛ͭ͘ܕ‬ਝ଎Ͱଟ͘ͷ৔߹਌੾ͳΤϥʔใࠂ͕ߦͳΘΕɼ ҃Δఔ౓࢖͍΍͍͢΋ͷʹͳͬͨ r ͱΓΘ͚ύοέʔδͷ࣮૷ʹ͸ͳ͔ͳ͔ҖྗΛൃ‫ش‬ w 59- 59ͱ45:4'*྆ํͰ೤৺ʹύοέʔδΛॻ͔ΕΔํʹ ʢ59ͱൺ΂ͯʣ ʮϓϩάϥϛϯά‫ͯ͠ͱޠݴ‬͸໌Β͔ʹָʯͱ͍͏‫ײ‬૝Λ໯͑ͨ w ҰํͰɼ‫͚ͭܕ‬ͷ౎߹্Ͳ͏ͯ͠΋‫ߘݪ‬ͷ‫ه‬ड़͕൥ࡶʹͳͬͯ͠·͏ ৔໘͕ग़ͯ͘Δ r ಛʹจॻ࡞੒ͷ༻్Ͱ͸ʢ൚༻ͷ‫ޠݴػࢉܭ‬Ҏ্ʹʣ ෳࡶͳσʔλ΋؆ܿʹ‫ه‬ड़Ͱ͖Δ͜ͱΛ๬·Ε͕ͪ จॻ‫ه‬ड़্ͷߋͳΔ໰୊ҙࣝ
  70. 70. ‫಺ޠݴ‬%4-ͷಋೖ w จࣈྻΛड͚औͬͯߏจղੳ͢ΔΑ͏ʹίϚϯυΛఆٛ͢Δ w ؆୯ͳྫɿ͋Έͩ͘͡ͷ‫ه‬ड़ΛΞεΩʔΞʔτͰͰ͖ΔΑ͏ʹ͢Δ ‫ه‬ड़ෳࡶԽʹର͢ΔφΠʔϰͳճආࡦ amidakuji(``` |X|-|=|/| | | |-||-|X| |=|X|-||=| |-||-|=|-| |X|=|-|| | ```); amidakuji([ [Cross; Line; ʜ ]; [Empty; Line; ʜ ]; [Double; Cross; ʜ ]; ʜ ]); ௨ ৗ ͷ ࣮ ૷ ̙ ̨ ̡ ํ ࣜ
  71. 71. %4-ͷղऍ͸ಈతʹʢʹ૊൛ॲཧ։࢝‫ʹޙ‬ʣߦͳΘΕΔͨΊɼ Τϥʔ͕͋ͬͨ৔߹ʹൃ‫͕ݟ‬஗͍ w %4-Λ࢖͚ͬͨͩͰಈతʹΤϥʔ͕ग़Δੈքʹ‫ٯ‬໭Γ %4-ͷղऍ͸૊൛ॲཧʹґଘ͢Δ͜ͱͳ͘ՄೳͳͷͰɼ ‫ޠݴ‬ຊମʹϚΫϩ‫ߏػ‬Λಋೖͯ͠લॲཧͰ͖ΔΑ͏ʹ͢Ε͹Α͍ ͔҆͠͠қʹϚΫϩ‫ߏػ‬ΛೖΕΔͱࠓ౓͸Τϥʔ͕ෆ਌੾ʹͳΓ΍͍͢ͷͰɼ Ͱ͖Δ͚ͩ‫ݪ‬ҼͷΘ͔Γ΍͍͢Τϥʔ͕ग़Δ࢓૊Έʹ͍ͨ͠ ଟஈ֊‫ ࢉܭ‬multi-stage programming ʹ‫ͮ͘ج‬ϚΫϩ‫ߏػ‬Λಋೖ͠Α͏ φΠʔϰͳճආࡦͷ໰୊఺ͱͦͷղܾࡦ
  72. 72. w ಈతʹίʔυΛੜ੒ͯ͠ߋʹͦΕΛ࣮ߦ͢ΔΑ͏ͳ‫ߏػ‬Λඋ͑ͨɼ ‫͕ࢉܭ‬ෳ਺ͷεςʔδ stage ͔ΒͳΔମ‫ܥ‬ ʴͦͷΑ͏ͳૢ࡞Λ҆શʹߦͳ͏ͨΊͷ‫ܕ‬γεςϜ w ྫɿ.FUB.-5BIB4IFBSEɼЕ˓%BWJFTɼ .FUB0$BNM,JTFMZPWɼଞଟ਺ w ಛʹεςʔδͷ৔߹ɿ w ৄࡉ͸໌೔ʂɿ ଟஈ֊‫ͱࢉܭ‬͸ ୈεςʔδʢʹlલॲཧzʣ ୈεςʔδʢʹl௨ৗͷධՁzʣ
  73. 73. εςʔδͷ.FUB.-5BIB4IFBSEΛϕʔεʹͨ͠ .BDSP.-(BO[ 4BCSZ5BIBʹ͍ۙϚΫϩ‫ߏػ‬ͷఆࣜԽΛ࠾༻ w ϚΫϩͷ࢖༻ྫɿ r ~(ʜ)͸ϚΫϩల։தʹ࢖ΘΕΔୈεςʔδͷ஋ͷҾ਺ r ~ͳ͠ͷҾ਺͸ల։‫ޙ‬ͷίʔυͷҰ෦ͱͳΔ w ϚΫϩͷఆٛࣗମ͕ల։ΑΓલʹ‫ࠪ͞ݕܕ‬Εɼ‫͚͕ͭܕ‬͹ ల։݁Ռ͸ඞͣXFMMUZQFE w య‫ܕ‬తʹ͸ϚΫϩల։ʢʹίʔυੜ੒ʣ͸ҰॠͰऴΘΔͷͰɼ ϚΫϩల։தʹQBOJD͢Ε͹lࣄ্࣮੩తʹzΤϥʔ͕ใࠂ͞ΕΔ ϚΫϩ‫ߏػ‬ͷ‫ޠݴ‬ઃ‫ܭ‬ repeat@~(3){foo{A}} % ௨ৗͷධՁ͕࢝·ΔλΠϛϯάͰ͸ɼ࠷ॳ͔Β % foo{A}foo{A}foo{A} ͱॻ͍ͯ͋ͬͨͷͱಉ͡ѻ͍ʹͳΔ ‫ࠪݕܕ‬ ϚΫϩల։ ௨ৗͷධՁ
  74. 74. ୈεςʔδͷҾ਺ͱͯ͠%4-Λ‫ه‬ड़͢Δɿ w ϚΫϩల։࣌ʹ%4-Λॲཧ͠ɼߏจΤϥʔ͕͋Ε͹QBOJD͢Δ r Τϥʔ͸lࣄ্࣮੩తʹzʹग़Δ r %4-ίʔυதͷͲ͕͜‫ݪ‬ҼͰΤϥʔ͕‫͔͖ͨى‬ΛϚΫϩ಺͔Β Θ͔Γ΍͘͢ใࠂͰ͖ΔΑ͏ʹɼઌ಄Ґஔ͕ͲͷϑΝΠϧͷԿߦ໨͔ ࣗಈͰิΘΕΔจࣈྻϦςϥϧ@`ʜ`Λ࢖͏ w ਖ਼ৗʹల։͞Εͨ৔߹ɼ݁ՌͷςΩετ͸ධՁ࣌ʹ௨ৗͲ͓Γॲཧ ϚΫϩ‫ʹߏػ‬ΑΔ%4-ॲཧ amidakuji@~(@``` |X|-|=|/| | | |-||-|X| |=|X|-||=| |-||-|=|-| |X|=|-|| | ```); amidakuji([ [Cross; Line; ʜ ]; [Empty; Line; ʜ ]; [Double; Cross; ʜ ]; ʜ ]); ల։
  75. 75. ϚΫϩ‫ߏػ‬ͷಈ࡞σϞɿਖ਼ৗ‫ܥ‬ ʢσϞө૾ɿhttps://drive.google.com/file/d/ 1l9HeT6Hn_lNn0ptVobVDYwW6T9A8xKvZ/view?usp=sharingʣ
  76. 76. ϚΫϩ‫ߏػ‬ͷಈ࡞σϞɿҟৗ‫ܥ‬ ʢσϞө૾ɿhttps://drive.google.com/file/d/ 1pbTOSWiflEkTghS3TzlerG5NCcb2iIoI/view?usp=sharingʣ
  77. 77. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ wߦ෼ׂॲཧͷ࢓૊Έ wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w ·ͱΊ ໨࣍
  78. 78. ͋Γ͕͍ͨ͜ͱʹ༗ࢤͷํʑʹΑͬͯ छʑͷपลπʔϧ΍ύοέʔδͷ։ൃ͕ਐߦத • 45:4'*༻ύοέʔδϚωʔδϟ4BUZSPHSBQIPT4BLBNPUP – github.com/na4zagin3/satyrographos – 0$BNMͷύοέʔδϚωʔδϟͰ͋Δ01.ͱซ༻͢Δઃ‫ܭ‬ – ϑΥϯτ΍ઃఆϑΝΠϧ΋؅ཧՄೳ • ొ࿥͞Ε͍ͯΔύοέʔδҰཡ͕‫ݟ‬ΒΕΔϖʔδ.BUTVOBHB – satyrographos-packages.netlify.app – ‫ࡏݱ‬໿ 50 ύοέʔδ • TBUZTGJCBTF/JTIJXBLJ .VSBTF,BOFLP – github.com/nyuichi/satysfi-base – ඪ४ϥΠϒϥϦͷେ෯֦ॆ – ύʔαίϯϏωʔλͳͲ΋༻ҙ͞Ε͍ͯΔ ༗ࢤͷํʑʹΑΔπʔϧɾύοέʔδ
  79. 79. • FBTZUBCMFmonaqa github.com/monaqa/satysfi-easytable – ද૊ΈΛ؆ܿʹ࣮‫͢ݱ‬ΔͨΊͷύοέʔδ • NBUSJYDECF github.com/abenori/satysfi-matrixcd – - 59ͷUJL[DEͷΑ͏ʹՄ‫׵‬ਤࣜΛඳͨ͘Ίͷύοέʔδ • NBLFMBUFY,BOFLP github.com/puripuri2100/SATySFi-make-latex – ςΩετग़ྗϞʔυʹΑΓɼ45:4'*ιʔεΛ- 59ιʔεʹม‫ͯ͠׵‬ ग़ྗ͢ΔͨΊͷύοέʔδ • ‫ޠݴ‬ଆͰѻ͑ͳ͍͜ͱʹΑΓ਺ࣜ͸ະରԠ • 4UFBNFS*TIJJɼ4-Z%*'Jmonaqa – github.com/konn/satysfi-steamer – github.com/monaqa/slydifi – ͍ͣΕ΋εϥΠυ࡞੒༻ͷΫϥεϑΝΠϧ ଞʹ΋਺ଟ͘ͷπʔϧ΍ύοέʔδ͕ެ։͞Ε͍ͯ·͢ ༗ࢤͷํʑʹΑΔπʔϧɾύοέʔδ
  80. 80. એ఻ #൑ϖʔδ ແঈެ։தɿ https://booth.pm/ ja/items/1127224 satysfi book ‫ࡧݕ‬
  81. 81. ҎԼͷํʑʹਂ͘‫ँײ‬ਃ্͛͠·͢ɿ w ։ൃΛࢧԉ௖͍ͨօ༷ r ೥౓*1ະ౿*5ਓࡐൃ۷ɾҭ੒ࣄ‫ۀ‬ r ‫ࣜג‬ձࣾυϫϯΰʢΞϧόΠτͱͯ͠ʣ r 5IF45:4'*CPPLΛ͝ߪೖ௖͍ͨօ༷ w ೤৺ʹ1VMM3FRVFTU΍ॿ‫ݴ‬ΛԼͬͨ͞։ൃऀͷօ༷ r %BJLJ.BUTVOBHB matsud224 ͞Μɼ%BJDIJ0PIBTIJ leque ͞Μɼ /PSJBLJ4BLBNPUP na4zagin3 ͞Μɼ5BLVNB*TIJLBXB nekketsuuu ͞Μɼ elpinal͞Μɼ.BTBLJ)BSB qnighy ͞Μɼsakas--͞Μɼଞଟ਺໊ w ύοέʔδɾपลπʔϧ։ൃऀͷօ༷ w 45:4'*4MBDLɾ45:4'*$POG౳ɼίϛϡχςΟΛӡӦͯ͠Լ͞Δօ༷ r /BPLJ,BOFLP puripuri2100 ͞Μɼmonaqa͞Μɼଞଟ਺໊ ँࣙ
  82. 82. w ։ൃಈ‫ػ‬ɾ໨తҙࣝ w ಈ࡞σϞ wจࣈ૊൛ͷఆࣜԽͱͦͷ‫͚ͭܕ‬ wจॻͷϚʔΫΞοϓํ๏ͷఆࣜԽ wߦ෼ׂॲཧͷ࢓૊Έ wଟஈ֊‫ࢉܭ‬ϕʔεͷϚΫϩ‫ʹߏػ‬ΑΔ%4- w ༗ࢤͷํʑʹΑΔपลπʔϧɾύοέʔδ w·ͱΊ ໨࣍
  83. 83. വ਺‫ܕ‬ͷ‫ޠݴ‬ઃ‫ܭ‬Λϕʔεͱ͢Δɼ ੩త‫͖ͭܕ‬ͷ૊൛ॲཧγεςϜ45:4'*ʹ͍ͭͯ঺հ͠·ͨ͠ w ҙຯ࿦্ͷओͳಛ௃ɿ r ϘοΫεྻʹΑΔάϦϑͳͲͷऔΓѻ͍ r ςΩετͱจ຺ΛϘοΫεྻʹม‫͢׵‬Δവ਺ͱͯ͠ͷίϚϯυ r छʑͷ૊ࠐΈവ਺Ͱ੍‫͖Ͱޚ‬Δߦ෼ׂॲཧ r ‫಺ޠݴ‬%4-Λ࢖༻ͯ͠΋ΤϥʔใࠂΛਝ଎͔ͭ໌շʹอͭͨΊͷɼ ଟஈ֊‫ͮ͘جʹࢉܭ‬ϚΫϩ‫ߏػ‬ w ͋Γ͕͍ͨ͜ͱʹ༗ࢤͷํʑʹΑΓपลπʔϧ΍ύοέʔδ΋ ਫ਼ྗతʹ։ൃ͞Ε͍ͯΔ ·ͱΊ
  84. 84. • Rowan Davies. A temporal-logic approach to binding-time analysis. In Proc. of LICS’96, pp. 184–195, 1996. • Sebastian Erdweg and Klaus Ostermann. Featherweight TeX and parser correctness. In SLE 2010. LNCS, vol. 6563, pp. 397–416, 2011. • Steve Ganz, Amr Sabry, and Walid Taha. Macros as multi-stage computations: type-safe, generative, binding macros in MacroML. In Proc. of ICFP’01, pages 74–85, 2001. • Benedict Gaster and Mark Jones. A polymorphic type system for extensible records and variants, 1996. • Oleg Kiselyov. The design and implementation of BER MetaOCaml. In Functional and Logic Programming. FLOPS 2014. Lecture Notes in Computer Science, vol 8475, 2014. • Donald Knuth and Michael Plass. Breaking paragraphs into lines. So︎ftware–Practice and Experience, 11, pages 1119–1184, 1981. • Franklin Liang. Word Hy-phen-a-tion by Com-put-er. Ph. D. thesis, Stanford University, 1983. • Andres Löh and Ralf Hinze. Open data types and open functions. In Proc. of PPDP’06, pp. 133–144, 2006. • Atsushi Ohori. A polymorphic record calculus and its compilation. In ACM Transactions on Programming Languages and Systems, 17(6), pages 844–895, 1995. • Didier Rémy. Type inference for records in a natural extension of ML. Theoretical Aspects of Object- Oriented Programming. Types, Semantics and Language Design, pages 67–95, 1993. • Walid Taha and Tim Sheard. Multi-stage programming with explicit annotations. Theoretical Computer Science, 248 (1-2), pp. 211–242, 2000. • Unicode Consortium. Unicode Standard Annex #14: Unicode Line Breaki︎ng Algorithm (Unicode 10.0.0). http://unicode.org/reports/tr14/, 2017. • W3C ೔ຊ‫ޠ‬૊൛λεΫϑΥʔεʰW3C ٕज़ϊʔτ ೔ຊ‫ޠ‬૊൛ॲཧͷཁ݅ʱ౦‫ػిژ‬େֶग़൛‫ہ‬, 2012. ࢀߟจ‫ݙ‬

×