VEditorKit - Lightweight and Powerful Editor Kit built on Texture(AsyncDisplayKit)

Overview

CI Status Version License Platform

Lightweight and Powerful Editor Kit built on Texture(AsyncDisplayKit) https://github.com/texturegroup/texture.
VEditorKit provides the most core functionality needed for the editor. Unfortunately, When combined words are entered then UITextView selectedRange will changed and typingAttribute will cleared. So, In combined words case, Users can't continue typing the style they want.

TypingAttributes Spec

When the text view’s selection changes, the contents of the dictionary are cleared automatically. https://developer.apple.com/documentation/uikit/uitextview/1618629-typingattributes

Basic spec list

  • Advanced EditableTextView (Support Combined words such as Korean)
  • Default Image, Video, Og-Object(Link Preview) UI Components
  • XML Parser & Builder
  • Editor Rule Base Development

Example


Bi-direction attribute binding Combined Words TypingAttribute Regex pattern base attributed typing
XML Parse & Build Delete Media Content & Merge TextViews Auto-generate Link Preview

Usage

Requirements

  • Xcode <~ 9.0
  • Swift 4.2
  • iOS <~ 9.3

Installation

VEditorKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'VEditorKit'

Author

  • Geektree0101

  • OhKanghoon

  • gkdlfm

License

VEditorKit is available under the MIT license. See the LICENSE file for more info.

