import {replaceAll} from './text'
/**
* A template literal tag that does nothing. Useful for syntax highlighting of GLSL code.
*
* @example
* ```js
* const vertexShader = glsl`
* void main() {}
* `
* ```
* @category Template Literals
*/
export const glsl = (strings: any, ...rest: any[]) => String.raw({raw: strings} as TemplateStringsArray, ...rest)
/**
* A template literal tag that does nothing. Useful for syntax highlighting of CSS code.
*
* @example
* ```js
* const vertexShader = css`
* .my-class {
* color: red;
* }
* `
* ```
* @category Template Literals
*/
export const css = (strings: any, ...rest: any[]) => String.raw({raw: strings} as TemplateStringsArray, ...rest)
/**
* A template literal tag that does nothing. Useful for syntax highlighting of HTML code.
*
* @example
* ```js
* const vertexShader = html`
*
* `
* ```
* @category Template Literals
*/
export const html = (strings: any, ...rest: any[]) => String.raw({raw: strings} as TemplateStringsArray, ...rest)
/**
* Converts an SVG string to data url. This is useful for creating images from SVGs, or using SVGs in CSS.
* To use put in template string: ```url(${svgUrl``})```
* @param strings - template strings
* @param rest - template values
*
* @example
* ```typescript
* const url = svgUrl`
*
* `
* console.log(url) // data:image/svg+xml;charset=UTF-8,...
* ```
*
* @category Template Literals
*/
export const svgUrl = (strings: any, ...rest: any[]) => {
let encoded = String.raw({raw: strings} as TemplateStringsArray, ...rest)
encoded = replaceAll(encoded, '%', '%25')
encoded = replaceAll(encoded, '> <', '><') // normalise spaces elements
encoded = replaceAll(encoded, '; }', ';}') // normalise spaces css
encoded = replaceAll(encoded, '<', '%3c')
encoded = replaceAll(encoded, '>', '%3e')
encoded = replaceAll(encoded, '"', '\'')
encoded = replaceAll(encoded, '#', '%23') // needed for ie and firefox
encoded = replaceAll(encoded, '{', '%7b')
encoded = replaceAll(encoded, '}', '%7d')
encoded = replaceAll(encoded, '|', '%7c')
encoded = replaceAll(encoded, '^', '%5e')
encoded = replaceAll(encoded, '`', '%60')
encoded = replaceAll(encoded, '@', '%40')
encoded = replaceAll(encoded, '&', '&')
encoded = replaceAll(encoded, '\n', '%0A')
return 'data:image/svg+xml;charset=UTF-8,' + encoded
}