Eto: RichTextArea๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ณ  RTF ๋ฌธ์ž์—ด ๊ตฌ์„ฑ

์— ๋งŒ๋“  2019๋…„ 03์›” 29์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: picoe/Eto

์ด๊ฒƒ์€ ๊ฐœ์„  ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

๊ธด ํ…์ŠคํŠธ ์ค„ ๋ชฉ๋ก์ด ์žˆ์œผ๋ฉฐ ๊ฐ ์ค„์˜ ์ƒ‰์ƒ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RichTextArea ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Append ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

RichTextArea ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  RTF ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์— RichTextArea.Rtf ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RTF๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ Eto์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋ž˜์Šค/์œ ํ˜•(์˜ˆ: Font , Color ...)์„ ์‚ฌ์šฉํ•˜๊ณ  ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ RichTextArea ๋Œ€ํ•œ Append ๋ฉ”์„œ๋“œ.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@katatunix๋‹˜ , ์š”์ฒญํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์‹ค์ œ๋กœ RichTextArea์™€ ๋™์ผํ•œ API๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ RichTextArea์— ์ถ”๊ฐ€(๋˜๋Š” ์„ค์ •)ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๋ผ์ธ(์ผ์ข…์˜ TextBuffer)์„ ๋”ฐ๋ผ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋ชจ๋“  ํ”Œ๋žซํผ์ด ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์•„์ง ์กฐ์‚ฌ ์ค‘์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  12 ๋Œ“๊ธ€

@katatunix๋‹˜ , ์š”์ฒญํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์‹ค์ œ๋กœ RichTextArea์™€ ๋™์ผํ•œ API๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ RichTextArea์— ์ถ”๊ฐ€(๋˜๋Š” ์„ค์ •)ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๋ผ์ธ(์ผ์ข…์˜ TextBuffer)์„ ๋”ฐ๋ผ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋ชจ๋“  ํ”Œ๋žซํผ์ด ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์•„์ง ์กฐ์‚ฌ ์ค‘์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@LaraSQP ์ง€๊ธˆ๊นŒ์ง€์˜ ์ž‘์—…์„ PR #1507์— ์—…๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

RichTextArea ์ปจํŠธ๋กค์€ ๋ช‡ ๊ฐ€์ง€ ์†์„ฑ(๊ธ€๊ผด + ์Šคํƒ€์ผ, ์•ž + ๋’ค ์ƒ‰์ƒ)๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ rtf ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” "๋‹จ์ˆœ" rtf ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ RichTextArea.Rtf ์žฌ์‚ฐ?

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

https://www.codeproject.com/Articles/30902/RichText-Builder-StringBuilder-for-RTF

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ๋‹ค์‹œ ๋ฐ”๋ณด์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๊ฐ€?

@LaraSQP ์•„๋‹ˆ์š”, ์™„์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. GTK๋Š” RTF๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Eto๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ œ๊ณตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ RTF ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ Eto์˜ ์ œ์–ด์— ๊ณต๊ธ‰ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

GTK ๋ฐ RTF์— ๋Œ€ํ•ด ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ์ •๋ง ์งœ์ฆ๋‚˜๋„ค์š”.

์™ธ๋ถ€ RTF ๋นŒ๋”๋Š” ์›๋ณธ ํฌ์Šคํ„ฐ(Eto์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋ž˜์Šค/์œ ํ˜•, ์˜ˆ: ๊ธ€๊ผด, ์ƒ‰์ƒ ...)์— ์˜ํ•ด ์ œ๊ธฐ๋œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ RTF ์ŠคํŠธ๋ฆผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. GTK๊ฐ€ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TextBuffer .

๊ฟฐ๋งค๋‹ค

@LaraSQP ์ด๋ก ์ ์œผ๋กœ ์™ธ๋ถ€ ๋„๊ตฌ/API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RTF๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ Eto์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Eto์˜ ๊ธ€๊ผด/์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ •๋ง๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ RTF ์นœํ™”์ ์ธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ RTF์˜ ๋ฌธ์ œ๋Š” ๊ทธ๊ฒƒ์ด "ํ‘œ์ค€"์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‹ค์ œ๋กœ ํ”Œ๋žซํผ(์ตœ์†Œํ•œ Mac vs. Windows)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ RTF์— ์ง€์ •๋œ ๊ธ€๊ผด ์ด๋ฆ„์€ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Mac์˜ TextEdit์™€ Windows์˜ WordPad๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ์ด์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ฐธ์œผ๋กœ ์ง€์ €๋ถ„ํ•˜๋‹ค.

Linux ํฌํŠธ๋กœ ํ›Œ๋ฅญํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ธ€๊ผด๊ณผ ์ƒ‰์ƒ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

Windows์˜ ๋™์ผํ•œ ์ฝ”๋“œ๋Š” ์Šฌ๋Ÿฌ๊ทธ์ž…๋‹ˆ๋‹ค.

Windows์˜ ๋™์ผํ•œ ์ฝ”๋“œ๋Š” ์Šฌ๋Ÿฌ๊ทธ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. FlowDocument๋Š” ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

Linux์˜ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด Mac์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@LaraSQP macOS์—์„œ๋„ ๊ฝค ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝํ—˜์ƒ ์ด ์‹œ์ ์—์„œ ๋งค์šฐ ๋Š๋ฆฐ ๊ฒƒ์€ WPF์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋นจ๋ฆฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(;

์ด ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