@@ -107,9 +107,9 @@ tokenize([$<|R0], Acc, Tokens, L0) ->
107107 Data = {data ,lists :reverse (Acc ),L0 },
108108 next_token (Tag , R1 , [Tag ,Data |Tokens ], L1 )
109109 end ;
110- tokenize ([C = $\n |R0 ], Acc , Tokens , L ) ->
111- tokenize (R0 , [C |Acc ], Tokens , L + 1 );
112- tokenize ([C = $ \r |R0 ], Acc , Tokens , L ) ->
110+ tokenize ([$ \r , $\n |R0 ], Acc , Tokens , L ) ->
111+ tokenize (R0 , [$ \n , $ \r |Acc ], Tokens , L + 1 );
112+ tokenize ([C |R0 ], Acc , Tokens , L ) when C =:= $ \n ; C =:= $ \r ->
113113 tokenize (R0 , [C |Acc ], Tokens , L + 1 );
114114tokenize ([C |R0 ], Acc , Tokens , L ) ->
115115 tokenize (R0 , [C |Acc ], Tokens , L ).
@@ -183,31 +183,26 @@ scan_value(R, L) ->
183183
184184scan_token ([], Acc , L ) ->
185185 {lists :reverse (Acc ), [], L };
186- scan_token (R = [$> |_ ], Acc , L ) ->
187- {lists :reverse (Acc ), R , L };
188- scan_token (R = [$< |_ ], Acc , L ) -> % %% bad html
186+ scan_token ([$\r ,$\n |R ], Acc , L ) ->
187+ {lists :reverse (Acc ), R , L + 1 };
188+ scan_token ([C |R ], Acc , L ) when C =:= $\n ; C =:= $\r ->
189+ {lists :reverse (Acc ), R , L + 1 };
190+ scan_token ([C |R ], Acc , L ) when C =:= $\s ; C =:= $\t ->
189191 {lists :reverse (Acc ), R , L };
190- scan_token (R = [$= |_ ], Acc , L ) -> % % bad html
192+ scan_token (R = [C |_ ], Acc , L ) when C =:= $> ; C =:= $< ; C =:= $= ->
191193 {lists :reverse (Acc ), R , L };
192- scan_token ([C |R ], Acc , L0 ) ->
193- case char_class (C ) of
194- space ->
195- {lists :reverse (Acc ), R , L0 };
196- nl ->
197- {lists :reverse (Acc ), R , L0 + 1 };
198- _ ->
199- scan_token (R , [C |Acc ], L0 )
200- end .
194+ scan_token ([C |R ], Acc , L ) ->
195+ scan_token (R , [C |Acc ], L ).
201196
202197% %
203198
204199scan_quote ([], Acc , _Q , L ) ->
205200 {lists :reverse (Acc ), [], L };
206201scan_quote ([Q |R ], Acc , Q , L ) ->
207202 {lists :reverse (Acc ), R , L };
208- scan_quote ([C = $\n |R ], Acc , Q , L ) ->
209- scan_quote (R , [C |Acc ], Q , L + 1 );
210- scan_quote ([C = $ \r |R ], Acc , Q , L ) ->
203+ scan_quote ([$ \r , $\n |R ], Acc , Q , L ) ->
204+ scan_quote (R , [$ \n , $ \r |Acc ], Q , L + 1 );
205+ scan_quote ([C |R ], Acc , Q , L ) when C =:= $ \n ; C =:= $ \r ->
211206 scan_quote (R , [C |Acc ], Q , L + 1 );
212207scan_quote ([C |R ], Acc , Q , L ) ->
213208 scan_quote (R , [C |Acc ], Q , L ).
@@ -219,6 +214,10 @@ scan_endtag(R, Tag, L) ->
219214
220215scan_endtag ([], _Tag , Acc , L ) ->
221216 {lists :reverse (Acc ), [], L };
217+ scan_endtag ([$\r ,$\n |R ], Tag , Acc , L ) ->
218+ scan_endtag (R , Tag , [$\n ,$\r |Acc ], L + 1 );
219+ scan_endtag ([C |R ], Tag , Acc , L ) when C =:= $\n ; C =:= $\r ->
220+ scan_endtag (R , Tag , [C |Acc ], L + 1 );
222221scan_endtag (R = [$< ,$/ |R0 ], Tag , Acc , L0 ) ->
223222 case casecmp (Tag , R0 ) of
224223 {true , R1 } ->
@@ -231,54 +230,45 @@ scan_endtag(R=[$<,$/|R0], Tag, Acc, L0) ->
231230 false ->
232231 scan_endtag (R0 , Tag , Acc , L0 )
233232 end ;
234- scan_endtag ([C = $\n |R ], Tag , Acc , L ) ->
235- scan_endtag (R , Tag , [C |Acc ], L + 1 );
236- scan_endtag ([C = $\r |R ], Tag , Acc , L ) ->
237- scan_endtag (R , Tag , [C |Acc ], L + 1 );
238233scan_endtag ([C |R ], Tag , Acc , L ) ->
239234 scan_endtag (R , Tag , [C |Acc ], L ).
240235
241236% %
242237
243- casecmp ([], R ) -> {true , R };
244- casecmp ([C1 |T1 ], [C2 |T2 ]) ->
245- C2low = lowercase_ch (C2 ),
246- if C1 == C2low -> casecmp (T1 ,T2 );
247- true -> false
248- end .
238+ casecmp ([], R ) ->
239+ {true , R };
240+ casecmp ([C |T1 ], [C |T2 ]) ->
241+ casecmp (T1 , T2 );
242+ casecmp ([C1 |T1 ], [C2 |T2 ]) when C1 >= $a , C1 =< $z , C1 =:= (C2 - $A + $a ) ->
243+ casecmp (T1 , T2 );
244+ casecmp ([C1 |T1 ], [C2 |T2 ]) when C2 >= $a , C2 =< $z , C2 =:= (C1 - $A + $a ) ->
245+ casecmp (T1 , T2 );
246+ casecmp (_L1 , _L2 ) ->
247+ false .
249248
250249% %
251250
252- char_class ( $ \n ) -> nl ;
253- char_class ( $ \r ) -> nl ;
254- char_class ( $ ) -> space ;
255- char_class ( $ \t ) -> space ;
256- char_class ( C ) when C >= $a , C =< $z -> alpha ;
257- char_class ( C ) when C >= $A , C =< $Z -> alpha ;
258- char_class ( C ) when C >= $0 , C =< $9 -> digit ;
259- char_class ( _C ) -> other .
251+ skip_space ([ $ \r , $ \n | R ], L ) ->
252+ skip_space ( R , L + 1 ) ;
253+ skip_space ([ C | R ], L ) when C =:= $ \n ; C =:= $ \r ->
254+ skip_space ( R , L + 1 ) ;
255+ skip_space ([ C | R ], L ) when C =:= $ \s ; C =:= $ \t ->
256+ skip_space ( R , L ) ;
257+ skip_space ( R , L ) ->
258+ { R , L } .
260259
261260% %
262261
263- skip_space ([], L ) ->
262+ skip_comment ([], L ) ->
264263 {[], L };
265- skip_space (R = [C |R0 ], L ) ->
266- case char_class (C ) of
267- nl ->
268- skip_space (R0 , L + 1 );
269- space ->
270- skip_space (R0 , L );
271- _ ->
272- {R , L }
273- end .
274-
275- % %
276-
277- skip_comment ([], L ) -> {[], L };
278- skip_comment ([$- ,$- ,$> |R ],L ) -> {R ,L };
279- skip_comment ([$\n |R ],L ) -> skip_comment (R ,L + 1 );
280- skip_comment ([$\r |R ],L ) -> skip_comment (R ,L + 1 );
281- skip_comment ([_C |R ],L ) -> skip_comment (R ,L ).
264+ skip_comment ([$- , $- , $> |R ], L ) ->
265+ {R , L };
266+ skip_comment ([$\r ,$\n |R ], L ) ->
267+ skip_comment (R , L + 1 );
268+ skip_comment ([C |R ], L ) when C =:= $\n ; C =:= $\r ->
269+ skip_comment (R , L + 1 );
270+ skip_comment ([_C |R ], L ) ->
271+ skip_comment (R , L ).
282272
283273% %
284274
0 commit comments