#filter #proc-macro #procedural #syntax #path #extended #poe-superfilter

poe-superfilter-support

支持带有过程宏的poe-superfilter的crate

3个不稳定版本

使用旧的Rust 2015

0.2.0 2017年5月25日
0.1.1 2017年4月21日
0.1.0 2017年4月6日

#41 in #extended


poe-superfilter 中使用

MIT 许可证

8KB
154

暗黑破坏神:超滤器

crates.io Travis CI

Path of Exile 财富过滤器的前处理程序,它向GGG的财富过滤器语法添加变量、混入、算术和许多其他有用功能,并将使用扩展语法的过滤器编译成纯财富过滤器,可以在游戏中使用。

您可以在本存储库的发行页面上下载当前版本。

语法

混入

混入是可以包含在任何地方的指令块的可重复使用的代码块。它们可以用于最小化过滤器重复部分的重复。

Mixin FlaskMagic($type)
	Class Flask
	Rarity Magic
	BaseType $type
	SetTextColor 100 100 255 255
	SetBorderColor 100 100 100
	SetFontSize 38

Show
	+FlaskMagic("Small")
	ItemLevel <= 5

Show
	+FlaskMagic("Medium")
	ItemLevel <= 8
	ItemLevel >= 3

这编译成

Show
	Class Flask
	Rarity Magic
	BaseType "Small"
	SetTextColor 100 100 255 255
	SetBorderColor 100 100 100
	SetFontSize 38
	ItemLevel <= 5

Show
	Class Flask
	Rarity Magic
	BaseType "Medium"
	SetTextColor 100 100 255 255
	SetBorderColor 100 100 100
	SetFontSize 38
	ItemLevel <= 8
	ItemLevel >= 3

变量

您可以这样定义变量

$var = "value"
$var2 = "this" "is" "a" "test"
$num = 10

它们可以包含任何可以传递给过滤器指令的值,包括值列表。

变量定义允许在两个地方进行

  1. 第一个块之前

    这里定义的变量将是全局可见的。

  2. 在块内部

    如果放置在块内部,该变量将只在该块及其嵌套块中可见,并且只对变量定义之后的指令可见。

算术

您基本上可以在任何地方使用简单的数学表达式。

$scale = 1.2
Show
    SetFontSize 38 * $scale

请注意,虽然您可以使用非整数数字,但所有计算的结果在渲染期间都会四舍五入为整数,因为GGG的财富过滤器语法仅支持整数。

这同样也是有效的语法,但是您可能想添加一些澄清括号。

Show
    SetTextColor 100 * $foo 100 255 + $bar 255
    # Probably better like that:
    SetTextColor (100 * $foo) 100 (255 + $bar) 255

导入

您可以使用导入语句导入其他Superfilter文件。那里定义的混入和全局变量也将可用于包含的文件。

Import "some_file.sf"

条件块

您可以根据条件包含或排除块。要表示条件,您可以使用简单的相等和比较检查或布尔值。

$yes = True
$no = 1 > 2

Show if True # This block will be included
    SetStatement 123

Show if False # this won't
    SetStatement 234

Show if 2 > 3
    SetStatement 345

Show if 3 > 2
    SetStatement 456

Show if $yes
    SetStatement 567

Show if $no
    SetStatement 678

注释

根据您的使用情况,您可能希望将注释传递到输出或保留。您可以使用--comments选项更改此行为。如果指定了该选项,则注释将传递到输出,否则将丢弃。

如果要在输出中正确格式化,对于在Show/Hide块之前的注释存在一个小警告

Show
    # comment
    Class Flask
    # another comment

# comments for this following block
# more comments
Show
    Class Flask
    
---- This will actually produce the following output:

Show
    # comment
    Class Flask
    # another comment
    # comments for this following block
    # more comments

Show
    Class Flask

为了避免这种行为,您可以使用特殊的“块注释”语法

Show
    # comment
    Class Flask
    # another comment

#! comment for this following block
#! more comments
Show
    Class Flask

----- Output:
Show
    # comment
    Class Flask
    # another comment
    
# comments for this following block
# more comments
Show
    Class Flask

这样做的目的是为了使语法更清晰 - 没有明确的块注释,就无法在块的末尾添加注释行,因为无法将其与旨在描述下一个块的注释行区分开来。

命令行使用方法

USAGE:
    superfilter.exe [FLAGS] [OPTIONS] <PATH>

FLAGS:
    -c, --comments    Include comments in the output
    -h, --help        Prints help information
    -p, --pretty      Include indentation and other formatting in the output
    -V, --version     Prints version information

OPTIONS:
    -l, --line-endings <LINE_ENDING>    Type of line ending used (LF OR CRLF) defaults to the platform line ending
                                        [values: lf, crlf]
    -o, --output <FILE>                 Output file. If this option is omitted, the output will be printed to the
                                        console.

ARGS:
    <PATH>    Path of the input file

为脚本创建者提供的注意事项

如果您打算将您创建的过滤器分发给其他玩家,您可能希望为他们提供一个简单的重新编译您的脚本的方法,以便他们修改您的过滤器。

您如何做完全取决于您,但有一个PowerShell脚本(compile-script.ps1)可以帮助您在存储库中进行修改并包含在您的过滤器中。它简单地编译指定的文件,但也会检查Superfilter是否已安装以及是否为足够新的版本。如果没有,它会打印错误消息并指导用户到下载页面安装工具。要使用脚本,只需更改其中的文件名以匹配您的过滤器需求,然后执行它以重新编译您的过滤器。

路线图

如果您有建议,请随时创建一个问题,告诉我所有关于它的情况!

已经计划好的事情,没有特定的顺序

  • 改进布尔表达式的支持(在布尔值上添加和/或操作)

lib.rs:

这是poe-superfilter的支持库,它包含其中需要的程序宏。

依赖关系

~1.5MB
~41K SLoC