Comments
  • Fatal error

    Fatal error

    Hello,

    I am trying to create demo using this editor kit but when I try to run this fatal error give me. Please see below image I have attach.

    screenshot 2019-01-11 at 11 54 55 am

    Thanks, Mohsinali Matiya

    bug 
    opened by mohsinalimat 11
  • [Bug] Cannot find interface declaration for 'VEditorMediaPlaceholderNode', superclass of  XXX

    [Bug] Cannot find interface declaration for 'VEditorMediaPlaceholderNode', superclass of XXX

    Cannot find interface declaration for 'VEditorMediaPlaceholderNode', superclass of 'SomeSubclassPlaceholderNode'

    open class will replace to @ objcMembers open class

    bug 
    opened by GeekTree0101 2
  • Jump to next location after link insert

    Jump to next location after link insert

    Why need this change?:

    • location should be changed after link insertion

    Change made & impact:

    • jump to next location after tailing of link characters

    Test Scope:

    • nil

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • Rollback #53

    Rollback #53

    Why need this change?:

    • https://github.com/GeekTree0101/VEditorKit/pull/53 occur link insertion bug

    Change made & impact:

    • rollback https://github.com/GeekTree0101/VEditorKit/pull/53

    Test Scope:

    • Fix unit test

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • improve unused _ASTableCellView manage safe and performance

    improve unused _ASTableCellView manage safe and performance

    Why need this change?:

    • unsafe to save draft (sync-contents)
    • Sometimes unexpected _ASTableCellView attached onto view hierarchy after remove content

    Change made & impact:

    • remove synchronizeFetchContent completion callback and support stack frame lock
    • activeTextContainCellNode should be weak referrence
    • create a removeUnusedInternalASTableCellViewIfNeeds method, check unused InternalASTableCellView(_ASTableCellView) during scroll.

    Test Scope:

    • sustain.

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • Fix _ASTableCellView Zombie issue

    Fix _ASTableCellView Zombie issue

    Why need this change?:

    • Texture issue: https://github.com/TextureGroup/Texture/issues/1407

    Change made & impact:

    • https://github.com/GeekTree0101/VEditorKit/issues/57
    • Refactoring remove media & merge text containers

    Test Scope:

    • keep

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • [Bug] Fix update current location attribute control status bug

    [Bug] Fix update current location attribute control status bug

    Why need this change?:

    • current location changing or selection case, attribute control status doesn't match with expected status

    Change made & impact:

    • Make a logic about update attribute control status based on current location
    • Support reduce duplicated xml keys

    Test Scope:

    • keep

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • [BUG] Support HTML Entitles

    [BUG] Support HTML Entitles

    Why need this change?:

    • HTML Entitles Build & Parsing Issue

    Change made & impact:

    • Support custom HTML entitle hander
    • VEditorXMLBuilder Default HTML entitle

    Test Scope:

    • Build & Parser HTML entitle unit test

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • Migration Texture2.8

    Migration Texture2.8

    Why need this change?:

    • Texture 2.8 migration

    Change made & impact:

    • AS_USE_VIDEO flag added in Texture 2.8 https://github.com/TextureGroup/Texture/pull/1240 Example: spec.xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) AS_USE_VIDEO=1' }

    Test Scope:

    • sustain

    Vertified snapshots (optional)

    enhancement 
    opened by GeekTree0101 1
  • [Bug] Reset selectedRange length before resign first responder

    [Bug] Reset selectedRange length before resign first responder

    Why need this change?:

    • Reset selectedRange length with sustain location before resign first responder about activted textView

    Change made & impact:

    • selectedRange length will be zero at editableTextNodeDidFinishEditing: method

    Test Scope:

    • pass

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • VEditorKit: Define default caret rect using with style.minHeight

    VEditorKit: Define default caret rect using with style.minHeight

    Why need this change?:

    • Empty Text View Caret size is too small & unmatched with default typing paragraph lineheight

    Change made & impact:

    • Setup style minimum height

    Test Scope:

    • minimumTextContainerTextLineHeight() should be return expected height

    Vertified snapshots (optional)

    bug 
    opened by GeekTree0101 1
  • [Bug] Unexpected _ASTableViewCell

    [Bug] Unexpected _ASTableViewCell

    Unexpected view(_ASTableViewCell) hammering UITextView selection function.

    스크린샷 2019-03-11 오후 4 39 35 스크린샷 2019-03-11 오후 4 39 31

    Expected UITableViewCell

    (lldb) po self.tableNode.view.visibleCells[0].subviews[0].subviews
    ▿ 1 element
      - 0 : <VEditorKit.VEditorImageNode-View: 0x106ee3110; node = <VEditorKit.VEditorImageNode: 0x1079efc00>; frame = (0 0; 414 450); clipsToBounds = YES>
    

    Unexpected UITableViewCell

    (lldb) po self.tableNode.view.subviews[10].subviews[0].subviews
    ▿ 1 element
      - 0 : <UIImageView: 0x10f73a3f0; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x2815358e0>>
    
    bug 
    opened by GeekTree0101 2
  • Need to set image

    Need to set image

    Hello,

    I like your editor kit and in future if my project require then I use this editor kit. 👍

    If you set image on B, I, Q, H, Link then look better for this project

    Thanks, Mohsinali Matiya

    enhancement 
    opened by mohsinalimat 3
  • [Bug] VEditorKit stress test report

    [Bug] VEditorKit stress test report

    VEditorKit stress test report

    test xml (39201 characters)

    <content>\n  <p>1\n전역하고 동아리 첫 회식자리를 가졌다.\n\n내앞에는 풋풋한 새내기 여학생들이 앉아있다.\n\n나는 고기를 굽기 시작한다.\n\n\"선배라고 하지말고 오빠라고 불러~ 난 어색한거 싫거든..ㅎㅎ\"\n\n어색함을 깨기위해 나는 불편한듯 앉아있는 새내기들을 향해 말했다.\n\n\"아..네..\"\n\n새내기들이 조용히 말했다. 그중에 한명의 얼굴에 어딘지 어색하지만 미소가 지어진것을 난 놓치지 않았다.\n\n분명 쟤네도 오빠란 소리가 더 좋으리란 확신이 들었다.\n\n\"근데 너는 이름이 뭐니?\"\n\n내 바로맞은편에 앉은, 새내기중에 제일 괜찮은 애한테 물었다.\n\n\"아.. 민희에요. 김민희.\"\n\n조용히 말하는게 앙증맞았다. 아무래도 군대까지 갔다온 오빠가 앞에 있어서 수줍은 것이리라.\n\n나도모르게 흐뭇해졌다.\n\n\"그럼 내 이름은 뭔지알아?\"\n\n\"아 선배이름이요?.. 잘.. 모르겠어요.\"\n\n\"선배라고 하지말고 오빠라고 하라니까? 너희도 그게 편하잖아 ㅎㅎ 내가 아니라 너희들때문에 그래~ 너희도 그게 편하잖아 그치?\n\n근데 신학기도아니고 4월인데 선배 이름도 몰라?ㅎㅎ\"\n\n여기가 군대는 아니라고는 하지만 선배이름정도는 외워야 하는게 아닌지 기분이 조금은 불쾌했지만\n\n군대병걸려서 온것이 아니란것을 보여줘야했기에 웃으며 말했다.\n\n새내기들이 서로를 쳐다보며 무슨 눈치를 보낸다. 뭔가 기분이 나빴지만 후... 내가 참아야지 뭘어쩌겠나. \n\n세상물정모르는 새내기들이 알면 얼마나 안다고..\n\n나는 계속 고기를 구웠고 앞에앉은 새내기들은 아무말도없다.\n\n근데 내 옆자리에 신입생 남자애가 앉아있는것이 아닌가. 언제부터 앉아있었지? 처음부터 있었나?\n\n근데 얘는 내가 고기굽는데 가만히 있나? 내가 군대를 갔다와서가 아니라 이건 예의의 문제다.\n\n\"야\"\n\n내가 기분이 좋지 않다는걸 강하게 어필하는 투로 가만히 있는 남자애를 부른다.\n\n\"네?\"\n\n남자애가 작게 멍한 말투로 대답한다. 아.. 이자식은 정말 맘에 안든다.\n\n\"넌 아무리 그래도 선배가 고기굽는데 너가한단 소리 한마디는 해야되는거 아니냐?\"\n\n\n\n\n\n2\n\n\n그렇게 어색한 상견례가 끝나고, 모두가 고기를 먹으며 둘어낮아 화기애애한 분위기속에서 얘기를 하고있었다.\n\n그래, 이게 진짜 복학생활이지. 난 기분이 흐뭇해졌다. 옆에있던 눈치없는 남자신입생놈은 나한테 따끔하게 혼이 난 후로는 \n\n계속 열심히 고기를 굽고있었다.\n\n그래도 첫인상만 안좋았지, 열심히 하네. 앞으로 동아리생활하면서 이뻐해줘야겠다는 생각이 들었다.\n\n\"그래도 너랑 민석이는 나라지킨다고 고생했어. 한잔 받아라~\"\n\n한학번 위인 누나가 나와 민석이한테 술을 따라주면서 말했다. 민석이는 내 동아리 동기인데 나보다 몇달일찍 전역했다.\n\n동아리원들이 그래도 수고했다는 의미에서 박수를 쳐주었다. 어깨가 으쓱해졌다.\n\n\"어휴 고생은요.\"\n\n민석이가 너스레를 떤다. 마음에 들지 않는다. 정말 애들이 군대가 고생 안하는곳이라고 알면 어쩌려고 저러는 건가.\n\n\"어휴.. 이병때 생각만 하면..죽을것 같아요 아직도.. ㅋㅋ\"\n\n나도모르게 이병때 이야기가 나와버렸다. 하지만 어쩌겠는가 사실인것을.\n\n\"이병때 안뛴다고 선임한테 털렸을때 생각만하면 아직도 눈물이 앞을 가려요 그냥\"\n\n정말 군필이 아닌사람은 모른다. 짬찌의 서러움을.\n\n애들의 표정을 보니 공감하는 표정이 아니다. 뭔가 억울하다. 같이 공감을 할 수 있었으면 좋을텐데... 공감하게 만들어줘야겠다.\n\n민석이는 뭔가 눈빛을 나한테 보내는거 같지만 뭔진 모르겠다.\n\n\"막 들어가면 짬선이라고 있거든요? 이병은 피엑스 맘대로 못가고 일병은 사지방못하고 그런게있어요.. 진짜 사람들이 원하는 그런거 있잖아요\n\n자유권이라그러나? 그런걸 막 제한하는데 진짜 인간으로서 누려야할 권리를 못누리면서 산다는게 얼마나 비참한건지를 그떄느꼇어요.\"\n\n\"자 자 그래 우리 고생했지. 그런의미에서 짠~\"\n\n민석이가 내 말을 막으며 건배를 했다. 뭔가 울컥했다. 저놈은 짬선이고 뭐고 없는곳에서 군생활을 한건가?\n\n\"잠깐만 그전에 내말좀 들어봐. 너도 다 겪은거 아니야? 좀 말좀 해주라고! 내가 유세떨고 싶은건 아닌데 \n\n그래도 객관적으로 알려주자 이거지 우리가 겪은걸.\"\n\n아니다 싶은건 아닌거다. 나는 단호하게 민석이에게 이야기했다. 말할건 말해야된다.\n\n민석이도, 한학번 위인 누나도, 신입생들도 모두 당황한 눈치였다.\n\n하지만 이미 내 끓어오르는 피는 주체할수 없었다.\n\n이건 비단 나뿐만이 아니라, 나라를 지키는 60만 장병들을 위해 하는말이다.\n\n훈련소떄 한기수 아랫놈들 보는앞에서 함성지르고 발굴려 갈때이후로 이렇게 피가끓어오르는 기분은 처음이다.\n\n무슨말을 했는지는 정확히 기억나지않는다. 하지만 술기운을 더하여 패기있 말했고, 이제 그 누구도 군대가 안힘들다느니 하는소리는 못하리라.\n\n다들 내 연설에 감동했는지 그 이후로는 다들 말을 잘 하지 못했고, 파하는 분위기가 되었다.\n\n각자 계산을 하고 화장실을 들렀다 나갔다. 다들 무너가 말하는 분위기였는데 내가 나오자 조용해졌다.\n\n다들 조용히 버스정류장쪽 거리를 향해 걷는다.\n\n\"이제 민희는 어디로 가나?\"\n\n가장 괜찮은 신입생인 민희옆에 슬며시 붙어 나는 나지막히 물었다.\n\n\"아.. 집으로 가요.\"\n\n\"어디사는데?\"\n\n\"저 신촌쪽에서 자취해요.\"\n\n\"아 그래? 그럼 버스타고 가겠네?\"\n\n\"예..혹시 선.. 아니 오빠는 어디사세요?\"\n\n\"응 오빠는 종로쪽이야~ 같은방향이네 같이 버스타고가면 되겠다~\"\n\n민희는 아무말이 없다. 아무래도 수줍어하는게 민희도 싫지않은 눈치이다. 귀여운 아이다.\n\n다들 헤어지고 제 갈길을 갔다. 버스가 왔고 민희와 나는 둘이 버스에 올랐다.\n\n나는 센스있게 먼저타서 두명이요를 외쳤고, 버스비는 2100원이 나갔다.\n\n\"아.. 저 어차피 환승해야되는데..\"\n\n뒤에서 민희가 나지막히 말했다. 아 좀 먼저 말해주지.. 뭔가 핀트가 안맞는 느낌이었지만 나는 괜찮다는 의미로 뒤를 돌아보며 한번 씩 웃어주고\n\n버스안으로 들어갔다.\n\n\n\n\n3\n\n\n\n버스는 한산했고마침 뒤에 2인용 좌석도 있었다.\n\n하늘도 나의 고생을 알아줘서 보상을 주는구나, 싶었다.\n\n나는 냉큼 그 자리에 앉았다. 민희는 그걸보고 심하게 망설이는 표정을 지었다.\n\n역시 수줍음이 많은 친구였다.\n\n“민희야 여기앉아!”\n\n나는 내 옆자리를 톡톡치며 다정하게 말했다.\n\n민희는 정말 천천히 걸어와 내 옆에 앉았다.\n\n아직도 내가 부끄러운건지 계속 핸드폰만 만지작 거렸다.\n\n이런 어색함을 깨 줄 필요가 있었다.\n\n“우리 민희는 과가 어디라고 그랬더라?”\n\n“저..국문학과요”\n\n“아 국문학과! 소설 좋아하는구나?”\n\n“아뇨 그냥..점수맞춰서 온거에요.”\n\n민희는 내 생각보다 수줍음이 많은 듯 했다. 말수가 없는건지 말주변이 없는건지..\n\n이러면 대학생활하기 힘들텐데..\n\n“민희 뭐 안좋은 일 있었어 오늘?”\n\n“네?”\n\n“아니 민희가 오늘 말수도 없고 좀 표정도 안좋은거 같길래~ㅎㅎ”\n\n“아..아니에요 그런거..”\n\n“오빠가 대학선배로서 조언하는데 그러면 대학생활 힘들어져~ 막 서로 어색하고 그래도 말 \n\n많이하고 그러면서 친해지는거야 원래~ 그래도 민희는 남자가 아니어서 다행이다 군대에서 \n\n그러면 많이 혼나는데 원래 ㅎㅎ”\n\n순간 민희가 나를 힐끗 쳐다보았다. 그러고는 말없이 빛의 속도로 엄지를 놀려 어디론가 카\n\n톡을 막 날렸다.\n\n나는 기분이 나빠졌다. 수줍음이 많다고해서 예의가 없는걸 넘길수는 없다. \n\n그렇다고 너무 무섭진 않게.\n\n“민희야.”\n\n나는 단호하게 말했다.\n\n“네?”\n\n“오빠가 말했으면 대답이라도 해야지.. 그건 예의가 아니지.. 민희가 아직 사회생활을 못해봐서 잘 모르는구나? 괜찮아 그럴 수 있어 이해해~ 다른 선배가 있었으면 민희 아주 혼날수도 있어요~ㅎㅎ”\n\n“아..예..”\n\n“그나저나 누구랑 그렇게 카톡하는거야? 남자친구?”\n\n“아뇨..”\n\n“민희 아직 남자친구 없구나 그치?”\n\n“예..”\n\n역시 하늘은 나의 편이다.\n\n“그나저나 오빠가 아직 민희 번호 안물어봤네?”\n\n나는 자연스럽게 내 핸드폰을 민희에게 넘겼다.\n\n민희가 또 특유의 동작으로 망설이더니 번호를 찍어줬다.\n\n그번호 그대로 통화를 눌렀더니 없는 번호란다.\n\n“없는 번호라는데 민희야?”\n\n“아...제가 실수로 잘못 찍었나봐요.”\n\n민희는 다시 번호를 찍어주었고 그 이후로 서로 아무런 말이 없었다.\n\n예상외로 수줍음을 너무타는데.. 뭐 차차 풀어나가면 될 것이다.\n\n“오빠 저 그냥 여기서 내릴게요. 안녕히 계세요.”\n\n버스문이 열리자마자 민희가 기습적으로 말하고는 후다닥 내려버렸다.\n\n내가 알기로 저기서 환승하는게 아닐텐데.. 내가 잘못알았나? 하여간 수줍어 하기는 ㅎㅎ\n\n나또한 집에 도착했고 샤워를 했다. 뭔가 걱정이 되었다. 나름 밤시간에 혼자 자취를 하는데 무슨일이 생긴건 아닐는지..\n\n나는 민희에게 카톡을 날렸다. 프사도 본인의 셀카였다. 귀여웠다. 두근두근,\n\n-잘 도착했어?? ㅋㅋ-\n\n\n\n\n4\n\n\n\n10분이 지나고, 20분이 지났지만 아무런 답톡도 오지않았다.\n\n나는 슬슬 불안해지기 시작했다.\n\n무슨일이 생긴게 아닐까? 귀엽게 생긴 민희 얼굴정도라면 음흉한 놈들의 타겟이 될만했다.\n\n이밤에 자취방에 홀로 가다가 봉변을 당한 것인가?\n\n심장이 쿵쾅쿵쾅 뛰기 시작했다. 30분이 됬는데도 답장이 안오고 1도 사라지지 않았다.\n\n설마가 사람잡는다고 무슨일이 생긴게 분명했다. 밤거리의 신촌은 취객들도 많았고 이상한 놈들도 많았다.\n\n혼자 보내는게 아니었는데.. 후회가 되었다.\n\n나는 바로 전화를 걸었다. 전화마저 받지 않으면 정말 심각한 상황인 것이다.\n\n통화음이 다섯 번에서 여섯 번 정도 되었을까, 전화가 연결이 되었다.\n\n“....여보...세요?”\n\n조심스런 민희의 목소리가 들렸다. 확실히 뭔가 겁먹은 목소리였다.\n\n“민희야 괜찮아?”\n\n나는 민희가 겁먹지 않도록 최대한 부드럽게 말했다.\n\n“뭐..가요?”\n\n“아니 난 너가 오랫동안 답장을 안하길래..혹시 무슨일 생긴거야?”\n\n“...예?”\n\n“아니 뭐 수상한 애들이 얼씬거린다던지 뭐 그런거.. 괜찮으니까 말해봐.. 오빠 글로 갈까?”\n\n“무슨소리 하시는거에요.. 저 아무일도 없어요..”\n\n“정말이야? 그러면 다행이구..한시름 놨네.. 난 또 연락이 안되길래 무슨일이 생긴 줄 알았지~”\n\n“그런거 없어요..”\n\n“다행이다~ 혹시나 무슨일 생기면 부담갖지말구 연락해~”\n\n뚝.하고 전화가 끈켰다. 뭔가 불안한 일이 있었던건 맞는거 같은데..\n\n그래도 내가 널 이렇게 걱정해주고 있다는 것 정도는 어필했으니, 오늘은 이정도면 대 성공인 것이다.\n\n나는 만족스러운 기분으로 잠자리에 들었다.\n\n그렇게 몇일이 지났다. 나는 공강시간을 이용해 가끔씩 민희에게 카톡을 보내 \n\n점심 먹었냐고 물어보았지만 확실히 민희는 점심을 일찍 먹는 스타일인지 \n\n항상 점심은 먹은 상태였다.\n\n그리고 오늘저녁, 동아리 총회가 있다. \n\n동아리의 나아갈 방향 같은것들을 토론하고 뉴페이스를 소개하는 자리.\n\n동아리의 중역인 나로서는 아무리 바쁜 복학생이라도 빠질수가 없다.\n\n나는 제시간에 맞춰 동아리방에 들어갔고 사람은 적지않았다. \n\n회식떄는 못본 모르는 얼굴도 있었고... 민희도 있었다. ㅎㅎ\n\n그렇게 총회를 했고 서로를 소개하고 있는데, \n\n6시 15분쯤에 딱봐도 남자 신입생으로 보이는 아이들 둘이 들어왔다.\n\n녀석들은 한번 고개를 까딱 숙이더니 아무 일 없다는 듯이 들어오는 것이 아닌가?\n\n후..요즘애들은 다 이런가?\n\n“야”\n\n이런건 넘어갈 수가 없다. 최소한 지킬건 지켜야지.\n\n“너희 뭐땜에 늦었냐?”\n\n\n\n\n\n5\n\n\n\n“아..저희 수업이 늦게 끝나서..죄송합니다.”\n\n후..한숨이 나왔다.\n\n“아니 그럼 어찌어찌해서 늦었다, 죄송하다 앞으로 이런일 없겠다 말을 해야될거 아니야?\n\n그냥 들어오면돼?”\n\n녀석들은 벙 찐 표정으로 서로를 멀뚱멀뚱 쳐다보기만 했다. 마치 신병을 데려다 놓은마냥.\n\n내가 너무 했나?\n\n“아니 그렇다고 너무 얼어있지는 말고.. 그냥 기본만 하자는거지 기본만..서로 지킬건 지키면서 살면 오해도 없고 좋잖아?”\n\n총회떄 나에게 술을 따라 주었던, 한 학번 위인 동아리 회장누나가 나지막히 한숨을 쉬는게 들린다.\n\n누나또한 저런 무개념들은 싫은 것이다. 누나의 서포트를 받으니 어깨가 으쓱해졌다.\n\n“괜찮아..다음부터 잘하면돼 다음부터..사람은 누구나 실수 할 수 있잖아 그치?”\n\n“예..”\n\n신입생을 향한 훈계를 나름 훈훈하게 마무리하며 스스로 대견한 기분이 들었다.\n\n서로 자기소개를 하고, 앞으로 동아리가 어떻게 나아갈지 토론을 하고있었다.\n\n뭐 동아리회비가 어떻느니, 학교 지원금이 어떻느니 그닥 와닫진 않았다.\n\n난 그보다 아까 그 신입생 남자애 둘이 딴짓 하나 안하나에 집중하고 있었다.\n\n녀석들도 내 시선을 느꼈는지 서로 뜻모를 눈빛만 주고받고는 신병마냥 얼어있었다.\n\n역시 난 아직 죽지 않았어.\n\n“그래서 동아리 회비는 신입생 2만원, 재학생 만원으로 하기로 할게요\n\n또 학교에서 지원금 나오는걸로는 엠티를 가던지 회식을 가던지 할게요. 이의없죠?\n\n또 뭐 건의사항같은거 있으신분?”\n\n이때를 기다렸다. 나는 손을 들었다.\n\n“어..뭐..건의사항..있어?”\n\n누나가 조심스레 물었다. 회장못지않은 중역인 내가 뭘 건의한다는게 부담스러운건가? 난 권력욕은 없는데 말이다.\n\n“아..다른게 아니라 동방에 주전자를 놨으면 해서요”\n\n“주..전자?”\n\n민석이 녀석이 머리를 부여잡고, 책상에 약하게 머리를 쓰러지듯 부딪쳤다. 쟨 뭐가 문제지?\n\n내가 말한게 그렇게 잘못된건가?\n\n난 그렇게 생각하지 않는다. 군대서건 어디서건 좋은문화는 받아들여야 하는게 맞다.\n\n“예.. 제가 군대에서 생활관에 있을 때 주전자를 썼었거든요. 항상 가득 채워놓으면 굳이\n\n목마를때마다 정수기까지 가서 마실 필요도 없구요. 정말 좋은거 같더라구요.”\n\n“근데 그러면..그걸 한가득 떠오는 건 누가 하고? 그냥 멀지도 않은데 그때그떄 떠먹는게 서로 편하지 않을까?”\n\n“아..그거야 목마른 사람이 자기 떠오는겸해서 가득 떠오는거죠뭐..정 뭐하면 신입생들이 하기로 하죠. 그렇게 힘든것도 아니고.. 아 여자신입생들은 약하니까 남자 신입생들이요. ㅎㅎ\n\n그 정도야 제가 다 생각해놨죠.”\n\n여자신입생을 나름 힘있게 발음하며 난 민희를 쳐다보았다.\n\n알듯말듯하게 한쪽 눈을 살짝 윙크하듯 찡그렸는데 의사표시가 되었으려나.\n\n\n\n\n6\n\n\n\n“아..그건그럼 한번 내가 애들의견 물어보고 가격알아보고 결정할게..”\n\n“아 그냥 여기서 다수결로 하죠 뭐 물어보고 말고도 없을거 같은데.”\n\n나는 애들을 천천히 둘러보았다. 다들 느꼈을 것이다. 참신한 아이디어임에는 부정 할 수 없을 것이다.\n\n“주전자를 샀으면 좋겠다?”\n\n나는 말하며 손을 들었다.\n\n근데..나말곤 아무도 손을 들지 않는 것이 아닌가?\n\n어..이놈들이?\n\n“야, 야 내가 나중에 애들한테 다 물어보고 결정할게. 지금 뭐 신입생도 많고해서 뭐가뭔지 모를거야.”\n\n민석이 녀석이 어르듯이 나한테 말했다. 저놈 말투가 맘에 안들었다.\n\n내가 육군인 저놈보다도 짬은 훨씬 찼는데 말이다.\n\n“아니 근데.. 지금 아무도 손 안든거야? 내가 아까 왜 하자고 한지 못들은 거야 다들?”\n\n“아니아니 그게아니라 내가 애들 손들기 전에 너한테 말걸어서 그렇잖아 내가 있다가 물어볼게.”\n\n“그래 우리가 다 의견종합해서 할게 그건.”\n\n회장누나도 거들었다. 후..그래 신입생애들이 뭘 알겠는가. 나는 분위기를 전환시킬겸 활기차게 말했다.\n\n“그럼 총회도 끝났으니까 밥먹고 술이나 마시러 갈까요?”\n\n“아니 그냥 우리 밥먹고.. 그래 노래방 가자 노래방!”\n\n회장누나가 말했다.\n\n“그래 노래방가자. 그게 낫겠다.”\n\n민석이도 거들었다.\n\n근처 일식집에서 밥을먹었다. 밥먹는 내내 다들 별 말이 없었다. 밥이 맛이 없나?\n\n내가 입대하기전만해도 맛집으로 소문난 일식집이었는데.\n\n“왜, 민희 밥이 맛이 없어?”\n\n나는 옆에있는 민희에게 다정하게 물어보았다.\n\n물론 옆에있는건 우연이 아니라 나름의 눈치로 민희옆에 잽싸게 앉은 것이다 ㅎㅎ\n\n아까부터 계속 밥맛이 없는지 먹지도 않고 꺠작꺠작 대는 것이 안쓰러웠다.\n\n“아뇨..그냥..”\n\n얼버무리는 민희의 말에도 힘이 없어보였다.\n\n“뭐 안좋은 일이 있었구나? 함 오빠한테 말해봐~ 다 들어줄게.”\n\n“아니에요 그런거 없어요”\n\n약간의 신경질적인 투가 묻어나왔다. 확 짜증이 일려다가 참았다. 내가 누구 걱정해주다가 짜증까지 받아줘야되나?\n\n여자들만의 그날인가보다 하고 나름 좋게 생각하고 넘겼다.\n\n노래방을 갔다. 노래방을 간다기에 나름 생각해온 곡이 있었다. \n\n이런 순간을 위해 집에서도 몇 번 연습한 노래다. \n\n분위기는 초장에 휘어잡아야한다. 다들 가방을 막 룸안에 놓기 시작하고는 어수선한 분위기\n\n속에서 나는 첫빠로 리모콘을 집어 노래를 예약했다.\n\n그리고 빠른 속도로 민희에게 카톡을 보냈다.\n\n-너를 위한 노래야-\n\n그리고 스크린엔 노래 이름이 떴다.\n\n부활-희야\n\n\n\n\n\n\n\n7\n\n\n\n“희야~! 날 좀 바라봐~ 너는 나를~ 좋아했잖아~”\n\n부대에 있을 때 나름 보컬전공인 후임한테 배웠었다. 입대하기 전만해도 음치였던 나는 지금은 최소 평균 이상이다.\n\n나는 내 음색에 취해 이승철이 빙의된 듯 이리저리 손으로 음표를 느끼며 한음절 한음절 토해냈다.\n\n‘정말 많이 좋아지셨습니다. 이정도면 여자들이 뻑갈겁니다.’\n\n비록 1년넘게 짬차이가 났지만 난 내후임이 했던 말이 거짓이 아니었다는걸 알고 있다. 내 자신감은 더욱 북받쳐 올랐다.\n\n민희를 보았다. 민희는 자기 핸드폰을 들고 같이 동아리에 들어온 친구를 붙잡고 뭘 열심히 속닥이고 있었다.\n\n내가 보낸 문자가 널 설레게 한건 아는데 그걸 함부로 남하고 공유하는건 좀.. 그렇지 않니?\n\n라고 말하고 싶었지만 노래를 부르는 중이어서 그러진 못했다.\n\n민희는 동아리 같이 들어온 친구와 일어서서 회장 누나에게 뭘 말하더니, 가방을 들고 나가버렸다.\n\n나는 당황했다. 급한일이 생겼나? 아니면 잠깐 어디를 갔다오려나?\n\n나는 일단 침착하게 노래를 마무리 했다. 아무도 내 뒤를 잇지않았고 침묵만이 내려앉았다.\n\n나는 민석이한테 속삭였다.\n\n“민희 어디 간대?”\n\n“나도 모르겠다..”\n\n민석이는 한숨을 푹 쉬며 말했다. 말할거면 그냥 말하면 되지 왠 한숨을 쉬고 난리야.. 괜히 짜증이 났다.\n\n“야 근데 아무도 안이어? 이어야지 뭐하는거야?”\n\n요즘애들은 눈치가 없어도 너무 없다. 노래를 싫어하나? 싫어해도 일단 왔으면 불러야지 뭐하는건가?\n\n“야 안이어? 노래방와서 뭐하는건데?”\n\n나는 괜히 옆에있는 신입생 남자애한테 말했다.\n\n녀석은 못미더운 표정으로 노래를 하나 예약했다.\n\n어, 이놈 표정봐라..? 정말 복학하고 사회적응하기 힘들다힘들다 하는게 이해가 안갔는데 이제는 좀 이해가 가는 기분이다.\n\n그래, 내가 이번만 참는다. 어디 그 태도 얼마나 오래가는지 두고보자. 좋게 가려고 했더니 조만간 선배의 무서움을 보여줘야겠다. \n\n이런 건 초장에 기선제압해야 기어오르지 않는다.\n\n그렇게 싸늘한 분위기로 한시간이 지났고 보너스가 나왔다.\n\n“우리 그냥 보너스 하지말고 가자..”\n\n회장 누나가 힘없이 말했다. 다들 오늘따라 힘이없네..?\n\n노래방을 나와 거리로 나갔다.\n\n그래 뭐..아쉬운대로 오늘은 참자. 여러 가지 의미로. 집이나 가야겠다. \n\n가는길에 민희에게 무슨일 생겼냐고 물어봐야겠다.\n\n근데 그때 회장누나가 나를 불렀다. 옆엔 민석이도 있었다.\n\n“우린 술한잔 하고가자.”\n\n“아 술이요? 야 다 와바라 회장누나가 한잔 하자고 하신다!!!”\n\n나는 집으로 가려는 신입생들을 불러모았다. 나름 아쉬웠는데 잘됬다.\n\n술한잔 하면서 신입생들에게 눈치교육정도는 시켜야할것같다. \n\n이건뭐 세상물정을 몰라도 너무 모르니..\n\n“아니.. 우리셋이 마시자구..”\n\n\n\n\n\n\n8\n\n\n\n\"아니.. 우리 셋이 마시자구..\"\n\n회장누나가 단호히 말했다. 뭔가 둘의 표정을 보니 확실히 할 말이 있는 표정이었다.\n\n뭔지 짐작이 간다.\n\n내가 노래부르고 나서 아무도 내 뒤를 잇지 않았을 때, 누나표정이 눈에 띄게 안좋아진걸 난 안다.\n\n시간약속을 지킨다던지 노래를 잇는다던지 하는 그런것들은 소위 ‘기본매너’라고 불리는 행동인 것이다.\n\n회장누나가 얼마나 스트레스를 받았을지 나도 짐작이 가는 바이다.\n\n내가 나서서 어느정도 신입생들을 컨트롤하고 있기는 하지만 나 혼자서는 역부족인게 사실이다.\n\n민석이녀석은 군대를 갔다온건지 공익을 갔다온건지..\n\n우리는 조용한 술집을 찾았다. 민석이 알바에게 조용히 마른안주에 소주 한병을 시켰다.\n\n둘은 아무 말도 꺼내지 않았다. 나보고 이야기를 시작하라는 건가?\n\n“후.. 저도 요즘에 어떡해야할지 막막해요 솔직히.. 제가 신입생떄만 해도 이렇진 않았는데..”\n\n“무슨소리야?”\n\n민석이 물었다.\n\n“야 솔직히 말할게. 난 너가 군대를 갔다온건지 아니면 어디 해외여행을 \n\n다녀온건지 모르겠다. 애들이 잘못을 헀으면 그걸 말해줘야지 애들이 다음부터 그런\n\n잘못을 안한다니까? 너가 애가 좀 착하고 그래서 뭐라 못하는건 알겠는데 그러면 나중에 애\n\n들이 위고 아래고 없이 기어오른다니까? 그럴떈 너가 아니라 애들을 위해서 혼낸다고 생각\n\n을 해야돼. 다 애들이 나중에 짬..아니 학년차고 나서 개념있게 행동하라고 이러는거지 우리\n\n가 뭐 우리 좋으라고 한는건 아니잖아 솔직히?”\n\n그러자 회장누나와 민석이 동시에 서로를 바라보고는 가볍게 한숨을 쉬었다.\n\n그래, 솔직히 회장누나도 몇마디정도는 신입생들에게 할 줄 알아야한다.\n\n“그래, 내가 군기반장역할정도는 도맡아서 해줄 수는 있어. 근데 누나랑 너도 어느정도는 \n\n엄한 분위기를 내줘야 한다니까?”\n\n“그냥 내가 단도직입적으로 말할게.”\n\n누나가 좀 흥분된 말투로 말했다.\n\n“우리 동아리.. 그만 나가줬으면 해.”\n\n\n\n\n\n9\n\n\n\n“우리 동아리.. 그만 나가줬으면 해.”\n\n?뭔말인가 이건.\n\n“무슨말이에요?”\n\n“동아리.. 안와줬으면 좋겠어 솔직히 말해서.”\n\n누나가 이렇게 단호한 모습은 처음봤다.\n\n“..왜요?”\n\n민석이 한숨을 푹 쉬었다.\n\n“야.. 너 솔직히 신입생때 이런애 아니었잖아. 우리 신입생떄 남자선배한테 밥먹을 때 수저 \n\n안놓는다고 한마디 들었을 때 하루종일 씩씩거리면서 뭐 저런 군대물도 안빠진 선배가 있냐고 뭐라 했었잖\n\n아.. 우린 전역하고 나서도 절대 대학와서 군대놀이 하지말자고.. 난 그때 솔직히 너 되게 괜찮게 봤었거\n\n든? 근데 너.. 지금 하는걸 봐바.. 여긴 대학교야 군대가 아니라.. \n\n군기잡고 하는건 이제 그만할때도 됬잖아..”\n\n얘가 뭔말을 하는거지?\n\n“무슨소리야? 내가 언제 혼났어.. 그 선배는 또 누구고.. 난 기억도 안나.. 그리고 내가 언제 \n\n군대놀이를 했어? 기본만 하자는거야 기본만.. 사람이 동물하고 다른게 뭔데.. 기본적인 예\n\n의는 서로 지켜야 하는거 아냐 솔직히? 서로 비슷한때 입대하고 전역해서 난 너한테 전우애\n\n같은거 느끼고 있었는데 솔직히 너가 이러는거 되게 이상하다.. 난 너가 하는말이 하나도 \n\n이해가 가지 않는다.”\n\n“그리고..민희가 나한테 다 이야기했거든? 너 만난지 하루도 안되서 밤시간에 시답잖은걸로 \n\n막 전화하고 그랬었다며.“\n\n이번엔 회장누나가? 하아.. 뭔가 오해가 있었던 것 같다.\n\n“무슨소리에요? 시답잖은 거라뇨.. 민희가 혹시 치한한테 봉변당한게 아닌가 제가\n\n혼자 얼마나 불안해 했었는데 그게 시답잖은 거라뇨.. \n\n사람 신변에 관련된것도 시답잖은 거에요?”\n\n“민희가 뭐 너한테 무섭다던지 그런말을 했어?”\n\n“아뇨”\n\n“그럼”\n\n“제가 카톡보냈는데 삼십분이고 사십분이고 연락이 없는거에요.. 밤길에 자취하는애가.. \n\n솔직히 선배같으면 걱정 안되겠어요? 아니 그리고 걔가 그런 사적인것까지 다 말했단 말이\n\n에요? 미친거 아니에요 걔?”\n\n회장눈나의 얼굴이 흥분한 듯 붉어졌다.\n\n“너 진짜 작작해라. 정말 모르는거야 알면서 모르는척 하는거야? 너가 하는말이 말이 되는 것 같아?”\n\n“하..진짜 오해가 있는 모양인데 걔가 누나한테 뭐라고 했는지 정확히는 모르겠는데 정말 \n\n누나가 생각하시는 그런거 아니거든요. 걔 진짜 이상한애네. 저 바람좀 쐬고 올게요.”\n\n나는 말을 쏟아내고는 누가 대꾸할 틈도 없이 밖으로 나갔다. 심장이 미친 듯이 뛰고 호흡이 매우 가빠왔다.\n\n손이 부들부들 떨렸다.\n\n난 폰을 꺼내 민희에게 전화를 걸었다.\n\n\n\n\n\n\n10\n\n\n\n난 폰을 꺼내 민희에게 전화를 걸었다.\n\n받지않는다. 두 번해도 받지 않는다. 세 번해도 받지않는다. \n\n난 카톡을 켰다. 이 망할 노란페이지가 너무 오래 걸린다.\n\n난 바로 민희에게 카톡을 날렸다.\n\n-전화받아라-\n\n-좋은말로 할 때 전화 받아라.-\n\n-찾아 가는 수가 있다 진짜 나 너 어디사는지 대충 안다 전화 받아라.-\n\n또 네 번째 카톡을 보내는데 민희에게 전화가 왔다.\n\n순간 당황했지만 심호흡을 한번하고 몸을 진정시킨뒤 전화를 받았다.\n\n“여보..”\n\n“선배진짜 민희한테 왜이래요?”\n\n민희옆에 있던 그..이름은 모르겠고 민희 친구였다.\n\n“야 니랑 말하기 싫으니까 민희바꿔.”\n\n“아니 민희가 뭐했는데 자꾸 이러냐구요.”\n\n나는 다시 심호흡을 하고 가까스로 호흡을 억누르며 침착하게 말했다.\n\n“지금 오빠 엄청 화나있거든? 너한테 쌍욕하기 싫으니까 민희 바꾸라고 했다.”\n\n“민희 선배랑 통화하기 싫대요. 좀 그만 찝쩍 대라구요 제발.”\n\n그러자 민희가 괜찮다며 친구와 대화하는게 들렸다.\n\n“선배.”\n\n민희였다. 민희가 하는말을 다 들을 참을성이 없다 지금은. 나는 말을 끊고 들어갔다.\n\n“민희야.. 지금 무슨 오해가 있는건진 몰라도 오빠가 굉장히 화나있거든..? 무슨일인지 말해줄래?”\n\n“제발 그만좀 연락하셨으면 좋겠어요.”\n\n허 참.. 기가찼다.\n\n“하.. 민희가 왜그러는지 몰라도 오빠가 지금 많이 당황스럽네? 뭐 누구한테 이상한 말 들었니?”\n\n누군가가 우리사이를 이간질 시킨건가? 민석이 그놈짓인가? 평소 민석이가 민희를 보는 시선도 어딘지 사심있는 구석이 있어 보이기도 하였다.\n\n“혹시 민석이가 너한테 이상한..”\n\n“제발 그냥 전화도 하지 마시고, 카톡도 하지 말아주세요. 그냥 다 제가 잘못했으니까..\n\n저 동아리도 이제 안할거니까 매일 점심먹자고 하는거나 밤시간에 전화나 그냥 다 하지말아\n\n주세요. 저 아는척도 하지말아주세요.”\n\n“후.. 민희야. 진짜 오빠 화날라 그런다.. 왜그런지 오빠가 알아야..”\n\n“아 더이상 연락하지 말래잖아 이 변태같은 새끼야!!!!”\n\n그 생긴 것 같지도 않던 민희 친구년이 다시 전화를 뺏어 나한테 소리를 지른다.\n\n“야 너 X발 나한테 지금 변태라고 그랬냐? 미쳤냐? 진짜 나 여자 안떄리기로 맹세했는데 그 맹세 깨는수가있다. 니 지금 어디야? 어디냐고!!!”\n\n더 이상은 통제가 안된다. 변태? 미친년인게 틀림없다.\n\n전화가 끊켰다. 다시 전화를 걸었다. 안받는다. 또 전화를 걸었다. 안받는다. 몇 번인지 셀 수 없을 정도로 전화를 걸었다.\n\n끝까지 안받는다. 카톡을 열었다. 마음같아선 핸드폰을 부셔버리고 싶었다.\n\n-어디야-\n\n-어디냐고-\n\n-말해라 진짜-\n\n-찾아간다? 어디야-\n\n그때 뒤에서 민석이가 나타나 내 핸드폰을 잡아챘다.\n\n“너 진짜 미쳤냐 이새끼야?”\n\n\n\n\n\n\n\n11\n\n\n\n그때 뒤에서 민석이가 나타나 내 핸드폰을 잡아챘다.\n\n“너 진짜 미쳤냐 이새끼야?”\n\n민석이 나한테 쌍욕을 한다. 순간 혼란스럽다.\n\n“뭐?”\n\n“작작하라고 했다 x팔 진짜.”\n\n순간 민석이가 무서워졌다. 원래 거의 화 안내는 앤데.. 패기랄까 그런게 느껴졌다.\n\n키도 나랑 비슷한 놈이..군대가기전엔 그냥 순한 놈이었는데..\n\n“니가 민희한테 이상한 말 했냐?”\n\n“뭐? 너 진짜 미친거 아니냐?”\n\n회장누나도 뒤따라 뛰어왔다.\n\n“그만해 그만..”\n\n회장누나가 나와 민석이 사이를 막았다.\n\n“진짜 내가 너 좋게 생각하고 있었는데 니 진짜 미친놈이다.. 동아리 얼씬도 하지마라.. 또 그러다가 어떻게 될지 모른다..”\n\n민석이는 자기 할말만 하고 휙 가버렸다.\n\n회장 누나는 나오 떠나는 민석이를 잠시 번갈아보더니 내가 술집에 놓고 나온 가방을 \n\n나한테 던져주고는 민석이를 따라 가버렸다.\n\n회장누나는 나와 떠나는 민석이를 잠시 번갈아보더니 내가 술집에 놓고나온 가방을 \n\n나한테 던져주고는 민석이를 따라 가버렸다.\n\n황량한 거리에 나만 남았다. 그새 민희 친구가 누나랑 민석이한테 전화를 한건가?\n\n거리엔 여러 무리들이 뭐가 그리 재밌는지 서로 왁자지껄 떠들며 뭉쳐다니고 있었다. \n\n나만 혼자다. 카톡을 뒤졌다. \n\n불러낼 애가.. 없다.\n\n아오.. 오늘 일진이 왜이렇게 안좋냐.. 걍 똥 밟았다고 생각하자.\n\n훌훌 털어버리려 해도 털어지지가 않는다. 나는 mp3를 꺼내 셔플모드로 재생을 눌렀다.\n\n우연의 일치인지, 부활의 희야가 나왔다.\n\n-희야, 날 좀 바라봐, 너는 나를 좋아했잖아.\n\n너는비록, 싫다고 말해도, 나는 너의, 마음알아~-\n\n비록 싫다고 말해도.. 란 이승철의 메아리가 내 마음속에서 울려퍼진다.\n\n뭔가 오해가 있었던게 아니라고? 정말 내가 싫었던 걸까?\n\n하아.. 오해가 있던게 아닐까? 나는 다시 폰을 꺼내 만지작만지작거렸다.\n\n민희에게 보낸 카톡은 어느새 읽었는지 1이 지워져 있었다.\n\n후..보낼까 말까.. 안볼떈 안보더라도 오해는 푸는게 낫지 않을까?\n\n그래, 아까는 내가 너무 흥분했었다. 침착하게 말하면 오해가 풀릴거 같다.\n\n-민희야 미안하다. 내가 잠깐 흥분을 한거같다. 너 친구한테도 미안하다고 전해줘..-\n\n10분이 지나도 답톡이 없다. 1도 안사라진다.\n\n-그냥.. 내가 복학하고 뭐가 뭔지 모른 상태에서 행동한게 너한테 상처를 입혔던 것 같다.\n\n따로 너 찾지도 않고 동아리도 안갈테니까 걱정하지마.\n\n그냥 가끔 인사나 안부정도는 묻는 사이가 되었으면 해.. 어색하지 않게.. ㅎㅎ-\n\n그래도 답톡은 오지 않는다. 허 참.. 슬며시 열이 뻗쳐온다. 피해자는 나인데 내가 왜 사과를 하고도 씹혀야 하는가?\n\n난 정말 걱정해주고 위해준 것 밖에는 잘못이 없는데. 여기 사람들 정말 이상하다. 열이 받는다.\n\n민석이가 나한테 한 행동도, 누나가 나한테 소리친 것도 모두 민희탓인 것 같다. 걔가 어떻게 얘기를 하고 다녔으면 둘이 그러겠는가?\n\n사람하나 동아리에서 묻으려고 작정한 짓거리 아닌가? 다시 숨이 분노로 인해 가빠졌다. 지가 뭔데 내 카톡을 맘대로 씹어?\n\n-근데..먼저 꼬리친건 너잖아.-\n\n나도 모르게 손가락이 움직여 전송버튼을 눌렀다.\n\n어.. 이게 아닌데 하는 생각이 순간 머리를 휘어잡았다. \n\n안돼, 안돼.. 이건 내가 생각해도 아니다. \n\n아제발.. 카톡은 전송중임을 나타내는 표시가 뜨고 있었다. 제발, 제발..\n\n나는 종참때도 가지 않았던 예수님 부처님을 되내이며 전송실패가 되길 바랬다.\n\n하지만 내가 보낸 카톡옆에는 당당하게 1이란 숫자가 생겼고, 내머리속엔 ㅈ됬다 \n\n세 글자가 주기되었다.\n\n\n\n-완결-\n\n나는 종참때도 가지 않았던 예수님 부처님을 되내이며 전송실패가 되길 바랬다.\n\n하지만 내가 보낸 카톡옆에는 당당하게 1이란 숫자가 생겼고, 내머리속엔 ㅈ됬다 \n\n세 글자가 주기되었다.\n\n-민희야 이거 내가쓴거 아니야.-\n\n란 카톡을 재빨리 보냈다.\n\n근데 이건 뭔가 더 말이 안되는 것 같다. 내가 안썼으면 누가 쓴단 말인가..\n\n손가락이 지 멋대로 움직이는 느낌이다. 하..\n\n-아니.. 내가 쓴게 아닌게 아니라.. 내가 너무 당황해서 잘못쓴거야.. 미안하다..\n\n-그냥 다 알았으니까 그만하시라구요 제발좀..\n\n드디어 민희가 톡을 보냈다. 날카로운 비수가 날라와 심장에 꽃히는 느낌이다.\n\n-그냥..내가 하고싶은 말은.. 미안하다구.. 그게 다야.. 미안하다..!-\n\n-네 알겠어요 다 좋으니까 이유없이 카톡하고 전화걸고 하지마세요.\n\n그래도 아까에 비하면 많이 풀린 느낌이다. 다행이다.\n\n-그래.. 난 어색해지는거 싫으니까 안부정도는 하고 인사도 하고 지내자~\n\n-맘대로 하세요.\n\n-웅 나중에 카톡해~ ㅎㅎ\n\n그래도 나름 좋게 마무리된 것 같아 다행이다. 그래봤자 이제 동아리엔 들어갈 수 없겠지만..\n\n그렇게 뜬눈으로 밤을 지샜다. 많은 생각을 했다. 내가 군대에서 했던 행동들과 여기서 했던 행동들.\n\n확실히 뭔가 달라져야 했지만 변함이 없게 행동했던 것 같기도 하고, 좀 더 너그러워져도 될뻔 했다는 생각들이 들었다.\n\n고통없인 얻는것도 없다고, 이런 소란을 겪음으로써 난 한단계 성숙해졌다고 생각한다.\n\n군기 안잡고, 부담스럽게 안하기.. 이것만 잘하면 되는 것 아니겠는가. 생각보다 쉬운 것이다.\n\n그래.. 내일부턴 새 인간으로 태어나는 것이다. 어차피 동아리도 탈퇴했겠다. 새로운 나로 거듭나느 것이다.\n\n다음날, 전공수업을 들으러 갔다. 동아리활동에만 매진하여 과활동은 많이 소홀했지만, \n\n이제 내가 기댈곳은 과뿐이다.\n\n그래, 무슨 동아리인가. 과 활동이나 열심히 해서 발이나 넓히자.\n\n물론 교훈도 얻었겠다, 부담스럽지 않은 복학생 선배가 되야겠다고 다짐했다.\n\n전공수업은 건물 3층이었다. 복도를 지나가는데 어떤 학생과 나도 모르게 어깨가 부딪쳤다.\n\n“엇, 죄송합니다.”\n\n그 학생이 말했다. 딱봐도 신입생이었따. 내가 이런거 구별해내는 능력은 최고인 것 같다.\n\n“아니에요 저도 죄송합니다~ ^^”\n\n나는 웃는 낯으로 그 신입생을 대했다. 오늘은 내가 새로 태어나는 날이다. 나는 바뀌었다.\n\n“여기서 수업 들으시나봐요? ^^” \n\n웃는낯으로 신입생들과 말을섞는 방법또한 연습하면 좋겠지 ㅎㅎ\n\n“아 예.. 혹시 중문학과세요?” 신입생이 물었다. 내가 중문학과인건 어떻게 알았지?\n\n“아 예.. 어떻게 아셨어요?”\n\n“아 작년에 층별 수업구역 개편해서 이층에서 수업들으시는 사람들은 모두 저희과에요!”\n\n“아 그렇구나, 그럼 혹시 그쪽도 중문학과?”\n\n“아 예! 반가워요 선배님!”\n\n하하, 이런 우연이.. 과생활을 해보려는 찰나에 구역도 개편되고 새내기도 만나고..\n\n“아 그러시구나..근데..”\n\n후후 웃으면서 나는 머리를 쓸어올렸다. 나는 참 운이 좋다. 그리고 그녀석의 눈을 똑바로 쳐다보았다.\n\n“애초에 왜 선배를 봤는데 인사를 안했어요? 부딪치기전에 저 봤을거 아냐?”\n\n“에..?” 녀석은 어리버리 깐다.\n\n이것들 안되겠다.. 기본도 안되있잖아?\n\n\n-- 출처 :http://todayhumor.com/?bestofbest_181741</p>\n</content>
    

    compare target: Google docs, linkedIn, medium

    • Google docs: after paste, typing is slow
    • Medium: Freezed
    • Linked-In: Crash
    • VEditorKit: after paste, typing is slow I guess, It's UITextView Performance Issue
    bug 
    opened by GeekTree0101 0
