|
11 | 11 | import org.w3c.css.util.CssVersion; |
12 | 12 | import org.w3c.css.util.InvalidParamException; |
13 | 13 | import org.w3c.css.values.color.ColorMix; |
| 14 | +import org.w3c.css.values.color.DeviceCMYK; |
14 | 15 | import org.w3c.css.values.color.HSL; |
15 | 16 | import org.w3c.css.values.color.HWB; |
16 | 17 | import org.w3c.css.values.color.LAB; |
@@ -778,149 +779,8 @@ public void setOKLCHColor(ApplContext ac, CssExpression exp) |
778 | 779 |
|
779 | 780 | public void setDeviceCMYKColor(ApplContext ac, CssExpression exp) |
780 | 781 | throws InvalidParamException { |
781 | | - // HWB defined in CSSColor Level 4 and onward, currently used in the CSS level |
782 | | - if (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0) { |
783 | | - StringBuilder sb = new StringBuilder(); |
784 | | - sb.append("device-cmyk(").append(exp.toStringFromStart()).append(')'); |
785 | | - throw new InvalidParamException("notversion", sb.toString(), |
786 | | - ac.getCssVersionString(), ac); |
787 | | - } |
788 | | - |
789 | | - color = null; |
790 | | - cmyk = new DeviceCMYK(); |
791 | | - CssValue val = exp.getValue(); |
792 | | - char op = exp.getOperator(); |
793 | | - boolean gotFallback = false; |
794 | | - |
795 | | - if (exp.hasCssVariable()) { |
796 | | - markCssVariable(); |
797 | | - } |
798 | | - // C |
799 | | - if ((val == null || op != SPACE) && !hasCssVariable()) { |
800 | | - throw new InvalidParamException("invalid-color", ac); |
801 | | - } |
802 | | - switch (val.getType()) { |
803 | | - case CssTypes.CSS_NUMBER: |
804 | | - case CssTypes.CSS_PERCENTAGE: |
805 | | - case CssTypes.CSS_VARIABLE: |
806 | | - cmyk.setC(ac, val); |
807 | | - break; |
808 | | - default: |
809 | | - if (!hasCssVariable()) { |
810 | | - throw new InvalidParamException("colorfunc", val, "device-cmyk", ac); |
811 | | - } |
812 | | - } |
813 | | - |
814 | | - // M |
815 | | - exp.next(); |
816 | | - val = exp.getValue(); |
817 | | - op = exp.getOperator(); |
818 | | - if ((val == null || op != SPACE) && !hasCssVariable()) { |
819 | | - exp.starts(); |
820 | | - throw new InvalidParamException("invalid-color", ac); |
821 | | - } |
822 | | - switch (val.getType()) { |
823 | | - case CssTypes.CSS_NUMBER: |
824 | | - case CssTypes.CSS_PERCENTAGE: |
825 | | - case CssTypes.CSS_VARIABLE: |
826 | | - cmyk.setM(ac, val); |
827 | | - break; |
828 | | - default: |
829 | | - if (!hasCssVariable()) { |
830 | | - exp.starts(); |
831 | | - throw new InvalidParamException("colorfunc", val, "device-cmyk", ac); |
832 | | - } |
833 | | - } |
834 | | - |
835 | | - // Y |
836 | | - exp.next(); |
837 | | - val = exp.getValue(); |
838 | | - op = exp.getOperator(); |
839 | | - if ((val == null) && !hasCssVariable()) { |
840 | | - throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "device-cmyk", ac); |
841 | | - } |
842 | | - switch (val.getType()) { |
843 | | - case CssTypes.CSS_NUMBER: |
844 | | - case CssTypes.CSS_PERCENTAGE: |
845 | | - case CssTypes.CSS_VARIABLE: |
846 | | - cmyk.setY(ac, val); |
847 | | - break; |
848 | | - default: |
849 | | - if (!hasCssVariable()) { |
850 | | - exp.starts(); |
851 | | - throw new InvalidParamException("colorfunc", val, "device-cmyk", ac); |
852 | | - } |
853 | | - } |
854 | | - // K |
855 | | - exp.next(); |
856 | | - val = exp.getValue(); |
857 | | - op = exp.getOperator(); |
858 | | - if ((val == null) && !hasCssVariable()) { |
859 | | - throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "device-cmyk", ac); |
860 | | - } |
861 | | - switch (val.getType()) { |
862 | | - case CssTypes.CSS_NUMBER: |
863 | | - case CssTypes.CSS_PERCENTAGE: |
864 | | - case CssTypes.CSS_VARIABLE: |
865 | | - cmyk.setK(ac, val); |
866 | | - break; |
867 | | - default: |
868 | | - if (!hasCssVariable()) { |
869 | | - exp.starts(); |
870 | | - throw new InvalidParamException("colorfunc", val, "device-cmyk", ac); |
871 | | - } |
872 | | - } |
873 | | - |
874 | | - exp.next(); |
875 | | - if (!exp.end()) { |
876 | | - if ((op == SPACE) && !hasCssVariable()) { |
877 | | - // now we need an alpha. |
878 | | - val = exp.getValue(); |
879 | | - op = exp.getOperator(); |
880 | | - |
881 | | - if ((val.getType() != CssTypes.CSS_SWITCH) && !hasCssVariable()) { |
882 | | - throw new InvalidParamException("rgb", val, ac); |
883 | | - } |
884 | | - if ((op != SPACE) && !hasCssVariable()) { |
885 | | - throw new InvalidParamException("invalid-color", ac); |
886 | | - } |
887 | | - exp.next(); |
888 | | - // now we get the alpha value |
889 | | - val = exp.getValue(); |
890 | | - if ((val == null) && !hasCssVariable()) { |
891 | | - throw new InvalidParamException("invalid-color", exp.toStringFromStart(), ac); |
892 | | - } |
893 | | - switch (val.getType()) { |
894 | | - case CssTypes.CSS_NUMBER: |
895 | | - case CssTypes.CSS_PERCENTAGE: |
896 | | - case CssTypes.CSS_VARIABLE: |
897 | | - cmyk.setAlpha(ac, val); |
898 | | - break; |
899 | | - default: |
900 | | - if (!hasCssVariable()) { |
901 | | - exp.starts(); |
902 | | - throw new InvalidParamException("colorfunc", val, "device-cmyk", ac); |
903 | | - } |
904 | | - } |
905 | | - // need to check if we get a comma after this. |
906 | | - op = exp.getOperator(); |
907 | | - exp.next(); |
908 | | - } |
909 | | - if (op == COMMA) { |
910 | | - //the optional fallback |
911 | | - if (exp.end() && !hasCssVariable()) { |
912 | | - throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "device-cmyk", ac); |
913 | | - } |
914 | | - val = exp.getValue(); |
915 | | - cmyk.setFallbackColor(ac, val); |
916 | | - exp.next(); |
917 | | - } |
918 | | - } |
919 | | - // extra values? |
920 | | - if (!exp.end() && !hasCssVariable()) { |
921 | | - exp.starts(); |
922 | | - throw new InvalidParamException("colorfunc", exp.toStringFromStart(), "device-cmyk", ac); |
923 | | - } |
| 782 | + // HWB defined in CSSColor Level 5 and onward, currently used in the CSS level |
| 783 | + cmyk = DeviceCMYK.parseDeviceCMYK(ac, exp, this); |
924 | 784 | } |
925 | 785 |
|
926 | 786 | public void setColorMix(ApplContext ac, CssExpression exp) |
|
0 commit comments