From 12add75232185b452ad901b48a09e63156ae8ab2 Mon Sep 17 00:00:00 2001 From: Carm Date: Thu, 20 Mar 2025 20:28:33 +0800 Subject: [PATCH] feat: Enhanced text content replacer --- .doc/images/logo-bg.png | Bin 4249 -> 0 bytes .doc/images/logo-bg.svg | 79 +++++++++++++++++ .doc/images/logo.png | Bin 1420 -> 0 bytes .doc/images/logo.svg | 38 ++++++++ .gitignore | 2 +- .idea/icon.png | Bin 4249 -> 0 bytes .idea/icon.svg | 80 +++++++++++++++++ README.md | 2 +- README_CN.md | 2 +- .../configuration/function/ValueSupplier.java | 7 -- .../value/text/function/ContentHandler.java | 5 ++ .../function/modifier/ContentReplacer.java | 82 ++++++++++++++++++ .../text/function/modifier/ParamHandler.java | 26 ++++++ 13 files changed, 313 insertions(+), 10 deletions(-) delete mode 100644 .doc/images/logo-bg.png create mode 100644 .doc/images/logo-bg.svg delete mode 100644 .doc/images/logo.png create mode 100644 .doc/images/logo.svg delete mode 100644 .idea/icon.png create mode 100644 .idea/icon.svg delete mode 100644 core/src/main/java/cc/carm/lib/configuration/function/ValueSupplier.java create mode 100644 features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ContentReplacer.java create mode 100644 features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ParamHandler.java diff --git a/.doc/images/logo-bg.png b/.doc/images/logo-bg.png deleted file mode 100644 index 14b3b637e85eb4dbddf8a5027734bbed3f0b7799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4249 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
TrP!b)0wG#02qyWmM9ppGB86r@3( z4g&P=h|5DU6mwGFm9~(g){z~R-@VchG0EmyxSs>@v#59@h~Beoq4IVc?FagYApgKhz(Es8v#x_ z^6L%GMu*9A;#$g+nCH#~@l*_ZTuJQPG7Ee8zQJ4vKhrI!bgqj-`k9*8j~~-!^6tGz z-<%lh@6HGUCf3Vl@Xv7)beDntd3BhnLM8s~>}ir}#-bqOfc>!l?XM48CMlD0u9^yK zdK_n?nWgSS1Tu@_g(}7)VUfd`I~{FC%f1BKWNO;axDjFMBB{3$ zVxkw0=1#ZDyx6)`yxq*JmSs1KjZOTw@c=nK;TE%U1;AcPpHV# zY%s^Ut>~1+g01z<4gB8|X}QY~H)Lq<#IXrxvWtV3x^ZEDJ5q}_glUwgNMg@~n~*pt zBB+@>V&=W`n0^0ke;hT@r;!7PPNsQM!rjzennrWAT4+KL&6ZGiE@wtt#-35{#|c;~ z1(n@wwNJFIDoFW$pkHYE){Q<(TZ#G>wM1w?kC_}T$E-WnuUdVf7?2VvG91q$&y&n1 zX`R%j^6&RB?mxqaBtE}>JB5b_tGTJ4?!7Oaiyc!S-7jPwc$l#i*pL;Bd^9rZ)s^J% zxJ?&fv(1!@Fu#tT>DaV5FIiFZLY&n#W28_#Q##$sVKP|UF2alOcQUaVKCZ`4Xqj!B)K zn{{Ttk)odzSTojpiRishbNUatzYchnc0oXXw`ruj=Z8hf*F-nXkiV}7QfDz~hW;fc zYO=>gAmEK%cJ@)Q%}m)3DBfB3|9dp^yz_EcI-8xG^1J&QHS6{YUc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.doc/images/logo.png b/.doc/images/logo.png deleted file mode 100644 index de36c440edf5536ec893c7b0c594fc63d3e1b2bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmbVMdpOg39R6Z zq+B-Vl#01*y6{kl%0X=FLMmA|mW|H*anAYsoIl>r`+hFZ^LhVzj|ckGbu>*h0RTD- zFIteAktN{1QPmuMk zNF)ty$WD_lx=UEmO5sgI*TOQ3^!6jFnWi&Ng^hb0XLWi;zssTAVOSfD#2zYhMb+gB zEYpfaX8^ln&N|B!)si#gfi^@R){z{ACa`kzwj{i-R-lif*k;38_<)RcMpOkFj~(2B zPC!30Z*#=^;`_Z7#nv0F;20UJNR$ogj|qsU>q2Y@>pOdmGv--M0}CJGRh14vc6O-h z3TSHX>nisjXa(66H%@AG3<{UYR`9VT)fbs?xoE$Fy{NhB`)Wm}==#R$I+nI%kGy;2 zJQ#`7dYmBd?)&Ufkz7fux8%s~X~$i5YlH-2p1|gPIg=$H35NoSR*g@jjlwX@s^eMA zG{r#FUc~e0P^=Yl3fGvUSDxt1UkP6l*Ww;TV6Ja|?Z~=0B&D^?ZB{?Q&5uxgo}3__()% zEF9a)P0*|txsJo7*vl6}$_y)Z%F#79rZOm;)L15RQJ$GGqpa<@$bT{Vgev#$sRHie zOeK*^s1HBb(WOmk%XfTQ;W+6R%F-NP+WEM*XS`Dy9mZwqQzbbTv@T1yKwL(QT&D=I zP%Z}1g-=MLHF*u=g^PhMslMUNWf3LIDcBWSU;C!RwL&a+n|&^$L7@>jqniRsu}lJ6 zY`X};d3^2aHG@R zec(XYk!v`!Y35)-+k@o!vx7+8+;$|m_!KW7I^yb(fgwqUZP_(8yGKEc-?Siz>L!eS zI^BR5xW4RFWea{J#Oy#F>lm{2z9lp!Wv@3(KlG?Tm!)T|k~=o*s#g6v=A5tD5OY_Q zpS?DibL8Pod)ij4wh=7Hz;vhchrW>i$i+JQNI&FFrY~PPYtwqXKIf@j^{0Z6mM?J*^ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore index cc4eb8a..93d00ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .idea/* -!.idea/icon.png +!.idea/icon.svg **/target/ **.iml \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png deleted file mode 100644 index 14b3b637e85eb4dbddf8a5027734bbed3f0b7799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4249 zcmbVOc|25Y-#=sQlBF3WOO|f3Zy{ky*+a7L2}!mj24O_f?N+jvJ+dzoW63&XEw_a1 zg|V-hkr>R(c}~yse%|-_Jb%6K`#aZl{y68l&gb{NzTflx{lH0Z9^f?6Gt>iMFaUr- z7XZ!xR{=O3-R}VfJv11Y85rp48CaQ^7@1G7o;bnA%ErcilADwLB-cqcHclQ+u2Tpk z5_y7ymyZX*$BjTDet!f8hxX7jurM&NAlTX15&!1^I{+?bAPR_r!$bi(E*P8(26h9& zP@W91e+KYh0i%O*WMpDyVP%6B)N=xKFgTo!9{xLPXmtei9-!x9;1*H5!g$Kul}R)J zq4YTE4YQa|O(*i^Fi~9j_Je2^Rvuoy)BNZDkdQntrE)=4P5q+A)oZ$X`UZwZ7M51l zHnw*5Ztfm;Jnwql3w#(9j1CD6i+K|JH164-@yRKvY3UiSUS}2*zAY*)DJ?6n#nsg} zG`??Y{?OIk)7#ho@zcoY*Rk=5$*F0=!s62M%Iezs25I-_-mm=w^5M~MTrdFsFIdq1 zU%>tY7Z-$!j-DP)&-5D?j1CP=I2S#Gh$18R6>}!nfK#GMkC_oVNpEU8S;UlY5|Otb z472ixs}RnSena~wvi}{h=>He8{|5FyxTb*JB{y0o=i}c8!q1hrXvH2TQItm|V3UeJBu9>+md<>w?`cjvL~l4T9bsEh=p^3Ent&IgmY%!Ei8tle z$UO0q*vt74b9CDmAB}nq%;KFi1H1z}+E0VPlhNK;A>zSwWFNJvbY?Q5WZRa6nRa5HijQ-+@1r&EvptxsHOsUa`jK!hk24Yf)4OvL|u$GTE4L#_VLsgVC*V zh43MCl>=-3JKGN{&ScHZyz<$qD)cI8dVfEuhdpx z&QKGO>IwG%0R~Bu5Y~&3$8?t`^T~L#b;Y@FjSa)uvIAF__+oO4Ec^TX0&?C)TNzM# zb2MI+x7LiC?o5;=*eKV03^xaX=%h{6cE#2PB4gs)?;#I3zUzio&U_wqQjmC9ULopp zwRh~616+ckL0%pNI3&o>30{_G!OROnM2p*e?B+BOqrX{JZ8Q1H&4_36sEa0KLQN{GTw!oT=2 zkavGwde&ti=-TMi~WWL7KoZeadDG<;x*( z*IAf+mC$C~W8E(N!cDs}iBERmbNR7T5$n4s*-6H<)D}N0CZMs?!#jnu!q`CX!2ep^ zBb=l};9}@@azKBV+f%`c32jDNuP{;@rGgd`{L+&ieFy^aakh6FYSe!+_0Jd&{Os-z ze;ZM$x1GPzPNZg|=3mi-iRVVVF$g)IR?qU{@fiJjJH{Me(NDIQaK7HzUOG(A=!wPiePyuJm$%l0l&y$xqT2tNv35`wV0UqVQH&#y*;IZdNA7J#Qv+S|;~;#d5=Di1w0tvew$9 zmrWptLi~|Y(~xku9KoL2sm5wT-6j=I$W2p=t(z%Lkgs-mPaBo$RC2YQENX$TRBw+co~SHV6$l?^lI>j? zLj_kiH`dZx#Ow@po$`u@H>{I4l-JjT*ycJBfdlty;W7bDLC>cGUsm3JNf+{mYTx$@ zcko)6`4s-NSzIZ_?dt`$GA#DT^2qA@=BAe)WkwX+?x638~9aI{Z=tMGFLK;!Htcg(nSo9L70 z%JOABlcW)%Y@Bi6E^YF}?TpWLM!?`ia-E-LvjTlYC$aC!a5y`m>QYy`@F-!V?l0yi z*5fZZ(wM}P&1AZh|L#uiPBs)z>7U3A52KbnOq^=zvX9uF%~EZu*tl62tl@q$R9aG} z-Mh8LRTjN3ftWZe6~!W+4X}r69qT~lb3U651U5^hX2QJQS+mSf-|H_<2AvbRH6iyGUPOoM9Xq#j!`7pcC<63Sh zGV0xKcZ;3oi{It{Roi~5$Y@M)=rssP&8!^JoJ%Y>)!v$B^v!X#nvwLoExg-hC**^u z){cpF&YxTcZf?;Wy${?Hl$*HnSzBHJ)xnv?IWGB7M`0dctH(@*3^-Z`GiV0_@6Bkl z6KhqGL6}Yv)Ji1?e3JkHfA2kOJo|$GA^$iCG-CEr(W7Lu4;<4dnknx>BK5gO2`z2F z8SNZRHk9JywCEQkj&7iNrE z{8VzJjNfCc3r{-)Dn?y%41y*2sJWe-OZUBj4+pA6P_p#|6U{7vTULk@w`j;GcZo%Gzynw;K5A1%9E zHLMR_)cCEhFVQ?Ce9gLx){R{}!%d*W2=eCDmTP%W6v7rcgal(|bv-N1lm_p0=L|F2 z&V`*+#c@umUzBcYav`JTyRk>?WE&8m`++$WYX5ODo!i_jN6evcxyB4z8b>*mv0z4J zq)3CnV>F7AXbjohDmeve#qg}ZTd^Uih>c
TrP!b)0wG#02qyWmM9ppGB86r@3( z4g&P=h|5DU6mwGFm9~(g){z~R-@VchG0EmyxSs>@v#59@h~Beoq4IVc?FagYApgKhz(Es8v#x_ z^6L%GMu*9A;#$g+nCH#~@l*_ZTuJQPG7Ee8zQJ4vKhrI!bgqj-`k9*8j~~-!^6tGz z-<%lh@6HGUCf3Vl@Xv7)beDntd3BhnLM8s~>}ir}#-bqOfc>!l?XM48CMlD0u9^yK zdK_n?nWgSS1Tu@_g(}7)VUfd`I~{FC%f1BKWNO;axDjFMBB{3$ zVxkw0=1#ZDyx6)`yxq*JmSs1KjZOTw@c=nK;TE%U1;AcPpHV# zY%s^Ut>~1+g01z<4gB8|X}QY~H)Lq<#IXrxvWtV3x^ZEDJ5q}_glUwgNMg@~n~*pt zBB+@>V&=W`n0^0ke;hT@r;!7PPNsQM!rjzennrWAT4+KL&6ZGiE@wtt#-35{#|c;~ z1(n@wwNJFIDoFW$pkHYE){Q<(TZ#G>wM1w?kC_}T$E-WnuUdVf7?2VvG91q$&y&n1 zX`R%j^6&RB?mxqaBtE}>JB5b_tGTJ4?!7Oaiyc!S-7jPwc$l#i*pL;Bd^9rZ)s^J% zxJ?&fv(1!@Fu#tT>DaV5FIiFZLY&n#W28_#Q##$sVKP|UF2alOcQUaVKCZ`4Xqj!B)K zn{{Ttk)odzSTojpiRishbNUatzYchnc0oXXw`ruj=Z8hf*F-nXkiV}7QfDz~hW;fc zYO=>gAmEK%cJ@)Q%}m)3DBfB3|9dp^yz_EcI-8xG^1J&QHS6{YUc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index fd0df58..e84509d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ README LANGUAGES [ [**English**](README.md) | [中文](README_CN.md) ] # configured _(config framework)_ -logo +logo _**"Once set, Simple get."**_ diff --git a/README_CN.md b/README_CN.md index eb09198..9bc6295 100644 --- a/README_CN.md +++ b/README_CN.md @@ -14,7 +14,7 @@ README LANGUAGES [ [English](README.md) | [**中文**](README_CN.md) ] # configured _(配置文件框架)_ -logo +logo **一次配置,轻松读取!** diff --git a/core/src/main/java/cc/carm/lib/configuration/function/ValueSupplier.java b/core/src/main/java/cc/carm/lib/configuration/function/ValueSupplier.java deleted file mode 100644 index f8a1274..0000000 --- a/core/src/main/java/cc/carm/lib/configuration/function/ValueSupplier.java +++ /dev/null @@ -1,7 +0,0 @@ -package cc.carm.lib.configuration.function; - -public interface ValueSupplier { - - - -} diff --git a/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/ContentHandler.java b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/ContentHandler.java index 011e570..607ce6b 100644 --- a/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/ContentHandler.java +++ b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/ContentHandler.java @@ -1,6 +1,7 @@ package cc.carm.lib.configuration.value.text.function; import cc.carm.lib.configuration.value.text.data.TextContents; +import cc.carm.lib.configuration.value.text.function.modifier.ContentReplacer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -46,6 +47,7 @@ public abstract class ContentHandler.+)](?.*)$" ); + public static final @NotNull Function public static final @NotNull UnaryOperator DEFAULT_PARAM_BUILDER = s -> "%(" + s + ")"; protected BiFunction parser = (receiver, value) -> value; @@ -58,6 +60,9 @@ public abstract class ContentHandler paramFormatter = DEFAULT_PARAM_BUILDER; protected @NotNull String[] params; + protected @NotNull List replacers = new ArrayList<>(); + protected @NotNull List inserters = new ArrayList<>(); + /** * Used to store the insertion of the message */ diff --git a/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ContentReplacer.java b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ContentReplacer.java new file mode 100644 index 0000000..8ebf952 --- /dev/null +++ b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ContentReplacer.java @@ -0,0 +1,82 @@ +package cc.carm.lib.configuration.value.text.function.modifier; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.regex.Pattern; + +public class ContentReplacer { + + public static ContentReplacer.Builder match(@NotNull Predicate matcher) { + return new Builder<>(matcher); + } + + public static ContentReplacer.Builder match(@NotNull String id) { + return match(text -> text.equalsIgnoreCase(id)); + } + + public static ContentReplacer.Builder match(@NotNull Pattern pattern) { + return match(text -> pattern.matcher(text).find()); + } + + protected final int priority; + protected final @NotNull Predicate matcher; + protected final BiFunction<@NotNull RECEIVER, @NotNull String, @Nullable String> supplier; + + public ContentReplacer(int priority, + @NotNull Predicate matcher, + BiFunction<@NotNull RECEIVER, @NotNull String, @Nullable String> supplier) { + this.priority = priority; + this.matcher = matcher; + this.supplier = supplier; + } + + public @NotNull Predicate matcher() { + return this.matcher; + } + + public boolean check(@NotNull String param) { + return this.matcher.test(param); + } + + public @Nullable String content(@NotNull RECEIVER receiver, @NotNull String matchedParam) { + return this.supplier == null ? null : this.supplier.apply(receiver, matchedParam); + } + + public static class Builder { + + protected final @NotNull Predicate matcher; + protected int priority = 0; + + public Builder(@NotNull Predicate matcher) { + this.matcher = matcher; + } + + public @NotNull Builder priority(int priority) { + this.priority = priority; + return this; + } + + public @NotNull ContentReplacer to(BiFunction<@NotNull R, @NotNull String, @Nullable String> supplier) { + return new ContentReplacer<>(this.priority, this.matcher, supplier); + } + + public @NotNull ContentReplacer to(Function<@NotNull R, @Nullable String> supplier) { + return to((receiver, matchedParam) -> supplier.apply(receiver)); + } + + public @NotNull ContentReplacer to(Supplier<@Nullable String> supplier) { + return to((receiver, matchedParam) -> supplier.get()); + } + + public @NotNull ContentReplacer to(@NotNull String content) { + return to(() -> content); + } + + } + +} diff --git a/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ParamHandler.java b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ParamHandler.java new file mode 100644 index 0000000..0567bd2 --- /dev/null +++ b/features/text/src/main/java/cc/carm/lib/configuration/value/text/function/modifier/ParamHandler.java @@ -0,0 +1,26 @@ +package cc.carm.lib.configuration.value.text.function.modifier; + +import java.util.function.Function; +import java.util.regex.Pattern; + +public class ParamHandler { + + // %() + public static final Pattern DEFAULT_PARAM_PATTERN = Pattern.compile("%\\((?[^)]+)\\)"); + public static final ParamHandler DEFAULT_PARAM = new ParamHandler( + s -> { + }, + s -> { + + } + ) + + + protected final Function extractor; + protected final Function replacer; + + public ParamHandler(Function extractor, Function replacer) { + this.extractor = extractor; + this.replacer = replacer; + } +}