html = {}

function html.get_keywords()
  -- HTML elements and attributes
  local keywords0_set = "ANY ATTLIST CDATA DOCTYPE EMPT ENTITIES ENTITY ELEMENT FIXED ID IDREF IDREFS IMPLIED NDATA NMTOKEN NMTOKENS NOTATION PCDATA PUBLIC REQUIRED SYSTEM a abbr accept accept-charset accesskey acronym action address align alink allowfullscreen allowpaymentrequest allowtransparency alt applet archive area article aside async audio autocomplete autofocus autoplay axis b background base basefont bdi bdo bgsound big blockquote body bgcolor blink border br button canvas caption center checkbox cite code col colgroup command contenteditable contextmenu controls crossorigin bordercolor bottommargin cellpadding cellspacing char charoff charset checked class classid clear codebase codetype color cols colspan compact content coords data datafld dataformatas datagrid datalist datapagesize datasrc datatemplate datetime dd declare default defer del details dfn dialog dir dirname disabled div dl doctype download draggable dt em embed enctype event eventsource face fieldset figcaption figure file font footer for form formaction formenctype formmethod formnovalidate formtarget frame frameborder frameset framespacing h1 h2 h3 h4 h5 h6 head header headers height hgroup hidden high hr href hreflang hspace html http-equiv i id iframe image img input ins is isindex ismap itemid itemprop itemref itemscope itemtype kbd keygen kind label lang language leftmargin legend li link list listing longdesc loop low lowsrc main manifest map marginheight marginwidth mark marquee math max maxlength media menu menuitem meta meter method methods min minlength multicol multiple muted name nav nextid nobr noembed noframes nohref nonce noresize noscript noshade novalidate nowrap object ol onabort onaddtrack onafterprint onauxclick onbeforeprint onbeforeunload onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncopy oncuechange oncut ondblclick ondrag ondragend ondragenter ondragexit ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onenter onerror onexit onfocus onhashchange oninput oninvalid onkeydown onkeypress onkeyup onlanguagechange onload onloadeddata onloadedmetadata onloadend onloadstart onmessage onmousedown onmouseenter onmouseleave onmousemove onmouseout onmouseover onmouseup onoffline ononline onpagehide onpageshow onpaste onpause onplay onplaying onpopstate onprogress onratechange onrejectionhandled onremovetrack onreset onresize onscroll onseeked onseeking onselect onshow onstalled onstorage onsubmit onsuspend ontimeupdate ontoggle onunhandledrejection onunload onvolumechange onwaiting onwheel open optgroup optimum option output p param password pattern picture placeholder plaintext poster pre preload profile progress prompt q radio rb readonly referrerpolicy rel required reset rev reversed rightmargin role rows rowspan rp rt rtc ruby rules s samp sandbox scheme scope scoped script scrolling seamless section select selected shape size sizes small source spacer span spellcheck src srcdoc srclang srcset standby start step strike strong style sub submit summary sup svg tabindex table target tbody td template text textarea tfoot th thead time title topmargin tr track translate tt type typemustmatch u ul urn usemap valign value valuetype var version video vlink vspace wbr width wrap xml xmlns xmp"
  -- JavaScript keywords
  keywords1_set = "Infinity NaN arguments async await break case catch class const continue debugger default delete do else export extends false finally for function globalThis if import in instanceof let new null return static super switch this throw true try typeof undefined var void while with yield"
  -- VBScript keywords
  keywords2_set = "Alias And As Attribute Begin Boolean ByRef Byte ByVal Call Case Class Compare Const Continue Currency Date Declare Dim Do Double Each Else ElseIf Empty End Enum Eqv Erase Error Event Exit Explicit False For Friend Function Get Global GoSub Goto If Imp Implement In Integer Is Let Lib Load Long Loop LSet Me Mid Mod Module New Next Not Nothing Null Object On Option Optional Or Preserve Private Property Public RaiseEvent ReDim Rem Resume Return RSet Select Set Single Static Stop String Sub Then To True Type Unload Until Variant WEnd While With WithEvents Xor"
  -- Python keywords
  keywords3_set = nil
  -- PHP keywords
  keywords4_set = nil
  -- SGML and DTD keywords
  keywords5_set = "doctype DOCTYPE PUBLIC SYSTEM ELEMENT ATTLIST ENTITY ANY CDATA EMPT ENTITIES ID IDREF IDREFS NDATA NOTATION NMTOKEN NMTOKENS IMPLIED FIXED PCDATA REQUIRED"
  return keywords0_set,keywords1_set,keywords2_set,keywords3_set,keywords4_set,keywords5_set
