{"id":16101683,"url":"https://github.com/ice1000/text-sequence","last_synced_at":"2025-03-18T07:31:36.046Z","repository":{"id":95486372,"uuid":"138075793","full_name":"ice1000/text-sequence","owner":"ice1000","description":"Text sequence data structures","archived":false,"fork":false,"pushed_at":"2020-05-08T10:03:55.000Z","size":144,"stargazers_count":15,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-28T08:17:34.781Z","etag":null,"topics":["data-structure","java"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ice1000.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-20T19:16:14.000Z","updated_at":"2022-04-28T11:29:59.000Z","dependencies_parsed_at":"2023-03-26T00:08:02.909Z","dependency_job_id":null,"html_url":"https://github.com/ice1000/text-sequence","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ice1000%2Ftext-sequence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ice1000%2Ftext-sequence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ice1000%2Ftext-sequence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ice1000%2Ftext-sequence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ice1000","download_url":"https://codeload.github.com/ice1000/text-sequence/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243910814,"owners_count":20367545,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-structure","java"],"created_at":"2024-10-09T18:50:40.245Z","updated_at":"2025-03-18T07:31:36.033Z","avatar_url":"https://github.com/ice1000.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Text Sequence\n\n[Read this paper][paper0]\n\nWindows|Linux|Coverage|Bintray\n :---: |:---:| :---:  | :---:\n[![][w-l]][w-i]|[![][l-l]][l-i]|[![][c-i]][c-l]|[![][b-i]][b-l]\n\n  [paper0]: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.48.1265\u0026rep=rep1\u0026type=pdf\n  [w-l]: https://ci.appveyor.com/api/projects/status/rfk89093smhsv5rf?svg=true\n  [w-i]: https://ci.appveyor.com/project/ice1000/text-sequence\n  [l-l]: https://circleci.com/gh/ice1000/text-sequence.svg?style=svg\n  [l-i]: https://circleci.com/gh/ice1000/text-sequence\n  [c-l]: https://codecov.io/gh/ice1000/text-sequence\n  [c-i]: https://codecov.io/gh/ice1000/text-sequence/branch/master/graph/badge.svg\n  [b-l]: https://bintray.com/ice1000/ice1000/textseq\n  [b-i]: https://img.shields.io/bintray/v/ice1000/ice1000/textseq.svg\n\n# Architecture\n\n+ Interface class `org.ice1000.textseq.TextSequence` in common\n+ Trivial implementations in common\n+ Implementations in their own subproject\n+ Standalone `GapList\u003cT\u003e` (with no dependencies) that uses a gap buffer to maintain elements, which is more efficient than `ArrayList\u003cT\u003e`.\n  + C++ version (C++17 with dependency on `cstddef`, `cassert` and `cstring`)\n\n# Build\n\n```groovy\nrepositories { jcenter() }\ndependencies {\n  String textseq_version = \"v0.3\"\n  compile \"org.ice1000.textseq:gap-list:$textseq_version\" // standalone GapList impl\n  compile \"org.ice1000.textseq:common:$textseq_version\" // common + trivial impl\n  compile \"org.ice1000.textseq:impl-builder:$textseq_version\" // array method, depends on common\n  compile \"org.ice1000.textseq:impl-gap:$textseq_version\" // gap method, depends on common\n  compile \"org.ice1000.textseq:impl-line:$textseq_version\" // line span method, depends on impl-gap\n}\n```\n\n# Progress\n\n+ [X] Trivial implementations (using `ArrayList`, `LinkedList`), say, **the linked list method**\n+ [X] `StringBuilderTextSequence` implementation, say, **the array method**, [DevKt][devkt]\n+ [X] `GapBuffer` implementation, say, **the gap method**, [Emacs][emacs], [Scintilla][scintilla], [Java Swing][swing]\n+ [X] `LineSpan` implementation, say, **the line span method**, [Hemlock][hemlock]\n  + The active line is a gap buffer, other lines are simple string, discussed in [this paper][paper1]\n+ [ ] `FixedSizeBuffer` implementation, say, **fixed size buffer**\n+ [ ] `PieceTable` implementation, say, **the piece table method**, [VSCode][code], [AbiWord][abiw]\n+ [ ] `Rope` (aka Balanced Tree), [Vim][vim]\n\n  [devkt]: https://github.com/ice1000/dev-kt\n  [emacs]: https://www.gnu.org/software/emacs/\n  [scintilla]: https://www.scintilla.org/\n  [swing]: https://docs.oracle.com/javase/7/docs/api/javax/swing/text/GapContent.html\n  [hemlock]: https://www.cons.org/cmucl/hemlock/\n  [code]: https://code.visualstudio.com/\n  [abiw]: https://www.abisource.com/\n  [vim]: https://www.vim.org/\n  [paper1]: https://www.common-lisp.net/project/flexichain/download/StrandhVilleneuveMoore.pdf\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fice1000%2Ftext-sequence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fice1000%2Ftext-sequence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fice1000%2Ftext-sequence/lists"}