Releases(1.4.5)
  • 1.4.5(Apr 16, 2019)

  • 1.4.4(Apr 15, 2019)

  • 1.4.3(Apr 12, 2019)

    Hot Fix v1.4.3

    Change made & impact:

    • remove synchronizeFetchContent completion callback and support stack frame lock (Geektree0101)
    • activeTextContainCellNode should be weak referrence (Geektree0101)
    • create a removeUnusedInternalASTableCellViewIfNeeds method, check unused (Geektree0101)
    • InternalASTableCellView(_ASTableCellView) during scroll. (Geektree0101)
    • Move textEmptiedRelay from editableTextNodeDidUpdateText to shouldChangeTextIn (OhKanghoon)
    Source code(tar.gz)
    Source code(zip)
  • 1.4.2(Mar 15, 2019)

    Hot Fix v1.4.2

    • Fix zombie issue
    • Refactoring remove media & merge text containers
    • Make a logic about update attribute control status based on current location
    • Support reduce duplicated xml keys
    Source code(tar.gz)
    Source code(zip)
  • 1.4.1(Mar 4, 2019)

  • 1.4.0(Feb 19, 2019)

  • 1.3.8(Feb 11, 2019)

    VEditorKit v1.3.8

    • Change Merge Logic (Node1 + Node2 => Node1) (OhKanghoon) #47
    • Lower node is merged into the upper node (OhKanghoon) #47
    • Sometimes scrollToCursor: calculate invalid visibleRect with table content size height (Geektree0101) #48
    • Fix NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid index crash (Geektree0101) #50
    • deleteUnnecessaryEditableTextIfNeeds:, blocking remove last text node (Geektree0101) #51
    • Empty Text View Caret size is too small & unmatched with default typing paragraph lineheight (Geektree0101) #52
    • Reset selectedRange length with sustain location before resign first responder about activted textView (Geektree0101) #53
    Source code(tar.gz)
    Source code(zip)
  • 1.3.7(Jan 30, 2019)

    Hot Fix v1.3.7

    • Fixed wrong spelling local variable (videoLayout) @GeekTree0101
    • Optimization reduce separate logic on mediaNode @GeekTree0101
    • Change Merge Logic on VEditorNode (Node1 + Node2 => Node1) @OhKanghoon
    • Lower node is merged into the upper node on VEditorNode @OhKanghoon
    Source code(tar.gz)
    Source code(zip)
  • 1.3.6(Jan 28, 2019)

  • 1.3.5(Jan 22, 2019)

    Hot Fix v1.3.5

    • I don't know that how to solve cannot find interface declaration for superclass of.... during test building
    • rollback to v1.3.4
    Source code(tar.gz)
    Source code(zip)
  • 1.3.4(Jan 22, 2019)

  • 1.3.3(Jan 22, 2019)

  • 1.3.2(Jan 22, 2019)

  • 1.3.1(Jan 21, 2019)

  • 1.3.0(Jan 20, 2019)

  • 1.2.9(Jan 18, 2019)

  • 1.2.8(Jan 18, 2019)

  • 1.2.7(Jan 17, 2019)

  • 1.2.6(Jan 17, 2019)

  • 1.2.5(Jan 16, 2019)

  • 1.2.4(Jan 16, 2019)

  • 1.2.3(Jan 16, 2019)

  • 1.2.2(Jan 16, 2019)

  • 1.2.1(Jan 15, 2019)

    v1.2.1 Hot Fix

    • Support safe area insets for controlAreaLayout & separate layoutSpec
    • KeyboardHeight property access level turn to open from private
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Jan 13, 2019)

    Why need this change?:

    • Sometimes VEditorTextCellNode occurs unexpected bounds after first render
    • To make VEditorMediaNode<TargetNode: ASControlNode> subclass isn't good
    • EditorDeleteMediaNode isn't good expend
    • When TargetNode has layoutSpec than occur duplicate layoutSpec crash

    Change made & impact:

    • Check ASEditableTextNode.mm setAttributedString
    • required init convert to init
    • Optimize VEditorDeleteMediaNode properties
    • Support mediaContentLayoutSpec
    • Support convenience xml to NSAttributedString parser with editor rule
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Jan 11, 2019)

  • 1.0.0(Jan 10, 2019)

