/[suikacvs]/markup/html/whatpm/Whatpm/CSS/Tokenizer.pm
Suika

Diff of /markup/html/whatpm/Whatpm/CSS/Tokenizer.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by wakaba, Sat Sep 8 10:21:04 2007 UTC revision 1.9 by wakaba, Sat Sep 8 11:44:32 2007 UTC
# Line 251  sub get_next_token ($) { Line 251  sub get_next_token ($) {
251          } else {          } else {
252            # stay in the state.            # stay in the state.
253            # reprocess            # reprocess
254            return {type => DELIM_STATE, value => '/'};            return {type => DELIM_TOKEN, value => '/'};
255            #redo A;            #redo A;
256          }                  }        
257        } elsif ($self->{c} == 0x003C) { # <        } elsif ($self->{c} == 0x003C) { # <
# Line 259  sub get_next_token ($) { Line 259  sub get_next_token ($) {
259          $self->{c} = $self->{get_char}->();          $self->{c} = $self->{get_char}->();
260          if ($self->{c} == 0x0021) { # !          if ($self->{c} == 0x0021) { # !
261            $self->{c} = $self->{get_char}->();            $self->{c} = $self->{get_char}->();
262            if ($self->{c} == 0x002C) { # -            if ($self->{c} == 0x002D) { # -
263              $self->{c} = $self->{get_char}->();              $self->{c} = $self->{get_char}->();
264              if ($self->{c} == 0x002C) { # -              if ($self->{c} == 0x002D) { # -
265                $self->{state} = BEFORE_TOKEN_STATE;                $self->{state} = BEFORE_TOKEN_STATE;
266                $self->{c} = $self->{get_char}->();                $self->{c} = $self->{get_char}->();
267                return {type => CDO_TOKEN};                return {type => CDO_TOKEN};
# Line 556  sub get_next_token ($) { Line 556  sub get_next_token ($) {
556          redo A;          redo A;
557        } else {        } else {
558          $self->{state} = BEFORE_TOKEN_STATE;          $self->{state} = BEFORE_TOKEN_STATE;
559          $self->{c} = $self->{get_char}->();          # reprocess
560          return {type => DELIM_TOKEN, value => '#'};          return {type => DELIM_TOKEN, value => '#'};
561          #redo A;          #redo A;
562        }        }
# Line 803  sub get_next_token ($) { Line 803  sub get_next_token ($) {
803                URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN,                URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN,
804                URI_PREFIX_INVALID_TOKEN, URI_PREFIX_INVALID_TOKEN,                URI_PREFIX_INVALID_TOKEN, URI_PREFIX_INVALID_TOKEN,
805            }->{$self->{t}->{type}};            }->{$self->{t}->{type}};
806            $self->{t}->{value} .= "\x0D\x0A";            $self->{t}->{value} .= "\x0D";
807            $self->{state} = URI_UNQUOTED_STATE;            $self->{state} = ESCAPE_BEFORE_LF_STATE;
808            $self->{c} = $self->{get_char}->();            $self->{c} = $self->{get_char}->();
809            redo A;            redo A;
810          } else {          } else {
811            ## Note: In |nl| in ... in |string| or |ident|.            ## Note: In |nl| in ... in |string| or |ident|.
812            $self->{t}->{value} .= "\x0D\x0A";            $self->{t}->{value} .= "\x0D";
813            $self->{state} = ESCAPE_BEFORE_LF_STATE;            $self->{state} = ESCAPE_BEFORE_LF_STATE;
814            $self->{c} = $self->{get_char}->();            $self->{c} = $self->{get_char}->();
815            redo A;            redo A;
# Line 840  sub get_next_token ($) { Line 840  sub get_next_token ($) {
840            return {type => DELIM_TOKEN, value => '\\'};            return {type => DELIM_TOKEN, value => '\\'};
841            #redo A;            #redo A;
842          }          }
843        } else {        } elsif ($q == 1) {
844          $self->{state} = $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE;          $self->{state} = URI_UNQUOTED_STATE;
845          $self->{c} = $self->{get_char}->();          $self->{c} = $self->{get_char}->();
846          redo A;          redo A;
847          } else {
848            unshift @{$self->{token}}, {type => DELIM_TOKEN, value => '\\'};
849            $self->{t}->{type} = {
850              STRING_TOKEN, INVALID_TOKEN,
851              URI_TOKEN, URI_INVALID_TOKEN,
852              URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN,
853            }->{$self->{t}->{type}} || $self->{t}->{type};
854            $self->{state} = BEFORE_TOKEN_STATE;
855            # reprocess
856            return $self->{t};
857            #redo A;
858        }        }
859      } elsif ($self->{state} == ESCAPE_STATE) {      } elsif ($self->{state} == ESCAPE_STATE) {
860        ## NOTE: third..seventh character of |unicode| in |escape|.        ## NOTE: third..seventh character of |unicode| in |escape|.
# Line 907  sub get_next_token ($) { Line 918  sub get_next_token ($) {
918      } elsif ($self->{state} == ESCAPE_BEFORE_LF_STATE) {      } elsif ($self->{state} == ESCAPE_BEFORE_LF_STATE) {
919        ## NOTE: |\n| in |\r\n| in |unicode| in |escape|.        ## NOTE: |\n| in |\r\n| in |unicode| in |escape|.
920        if ($self->{c} == 0x000A) { # \n        if ($self->{c} == 0x000A) { # \n
921          $self->{t}->{value} .= chr $char;          $self->{t}->{value} .= chr $self->{c};
922          $self->{state} = $q == 0 ? NAME_STATE :          $self->{state} = $q == 0 ? NAME_STATE :
923              $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE;              $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE;
924          $self->{c} = $self->{get_char}->();          $self->{c} = $self->{get_char}->();
925          redo A;          redo A;
926        } else {        } else {
         $self->{t}->{value} .= chr $char;  
927          $self->{state} = $q == 0 ? NAME_STATE :          $self->{state} = $q == 0 ? NAME_STATE :
928              $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE;              $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE;
929          # reconsume          # reprocess
930          redo A;          redo A;
931        }        }
932      } elsif ($self->{state} == STRING_STATE) {      } elsif ($self->{state} == STRING_STATE) {
# Line 980  sub get_next_token ($) { Line 990  sub get_next_token ($) {
990          $self->{c} = $self->{get_char}->();          $self->{c} = $self->{get_char}->();
991          redo A;          redo A;
992        } else {        } else {
993          unshift @{$self->{token}}, {type => DELIM_STATE, value => '.'};          unshift @{$self->{token}}, {type => DELIM_TOKEN, value => '.'};
994          $self->{t}->{number} = $self->{t}->{value};          $self->{t}->{number} = $self->{t}->{value};
995          $self->{t}->{value} = '';          $self->{t}->{value} = '';
996          $self->{state} = BEFORE_TOKEN_STATE;          $self->{state} = BEFORE_TOKEN_STATE;
# Line 997  sub get_next_token ($) { Line 1007  sub get_next_token ($) {
1007          redo A;          redo A;
1008        } else {        } else {
1009          $self->{state} = BEFORE_TOKEN_STATE;          $self->{state} = BEFORE_TOKEN_STATE;
1010          $self->{c} = $self->{get_char}->();          # reprocess
1011          return {type => DELIM_TOKEN, value => '.'};          return {type => DELIM_TOKEN, value => '.'};
1012          #redo A;          #redo A;
1013        }        }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.9

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24