@@ -42,7 +42,7 @@ public static string ToUri(this IEnumerable<Token> value)
4242 {
4343 var element = value . OnlyOrDefault ( ) ;
4444
45- if ( element != null && element . Type == TokenType . Url ) return element . Data ;
45+ if ( element is { Type : TokenType . Url } ) return element . Data ;
4646
4747 return null ;
4848 }
@@ -86,17 +86,47 @@ public static Length ToLength(this FontSize fontSize)
8686 {
8787 var element = value . OnlyOrDefault ( ) ;
8888
89- if ( element != null && element . Type == TokenType . Percentage )
90- return new Percent ( ( ( UnitToken ) element ) . Value ) ;
89+ if ( element is { Type : TokenType . Percentage } )
90+ return new Percent ( ( ( UnitToken ) element ) . Value ) ;
9191
9292 return null ;
9393 }
9494
95+ public static Percent ? ToPercentOrFraction ( this IEnumerable < Token > value )
96+ {
97+ var enumerable = value as Token [ ] ?? value . ToArray ( ) ;
98+ var percent = ToPercent ( enumerable ) ;
99+
100+ if ( percent is not null )
101+ {
102+ return percent ;
103+ }
104+
105+ var element = enumerable . OnlyOrDefault ( ) ;
106+
107+ if ( element is not { Type : TokenType . Percentage } )
108+ {
109+ return null ;
110+ }
111+
112+ var number = ( ( NumberToken ) element ) . Value ;
113+
114+ try
115+ {
116+ var percentage = number / 100 ;
117+ return new Percent ( percentage ) ;
118+ }
119+ catch
120+ {
121+ return null ;
122+ }
123+ }
124+
95125 public static string ToCssString ( this IEnumerable < Token > value )
96126 {
97127 var element = value . OnlyOrDefault ( ) ;
98128
99- if ( element != null && element . Type == TokenType . String ) return element . Data ;
129+ if ( element is { Type : TokenType . String } ) return element . Data ;
100130
101131 return null ;
102132 }
0 commit comments