Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F95279555
encode.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Dec 14, 07:56
Size
2 KB
Mime Type
text/x-java
Expires
Mon, Dec 16, 07:56 (2 d)
Engine
blob
Format
Raw Data
Handle
22947368
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
encode.js
View Options
import
htmlTrie
from
"./generated/encode-html.js"
;
import
{
xmlReplacer
,
getCodePoint
}
from
"./escape.js"
;
const
htmlReplacer
=
/[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g
;
/**
* Encodes all characters in the input using HTML entities. This includes
* characters that are valid ASCII characters in HTML documents, such as `#`.
*
* To get a more compact output, consider using the `encodeNonAsciiHTML`
* function, which will only encode characters that are not valid in HTML
* documents, as well as non-ASCII characters.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `ü`) will be used.
*/
export
function
encodeHTML
(
data
)
{
return
encodeHTMLTrieRe
(
htmlReplacer
,
data
);
}
/**
* Encodes all non-ASCII characters, as well as characters not valid in HTML
* documents using HTML entities. This function will not encode characters that
* are valid in HTML documents, such as `#`.
*
* If a character has no equivalent entity, a numeric hexadecimal reference
* (eg. `ü`) will be used.
*/
export
function
encodeNonAsciiHTML
(
data
)
{
return
encodeHTMLTrieRe
(
xmlReplacer
,
data
);
}
function
encodeHTMLTrieRe
(
regExp
,
str
)
{
let
ret
=
""
;
let
lastIdx
=
0
;
let
match
;
while
((
match
=
regExp
.
exec
(
str
))
!==
null
)
{
const
i
=
match
.
index
;
ret
+=
str
.
substring
(
lastIdx
,
i
);
const
char
=
str
.
charCodeAt
(
i
);
let
next
=
htmlTrie
.
get
(
char
);
if
(
typeof
next
===
"object"
)
{
// We are in a branch. Try to match the next char.
if
(
i
+
1
<
str
.
length
)
{
const
nextChar
=
str
.
charCodeAt
(
i
+
1
);
const
value
=
typeof
next
.
n
===
"number"
?
next
.
n
===
nextChar
?
next
.
o
:
undefined
:
next
.
n
.
get
(
nextChar
);
if
(
value
!==
undefined
)
{
ret
+=
value
;
lastIdx
=
regExp
.
lastIndex
+=
1
;
continue
;
}
}
next
=
next
.
v
;
}
// We might have a tree node without a value; skip and use a numeric entitiy.
if
(
next
!==
undefined
)
{
ret
+=
next
;
lastIdx
=
i
+
1
;
}
else
{
const
cp
=
getCodePoint
(
str
,
i
);
ret
+=
`
&
#
x$
{
cp
.
toString
(
16
)};
`
;
// Increase by 1 if we have a surrogate pair
lastIdx
=
regExp
.
lastIndex
+=
Number
(
cp
!==
char
);
}
}
return
ret
+
str
.
substr
(
lastIdx
);
}
//# sourceMappingURL=encode.js.map
Event Timeline
Log In to Comment