{"id":23139228,"url":"https://github.com/lukanedimovic/table_editor","last_synced_at":"2025-04-04T10:12:07.859Z","repository":{"id":240181342,"uuid":"801891627","full_name":"LukaNedimovic/table_editor","owner":"LukaNedimovic","description":"A simple table data editor, with easily scalable functions and operations \u0026 a nice GUI","archived":false,"fork":false,"pushed_at":"2024-05-27T19:35:27.000Z","size":322,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-09T20:34:32.580Z","etag":null,"topics":["data","data-science","formula","java","parser","parsing","preprocessing","swing","tokenizer"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LukaNedimovic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-17T05:54:13.000Z","updated_at":"2024-12-01T00:25:30.000Z","dependencies_parsed_at":"2024-05-27T22:50:17.350Z","dependency_job_id":"2e91b52b-8a20-406e-bf37-8732b13b35b6","html_url":"https://github.com/LukaNedimovic/table_editor","commit_stats":null,"previous_names":["lukanedimovic/table_editor"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaNedimovic%2Ftable_editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaNedimovic%2Ftable_editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaNedimovic%2Ftable_editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LukaNedimovic%2Ftable_editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LukaNedimovic","download_url":"https://codeload.github.com/LukaNedimovic/table_editor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247157287,"owners_count":20893221,"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","data-science","formula","java","parser","parsing","preprocessing","swing","tokenizer"],"created_at":"2024-12-17T13:13:28.246Z","updated_at":"2025-04-04T10:12:07.832Z","avatar_url":"https://github.com/LukaNedimovic.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e📝 Table Editor\u003c/h1\u003e\n\n\u003cb\u003eTable Editor\u003c/b\u003e is an easily scalable strongly typed editor for tabular data, supporting custom easy-to-add functions and operations and an extensible custom written parser, followed by a neat and intuitive GUI.\u003cbr/\u003e\nDate of creation: \u003cb\u003eMay, 2024\u003c/b\u003e. \u003cbr/\u003e\n\n\nHere for the updates? Check them out down below @ \u003cb\u003e🔥 Latest Modifications\u003c/b\u003e\n\n\u003ch2\u003e 🚀 Quick Start \u003c/h2\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e can be compiled and ran using provided \u003cb\u003egradlew\u003c/b\u003e:\n\u003cpre\u003e\n\u003ccode\u003egit clone https://github.com/LukaNedimovic/table_editor.git\ncd table_editor\n./gradlew compileJava run\u003c/code\u003e\n\u003c/pre\u003e\n\n\u003ch2\u003e 🛠️ Basic Features \u003c/h2\u003e\n\u003col start=\"0\"\u003e\n  \u003cli\u003e\u003cb\u003e \u003ccode\u003eData Types\u003c/code\u003e \u003c/b\u003e\n  \u003col\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eDTypeDouble\u003c/code\u003e \u003c/b\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eDTypeInteger\u003c/code\u003e \u003c/b\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eDTypeBoolean\u003c/code\u003e \u003c/b\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eDTypeString\u003c/code\u003e \u003c/b\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eDTypeArray\u003c/code\u003e \u003c/b\u003e \u003c/li\u003e\n    \u003c/ol\u003e\n  \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eConstant values\u003c/code\u003e \u003c/b\u003e \n    \u003col\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eNumerical values\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003e2.5\u003c/code\u003e, \u003ccode\u003e0.09\u003c/code\u003e, \u003ccode\u003e3.14\u003c/code\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eString values\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003e\"apple\"\u003c/code\u003e, \u003ccode\u003e\"this is not a function\"\u003c/code\u003e.\u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e \u003ccode\u003eBoolean values\u003c/code\u003e \u003c/b\u003e -  i.e. \u003ccode\u003eTrue\u003c/code\u003e and \u003ccode\u003eFalse\u003c/code\u003e.\u003c/li\u003e\n    \u003c/ol\u003e\n\n  \u003cli\u003e \u003cb\u003e \u003ccode\u003eCell References\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003eB2\u003c/code\u003e, \u003ccode\u003eB2:D4\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e \u003ccode\u003ePrecedence\u003c/code\u003e \u003c/b\u003e      - i.e. every operation and function has defined precedence and it is flexible to change.\n  \u003cli\u003e \u003cb\u003e \u003ccode\u003eParentheses\u003c/code\u003e \u003c/b\u003e     - i.e. \u003ccode\u003e(\u003c/code\u003e and \u003ccode\u003e)\u003c/code\u003e, with nesting \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e \u003ccode\u003eOperations\u003c/code\u003e \u003c/b\u003e \n    \u003col\u003e\n      \u003cli\u003e \u003cb\u003e\u003ccode\u003eUnary Operations\u003c/code\u003e\u003c/b\u003e - e.g. \u003ccode\u003e+ (identity)\u003c/code\u003e, \u003ccode\u003e- (negation).\u003c/code\u003e Only prefix operations, as of now. \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e\u003ccode\u003eBinary Operations\u003c/code\u003e\u003c/b\u003e - e.g. \u003ccode\u003e+ (addition)\u003c/code\u003e, \u003ccode\u003e- (subtraction)\u003c/code\u003e, \u003ccode\u003e* (multiplication)\u003c/code\u003e, \u003ccode\u003e/ (division)\u003c/code\u003e, \u003ccode\u003e^ (exponentiation)\u003c/code\u003e, \u003cbr/\u003e \u003ccode\u003e% (modulo)\u003c/code\u003e, \u003ccode\u003e\u003c (less than)\u003c/code\u003e, \u003ccode\u003e\u003e (greater than)\u003c/code\u003e \u003c/li\u003e\n    \u003c/ol\u003e\n  \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eNamed (Strongly Typed) Functions\u003c/code\u003e\u003c/b\u003e \n    \u003col\u003e\n      \u003cli\u003e \u003cb\u003e\u003ccode\u003eNullary Functions\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003ee()\u003c/code\u003e, \u003ccode\u003epi()\u003c/code\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e\u003ccode\u003eUnary Functions\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003esqrt(x)\u003c/code\u003e, \u003ccode\u003eabs(x)\u003c/code\u003e \u003c/li\u003e\n      \u003cli\u003e \u003cb\u003e\u003ccode\u003eBinary Functions\u003c/code\u003e \u003c/b\u003e - e.g. \u003ccode\u003epow(x, y)\u003c/code\u003e, \u003ccode\u003egcd(x, y)\u003c/code\u003e, \u003ccode\u003elcm(x, y)\u003c/code\u003e, \u003ccode\u003emin(x, y)\u003c/code\u003e, \u003ccode\u003emax(x, y)\u003c/code\u003e, \u003ccode\u003eifeq(x, y)\u003c/code\u003e\u003c/li\u003e\n    \u003c/ol\u003e\n  \u003c/li\u003e\n\u003c/ol\u003e\n\n\u003ch2\u003e 🔍 Complex Features \u003c/h2\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e was created with \u003cb\u003eflexibility\u003c/b\u003e in mind, with minimalistic (but clean!) UI to guide the user through. \u003cbr/\u003e\nEven though it is a small project, there are some cool features, such as:\n\u003cul\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eNew operations\u003c/code\u003e\u003c/b\u003e - Table Editor provides you with tokenizer \u0026 parser that are not restricted to the aforementioned operations. It is easy to add new operations (both unary and binary), and define their functionality within just a few lines of code. \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eNew (strongly typed) functions\u003c/code\u003e\u003c/b\u003e - Functions are also very simple to add - interface created lets you create functions with any number of arguments, accepting anything as their arguments and having as complex functionality as you wish. \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eScalability\u003c/code\u003e\u003c/b\u003e - Table Editor provides scalable code that can generalize onto various datatypes within the table. Functions provided are oriented towards \u003ccode\u003eDouble\u003c/code\u003e data type (i.e. custom-defined \u003ccode\u003eDTypeDouble\u003c/code\u003e), however one can add various functions and even extend singular function to be capable of accepting different kinds of operators and return different types. \u003c/li\u003e\n  \u003cli\u003e \u003cb\u003e\u003ccode\u003eEvent handlers\u003c/code\u003e\u003c/b\u003e - One-click row and column selection can be scaled into something greater. \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003e💡 Examples \u003c/h2\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003eExpression\u003c/td\u003e\n  \u003ctd\u003eEvaluation\u003c/td\u003e\n  \u003ctd\u003eComment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=sqrt(abs(-16))\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e4\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e Function nesting is possible. \u003c/td\u003e\n\u003c/tr\u003e  \n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=pow(max(1++1, ---1000), 3)\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e8\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e Same unary / binary operations can be concatenated. \u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=pow(min(B1^2, abs(-1000)), 3.0)\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e64.0\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e For cell value \u003ccode\u003eB1 = 4\u003c/code\u003e. Casting from \u003ccode\u003eDTypeInteger\u003c/code\u003e to \u003ccode\u003eDTypeDouble\u003c/code\u003e is implemented.\u003c/td\u003e\n\u003c/tr\u003e\n\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=5 + e() - pi()^2\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e-2.1513225726303133\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e Nullary functions can used for constants, and are treated as numerical values \u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=ifeq(pow(5, 2), 25)\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003eTrue\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003epow(5, 2)\u003c/code\u003e returns \u003ccode\u003e25\u003c/code\u003e, which is the same as \u003ccode\u003e25\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=ifeq(2 \u003c 10, 1.0)\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003eFalse\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e2 \u003c 10\u003c/code\u003e evaluates to \u003ccode\u003eTrue\u003c/code\u003e, which can't be compared with \u003ccode\u003eDTypeDouble(1.0)\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=(\"abc\" \u003c \"dddd\") + 10\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e11\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e(\"abc\" \u003c \"dddd\")\u003c/code\u003e evaluates to \u003ccode\u003eTrue\u003c/code\u003e, which can be added to the \u003ccode\u003eDTypeInteger(10)\u003c/code\u003e to get \u003ccode\u003e11\u003c/code\u003e!\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=ifeq(\"w\" * 3 + \"123\", \"www123\") * 5\u003c/code\u003e\u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e5\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e String concatenation and repetition of N times is supported, too! \n\u003cpre\u003e\n\u003ccode\u003e=ifeq(\"w\" * 3 + \"123\", \"www123\") * 5   \n=ifeq(\"www\" + \"123\", \"www123\") * 5\n=ifeq(\"www123\", \"www123\") * 5\n=True * 5\n=5\u003c/code\u003e\n\u003c/pre\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=sum([1, 2, 3, 4])\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e10\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e Functions with variable length of arguments are supported!\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n  \u003ctd\u003e \u003ccode\u003e=average(A1:B2)\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \u003ccode\u003e2.5\u003c/code\u003e \u003c/td\u003e\n  \u003ctd\u003e \n    For table:\n    \u003ctable style=\"text-align: center\"\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e \u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eB\u003c/code\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e1\u003c/td\u003e\n          \u003ctd\u003e2\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e2\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e3\u003c/td\u003e\n          \u003ctd\u003e4\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/table\u003e\n    \u003ccode\u003eA1:B2\u003c/code\u003e returns a \u003ccode\u003eDTypeArray([[1, 2], [3, 4]])\u003c/code\u003e, which is then evaluated to get the result \u003ccode\u003eDTypeDouble(2.5)\u003c/code\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ch2\u003e 🔥 Latest Modifications \u003c/h2\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e now supports DTypeArray parsing and, therefore, functions whose arguments are of variable length. \u003cbr/\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e now supports \u003cb\u003eCell Range References\u003c/b\u003e! \u003cbr/\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e now supports \u003ccode\u003eDTypeArray\u003c/code\u003e - used for manipulation of \u003ccode\u003eDType\u003c/code\u003e data stored within a multi-dimensional array.\u003cbr/\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e is now \u003cb\u003efully typed\u003c/b\u003e! Functions accept typed parameters, and don't do conversions (as they did in the past). \u003cbr/\u003e\n\u003cb\u003eTests\u003c/b\u003e have been added for operations (type-wise combinations), functions, and general expressions! Make sure to check them out:\n\u003cpre\u003e\u003ccode\u003e./gradlew test\u003c/code\u003e\u003c/pre\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e now supports \u003ccode\u003eDTypeString\u003c/code\u003e - used for manipulation of String literals! \u003cbr/\u003e\n\u003cb\u003eTable Editor\u003c/b\u003e now supports \u003ccode\u003eDTypeBoolean\u003c/code\u003e - used for manipulation of Boolean values (\u003ccode\u003eTrue\u003c/code\u003e / \u003ccode\u003eFalse\u003c/code\u003e)!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukanedimovic%2Ftable_editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukanedimovic%2Ftable_editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukanedimovic%2Ftable_editor/lists"}