{"id":24381864,"url":"https://github.com/xeverous/filter_spirit","last_synced_at":"2025-04-11T00:06:41.514Z","repository":{"id":136061555,"uuid":"164753775","full_name":"Xeverous/filter_spirit","owner":"Xeverous","description":"Advanced item filter generator for Path of Exile that uses it's own DSL and online item price APIs","archived":false,"fork":false,"pushed_at":"2024-08-17T14:39:42.000Z","size":10320,"stargazers_count":36,"open_issues_count":5,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-11T00:06:35.017Z","etag":null,"topics":["cpp","cpp17","parser-generator","pathofexile"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Xeverous.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2019-01-09T00:06:31.000Z","updated_at":"2024-08-17T14:39:45.000Z","dependencies_parsed_at":"2023-12-08T17:28:30.922Z","dependency_job_id":"f95117a4-5ab2-48b8-a2cd-7f27d8a6ac08","html_url":"https://github.com/Xeverous/filter_spirit","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xeverous%2Ffilter_spirit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xeverous%2Ffilter_spirit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xeverous%2Ffilter_spirit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Xeverous%2Ffilter_spirit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Xeverous","download_url":"https://codeload.github.com/Xeverous/filter_spirit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248317707,"owners_count":21083528,"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":["cpp","cpp17","parser-generator","pathofexile"],"created_at":"2025-01-19T09:13:44.886Z","updated_at":"2025-04-11T00:06:41.494Z","avatar_url":"https://github.com/Xeverous.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Filter Spirit\n\nAdvanced item filter generator for Path of Exile that uses it's own [DSL](https://en.wikipedia.org/wiki/Domain-specific_language) and online item price APIs. Basically an enhanced filter language that lets you write item filters with more convenience and using item price data from poe.ninja or poe.watch available at generation time. Create multiple filter variants and refresh whenever you want to always be up to date with market prices.\n\nIf you ever worked with web stuff - a perfect analogy is that Filter Spirit is the same for real filters as are LESS and Sass for CSS.\n\n## news\n\n**Crucible (3.21) update released** - [DOWNLOAD HERE](https://github.com/Xeverous/filter_spirit/releases). No update needed for **Trial of the Ancestors (3.22)** - no changes in the program, only within filter templates.\n\nAs of now, the tool supports all possible conditions and actions except few corner cases which are described in `doc/known_issues`.\n\nMessage me ([/u/Xeverous](https://old.reddit.com/user/Xeverous/) on reddit or Xeverous#2151 on Discord) if you are interested in it or have any questions/suggestions/whatever. You can also open an issue.\n\nI'm currently focused on a different project so generally FS has low priority. This can change if you contact me though.\n\n___\n\npoe.watch is dead - only poe.ninja generation will work. Original author passed the project to someone else and the website is being revived on [stats.mrk.xyz](https://stats.mrk.xyz).\n\n___\n\nPlans for the future:\n\n- poe.watch support\n- support for cluster jewel pricing in filter template code\n- Visual Studio Code plugin that uses FS in the background\n- UI overhaul\n- WASM-compiled build, hosted on a static GitHub Pages website (some work already in progress, JavaScript help needed)\n\nPlease contact me if you are familiar with web-related technologies and would like to help in making these.\n\n## overview\n\nCore features:\n\n- **Generation-time error checking**. FS has own parser and compiler that performs semantic analysis - it is not a blind text-copy-paste script.\n- **Language features dedicated to elimination of filter code duplication**:\n  - **named constants**: `$red = 255 0 0`\n  - **named style groups**: `$x = { SetFontSize 42 SetTextColor $black }`\n  - **nesting of filter blocks** to inherit conditions and override actions\n- **querying item prices**: `Autogen cards Price \u003e 50` pulls data from API to list div cards worth 50+ chaos at generation time. Refresh whenever you want - your filter is always up-to-date with market prices.\n- **Support for filter variants** - selectively enable/disable certain blocks based on a variable to generate multiple filters with different flavours from a single source file.\n- **Filter debugger \u0026 loot preview** - find matching blocks and preview randomly generated loot from specific game encounters. **You can debug both real filters and FS filter templates.**\n\nUI screens (might be slightly dated):\n\n![image](https://user-images.githubusercontent.com/20820409/99323133-d121c980-2871-11eb-843c-fe995abce24d.png)\n![image](https://user-images.githubusercontent.com/20820409/102475151-d1bca400-4059-11eb-9028-110dd1d58ebf.png)\n\nPlanned features:\n\n- Live edit mode - see generared code as you write.\n\n## example filter template code\n\nThere is a full example filter template source in the repository. You can also browse `src/test/compiler/filter_generation_tests.cpp` for even more examples.\n\n```\n$color_white  = 255 255 255 255\n$color_hammer = 162  85   0 # (will use default opacity)\n\nBaseType \"Gavel\" \"Stone Hammer\" \"Rock Breaker\" {\n\tSetTextColor $color_white\n\tSetBackgroundColor $color_hammer\n\t# above BaseType conditon will be inherited by all nested blocks\n\t# above actions will be inherited and can be overriden by nested blocks\n\n\tRarity Normal {\n\t\tShow # show normal hammers\n\t}\n\n\tRarity Magic\n\tQuality \u003e= 12 {\n\t\tShow # show magic hammers with 12+ quality\n\t}\n\n\tRarity Rare\n\tQuality \u003e= 16 {\n\t\tShow # show rare hammers with 16+ quality\n\t}\n\n\t# hide any other hammers (actually discouraged as you might lose\n\t# RGB recipe material for later blocks - better don't write this Hide)\n\tHide\n}\n\nClass \"Divination Card\" {\n\tSetTextColor $color_divination\n\n\t# cards that you always want to pickup\n\tBaseType \"The Void\" \"The Cartographer\" \"Chaotic Disposition\" {\n\t\tSetAlertSound $alert_divination_stack_1\n\t\tPlayEffect $effect_divination\n\t\tShow\n\t}\n\n\tAutogen cards {\n\t\tPrice \u003e= 100 {\n\t\t\tSetTextColor $color_black\n\t\t\tSetBorderColor $color_divination\n\t\t\tSetBackgroundColor $color_divination\n\t\t\tSetFontSize $font_max\n\t\t\tSetAlertSound $alert_divination_best\n\t\t\tPlayEffect $effect_divination\n\t\t\tMinimapIcon 0 Blue Square\n\t\t\tShow\n\t\t}\n\n\t\tPrice \u003c 100\n\t\tPrice \u003e= 10 {\n\t\t\tSetBorderColor $color_divination\n\t\t\tSetFontSize $font_mid_divinaton\n\t\t\tSetAlertSound $alert_divination_mid\n\t\t\tPlayEffect $effect_divination\n\t\t\tMinimapIcon 1 Blue Square\n\t\t\tShow\n\t\t}\n\t}\n\n\t# if you really hate these cards\n\tBaseType \"Rain of Chaos\" \"Carrion Crow\" {\n\t\tHide\n\t}\n\n\t# any other cards\n\tShow\n}\n```\n\n## documentation and tutorial\n\nBrowse `doc` directory. Files are in Markdown so you can read them online on GitHub.\n\n## program interface\n\nGraphic interface - just run `filter_spirit_gui`.\n\nCommand-line interface: on Windows, you can quickly open command line in desired directory by typing \"cmd\" in the file explorer's path - see https://stackoverflow.com/a/10135218/4818802. Do this in FS directory (where `filter_spirit_cli.exe` is) and you can instantly use the program, eg `filter_spirit_cli --help`.\n\n## runtime dependencies\n\nFS does not need to install anything (it's fully portable). You can download latest release and immediately use the program. The program never writes anything to system directories.\n\n## building and dependencies\n\nSee documentation directory.\n\nModern CMake build script. All dependencies are exposed as targets. See comments inside the build recipe for more information.\n\n```\nmkdir build\ncd build\ncmake .. -DCMAKE_BUILD_TYPE=Release [your_options...]\nmake -j\n```\n\nIf you are using `make` don't forget to add `-j` (parallel jobs) to add *100% increased build speed per additional core*.\n\n## licensing\n\nLICENSE file in the main directory of the repository applies to any file, unless otherwise specified.\n\nContact me if you are interested in work on or using this project but got any concerns in regards to usage or licensing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxeverous%2Ffilter_spirit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxeverous%2Ffilter_spirit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxeverous%2Ffilter_spirit/lists"}