From 5dfe3075644b436531fde1f98355f97e4fc57eb2 Mon Sep 17 00:00:00 2001 From: torusrxxx Date: Sun, 1 Dec 2024 00:48:42 +0800 Subject: [PATCH 1/4] Add margin-*, padding-*, scroll-snap-* CSS properties --- .../client/filter/CSSTokenizerFilter.java | 114 +++++++++++++++++- test/freenet/client/filter/CSSParserTest.java | 5 + 2 files changed, 114 insertions(+), 5 deletions(-) diff --git a/src/freenet/client/filter/CSSTokenizerFilter.java b/src/freenet/client/filter/CSSTokenizerFilter.java index 9830c9067ad..3fad78db250 100644 --- a/src/freenet/client/filter/CSSTokenizerFilter.java +++ b/src/freenet/client/filter/CSSTokenizerFilter.java @@ -238,10 +238,16 @@ public static T[] concat(T[] a, T[] b) { allelementVerifiers.add("list-style-position"); allelementVerifiers.add("list-style-type"); allelementVerifiers.add("list-style"); - allelementVerifiers.add("margin-right"); + allelementVerifiers.add("margin-block"); + allelementVerifiers.add("margin-block-end"); + allelementVerifiers.add("margin-block-start"); + allelementVerifiers.add("margin-bottom"); + allelementVerifiers.add("margin-inline"); + allelementVerifiers.add("margin-inline-end"); + allelementVerifiers.add("margin-inline-start"); allelementVerifiers.add("margin-left"); + allelementVerifiers.add("margin-right"); allelementVerifiers.add("margin-top"); - allelementVerifiers.add("margin-bottom"); allelementVerifiers.add("margin"); allelementVerifiers.add("max-block-size"); allelementVerifiers.add("max-height"); @@ -267,10 +273,16 @@ public static T[] concat(T[] a, T[] b) { allelementVerifiers.add("outline"); allelementVerifiers.add("overflow"); allelementVerifiers.add("overflow-wrap"); - allelementVerifiers.add("padding-top"); - allelementVerifiers.add("padding-right"); + allelementVerifiers.add("padding-block"); + allelementVerifiers.add("padding-block-end"); + allelementVerifiers.add("padding-block-start"); allelementVerifiers.add("padding-bottom"); + allelementVerifiers.add("padding-inline"); + allelementVerifiers.add("padding-inline-end"); + allelementVerifiers.add("padding-inline-start"); allelementVerifiers.add("padding-left"); + allelementVerifiers.add("padding-right"); + allelementVerifiers.add("padding-top"); allelementVerifiers.add("padding"); allelementVerifiers.add("page-break-after"); allelementVerifiers.add("page-break-before"); @@ -287,6 +299,10 @@ public static T[] concat(T[] a, T[] b) { allelementVerifiers.add("resize"); allelementVerifiers.add("richness"); allelementVerifiers.add("right"); + allelementVerifiers.add("scroll-behavior"); + allelementVerifiers.add("scroll-snap-align"); + allelementVerifiers.add("scroll-snap-stop"); + allelementVerifiers.add("scroll-snap-type"); allelementVerifiers.add("speak-header"); allelementVerifiers.add("speak-numeral"); allelementVerifiers.add("speak-punctuation"); @@ -346,7 +362,7 @@ public static T[] concat(T[] a, T[] b) { * Array for storing additional Verifier objects for validating Regular expressions in CSS Property value * e.g. [ | transparent]{1,4}. It is explained in detail in CSSPropertyVerifier class */ - private final static CSSPropertyVerifier[] auxilaryVerifiers=new CSSPropertyVerifier[149]; + private final static CSSPropertyVerifier[] auxilaryVerifiers=new CSSPropertyVerifier[150]; static { /*CSSPropertyVerifier(String[] allowedValues,String[] possibleValues,String expression,boolean onlyValueVerifier)*/ @@ -381,6 +397,11 @@ public static T[] concat(T[] a, T[] b) { auxilaryVerifiers[74]=new CSSPropertyVerifier(null, null, Arrays.asList("72<1,4>"), null, true); auxilaryVerifiers[75]=new CSSPropertyVerifier(null, null, Arrays.asList("71a74a73"), null, true); + // + auxilaryVerifiers[80]=new CSSPropertyVerifier(Arrays.asList("auto"), Arrays.asList("le","pe"), null, null, true); + // + auxilaryVerifiers[81]=new CSSPropertyVerifier(null, Arrays.asList("le","pe"), null, null, true); + // auxilaryVerifiers[76]=new CSSPropertyVerifier(Arrays.asList("none"),Arrays.asList("ur"),null,null,true); @@ -1211,6 +1232,36 @@ else if("margin-bottom".equalsIgnoreCase(element)) elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); allelementVerifiers.remove(element); } + else if("margin-block".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("80<1,2>"))); + allelementVerifiers.remove(element); + } + else if("margin-block-end".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("margin-block-start".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("margin-inline".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("80<1,2>"))); + allelementVerifiers.remove(element); + } + else if("margin-inline-end".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("margin-inline-start".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } else if("margin".equalsIgnoreCase(element)) { //margin-width @@ -1347,6 +1398,36 @@ else if("padding-left".equalsIgnoreCase(element)) elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); allelementVerifiers.remove(element); } + else if("padding-block".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("81<1,2>"))); + allelementVerifiers.remove(element); + } + else if("padding-block-end".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("padding-block-start".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("padding-inline".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("81<1,2>"))); + allelementVerifiers.remove(element); + } + else if("padding-inline-end".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } + else if("padding-inline-start".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + allelementVerifiers.remove(element); + } else if("padding".equalsIgnoreCase(element)) { //padding-width @@ -1444,6 +1525,29 @@ else if("right".equalsIgnoreCase(element)) elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); allelementVerifiers.remove(element); } + else if("scroll-behavior".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto","smooth"),ElementInfo.VISUALMEDIA)); + allelementVerifiers.remove(element); + } + else if("scroll-snap-align".equalsIgnoreCase(element)) + { + auxilaryVerifiers[82]=new CSSPropertyVerifier(Arrays.asList("none","start","end","center"),null,null,null,true); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("82<1,2>"))); + allelementVerifiers.remove(element); + } + else if("scroll-snap-stop".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("normal","always"),ElementInfo.VISUALMEDIA)); + allelementVerifiers.remove(element); + } + else if("scroll-snap-type".equalsIgnoreCase(element)) + { + auxilaryVerifiers[103]=new CSSPropertyVerifier(Arrays.asList("x","y","block","inline","both"),null,null,null,true); + auxilaryVerifiers[149]=new CSSPropertyVerifier(Arrays.asList("mandatory","proximity"),null,null,null,true); + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("none"),ElementInfo.VISUALMEDIA,null,Arrays.asList("103","103 149"))); + allelementVerifiers.remove(element); + } else if("speak-header".equalsIgnoreCase(element)) { elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("once","always"),ElementInfo.AURALMEDIA)); diff --git a/test/freenet/client/filter/CSSParserTest.java b/test/freenet/client/filter/CSSParserTest.java index 7272e7a6abe..7fa05ed5dfc 100644 --- a/test/freenet/client/filter/CSSParserTest.java +++ b/test/freenet/client/filter/CSSParserTest.java @@ -992,6 +992,11 @@ public class CSSParserTest { propertyTests.put("#x { text-combine-upright: all; }", "#x { text-combine-upright: all; }"); propertyTests.put("#x { text-decoration-thickness: 5px; }", "#x { text-decoration-thickness: 5px; }"); propertyTests.put("#x { dominant-baseline: alphabetic; }", "#x { dominant-baseline: alphabetic; }"); + propertyTests.put("#x { margin-block: 3px 3%; margin-inline: 5%; margin-inline-end: 4px; margin-inline-start: auto; }", "#x { margin-block: 3px 3%; margin-inline: 5%; margin-inline-end: 4px; margin-inline-start: auto; }"); + propertyTests.put("#x { padding-block: 3px 3%; padding-inline: 5%; padding-inline-end: 4px; padding-inline-start: 1em; }", "#x { padding-block: 3px 3%; padding-inline: 5%; padding-inline-end: 4px; padding-inline-start: 1em; }"); + propertyTests.put("#x { scroll-snap-align: start end; }", "#x { scroll-snap-align: start end; }"); + propertyTests.put("#x { scroll-snap-stop: always; }", "#x { scroll-snap-stop: always; }"); + propertyTests.put("#x { scroll-snap-type: both proximity; }", "#x { scroll-snap-type: both proximity; }"); // text-emphasis propertyTests.put("#x { text-emphasis: triangle blue; }", "#x { text-emphasis: triangle blue; }"); // java.lang.NullPointerException From c5ddfc86935432cc01e0daf35bba13e4fd752a3c Mon Sep 17 00:00:00 2001 From: torusrxxx Date: Sun, 1 Dec 2024 11:06:59 +0800 Subject: [PATCH 2/4] Use existing verifier for margin and padding --- .../client/filter/CSSTokenizerFilter.java | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/src/freenet/client/filter/CSSTokenizerFilter.java b/src/freenet/client/filter/CSSTokenizerFilter.java index 3fad78db250..54aa8095793 100644 --- a/src/freenet/client/filter/CSSTokenizerFilter.java +++ b/src/freenet/client/filter/CSSTokenizerFilter.java @@ -362,7 +362,7 @@ public static T[] concat(T[] a, T[] b) { * Array for storing additional Verifier objects for validating Regular expressions in CSS Property value * e.g. [ | transparent]{1,4}. It is explained in detail in CSSPropertyVerifier class */ - private final static CSSPropertyVerifier[] auxilaryVerifiers=new CSSPropertyVerifier[150]; + private final static CSSPropertyVerifier[] auxilaryVerifiers=new CSSPropertyVerifier[149]; static { /*CSSPropertyVerifier(String[] allowedValues,String[] possibleValues,String expression,boolean onlyValueVerifier)*/ @@ -383,6 +383,12 @@ public static T[] concat(T[] a, T[] b) { //list-style-type auxilaryVerifiers[35]=new CSSPropertyVerifier(Arrays.asList("disc","circle","square","decimal","decimal-leading-zero","lower-roman","upper-roman","lower-greek","lower-latin","upper-latin","armenian","georgian","lower-alpha","upper-alpha","none","arabic-indic","bengali","cambodian","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","devanagari","disclosure-closed","disclosure-open","ethiopic-numeric","gujarati","gurmukhi","hebrew","hiragana","hiragana-iroha","japanese-formal","japanese-informal","kannada","katakana","katakana-iroha","khmer","korean-hangul-formal","korean-hanja-formal","lao","lower-armenian","malayalam","mongolian","myanmar","oriya","persian","simp-chinese-formal","simp-chinese-informal","tamil","telugu","thai","tibetan","trad-chinese-formal","trad-chinese-informal","upper-armenian"),Arrays.asList("st"),null,null,true); + //margin-width + auxilaryVerifiers[36]=new CSSPropertyVerifier(Arrays.asList("auto"),Arrays.asList("le","pe"),null,null,true); + + //padding-width + auxilaryVerifiers[40]=new CSSPropertyVerifier(null,Arrays.asList("le","pe"),null,null,true); + // auxilaryVerifiers[61]=new CSSPropertyVerifier(Arrays.asList("border-box", "padding-box", "content-box"),null,null,null,true); // @@ -397,11 +403,6 @@ public static T[] concat(T[] a, T[] b) { auxilaryVerifiers[74]=new CSSPropertyVerifier(null, null, Arrays.asList("72<1,4>"), null, true); auxilaryVerifiers[75]=new CSSPropertyVerifier(null, null, Arrays.asList("71a74a73"), null, true); - // - auxilaryVerifiers[80]=new CSSPropertyVerifier(Arrays.asList("auto"), Arrays.asList("le","pe"), null, null, true); - // - auxilaryVerifiers[81]=new CSSPropertyVerifier(null, Arrays.asList("le","pe"), null, null, true); - // auxilaryVerifiers[76]=new CSSPropertyVerifier(Arrays.asList("none"),Arrays.asList("ur"),null,null,true); @@ -1214,58 +1215,56 @@ else if("list-style".equalsIgnoreCase(element)) else if("margin-right".equalsIgnoreCase(element)) { //margin-width=Length|Percentage|Auto - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-left".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-top".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-bottom".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-block".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("80<1,2>"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36<1,2>"))); allelementVerifiers.remove(element); } else if("margin-block-end".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-block-start".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-inline".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("80<1,2>"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36<1,2>"))); allelementVerifiers.remove(element); } else if("margin-inline-end".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin-inline-start".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); allelementVerifiers.remove(element); } else if("margin".equalsIgnoreCase(element)) { - //margin-width - auxilaryVerifiers[36]=new CSSPropertyVerifier(Arrays.asList("auto"),Arrays.asList("le","pe"),null,null,true); elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36<1,4>"))); allelementVerifiers.remove(element); } @@ -1379,59 +1378,57 @@ else if("overflow".equalsIgnoreCase(element)) } else if("padding-top".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-right".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-bottom".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-left".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-block".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("81<1,2>"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40<1,2>"))); allelementVerifiers.remove(element); } else if("padding-block-end".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-block-start".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-inline".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("81<1,2>"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40<1,2>"))); allelementVerifiers.remove(element); } else if("padding-inline-end".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding-inline-start".equalsIgnoreCase(element)) { - elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,Arrays.asList("le","pe"))); + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40"))); allelementVerifiers.remove(element); } else if("padding".equalsIgnoreCase(element)) { - //padding-width - auxilaryVerifiers[40]=new CSSPropertyVerifier(null,Arrays.asList("le","pe"),null,null,true); elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("40<1,4>"))); allelementVerifiers.remove(element); } @@ -1544,8 +1541,8 @@ else if("scroll-snap-stop".equalsIgnoreCase(element)) else if("scroll-snap-type".equalsIgnoreCase(element)) { auxilaryVerifiers[103]=new CSSPropertyVerifier(Arrays.asList("x","y","block","inline","both"),null,null,null,true); - auxilaryVerifiers[149]=new CSSPropertyVerifier(Arrays.asList("mandatory","proximity"),null,null,null,true); - elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("none"),ElementInfo.VISUALMEDIA,null,Arrays.asList("103","103 149"))); + auxilaryVerifiers[80]=new CSSPropertyVerifier(Arrays.asList("mandatory","proximity"),null,null,null,true); + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("none"),ElementInfo.VISUALMEDIA,null,Arrays.asList("103","103 80"))); allelementVerifiers.remove(element); } else if("speak-header".equalsIgnoreCase(element)) From 77623ef7861c1008193ede4cf0f1bf49ba56d8c2 Mon Sep 17 00:00:00 2001 From: torusrxxx Date: Sun, 1 Dec 2024 11:14:03 +0800 Subject: [PATCH 3/4] Support CSS property text-orientation --- src/freenet/client/filter/CSSTokenizerFilter.java | 6 ++++++ test/freenet/client/filter/CSSParserTest.java | 1 + 2 files changed, 7 insertions(+) diff --git a/src/freenet/client/filter/CSSTokenizerFilter.java b/src/freenet/client/filter/CSSTokenizerFilter.java index 54aa8095793..855854005c5 100644 --- a/src/freenet/client/filter/CSSTokenizerFilter.java +++ b/src/freenet/client/filter/CSSTokenizerFilter.java @@ -327,6 +327,7 @@ public static T[] concat(T[] a, T[] b) { allelementVerifiers.add("text-emphasis-style"); allelementVerifiers.add("text-indent"); allelementVerifiers.add("text-justify"); + allelementVerifiers.add("text-orientation"); allelementVerifiers.add("text-outline"); allelementVerifiers.add("text-overflow"); allelementVerifiers.add("text-shadow"); @@ -1688,6 +1689,11 @@ else if("text-justify".equalsIgnoreCase(element)) elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("auto"),ElementInfo.VISUALMEDIA,null,Arrays.asList("84a83"))); allelementVerifiers.remove(element); } + else if("text-orientation".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(Arrays.asList("mixed","upright","sideways","sideways-right"),ElementInfo.VISUALMEDIA)); + allelementVerifiers.remove(element); + } else if("text-outline".equalsIgnoreCase(element)) { auxilaryVerifiers[108]=new CSSPropertyVerifier(null,null,Arrays.asList("73 72 72<0,1>"),null,true); diff --git a/test/freenet/client/filter/CSSParserTest.java b/test/freenet/client/filter/CSSParserTest.java index 7fa05ed5dfc..578d1e41384 100644 --- a/test/freenet/client/filter/CSSParserTest.java +++ b/test/freenet/client/filter/CSSParserTest.java @@ -994,6 +994,7 @@ public class CSSParserTest { propertyTests.put("#x { dominant-baseline: alphabetic; }", "#x { dominant-baseline: alphabetic; }"); propertyTests.put("#x { margin-block: 3px 3%; margin-inline: 5%; margin-inline-end: 4px; margin-inline-start: auto; }", "#x { margin-block: 3px 3%; margin-inline: 5%; margin-inline-end: 4px; margin-inline-start: auto; }"); propertyTests.put("#x { padding-block: 3px 3%; padding-inline: 5%; padding-inline-end: 4px; padding-inline-start: 1em; }", "#x { padding-block: 3px 3%; padding-inline: 5%; padding-inline-end: 4px; padding-inline-start: 1em; }"); + propertyTests.put("#x { text-orientation: upright; }", "#x { text-orientation: upright; }"); propertyTests.put("#x { scroll-snap-align: start end; }", "#x { scroll-snap-align: start end; }"); propertyTests.put("#x { scroll-snap-stop: always; }", "#x { scroll-snap-stop: always; }"); propertyTests.put("#x { scroll-snap-type: both proximity; }", "#x { scroll-snap-type: both proximity; }"); From b4d5b8328cae532a52b4a83afc165f4b3975e16b Mon Sep 17 00:00:00 2001 From: torusrxxx Date: Sun, 1 Dec 2024 22:55:41 +0800 Subject: [PATCH 4/4] Add CSS property text-underline-offset --- src/freenet/client/filter/CSSTokenizerFilter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/freenet/client/filter/CSSTokenizerFilter.java b/src/freenet/client/filter/CSSTokenizerFilter.java index 855854005c5..ed091db40ec 100644 --- a/src/freenet/client/filter/CSSTokenizerFilter.java +++ b/src/freenet/client/filter/CSSTokenizerFilter.java @@ -332,6 +332,7 @@ public static T[] concat(T[] a, T[] b) { allelementVerifiers.add("text-overflow"); allelementVerifiers.add("text-shadow"); allelementVerifiers.add("text-transform"); + allelementVerifiers.add("text-underline-offset"); allelementVerifiers.add("text-underline-position"); allelementVerifiers.add("text-wrap"); allelementVerifiers.add("top"); @@ -1716,6 +1717,11 @@ else if("text-transform".equalsIgnoreCase(element)) elementVerifiers.put(element,new CSSPropertyVerifier( Arrays.asList("capitalize","uppercase","lowercase","none","fullwidth","full-size-kana","math-auto"),ElementInfo.VISUALMEDIA)); allelementVerifiers.remove(element); } + else if("text-underline-offset".equalsIgnoreCase(element)) + { + elementVerifiers.put(element,new CSSPropertyVerifier(null,ElementInfo.VISUALMEDIA,null,Arrays.asList("36"))); + allelementVerifiers.remove(element); + } else if("text-underline-position".equalsIgnoreCase(element)) { elementVerifiers.put(element,new CSSPropertyVerifier( Arrays.asList("auto","under","left","right"),ElementInfo.VISUALMEDIA));