Owner
David Ha
Karrot iOS Developer
David Ha
Fully open source text editor for iOS written in Swift.

Edhita Fully open source text editor for iOS written in Swift. http://edhita.bornneet.com/ What Edhita means? Edhita (Romaji) == エディタ (Katakana) == Ed

Tatsuya Tobioka 1.2k Jan 1, 2023
Notepad - A fully themeable iOS markdown editor with live syntax highlighting.

Notepad is just like any other UITextView, but you need to use the convenience initializer in order to use the themes. To create a new theme, copy one of the existing themes and edit the JSON.

Rudd Fawcett 802 Dec 31, 2022
A standalone, flexible API that provides a full-featured rich text editor for iOS applications.

Twitter Text Editor A standalone, flexible API that provides a full featured rich text editor for iOS applications. This provides a robust text attrib

Twitter 2.8k Dec 29, 2022
A lightning fast, native SwiftUI scratchpad/text editor.

Sedit A lightning fast, native SwiftUI scratchpad/text editor. Sedit (Swift Edit, as in the language and as in fast) is a lightning fast basic text ed

null 5 Jan 28, 2022
A rich-text editor for iOS

DTRichTextEditor This project aims to provide a replacement for Apple's severely limited UITextView and to allow for editing attributed strings. It co

Cocoanetics 346 Oct 8, 2022
A beautiful rich text WYSIWYG editor for iOS with a syntax highlighted source view

