@@ -35,9 +35,11 @@ import {
3535 TLD ,
3636 OPENBRACE ,
3737 OPENBRACKET ,
38+ OPENANGLEBRACKET ,
3839 OPENPAREN ,
3940 CLOSEBRACE ,
4041 CLOSEBRACKET ,
42+ CLOSEANGLEBRACKET ,
4143 CLOSEPAREN ,
4244} from './tokens/text' ;
4345
@@ -55,34 +57,37 @@ let S_START = makeState();
5557
5658// Intermediate states for URLs. Note that domains that begin with a protocol
5759// are treated slighly differently from those that don't.
58- let S_PROTOCOL = makeState ( ) ; // e.g., 'http:'
59- let S_PROTOCOL_SLASH = makeState ( ) ; // e.g., '/', 'http:/''
60- let S_PROTOCOL_SLASH_SLASH = makeState ( ) ; // e.g., '//', 'http://'
61- let S_DOMAIN = makeState ( ) ; // parsed string ends with a potential domain name (A)
62- let S_DOMAIN_DOT = makeState ( ) ; // (A) domain followed by DOT
63- let S_TLD = makeState ( URL ) ; // (A) Simplest possible URL with no query string
64- let S_TLD_COLON = makeState ( ) ; // (A) URL followed by colon (potential port number here)
65- let S_TLD_PORT = makeState ( URL ) ; // TLD followed by a port number
66- let S_URL = makeState ( URL ) ; // Long URL with optional port and maybe query string
67- let S_URL_NON_ACCEPTING = makeState ( ) ; // URL followed by some symbols (will not be part of the final URL)
68- let S_URL_OPENBRACE = makeState ( ) ; // URL followed by {
69- let S_URL_OPENBRACKET = makeState ( ) ; // URL followed by [
70- let S_URL_OPENPAREN = makeState ( ) ; // URL followed by (
71- let S_URL_OPENBRACE_Q = makeState ( URL ) ; // URL followed by { and some symbols that the URL can end it
72- let S_URL_OPENBRACKET_Q = makeState ( URL ) ; // URL followed by [ and some symbols that the URL can end it
73- let S_URL_OPENPAREN_Q = makeState ( URL ) ; // URL followed by ( and some symbols that the URL can end it
74- let S_URL_OPENBRACE_SYMS = makeState ( ) ; // S_URL_OPENBRACE_Q followed by some symbols it cannot end it
75- let S_URL_OPENBRACKET_SYMS = makeState ( ) ; // S_URL_OPENBRACKET_Q followed by some symbols it cannot end it
76- let S_URL_OPENPAREN_SYMS = makeState ( ) ; // S_URL_OPENPAREN_Q followed by some symbols it cannot end it
77- let S_EMAIL_DOMAIN = makeState ( ) ; // parsed string starts with local email info + @ with a potential domain name (C)
78- let S_EMAIL_DOMAIN_DOT = makeState ( ) ; // (C) domain followed by DOT
79- let S_EMAIL = makeState ( EMAIL ) ; // (C) Possible email address (could have more tlds)
80- let S_EMAIL_COLON = makeState ( ) ; // (C) URL followed by colon (potential port number here)
81- let S_EMAIL_PORT = makeState ( EMAIL ) ; // (C) Email address with a port
82- let S_LOCALPART = makeState ( ) ; // Local part of the email address
83- let S_LOCALPART_AT = makeState ( ) ; // Local part of the email address plus @
84- let S_LOCALPART_DOT = makeState ( ) ; // Local part of the email address plus '.' (localpart cannot end in .)
85- let S_NL = makeState ( MNL ) ; // single new line
60+ let S_PROTOCOL = makeState ( ) ; // e.g., 'http:'
61+ let S_PROTOCOL_SLASH = makeState ( ) ; // e.g., '/', 'http:/''
62+ let S_PROTOCOL_SLASH_SLASH = makeState ( ) ; // e.g., '//', 'http://'
63+ let S_DOMAIN = makeState ( ) ; // parsed string ends with a potential domain name (A)
64+ let S_DOMAIN_DOT = makeState ( ) ; // (A) domain followed by DOT
65+ let S_TLD = makeState ( URL ) ; // (A) Simplest possible URL with no query string
66+ let S_TLD_COLON = makeState ( ) ; // (A) URL followed by colon (potential port number here)
67+ let S_TLD_PORT = makeState ( URL ) ; // TLD followed by a port number
68+ let S_URL = makeState ( URL ) ; // Long URL with optional port and maybe query string
69+ let S_URL_NON_ACCEPTING = makeState ( ) ; // URL followed by some symbols (will not be part of the final URL)
70+ let S_URL_OPENBRACE = makeState ( ) ; // URL followed by {
71+ let S_URL_OPENBRACKET = makeState ( ) ; // URL followed by [
72+ let S_URL_OPENANGLEBRACKET = makeState ( ) ; // URL followed by <
73+ let S_URL_OPENPAREN = makeState ( ) ; // URL followed by (
74+ let S_URL_OPENBRACE_Q = makeState ( URL ) ; // URL followed by { and some symbols that the URL can end it
75+ let S_URL_OPENBRACKET_Q = makeState ( URL ) ; // URL followed by [ and some symbols that the URL can end it
76+ let S_URL_OPENANGLEBRACKET_Q = makeState ( URL ) ; // URL followed by < and some symbols that the URL can end it
77+ let S_URL_OPENPAREN_Q = makeState ( URL ) ; // URL followed by ( and some symbols that the URL can end it
78+ let S_URL_OPENBRACE_SYMS = makeState ( ) ; // S_URL_OPENBRACE_Q followed by some symbols it cannot end it
79+ let S_URL_OPENBRACKET_SYMS = makeState ( ) ; // S_URL_OPENBRACKET_Q followed by some symbols it cannot end it
80+ let S_URL_OPENANGLEBRACKET_SYMS = makeState ( ) ; // S_URL_OPENANGLEBRACKET_Q followed by some symbols it cannot end it
81+ let S_URL_OPENPAREN_SYMS = makeState ( ) ; // S_URL_OPENPAREN_Q followed by some symbols it cannot end it
82+ let S_EMAIL_DOMAIN = makeState ( ) ; // parsed string starts with local email info + @ with a potential domain name (C)
83+ let S_EMAIL_DOMAIN_DOT = makeState ( ) ; // (C) domain followed by DOT
84+ let S_EMAIL = makeState ( EMAIL ) ; // (C) Possible email address (could have more tlds)
85+ let S_EMAIL_COLON = makeState ( ) ; // (C) URL followed by colon (potential port number here)
86+ let S_EMAIL_PORT = makeState ( EMAIL ) ; // (C) Email address with a port
87+ let S_LOCALPART = makeState ( ) ; // Local part of the email address
88+ let S_LOCALPART_AT = makeState ( ) ; // Local part of the email address plus @
89+ let S_LOCALPART_DOT = makeState ( ) ; // Local part of the email address plus '.' (localpart cannot end in .)
90+ let S_NL = makeState ( MNL ) ; // single new line
8691
8792// Make path from start to protocol (with '//')
8893S_START
@@ -167,9 +172,11 @@ let qsNonAccepting = [
167172 PUNCTUATION ,
168173 CLOSEBRACE ,
169174 CLOSEBRACKET ,
175+ CLOSEANGLEBRACKET ,
170176 CLOSEPAREN ,
171177 OPENBRACE ,
172178 OPENBRACKET ,
179+ OPENANGLEBRACKET ,
173180 OPENPAREN
174181] ;
175182
@@ -180,48 +187,59 @@ let qsNonAccepting = [
180187S_URL
181188. on ( OPENBRACE , S_URL_OPENBRACE )
182189. on ( OPENBRACKET , S_URL_OPENBRACKET )
190+ . on ( OPENANGLEBRACKET , S_URL_OPENANGLEBRACKET )
183191. on ( OPENPAREN , S_URL_OPENPAREN ) ;
184192
185193// URL with extra symbols at the end, followed by an opening bracket
186194S_URL_NON_ACCEPTING
187195. on ( OPENBRACE , S_URL_OPENBRACE )
188196. on ( OPENBRACKET , S_URL_OPENBRACKET )
197+ . on ( OPENANGLEBRACKET , S_URL_OPENANGLEBRACKET )
189198. on ( OPENPAREN , S_URL_OPENPAREN ) ;
190199
191200// Closing bracket component. This character WILL be included in the URL
192201S_URL_OPENBRACE . on ( CLOSEBRACE , S_URL ) ;
193202S_URL_OPENBRACKET . on ( CLOSEBRACKET , S_URL ) ;
203+ S_URL_OPENANGLEBRACKET . on ( CLOSEANGLEBRACKET , S_URL ) ;
194204S_URL_OPENPAREN . on ( CLOSEPAREN , S_URL ) ;
195205S_URL_OPENBRACE_Q . on ( CLOSEBRACE , S_URL ) ;
196206S_URL_OPENBRACKET_Q . on ( CLOSEBRACKET , S_URL ) ;
207+ S_URL_OPENANGLEBRACKET_Q . on ( CLOSEANGLEBRACKET , S_URL ) ;
197208S_URL_OPENPAREN_Q . on ( CLOSEPAREN , S_URL ) ;
198209S_URL_OPENBRACE_SYMS . on ( CLOSEBRACE , S_URL ) ;
199210S_URL_OPENBRACKET_SYMS . on ( CLOSEBRACKET , S_URL ) ;
211+ S_URL_OPENANGLEBRACKET_SYMS . on ( CLOSEANGLEBRACKET , S_URL ) ;
200212S_URL_OPENPAREN_SYMS . on ( CLOSEPAREN , S_URL ) ;
201213
202214// URL that beings with an opening bracket, followed by a symbols.
203215// Note that the final state can still be `S_URL_OPENBRACE_Q` (if the URL only
204216// has a single opening bracket for some reason).
205217S_URL_OPENBRACE . on ( qsAccepting , S_URL_OPENBRACE_Q ) ;
206218S_URL_OPENBRACKET . on ( qsAccepting , S_URL_OPENBRACKET_Q ) ;
219+ S_URL_OPENANGLEBRACKET . on ( qsAccepting , S_URL_OPENANGLEBRACKET_Q ) ;
207220S_URL_OPENPAREN . on ( qsAccepting , S_URL_OPENPAREN_Q ) ;
208221S_URL_OPENBRACE . on ( qsNonAccepting , S_URL_OPENBRACE_SYMS ) ;
209222S_URL_OPENBRACKET . on ( qsNonAccepting , S_URL_OPENBRACKET_SYMS ) ;
223+ S_URL_OPENANGLEBRACKET . on ( qsNonAccepting , S_URL_OPENANGLEBRACKET_SYMS ) ;
210224S_URL_OPENPAREN . on ( qsNonAccepting , S_URL_OPENPAREN_SYMS ) ;
211225
212226// URL that begins with an opening bracket, followed by some symbols
213227S_URL_OPENBRACE_Q . on ( qsAccepting , S_URL_OPENBRACE_Q ) ;
214228S_URL_OPENBRACKET_Q . on ( qsAccepting , S_URL_OPENBRACKET_Q ) ;
229+ S_URL_OPENANGLEBRACKET_Q . on ( qsAccepting , S_URL_OPENANGLEBRACKET_Q ) ;
215230S_URL_OPENPAREN_Q . on ( qsAccepting , S_URL_OPENPAREN_Q ) ;
216231S_URL_OPENBRACE_Q . on ( qsNonAccepting , S_URL_OPENBRACE_Q ) ;
217232S_URL_OPENBRACKET_Q . on ( qsNonAccepting , S_URL_OPENBRACKET_Q ) ;
233+ S_URL_OPENANGLEBRACKET_Q . on ( qsNonAccepting , S_URL_OPENANGLEBRACKET_Q ) ;
218234S_URL_OPENPAREN_Q . on ( qsNonAccepting , S_URL_OPENPAREN_Q ) ;
219235
220236S_URL_OPENBRACE_SYMS . on ( qsAccepting , S_URL_OPENBRACE_Q ) ;
221237S_URL_OPENBRACKET_SYMS . on ( qsAccepting , S_URL_OPENBRACKET_Q ) ;
238+ S_URL_OPENANGLEBRACKET_SYMS . on ( qsAccepting , S_URL_OPENANGLEBRACKET_Q ) ;
222239S_URL_OPENPAREN_SYMS . on ( qsAccepting , S_URL_OPENPAREN_Q ) ;
223240S_URL_OPENBRACE_SYMS . on ( qsNonAccepting , S_URL_OPENBRACE_SYMS ) ;
224241S_URL_OPENBRACKET_SYMS . on ( qsNonAccepting , S_URL_OPENBRACKET_SYMS ) ;
242+ S_URL_OPENANGLEBRACKET_SYMS . on ( qsNonAccepting , S_URL_OPENANGLEBRACKET_SYMS ) ;
225243S_URL_OPENPAREN_SYMS . on ( qsNonAccepting , S_URL_OPENPAREN_SYMS ) ;
226244
227245// Account for the query string
0 commit comments