2018-04-02 19:06:48 +02:00
/ * *
* @ author n1474335 [ n1474335 @ gmail . com ]
* @ copyright Crown Copyright 2016
* @ license Apache - 2.0
* /
import Operation from "../Operation" ;
2018-05-14 13:58:01 +02:00
import { toHex , TO _HEX _DELIM _OPTIONS } from "../lib/Hex" ;
2018-04-02 19:06:48 +02:00
import Utils from "../Utils" ;
/ * *
* To Hex operation
* /
class ToHex extends Operation {
/ * *
* ToHex constructor
* /
constructor ( ) {
super ( ) ;
this . name = "To Hex" ;
this . module = "Default" ;
this . description = "Converts the input string to hexadecimal bytes separated by the specified delimiter.<br><br>e.g. The UTF-8 encoded string <code>Γειά σ ο υ </code> becomes <code>ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a</code>" ;
this . inputType = "ArrayBuffer" ;
this . outputType = "string" ;
this . args = [
{
name : "Delimiter" ,
type : "option" ,
2018-05-14 13:58:01 +02:00
value : TO _HEX _DELIM _OPTIONS
2018-04-02 19:06:48 +02:00
}
] ;
}
/ * *
* @ param { ArrayBuffer } input
* @ param { Object [ ] } args
* @ returns { string }
* /
run ( input , args ) {
const delim = Utils . charRep ( args [ 0 ] || "Space" ) ;
return toHex ( new Uint8Array ( input ) , delim , 2 ) ;
}
/ * *
* Highlight to Hex
*
* @ param { Object [ ] } pos
* @ param { number } pos [ ] . start
* @ param { number } pos [ ] . end
* @ param { Object [ ] } args
* @ returns { Object [ ] } pos
* /
highlight ( pos , args ) {
const delim = Utils . charRep ( args [ 0 ] || "Space" ) ,
len = delim === "\r\n" ? 1 : delim . length ;
pos [ 0 ] . start = pos [ 0 ] . start * ( 2 + len ) ;
pos [ 0 ] . end = pos [ 0 ] . end * ( 2 + len ) - len ;
// 0x and \x are added to the beginning if they are selected, so increment the positions accordingly
if ( delim === "0x" || delim === "\\x" ) {
pos [ 0 ] . start += 2 ;
pos [ 0 ] . end += 2 ;
}
return pos ;
}
/ * *
* Highlight from Hex
*
* @ param { Object [ ] } pos
* @ param { number } pos [ ] . start
* @ param { number } pos [ ] . end
* @ param { Object [ ] } args
* @ returns { Object [ ] } pos
* /
highlightReverse ( pos , args ) {
const delim = Utils . charRep ( args [ 0 ] || "Space" ) ,
len = delim === "\r\n" ? 1 : delim . length ,
width = len + 2 ;
// 0x and \x are added to the beginning if they are selected, so increment the positions accordingly
if ( delim === "0x" || delim === "\\x" ) {
if ( pos [ 0 ] . start > 1 ) pos [ 0 ] . start -= 2 ;
else pos [ 0 ] . start = 0 ;
if ( pos [ 0 ] . end > 1 ) pos [ 0 ] . end -= 2 ;
else pos [ 0 ] . end = 0 ;
}
pos [ 0 ] . start = pos [ 0 ] . start === 0 ? 0 : Math . round ( pos [ 0 ] . start / width ) ;
pos [ 0 ] . end = pos [ 0 ] . end === 0 ? 0 : Math . ceil ( pos [ 0 ] . end / width ) ;
return pos ;
}
}
export default ToHex ;