ZSSRichTextEditor The Editor ZSSRichTextEditor is a beautiful Rich Text WYSIWYG Editor for iOS. It includes all of the standard editor tools one would

Nic Hubbard 3.7k Dec 31, 2022
More powerful label, attributed string builder and text parser.

DDText More powerful label, attributed string builder and text parser. DDLabel More powerful label than UILabel, using TextKit. It supports features b

Daniel 16 Nov 8, 2022
Powerful text framework for iOS to display and edit rich text.

YYText Powerful text framework for iOS to display and edit rich text. (It's a component of YYKit) Features UILabel and UITextView API compatible High

null 8.8k Jan 4, 2023
CodeMirror-Swift is a lightweight wrapper of CodeMirror for macOS and iOS

CodeMirror-Swift is a lightweight wrapper of CodeMirror for macOS and iOS. Features ?? Lightweight CodeMirror wrapper (build 5.52.2) ✅ 100% Native Swi

Proxyman 86 Dec 30, 2022
A comprehensive, lightweight string extension for Swift

SwiftString SwiftString is a lightweight string extension for Swift. This library was motivated by having to search StackOverflow for common string op

Andrew Mayne 1.6k Dec 30, 2022
SZMentionsSwift is a lightweight mentions library for iOS.

SZMentionsSwift is a lightweight mentions library for iOS. This library was built to assist with the adding, removing and editing of a mention within a textview.

Steven Zweier 122 Dec 12, 2022
🎗 Super lightweight ISO8601 Date Formatter in Swift

ISO8601 ❤️ Support my apps ❤️ Push Hero - pure Swift native macOS application to test push notifications PastePal - Pasteboard, note and shortcut mana

Khoa 19 May 12, 2020
Lightweight library to set an Image as text background. Written in swift.

![](https://img.shields.io/badge/Swift 2-compatible-4BC51D.svg?style=flat-square) Simple and light weight UIView that animate text with an image. Demo

Lucas Ortis 552 Sep 9, 2022
A lightweight fuzzy-search library, with zero dependencies

Fuse What is Fuse? Fuse is a super lightweight library which provides a simple way to do fuzzy searching. Usage Example 1 let fuse = Fuse() let result

Kiro Risk 864 Dec 29, 2022
Blazing fast Markdown / CommonMark rendering in Swift, built upon cmark.

Down Blazing fast Markdown (CommonMark) rendering in Swift, built upon cmark v0.29.0. Is your app using it? Let us know! If you're looking for iwasrob

John Nguyen 2k Dec 19, 2022
Markdown parsing and rendering for iOS and OS X

CocoaMarkdown Markdown parsing and rendering for iOS and macOS CocoaMarkdown is a cross-platform framework for parsing and rendering Markdown, built o

Indragie Karunaratne 1.2k Dec 12, 2022
Easiest way to create an attributed UITextView (with support for multiple links and from html)

AttributedTextView Easiest way to create an attributed UITextView (with support for multiple links and html). See the demo app and the playground for

Edwin Vermeer 430 Nov 24, 2022
A simple and customizable Markdown Parser for Swift

MarkdownKit MarkdownKit is a customizable and extensible Markdown parser for iOS and macOS. It supports many of the standard Markdown elements through

Bruno Oliveira 687 Dec 18, 2022
MarkdownView is a WKWebView based UI element, and internally use bootstrap, highlight.js, markdown-it.

MarkdownView is a WKWebView based UI element, and internally use bootstrap, highlight.js, markdown-it.

Keita Oouchi 1.8k Dec 21, 2022