end

function html.get_autocomplete()
  local autocomplete_set = "ANY ATTLIST CDATA DOCTYPE EMPT ENTITIES ENTITY ELEMENT FIXED ID IDREF IDREFS IMPLIED NDATA NMTOKEN NMTOKENS NOTATION PCDATA PUBLIC REQUIRED SYSTEM a abbr accept accept-charset accesskey acronym action address align alink allowfullscreen allowpaymentrequest allowtransparency alt applet archive area article aside async audio autocomplete autofocus autoplay axis b background base basefont bdi bdo bgsound big blockquote body bgcolor blink border br button canvas caption center checkbox cite code col colgroup command contenteditable contextmenu controls crossorigin bordercolor bottommargin cellpadding cellspacing char charoff charset checked class classid clear codebase codetype color cols colspan compact content coords data datafld dataformatas datagrid datalist datapagesize datasrc datatemplate datetime dd declare default defer del details dfn dialog dir dirname disabled div dl doctype download draggable dt em embed enctype event eventsource face fieldset figcaption figure file font footer for form formaction formenctype formmethod formnovalidate formtarget frame frameborder frameset framespacing h1 h2 h3 h4 h5 h6 head header headers height hgroup hidden high hr href hreflang hspace html http-equiv i id iframe image img input ins is isindex ismap itemid itemprop itemref itemscope itemtype kbd keygen kind label lang language leftmargin legend li link list listing longdesc loop low lowsrc main manifest map marginheight marginwidth mark marquee math max maxlength media menu menuitem meta meter method methods min minlength multicol multiple muted name nav nextid nobr noembed noframes nohref nonce noresize noscript noshade novalidate nowrap object ol onabort onaddtrack onafterprint onauxclick onbeforeprint onbeforeunload onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncopy oncuechange oncut ondblclick ondrag ondragend ondragenter ondragexit ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onenter onerror onexit onfocus onhashchange oninput oninvalid onkeydown onkeypress onkeyup onlanguagechange onload onloadeddata onloadedmetadata onloadend onloadstart onmessage onmousedown onmouseenter onmouseleave onmousemove onmouseout onmouseover onmouseup onoffline ononline onpagehide onpageshow onpaste onpause onplay onplaying onpopstate onprogress onratechange onrejectionhandled onremovetrack onreset onresize onscroll onseeked onseeking onselect onshow onstalled onstorage onsubmit onsuspend ontimeupdate ontoggle onunhandledrejection onunload onvolumechange onwaiting onwheel open optgroup optimum option output p param password pattern picture placeholder plaintext poster pre preload profile progress prompt q radio rb readonly referrerpolicy rel required reset rev reversed rightmargin role rows rowspan rp rt rtc ruby rules s samp sandbox scheme scope scoped script scrolling seamless section select selected shape size sizes small source spacer span spellcheck src srcdoc srclang srcset standby start step strike strong style sub submit summary sup svg tabindex table target tbody td template text textarea tfoot th thead time title topmargin tr track translate tt type typemustmatch u ul urn usemap valign value valuetype var version video vlink vspace wbr width wrap xml xmlns xmp"
  return autocomplete_set
end

