All Projects → Xeverous → filter_spirit

Xeverous / filter_spirit

Licence: GPL-3.0 license
Advanced item filter generator for Path of Exile that uses it's own DSL and online item price APIs

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to filter spirit

Pegparser
💡 Build your own programming language! A C++17 PEG parser generator supporting parser combination, memoization, left-recursion and context-dependent grammars.
Stars: ✭ 164 (+485.71%)
Mutual labels:  parser-generator
PoeSmootherModCN
中文版本PoeSmoother,带MOD特效替换功能
Stars: ✭ 18 (-35.71%)
Mutual labels:  pathofexile
lalr
Modern LALR(1) parser for C++
Stars: ✭ 56 (+100%)
Mutual labels:  parser-generator
Tatsu
竜 TatSu generates Python parsers from grammars in a variation of EBNF
Stars: ✭ 198 (+607.14%)
Mutual labels:  parser-generator
tree-sitter-cli
CLI tool for creating and testing tree-sitter parsers
Stars: ✭ 43 (+53.57%)
Mutual labels:  parser-generator
lilt
LILT: noun, A characteristic rising and falling of the voice when speaking; a pleasant gentle accent.
Stars: ✭ 18 (-35.71%)
Mutual labels:  parser-generator
Ecsharp
Home of LoycCore, the LES language of Loyc trees, the Enhanced C# parser, the LeMP macro preprocessor, and the LLLPG parser generator.
Stars: ✭ 141 (+403.57%)
Mutual labels:  parser-generator
parsesig
A Telegram bot that forwards messages from one private/public channel to another after formatting
Stars: ✭ 40 (+42.86%)
Mutual labels:  parser-generator
nearley-playground
⛹ Write Grammars for the Nearley Parser!
Stars: ✭ 76 (+171.43%)
Mutual labels:  parser-generator
DirectFire Converter
DirectFire Firewall Converter - Network Security, Next-Generation Firewall Configuration Conversion, Firewall Syntax Translation and Firewall Migration Tool - supports Cisco ASA, Fortinet FortiGate (FortiOS), Juniper SRX (JunOS), SSG / Netscreen (ScreenOS) and WatchGuard (support for further devices in development). Similar to FortiConverter, Sm…
Stars: ✭ 34 (+21.43%)
Mutual labels:  parser-generator
dropincc.java
A small and easy to use parser generator. Specify your grammar in pure java and compile dynamically. Especially suitable for DSL creation in java.
Stars: ✭ 90 (+221.43%)
Mutual labels:  parser-generator
kiuatan
A parser library for Pony.
Stars: ✭ 15 (-46.43%)
Mutual labels:  parser-generator
abnf parsec
ABNF in, parser out
Stars: ✭ 42 (+50%)
Mutual labels:  parser-generator
Reduce.jl
Symbolic parser generator for Julia language expressions using REDUCE algebra term rewriter
Stars: ✭ 172 (+514.29%)
Mutual labels:  parser-generator
poe-currency-flip-planner
This tool is an attempt at planning short-term arbitrage deals of currency in Path of Exile.
Stars: ✭ 95 (+239.29%)
Mutual labels:  pathofexile
Npeg
PEGs for Nim, another take
Stars: ✭ 163 (+482.14%)
Mutual labels:  parser-generator
usfm-grammar
An elegant USFM parser.
Stars: ✭ 29 (+3.57%)
Mutual labels:  parser-generator
poe-go
A library and guide for creating PoE applications in Go
Stars: ✭ 28 (+0%)
Mutual labels:  pathofexile
PackCC
PackCC is a packrat parser generator for C.
Stars: ✭ 22 (-21.43%)
Mutual labels:  parser-generator
kison
A LALR(1)/LL(1)/LL(K) parser generator for javascript/typescript
Stars: ✭ 40 (+42.86%)
Mutual labels:  parser-generator

Filter Spirit

