Lo que sigue es una lista de errores de compilación que el compilador genera cuando detecta código no válido. Sólo se detecta un subconjunto de estos errores cuando se compila código en modo estricto. El modo estricto añade tres restricciones que no están presentes en el lenguaje estándar:
| Código | Mensaje | Descripción | |
|---|---|---|---|
| 1000 | Referencia ambigua a _. |
Puede que la referencia a más de un elemento. Por ejemplo, a continuación se utilizan los espacios de nombres rss y xml, cada uno de los cuales define un
valor diferente para la función hello(). La sentencia trace(hello()) devuelve este error porque no puede determinar qué espacio de nombres debe utilizar.
Corrija una referencia ambigua haciendo que la referencia sea específica. El ejemplo siguiente utiliza la forma espacio de nombres::función para especificar el espacio de nombres que debe utilizarse:
|
|
| 1003 | Los especificadores de acceso no se permiten con atributos de espacio de nombres. | No puede utilizar un especificador de acceso (como, por ejemplo, private o public) y un atributo de espacio de nombres en una definición. | |
| 1004 | El espacio de nombres no se ha encontrado o no es una constante de tiempo de compilación. | El espacio de nombres es desconocido o es una expresión que podría tener valores diferentes en tiempo de ejecución. Compruebe que está escribiendo correctamente el espacio de nombres y que su definición se importa correctamente. | |
| 1006 | Una expresión super sólo puede utilizarse dentro de los métodos de la instancia de clase. | ||
| 1007 | Una sentencia super sólo puede utilizarse dentro de los constructores de la instancia de clase. |
No se puede utilizar la sentencia super dentro de miembros estáticos. Puede
utilizar la sentencia super sólo dentro de instancias de clases.
|
|
| 1008 | El atributo no es válido. | ||
| 1010 | El atributo override sólo puede utilizarse en definiciones de propiedades de clases. |
No se puede utilizar la palabra clave override dentro de un bloque de función.
|
|
| 1011 | El atributo virtual sólo puede utilizarse en definiciones de propiedades de clases. |
No se puede utilizar el atributo virtual cuando se declara una propiedad que no pertenece a una clase
(por ejemplo, cuando se declara una variable dentro de un bloque de función).
|
|
| 1012 | El atributo static sólo puede utilizarse en definiciones dentro de una clase. | ||
| 1013 | El atributo private sólo puede utilizarse en definiciones de propiedades de clases. | ||
| 1014 | El atributo intrinsic ya no es compatible. | ActionScript 3.0 no admite la palabra clave intrinsic. | |
| 1016 | La clase base es final. |
La superclase no puede ampliarse porque está marcada
como final.
|
|
| 1017 | No se ha encontrado la definición de la clase base _. | ||
| 1018 | Definición de clase duplicada: _. | ||
| 1020 | El método marcado con override debe sustituir a otro método. | ||
| 1021 | Definición de función duplicada. | No se puede declarar más de una función con el mismo nombre de identificador dentro del mismo ámbito. | |
| 1022 | No se puede sustituir un descriptor de acceso final. | ||
| 1023 | Sustitución incompatible. | Una función marcada con override debe coincidir exactamente con el parámetro y con la declaración de tipo de devolución de la función a la que sustituye. Debe tener el mismo número de parámetros, cada uno de ellos del mismo tipo, y declarar el mismo tipo de devolución. Si alguno de los parámetros es opcional, éste también debe coincidir. Ambas funciones deben utilizar también el mismo especificador de acceso (public, private, etc.) o atributo de espacio de nombres. | |
| 1024 | Sustitución de una función no marcada para sustitución. |
Si un método de una clase sustituye a un método de una clase base, deberá declararlo explícitamente empleando el atributo override, como se muestra en este ejemplo:
public override function foo():void{};
|
|
| 1025 | No se puede redefinir un método final. |
El método no puede ampliarse porque está marcado
como final en la clase base.
|
|
| 1026 | Las funciones constructoras deben ser métodos de instancia. | ||
| 1027 | Las funciones no pueden ser static y override a la vez. | ||
| 1028 | Las funciones no pueden ser static y virtual a la vez. | ||
| 1029 | Las funciones no pueden ser final y virtual a la vez. | ||
| 1030 | Debe especificar el nombre de la matriz de argumentos variables. |
La definición del parámetro...(rest) especifica que todos los valores proporcionados tras...(rest)
se recojan en cualquier matriz.
Debe especificar un nombre para la matriz, como en la expresión
function foo(x,...(rest)).
|
|
| 1033 | No se admiten las variables virtual. | ||
| 1034 | Las variables no pueden ser nativas. | ||
| 1035 | Las variables no pueden ser final y virtual a la vez. | ||
| 1037 | Los paquetes no pueden estar anidados. | ||
| 1038 | No se ha encontrado el destino de la sentencia break. | ||
| 1039 | No se ha encontrado el destino de la sentencia continue. | ||
| 1040 | Definición de etiqueta duplicada. | ||
| 1041 | No es posible llamar a los atributos. | ||
| 1042 | La palabra clave this no puede utilizarse en métodos estáticos. Sólo puede utilizarse en métodos de instancia, en cierres de funciones y en el código global. |
No se puede utilizar la palabra clave this dentro de un miembro estático porque
this carecería de contexto.
|
|
| 1043 | Espacio de nombres no definido. | ||
| 1044 | El método de interfaz _ del espacio de nombres _ no está implementado por la clase _. | ||
| 1045 | No se ha encontrado la interfaz _. | ||
| 1046 | El tipo no se ha encontrado o no es una constante de tiempo de compilación: _. |
La clase utilizada como declaración de tipo es desconocida o es una expresión que podría tener valores diferentes en tiempo de ejecución.
Compruebe que está importando la clase correcta y que la ubicación de su paquete
no ha cambiado. Asimismo, compruebe que el paquete que contiene el código (no la
clase importada) está bien definida (por ejemplo, asegúrese de que utiliza
sintaxis correcta de paquete de ActionScript 3.0 y no sintaxis de ActionScript 2.0).
El error también puede producirse si la clase a la que se hace referencia no está definida en un espacio de nombres que está utilizándose o está definida como pública:
If you are using Flex Builder 2 and the class is in a library, make sure to set the class path for the project. |
|
| 1047 | El inicializador del parámetro es desconocido o no es una constante de tiempo de compilación. | El valor utilizado como predeterminado para el parámetro no está definido o podría tener valores diferentes en tiempo de ejecución. Compruebe que el inicializador está correctamente escrito y que el valor de inicializador no es una expresión que pueda tener diferentes valores posibles en tiempo de ejecución. | |
| 1048 | El método no puede utilizarse como constructor. |
No es posible crear una instancia de un método de una clase. Sólo pueden utilizarse funciones globales en expresiones new.
class D { function xx() { return 22; } }
var d:D = new D();
var x = new d.xx(); // error, el método no se puede utilizar como constructor
function yy() { this.a = 22; }
var z = new yy(); // sin error, las funciones globales se pueden utilizar como constructores.
|
|
| 1049 | Asignación ilegal de una variable especificada como constante. | ||
| 1050 | No se puede asignar a un valor que no sea una referencia. | ||
| 1051 | El valor de devolución debe ser undefined. |
Está intentando utilizar la sentencia return dentro de un método que
tiene un tipo de devolución declarado void.
|
|
| 1052 | El inicializador de la constante es desconocido o no es una constante de tiempo de compilación. | El valor utilizado para inicializar la constante no está definido o podría tener valores diferentes en tiempo de ejecución. Compruebe que el inicializador está correctamente escrito y que el valor de inicializador no es una expresión que pueda tener diferentes valores posibles en tiempo de ejecución. | |
| 1053 | Los tipos de descriptores de acceso deben coincidir. | ||
| 1054 | El tipo de devolución de una definición setter debe ser unspecified o void. |
No puede especificar un valor de devolución para una función setter. Por ejemplo, lo que se muestra a continuación no es válido:
public function set gamma(g:Number):Number; Lo que sigue sí es válido: public function set gamma(g:Number):void; |
|
| 1058 | La propiedad es de sólo escritura. | ||
| 1059 | La propiedad es de sólo lectura. |
Esta propiedad se define a través de una función getter, que le permite recuperar el valor de la propiedad. Sin embargo, no hay una función setter definida para esta propiedad, por lo que es de sólo lectura.
En el ejemplo siguiente, la línea 3 genera un error porque no hay una función setter definida para class D { function get xx() { return 22; } }
var d:D = new D();
d.xx = 44; // error, es una propiedad de sólo lectura
|
|
| 1061 | Llamada a un método _ posiblemente indefinido a través de una referencia con tipo estático _. | Está llamando a un método que no está definido. | |
| 1063 | No es posible abrir el archivo: _. | ||
| 1064 | Metadatos no válidos. | Estos metadatos no se reconocen. | |
| 1065 | Los atributos de metadatos no pueden tener más de un elemento. | ||
| 1067 | Coerción implícita de un valor de tipo _ a un tipo no relacionado _. | Está intentando convertir un objeto a un tipo al que no puede convertirse. Esto puede suceder si la clase a la que está convirtiendo no está en la cadena de herencia del objeto que se está convirtiendo. Este error sólo aparece cuando el compilador está ejecutándose en modo estricto. | |
| 1068 | No es posible abrir el archivo incluido: _. | ||
| 1069 | Error de sintaxis: definición o directiva inesperada. | Compruebe la sintaxis de la línea. | |
| 1071 | Error de sintaxis: se esperaba una palabra clave de definición (como, por ejemplo, una función) tras el atributo _, no _. |
Este error puede suceder si el autor olvida utilizar la palabra clave "var" o "function" en una declaración.
Este error podría suceder también si el compilador encuentra un carácter inesperado. Por ejemplo,
el siguiente uso de la función trace() no es válido, porque falta el
paréntesis (la sintaxis correcta es trace("hello")):
|
|
| 1072 | Error de sintaxis: se esperaba xml antes del espacio de nombres. |
La sintaxis correcta de la sentencia es default xml namespace = ns. Falta la palabra clave xml (observe el uso de minúsculas) o se ha utilizado una palabra clave incorrecta. Para más información, consulte la directiva default xml namespace.
|
|
| 1073 | Error de sintaxis: se esperaba un catch o una cláusula finally. | ||
| 1075 | Error de sintaxis: la palabra clave 'each' no se permite sin un operador 'in'. | ||
| 1076 | Error de sintaxis: se esperaba un paréntesis izquierdo antes del identificador. | ||
| 1077 | Se esperaba CaseLabel. |
El compilador esperaba una sentencia case en este punto del bloque switch. El siguiente bloque switch incluye incorrectamente una llamada a print antes de la primera sentencia case:
switch(x)
{
trace(2);
case 0: trace(0);
break
}
|
|
| 1078 | La etiqueta debe ser un identificador sencillo. | ||
| 1079 | Una expresión super debe tener un operando. | ||
| 1080 | Se esperaba el operador de incremento o decremento. | ||
| 1082 | Se esperaba una expresión sencilla entre paréntesis. | ||
| 1083 | Error de sintaxis: _ inesperado. |
Falta información en la línea de código. En el siguiente ejemplo,
debe incluirse alguna expresión (como, por ejemplo, otro número) después del signo más final:
var sum:int = 1 + 2 + ; |
|
| 1084 | Error de sintaxis: se esperaba _ antes de _. |
La expresión era inesperada en este punto.
Si el error indica que se esperaba una llave final antes del final del programa, ello significa que falta una
llave final (}) en un bloque de código.
Si el error indica que se esperaba un paréntesis inicial antes de _, es posible que haya omitido un paréntesis en una expresión condicional, como se muestra en el siguiente ejemplo, que se ha escrito incorrectamente a propósito:
|
|
| 1086 | Error de sintaxis: se esperaba un punto y coma antes de _. | ||
| 1087 | Error de sintaxis: se han encontrado caracteres adicionales tras el final del programa. | ||
| 1093 | Error de sintaxis. | ||
| 1094 | Error de sintaxis: Un literal de cadena debe acabarse antes del salto de línea. | ||
| 1095 | Error de sintaxis: Un literal de cadena debe acabarse antes del salto de línea. | ||
| 1097 | Error de sintaxis: la entrada terminó antes de llegar a las comillas de cierre para un literal de cadena. | ||
| 1099 | Error de sintaxis. | ||
| 1100 | Error de sintaxis: XML no tiene las correspondientes etiquetas inicial y final. | ||
| 1102 | No se pueden eliminar descendientes super. | ||
| 1103 | Definición de espacio de nombres duplicada. | Ha definido el espacio de nombres más de una vez. Elimine o modifique la definición duplicada. | |
| 1105 | El destino de la asignación debe ser un valor de referencia. | Puede asignar un valor a una variable, pero no puede asignar un valor a otro valor. | |
| 1106 | El operando de incremento debe ser un valor de referencia. | El operando debe ser una variable, un elemento de una matriz o una propiedad de un objeto. | |
| 1107 | El operando de incremento no es válido. | El operando debe ser una variable, un elemento de una matriz o una propiedad de un objeto. | |
| 1108 | El operando de decremento no es válido. | El operando debe ser una variable, un elemento de una matriz o una propiedad de un objeto. | |
| 1109 | Se esperaba una expresión. |
Falta una expresión en una parte del código. Por ejemplo, lo siguiente produce este
error (falta una condición en la sentencia if:
|
|
| 1110 | Falta el nombre de una etiqueta XML. | ||
| 1112 | Posible recursión infinita debida a esta inclusión de archivo: _. |
Un archivo que se incluye en el código fuente que se está compilando contiene otras sentencias include que podrían provocar un bucle infinito. Por ejemplo, los siguientes archivos. a.as y b.as, generan este error porque cada archivo intenta incluir al otro.
El archivo a.as contiene lo siguiente, que intenta incluir al archivo b.as: import foo.bar.baz;
include "b.as"
trace(2);
El archivo b.as contiene lo siguiente, que intenta incluir al archivo a.as: include "a.as" |
|
| 1113 | Se ha detectado una referencia de tipo circular en _. |
Una clase está intentando ampliar una superclase. Por ejemplo, la clase A no puede ampliar la clase B si B hereda de A:
|
|
| 1114 | El atributo public sólo puede utilizarse dentro de un paquete. | ||
| 1115 | El atributo internal sólo puede utilizarse dentro de un paquete. | ||
| 1116 | Un atributo de espacio de nombres definido por el usuario sólo puede utilizarse en el nivel superior de una definición de clase. | ||
| 1118 | Coerción implícita de un valor con tipo estático _ a un tipo posiblemente no relacionado _. | Está utilizando un valor que no es del tipo esperado y no existe coerción implícita para convertirlo en el tipo esperado.
Puede que esté utilizando un supertipo en un lugar en el que se espera un subtipo. Por ejemplo:
La última sentencia genera un error porque intenta asignar un objeto de tipo A a una variable de tipo B. De forma similar, lo que sigue define la función
Asimismo, la siguiente sentencia genera un error porque el valor devuelto para
|
|
| 1119 | Acceso a una propiedad _ posiblemente indefinida a través de una referencia con tipo estático _. |
Está intentando acceder a una propiedad que no existe para el objeto especificado. Por ejemplo,
el siguiente código genera este error porque un objeto int no tiene una propiedad llamada
assortment:
Este error sólo aparece cuando el compilador está ejecutándose en modo estricto.
|
|
| 1120 | Acceso de propiedad no definida _. |
Está intentando acceder a una variable no definida. Por ejemplo, si la variable
huh no se ha definido, una llamada a ésta genera este error:
Este error sólo puede aparecer cuando el compilador está ejecutándose en modo estricto.
|
|
| 1121 | Una definición getter no debe tener ningún parámetro. | ||
| 1122 | Una definición setter debe tener exactamente un parámetro. | ||
| 1123 | Una definición setter no puede tener parámetros opcionales. | ||
| 1124 | El tipo de devolución de una definición getter no puede ser void. | Una función getter simula una variable. Dado que las variables no pueden ser de tipo void, no puede declarar funciones getter con el tipo de devolución void. | |
| 1125 | Los métodos definidos en una interfaz no pueden tener cuerpo. | ||
| 1126 | La función no tiene cuerpo. | ||
| 1127 | El atributo _ se ha especificado varias veces. |
Ha especificado un atributo más de una vez en la misma sentencia. Por ejemplo, la sentencia public static public var x; genera
este error porque especifica que la variable x es pública dos veces. Elimine las declaraciones duplicadas.
|
|
| 1129 | Definición de interfaz duplicada: _. | Cambie o elimine la definición duplicada. | |
| 1130 | Un constructor no puede especificar un tipo de devolución. | ||
| 1131 | Las clases no pueden estar anidadas. | ||
| 1132 | El atributo final sólo puede utilizarse en un método definido en una clase. | ||
| 1133 | El atributo native sólo puede utilizarse con definiciones de funciones. | ||
| 1134 | El atributo dynamic sólo puede utilizarse con definiciones de clases. | ||
| 1135 | Error de sintaxis: _ no es un tipo válido. | ||
| 1136 | Número incorrecto de argumentos. Se esperaba _. |
La función espera un número diferente de argumentos de los proporcionados. Por ejemplo, lo siguiente define la función goo, que tiene dos argumentos:
class A { static function goo(x:int,y:int)
{ return(x+y); } }
La siguiente sentencia generaría un error porque proporciona tres argumentos: A.goo(1,2,3); |
|
| 1137 | Número incorrecto de argumentos. No se esperaban más de _. | ||
| 1138 | Los parámetros requeridos no se permiten después de los parámetros opcionales. | ||
| 1139 | Las interfaces no admiten declaraciones de variables. | ||
| 1140 | Los parámetros especificados después de la palabra clave de definición de parámetro...resto sólo pueden tener el tipo de datos Array. | ||
| 1141 | Una clase sólo puede ampliar otra clase, no una interfaz. | ||
| 1142 | Una interfaz sólo puede ampliar otras interfaces, pero no _ en una clase. | Está intentando que una interfaz amplíe una clase. Una interfaz sólo puede ampliar otra interfaz. | |
| 1143 | El atributo override sólo puede utilizarse en un método definido en una clase. | ||
| 1144 | El método de interfaz _ del espacio de nombres _ está implementado con una firma incompatible en la clase _. | Las firmas de métodos deben coincidir exactamente. | |
| 1145 | Los métodos nativos no pueden tener cuerpo. |
No puede utilizar native porque es una palabra clave reservada.
|
|
| 1146 | Un constructor no puede ser un método getter o setter. | ||
| 1147 | No se ha especificado un archivo de origen AS. | ||
| 1149 | La sentencia de devolución no puede utilizarse en el código de inicialización estático. | ||
| 1150 | El atributo protected sólo puede utilizarse en definiciones de propiedades de clases. | ||
| 1151 | Hay un conflicto con la definición _ en el espacio de nombres _. |
No se puede declarar más de una variable con el mismo nombre de identificador dentro del mismo ámbito, a no ser que todas las variables se declaren como
del mismo tipo. En ActionScript 3.0, los diferentes bloques de código (por ejemplo, los utilizados en dos bucles for de la misma definición de función) se consideran como del mismo ámbito.
El siguiente ejemplo de código convierte correctamente la variable
El siguiente ejemplo de código genera un error porque la conversión de tipo de la declaración de variable y los bucles
|
|
| 1152 | Hay un conflicto con la definición heredada _ en el espacio de nombres _. | ||
| 1153 | Un constructor sólo puede declararse como público. | ||
| 1154 | Sólo puede especificarse public, private, protected o internal en una definición. | ||
| 1155 | Los descriptores de acceso no pueden anidarse dentro de otras funciones. | ||
| 1156 | No pueden crearse instancias de interfaces con el operador new. | ||
| 1157 | Los miembros de interfaces no pueden declararse con public, private, protected o internal. | ||
| 1158 | Error de sintaxis: falta la llave inicial ({) antes del cuerpo de la función. | ||
| 1159 | La sentencia de devolución no puede utilizarse en el código de inicialización del paquete. | ||
| 1160 | El atributo native no puede utilizarse en definiciones de interfaz. |
No puede utilizar native porque es una palabra clave reservada.
|
|
| 1162 | Sólo puede utilizarse un atributo namespace por definición. | ||
| 1163 | El método _ entra en conflicto con la definición heredada de la interfaz _. | ||
| 1165 | El atributo de interfaz _ no es válido. | ||
| 1166 | Las declaraciones de espacio de nombres no se permiten en las interfaces. | ||
| 1167 | La clase _ implementa la interfaz _ varias veces. |
La clase implementa la misma interfaz más de una vez. Por ejemplo, lo siguiente genera este error porque
la clase C implementa la interfaz A dos veces:
La sentencia de implementación correcta sería |
|
| 1168 | Asignación no permitida a la función _. |
Está intentando redefinir una función. Por ejemplo, lo siguiente define la función topLevel()
para imprimir la palabra "top". La segunda sentencia genera un error porque asigna un valor de devolución diferente a la función:
|
|
| 1169 | Los atributos namespace no se permiten en métodos de interfaz. | ||
| 1170 | La función no devuelve un valor. |
Cada control de flujo posible de una función debe devolver un valor cuando el tipo de devolución sea un valor diferente de void. La siguiente función f(x) no genera un error porque la sentencia if..else siempre devuelve un valor:
Sin embargo, la función
Esta comprobación sólo se activa cuando la función declara un tipo de devolución distinto de void. |
|
| 1171 | Un inicializador de espacio de nombres debe ser una cadena literal u otro espacio de nombres. | ||
| 1172 | No se ha encontrado la definición _. | ||
| 1173 | La definición de etiqueta no es válida. | ||
| 1176 | Comparación entre un valor con tipo estático _ y un tipo posiblemente no relacionado _. | Este error está activado en modo estricto. | |
| 1177 | La sentencia de devolución no puede utilizarse en el código de inicialización global. | ||
| 1178 | Intento de acceso a una propiedad _ inaccesible a través de una referencia con tipo estático _. | ||
| 1180 | Llamada a un método _ posiblemente indefinido. | Este error sólo aparece cuando el compilador está ejecutándose en modo estricto. | |
| 1181 | Referencia hacia delante a la clase base _. | ||
| 1182 | El paquete no puede utilizarse como valor: _. | ||
| 1184 | Valor predeterminado incompatible de tipo _ donde se esperaba _. | ||
| 1185 | switch tiene más de un valor predeterminado y sólo se permite uno. | ||
| 1188 | Asignación no permitida a la clase _. | ||
| 1189 | Intento de eliminación de la propiedad fija _. Sólo pueden eliminarse las propiedades definidas dinámicamente. | La eliminación borra de un objeto las propiedades definidas dinámicamente. No es posible eliminar las propiedades declaradas de una clase. Este error sólo aparece cuando el compilador está ejecutándose en modo estricto. | |
| 1190 | La clase base no se ha encontrado o no es una constante de tiempo de compilación. | ||
| 1191 | La interfaz no se ha encontrado o no es una constante de tiempo de compilación. | ||
| 1192 | El atributo static no se permite en definiciones de espacios de nombre. | ||
| 1193 | Las definiciones de interfaces no pueden estar anidadas dentro de clases u otras definiciones de interfaces. | ||
| 1194 | El atributo prototype no es válido. | ||
| 1195 | Intento de acceso a un método _ inaccesible a través de una referencia con tipo estático _. | Está llamando a un método privado de otra clase o a un método definido en un espacio de nombres que no se está utilizando. Si llama a un método definido en un espacio de nombres no utilizado, añada una sentencia use para el espacio de nombres requerido.
|
|
| 1196 | Error de sintaxis: se esperaba una expresión después de throw. | ||
| 1197 | La clase _ no puede ampliar _ porque ambos están asociados a símbolos de biblioteca o a la línea de tiempo principal. | ||
| 1198 | No se permiten atributos en definiciones de paquetes. | ||
| 1199 | Error interno: _. | ||
| 1200 | Error de sintaxis: inicializador for-in no válido, sólo se esperaba 1 expresión. | ||
| 1201 | Una sentencia super no puede encontrarse después de una sentencia this, super, return o throw. | ||
| 1202 | Acceso de propiedad no definida _ en el paquete _. |
Está intentando acceder a una variable no definida en un paquete. Por ejemplo, si la variable
p.huh no se ha definido, una llamada a ésta genera este error:
Este error sólo puede aparecer cuando el compilador está ejecutándose en modo estricto.
|
|
| 1203 | No se encontró ningún constructor predeterminado en la clase base _. | Debe llamar explícitamente al constructor de la clase base con una sentencia super() si tiene uno o varios argumentos necesarios. | |
| 1204 | /* encontrado no coincidente con */. | Se encontraron caracteres '/*', que indican el comienzo de un comentario, pero no se encontraron caracteres '*/' correspondientes, que indican el final del bloque de comentarios. |
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/compilerErrors.html