function html.create_bakup(path)
  local html_code = {
    "user_html = {}\n",
    "function user_html.get_keywords()\n",
    "  -- HTML elements and attributes\n",
    "  local keywords0_set = \"ANY ATTLIST CDATA DOCTYPE EMPT ENTITIES ENTITY ELEMENT FIXED ID IDREF IDREFS IMPLIED NDATA NMTOKEN NMTOKENS NOTATION PCDATA PUBLIC REQUIRED SYSTEM a abbr accept accept-charset accesskey acronym action address align alink allowfullscreen allowpaymentrequest allowtransparency alt applet archive area article aside async audio autocomplete autofocus autoplay axis b background base basefont bdi bdo bgsound big blockquote body bgcolor blink border br button canvas caption center checkbox cite code col colgroup command contenteditable contextmenu controls crossorigin bordercolor bottommargin cellpadding cellspacing char charoff charset checked class classid clear codebase codetype color cols colspan compact content coords data datafld dataformatas datagrid datalist datapagesize datasrc datatemplate datetime dd declare default defer del details dfn dialog dir dirname disabled div dl doctype download draggable dt em embed enctype event eventsource face fieldset figcaption figure file font footer for form formaction formenctype formmethod formnovalidate formtarget frame frameborder frameset framespacing h1 h2 h3 h4 h5 h6 head header headers height hgroup hidden high hr href hreflang hspace html http-equiv i id iframe image img input ins is isindex ismap itemid itemprop itemref itemscope itemtype kbd keygen kind label lang language leftmargin legend li link list listing longdesc loop low lowsrc main manifest map marginheight marginwidth mark marquee math max maxlength media menu menuitem meta meter method methods min minlength multicol multiple muted name nav nextid nobr noembed noframes nohref nonce noresize noscript noshade novalidate nowrap object ol onabort onaddtrack onafterprint onauxclick onbeforeprint onbeforeunload onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncopy oncuechange oncut ondblclick ondrag ondragend ondragenter ondragexit ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onenter onerror onexit onfocus onhashchange oninput oninvalid onkeydown onkeypress onkeyup onlanguagechange onload onloadeddata onloadedmetadata onloadend onloadstart onmessage onmousedown onmouseenter onmouseleave onmousemove onmouseout onmouseover onmouseup onoffline ononline onpagehide onpageshow onpaste onpause onplay onplaying onpopstate onprogress onratechange onrejectionhandled onremovetrack onreset onresize onscroll onseeked onseeking onselect onshow onstalled onstorage onsubmit onsuspend ontimeupdate ontoggle onunhandledrejection onunload onvolumechange onwaiting onwheel open optgroup optimum option output p param password pattern picture placeholder plaintext poster pre preload profile progress prompt q radio rb readonly referrerpolicy rel required reset rev reversed rightmargin role rows rowspan rp rt rtc ruby rules s samp sandbox scheme scope scoped script scrolling seamless section select selected shape size sizes small source spacer span spellcheck src srcdoc srclang srcset standby start step strike strong style sub submit summary sup svg tabindex table target tbody td template text textarea tfoot th thead time title topmargin tr track translate tt type typemustmatch u ul urn usemap valign value valuetype var version video vlink vspace wbr width wrap xml xmlns xmp\"\n",
    "  -- JavaScript keywords\n",
    "  keywords1_set = \"Infinity NaN arguments async await break case catch class const continue debugger default delete do else export extends false finally for function globalThis if import in instanceof let new null return static super switch this throw true try typeof undefined var void while with yield\"\n",
    "  -- VBScript keywords\n",
    "  keywords2_set = \"Alias And As Attribute Begin Boolean ByRef Byte ByVal Call Case Class Compare Const Continue Currency Date Declare Dim Do Double Each Else ElseIf Empty End Enum Eqv Erase Error Event Exit Explicit False For Friend Function Get Global GoSub Goto If Imp Implement In Integer Is Let Lib Load Long Loop LSet Me Mid Mod Module New Next Not Nothing Null Object On Option Optional Or Preserve Private Property Public RaiseEvent ReDim Rem Resume Return RSet Select Set Single Static Stop String Sub Then To True Type Unload Until Variant WEnd While With WithEvents Xor\"\n",
    "  -- Python keywords\n",
    "  keywords3_set = nil\n",
    "  -- PHP keywords\n",
    "  keywords4_set = nil\n",
    "  -- SGML and DTD keywords\n",
    "  keywords5_set = \"doctype DOCTYPE PUBLIC SYSTEM ELEMENT ATTLIST ENTITY ANY CDATA EMPT ENTITIES ID IDREF IDREFS NDATA NOTATION NMTOKEN NMTOKENS IMPLIED FIXED PCDATA REQUIRED\"\n",
    "  return keywords0_set,keywords1_set,keywords2_set,keywords3_set,keywords4_set,keywords5_set\n",
    "end\n",
    "\n",
    "function user_html.get_autocomplete()\n",
    "  local autocomplete_set = \"ANY ATTLIST CDATA DOCTYPE EMPT ENTITIES ENTITY ELEMENT FIXED ID IDREF IDREFS IMPLIED NDATA NMTOKEN NMTOKENS NOTATION PCDATA PUBLIC REQUIRED SYSTEM abbr accept accept-charset accesskey acronym action address align alink allowfullscreen allowpaymentrequest allowtransparency alt applet archive area article aside async audio autocomplete autofocus autoplay axis background base basefont bdi bdo bgsound big blockquote body bgcolor blink border br button canvas caption center checkbox cite code col colgroup command contenteditable contextmenu controls crossorigin bordercolor bottommargin cellpadding cellspacing char charoff charset checked class classid clear codebase codetype color cols colspan compact content coords data datafld dataformatas datagrid datalist datapagesize datasrc datatemplate datetime dd declare default defer del details dfn dialog dir dirname disabled div dl doctype download draggable dt em embed enctype event eventsource face fieldset figcaption figure file font footer for form formaction formenctype formmethod formnovalidate formtarget frame frameborder frameset framespacing head header headers height hgroup hidden high hr href hreflang hspace html http-equiv id iframe image img input ins is isindex ismap itemid itemprop itemref itemscope itemtype kbd keygen kind label lang language leftmargin legend li link list listing longdesc loop low lowsrc main manifest map marginheight marginwidth mark marquee math max maxlength media menu menuitem meta meter method methods min minlength multicol multiple muted name nav nextid nobr noembed noframes nohref nonce noresize noscript noshade novalidate nowrap object ol onabort onaddtrack onafterprint onauxclick onbeforeprint onbeforeunload onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncopy oncuechange oncut ondblclick ondrag ondragend ondragenter ondragexit ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onenter onerror onexit onfocus onhashchange oninput oninvalid onkeydown onkeypress onkeyup onlanguagechange onload onloadeddata onloadedmetadata onloadend onloadstart onmessage onmousedown onmouseenter onmouseleave onmousemove onmouseout onmouseover onmouseup onoffline ononline onpagehide onpageshow onpaste onpause onplay onplaying onpopstate onprogress onratechange onrejectionhandled onremovetrack onreset onresize onscroll onseeked onseeking onselect onshow onstalled onstorage onsubmit onsuspend ontimeupdate ontoggle onunhandledrejection onunload onvolumechange onwaiting onwheel open optgroup optimum option output p param password pattern picture placeholder plaintext poster pre preload profile progress prompt radio rb readonly referrerpolicy rel required reset rev reversed rightmargin role rows rowspan rp rt rtc ruby rules s samp sandbox scheme scope scoped script scrolling seamless section select selected shape size sizes small source spacer span spellcheck src srcdoc srclang srcset standby start step strike strong style sub submit summary sup svg tabindex table target tbody td template text textarea tfoot th thead time title topmargin tr track translate tt type typemustmatch ul urn usemap valign value valuetype var version video vlink vspace wbr width wrap xml xmlns xmp\"\n",
    "  return autocomplete_set\n",
    "end\n",
    "return user_html",
  }
  local shell_code = table.concat(html_code)
  eu_core.save_file(path, shell_code)
  shell_code = nil
  html_code = nil
end

return html