Advanced item filter generator for Path of Exile that uses it's own DSL 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.

If 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.

news

Archnemesis (3.17) update released - DOWNLOAD HERE. No update needed for Sentinel (3.18) - no changes in the program, only within filter templates.

As of now, the tool supports all possible conditions and actions except few corner cases which are described in doc/known_issues.

Message me (/u/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.

I'm currently focused on a different project so generally FS has low priority. This can change if you contact me though.


poe.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.


Plans for the future:

  • poe.watch support
  • support for cluster jewel pricing in filter template code
  • Visual Studio Code plugin that uses FS in the background
  • UI overhaul
  • WASM-compiled build, hosted on a static GitHub Pages website (some work already in progress, JavaScript help needed)

Please contact me if you are familiar with web-related technologies and would like to help in making these.

overview

Core features:

  • Generation-time error checking. FS has own parser and compiler that performs semantic analysis - it is not a blind text-copy-paste script.
  • Language features dedicated to elimination of filter code duplication:
    • named constants: $red = 255 0 0
    • named style groups: $x = { SetFontSize 42 SetTextColor $black }
    • nesting of filter blocks to inherit conditions and override actions
  • querying item prices: Autogen cards Price > 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.
  • 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.
  • Filter debugger & loot preview - find matching blocks and preview randomly generated loot from specific game encounters. You can debug both real filters and FS filter templates.

UI screens (might be slightly dated):

image image

Planned features:

  • Live edit mode - see generared code as you write.

example filter template code

There 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.

$color_white  = 255 255 255 255
$color_hammer = 162  85   0 # (will use default opacity)

BaseType "Gavel" "Stone Hammer" "Rock Breaker" {
	SetTextColor $color_white
	SetBackgroundColor $color_hammer
	# above BaseType conditon will be inherited by all nested blocks
	# above actions will be inherited and can be overriden by nested blocks

	Rarity Normal {
		Show # show normal hammers
	}

	Rarity Magic
	Quality >= 12 {
		Show # show magic hammers with 12+ quality
	}

	Rarity Rare
	Quality >= 16 {
		Show # show rare hammers with 16+ quality
	}

	# hide any other hammers (actually discouraged as you might lose
	# RGB recipe material for later blocks - better don't write this Hide)
	Hide
}

Class "Divination Card" {
	SetTextColor $color_divination

	# cards that you always want to pickup
	BaseType "The Void" "The Cartographer" "Chaotic Disposition" {
		SetAlertSound $alert_divination_stack_1
		PlayEffect $effect_divination
		Show
	}

	Autogen cards {
		Price >= 100 {
			SetTextColor $color_black
			SetBorderColor $color_divination
			SetBackgroundColor $color_divination
			SetFontSize $font_max
			SetAlertSound $alert_divination_best
			PlayEffect $effect_divination
			MinimapIcon 0 Blue Square
			Show
		}

		Price < 100
		Price >= 10 {
			SetBorderColor $color_divination
			SetFontSize $font_mid_divinaton
			SetAlertSound $alert_divination_mid
			PlayEffect $effect_divination
			MinimapIcon 1 Blue Square
			Show
		}
	}

	# if you really hate these cards
	BaseType "Rain of Chaos" "Carrion Crow" {
		Hide
	}

	# any other cards
	Show
}

documentation and tutorial

Browse doc directory. Files are in Markdown so you can read them online on GitHub.

program interface

Graphic interface - just run filter_spirit_gui.

Command-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.

runtime dependencies

FS 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.

building and dependencies

See documentation directory.

Modern CMake build script. All dependencies are exposed as targets. See comments inside the build recipe for more information.

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release [your_options...]
make -j

If you are using make don't forget to add -j (parallel jobs) to add 100% increased build speed per additional core.

licensing

LICENSE file in the main directory of the repository applies to any file, unless otherwise specified.

Contact me if you are interested in work on or using this project but got any concerns in regards to usage or licensing.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].