diff --git a/.gitattributes b/.gitattributes index c4fbae3..ae71433 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# Auto detect text files and perform LF normalization +# Detecta automáticamente archivos de texto y realiza la normalización LF * text=auto *.java text diff=java diff --git a/.gitignore b/.gitignore index de4fe0f..290603a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,251 @@ .classpath .java-version .project +/nb-configuration.xml +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/annotations-20.1.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/ant-1.10.11.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/ant-antlr-1.10.12.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/ant-junit-1.10.12.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/ant-launcher-1.10.11.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/antlr4-runtime-4.7.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/asm-9.4.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/asm-commons-9.4.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/asm-tree-9.4.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/aws-java-sdk-core-1.12.365.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/aws-java-sdk-kms-1.12.365.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/aws-java-sdk-s3-1.12.365.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/aws-java-sdk-sts-1.12.365.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/bcpg-jdk15on-1.68.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/bcpkix-jdk15on-1.68.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/bcprov-jdk15on-1.68.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/bsh-2.0b6.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/capsule-0.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/commons-codec-1.15.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/commons-compress-1.21.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/commons-io-2.11.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/commons-lang-2.6.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/dd-plist-1.21.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/failureaccess-1.0.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/fastutil-8.5.2-min.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-linux-aarch64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-linux-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-osx-aarch64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-osx-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-windows-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-windows-amd64-min-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-windows-i386-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/file-events-windows-i386-min-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-api-client-1.34.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-api-services-storage-v1-rev20220705-1.32.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-http-client-1.42.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-http-client-apache-v2-1.42.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-http-client-gson-1.42.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/google-oauth-client-1.34.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/bin/gradle +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/bin/gradle.bat +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3-bin.zip.lck +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3-bin.zip.ok +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-antlr-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-api-metadata-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-base-annotations-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-base-services-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-base-services-groovy-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-bootstrap-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-cache-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-cache-base-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-build-cache-http-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-cache-packaging-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-events-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-build-init-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-operations-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-build-option-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-build-profile-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-cli-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-code-quality-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-composite-builds-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-configuration-cache-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-core-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-core-api-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-dependency-management-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-diagnostics-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-ear-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-enterprise-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-enterprise-logging-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-enterprise-operations-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-enterprise-workers-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-execution-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-file-collections-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-file-temp-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-file-watching-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-files-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-functional-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-hashing-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-ide-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-ide-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-installation-beacon-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-ivy-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-jacoco-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-java-compiler-plugin-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-jvm-services-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-kotlin-dsl-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-kotlin-dsl-provider-plugins-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-kotlin-dsl-tooling-builders-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-kotlin-dsl-tooling-models-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-language-groovy-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-language-java-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-language-jvm-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-language-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-launcher-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-logging-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-logging-api-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-maven-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-messaging-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-model-core-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-model-groovy-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-normalization-java-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-persistent-cache-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-platform-base-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-platform-jvm-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-platform-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-plugin-development-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-plugin-use-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-plugins-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-problems-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-process-services-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-publish-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-reporting-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-resources-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-resources-gcs-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-resources-http-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-resources-s3-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-resources-sftp-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-runtime-api-info-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-scala-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-security-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-signing-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-snapshots-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-test-kit-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-testing-base-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-testing-junit-platform-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-testing-jvm-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-testing-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-tooling-api-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-tooling-api-builders-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-tooling-native-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-version-control-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-worker-processes-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-worker-services-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-workers-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gradle-wrapper-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/gradle-wrapper-shared-7.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-ant-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-astbuilder-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-console-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-datetime-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-dateutil-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-docgenerator-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-groovydoc-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-json-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-nio-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-sql-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-swing-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-templates-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-test-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/groovy-xml-3.0.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/grpc-context-1.27.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/gson-2.8.9.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/guava-31.1-jre.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/hamcrest-core-1.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/httpclient-4.5.13.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/httpcore-4.4.14.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/ion-java-1.0.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/ivy-2.3.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jackson-annotations-2.14.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jackson-core-2.14.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jackson-databind-2.14.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jakarta.activation-2.0.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jakarta.xml.bind-api-3.0.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/native/jansi/1.18/windows64/jansi.dll +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/jansi-1.18.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jatl-0.2.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/javaparser-core-3.17.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/javax.inject-1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jaxb-core-3.0.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jaxb-impl-3.0.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jcifs-1.3.17.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/jcl-over-slf4j-1.7.30.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jcommander-1.78.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jmespath-java-1.12.365.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/jna-5.10.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/joda-time-2.10.4.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jsch-0.1.55.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jsoup-1.15.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/jsr305-3.0.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/jul-to-slf4j-1.7.30.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/junit-4.13.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/junit-platform-commons-1.8.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/junit-platform-engine-1.8.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/junit-platform-launcher-1.8.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/jzlib-1.1.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-compiler-embeddable-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-daemon-embeddable-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-reflect-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-sam-with-receiver-compiler-plugin-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-script-runtime-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-scripting-common-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-scripting-compiler-embeddable-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-scripting-compiler-impl-embeddable-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-scripting-jvm-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-scripting-jvm-host-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-stdlib-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-stdlib-common-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-stdlib-jdk7-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlin-stdlib-jdk8-1.7.10.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kotlinx-metadata-jvm-0.5.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/kryo-2.24.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/LICENSE +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/log4j-over-slf4j-1.7.30.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/maven-builder-support-3.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/maven-model-3.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/maven-repository-metadata-3.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/maven-settings-3.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/maven-settings-builder-3.6.3.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/minlog-1.2.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/native/c067742578af261105cb4f569cf0c3c89f3d7b1fecec35dd04571415982c5e48/windows-amd64/native-platform.dll +/home/juruizf/.sdkman/candidates/gradle/7.5.1/native/c067742578af261105cb4f569cf0c3c89f3d7b1fecec35dd04571415982c5e48/windows-amd64/native-platform.dll.lock +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-freebsd-amd64-libcpp-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-aarch64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-aarch64-ncurses5-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-aarch64-ncurses6-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-amd64-ncurses5-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-linux-amd64-ncurses6-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-osx-aarch64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-osx-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-windows-amd64-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-windows-amd64-min-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-windows-i386-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/native-platform-windows-i386-min-0.22-milestone-25.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/NOTICE +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/objenesis-2.6.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/opencensus-api-0.31.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/opencensus-contrib-http-util-0.31.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/opentest4j-1.2.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/org.eclipse.jgit-5.7.0.202003110725-r.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/plexus-cipher-1.7.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/plexus-interpolation-1.26.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/plexus-sec-dispatcher-1.4.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/plexus-utils-3.3.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/qdox-1.12.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/README +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/init.d/readme.txt +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/slf4j-api-1.7.30.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/snakeyaml-2.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/plugins/testng-6.3.1.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/tomlj-1.0.0.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/trove4j-1.0.20200330.jar +/home/juruizf/.sdkman/candidates/gradle/7.5.1/wrapper/dists/gradle-7.6.3-bin/aiqsy11zfh4dz5uu7slds59uo/gradle-7.6.3/lib/xml-apis-1.4.01.jar diff --git a/CONTRIBUTING.markdown b/CONTRIBUTING.markdown index 72f1345..b476e65 100644 --- a/CONTRIBUTING.markdown +++ b/CONTRIBUTING.markdown @@ -1,112 +1,106 @@ -# Contributing to Thymeleaf +º# Contribuyendo a Thymeleaf -Thymeleaf is released under the Apache 2.0 license. If you would like to -contribute something, or want to hack on the code this document should help you -get started. +Thymeleaf se publica bajo la licencia Apache 2.0. Si desea contribuir o +modificar el código, este documento le ayudará a empezar. +## Código de Conducta -## Code of Conduct +Este proyecto se adhiere al [código de conducta][code-of-conduct] del Pacto del +Colaborador. +Al participar, se espera que respete este código. Por favor, informe de +cualquier comportamiento inaceptable a +[los líderes del proyecto][thymeleaf-team]. -This project adheres to the Contributor Covenant -[code of conduct][code-of-coduct]. -By participating, you are expected to uphold this code. Please report -unacceptable behavior to [the project leads][thymeleaf-team]. +## Uso de GitHub Issues - -## Using GitHub Issues - -We use GitHub issues to track bugs and enhancements. -If you have a general usage question please ask on +Usamos GitHub Issues para rastrear errores y mejoras. +Si tiene alguna pregunta sobre el uso general, pregunte en [Stack Overflow][stackoverflow]. -The Thymeleaf team and the broader community monitor the -[`thymeleaf`][stackoverflow-thymeleaf] tag. - -If you are reporting a bug, please help to speed up problem diagnosis by -providing as much information as possible. -Ideally, that would include a small sample project that reproduces the problem. - - -## Before submitting a Contribution - -Before submitting a contribution that is not an obvious or trivial fix, -get in contact with the [the project leads][thymeleaf-team] about your -ideas (an email should do). Let us discuss the possibilities with you so that -we make sure your contribution goes in the right direction and aligns with the -project's standards, intentions and roadmap. - -Please understand that *not all contributions will be accepted and merged into -the project's repositories*. Talking about your planned contributions with the -project maintainers before creating pull requests can maximize the possibility -of your contributions being accepted. - - - -## Signing the Contributor License Agreement - -Before we accept a non-trivial patch or pull request we will need you to -sign a **Contributor License Agreement**. - -There are two versions of the CLA: - - * **Individual CLA**: For individuals acting on their own behalf, i.e. not - being backed by any company or government, and not making their - contributions potentially under the effect of any contracts, agreements or - laws that could cause their employeer (or any other entities) claim - any rights on their contribution. - * **Corporate CLA**: For corporate entities allowing some of their employees - to contribute to Thymeleaf on the entity's behalf. - -For more information on the CLA and the (very easy) process involving this -step, please have a look at the [Thymeleaf CLA repository][cla]. - - - -## Conventions and Housekeeping - -### General Guidelines: - - - Obviously, **your code must both compile and work correctly**. - - All your code should be easy to read and understand by a human. The same - requirement applies to documentation. - - Unless for specific artifacts such as documentation translations, all - code, comments, documentation, names of classes and variables, - log messages, etc. must be **in English**. - - All contribured files must include the standard Thymeleaf copyright header. - - Maximum recommended line length is 120 characters. This is not strictly - enforced. - - Indentation should be made with 4 spaces, not tabs. Line feeds should be - UNIX-like (`\n`). - - All source files should be pure ASCII, except `.properties` files which - should be ISO-8859-1. - - You shall add yourself as _author_ (e.g. Javadoc `@author`) to any files - that you create or modify substantially (more than cosmetic changes). - -### Specific Java Code Gudelines: - - - All your code should compile and run in the current minimum Java version - of the project. - - All your code should follow the Java Code Conventions regarding - variable/method/class naming. - - Number autoboxing and/or autounboxing is forbidden. - - Every class should define a constructor, even if it is the no-argument - constructor, and include a call to `super()`. - - All method parameters should be declared as `final` so that they cannot be - changed or reassigned in the method. - - All non-nullable parameters in public methods should be first validated for - non-nullity inside the code. - - Existing Javadoc must be maintained along with performed changes. Addition - of new Javadoc for public methods or code comments for any non-trivial - algorithms is always welcome. - - Writing unit tests for new, existing and modified code is always welcome - too. For any new algorithms or functionality contributed, or substantial - modifications made to existing ones, the team might consider these a - requirement. - - - +El equipo de Thymeleaf y la comunidad en general monitorean la etiqueta +[`thymeleaf`][stackoverflow-thymeleaf]. + +Si informa un error, por favor, ayude a acelerar el diagnóstico del problema +proporcionando la mayor cantidad de información posible. Idealmente, esto +incluiría un pequeño proyecto de muestra que reproduzca el problema. + +## Antes de enviar una contribución + +Antes de enviar una contribución que no sea una solución obvia o trivial, +contacta con [los líderes del proyecto][thymeleaf-team] y comparte tus ideas (un +correo electrónico bastará). Permítenos analizar las posibilidades contigo para +asegurarnos de que tu contribución vaya en la dirección correcta y se ajuste a +los estándares, las intenciones y la hoja de ruta del proyecto. + +Ten en cuenta que *no todas las contribuciones serán aceptadas ni se integrarán +en los repositorios del proyecto*. Hablar sobre tus contribuciones previstas con +los mantenedores del proyecto antes de crear solicitudes de incorporación de +cambios puede maximizar las posibilidades de que sean aceptadas. + +## Firma del Acuerdo de Licencia de Colaborador + +Antes de aceptar un parche o una solicitud de incorporación de cambios +significativos, necesitarás firmar un **Acuerdo de Licencia de Colaborador**. + +Existen dos versiones del CLA: + +* **CLA Individual**: Para personas que actúan en nombre propio, es decir, que + no cuentan con el respaldo de ninguna empresa ni gobierno, y que no realizan + sus contribuciones bajo la influencia de contratos, acuerdos o leyes que + puedan dar lugar a que sus empleados (o cualquier otra entidad) reclamen + derechos sobre sus contribuciones. + +* **CLA Corporativo**: Para entidades corporativas que permiten que algunos de + sus empleados contribuyan a Thymeleaf en nombre de la entidad. + +Para obtener más información sobre el CLA y el sencillo proceso que implica este +paso, consulte el [repositorio de CLA de Thymeleaf][cla]. + +## Convenciones y Mantenimiento + +### Directrices Generales: + +- Obviamente, **su código debe compilarse y funcionar correctamente**. +- Todo su código debe ser fácil de leer y comprender para una persona. El mismo + requisito se aplica a la documentación. - Salvo para artefactos específicos + como traducciones de documentación, todo el código, los comentarios, la + documentación, los nombres de clases y variables, los mensajes de registro, + etc., deben estar **en inglés**. +- Todos los archivos contribuidos deben incluir el encabezado de copyright + estándar de Thymeleaf. +- La longitud máxima de línea recomendada es de 120 caracteres. Esto no se + aplica estrictamente. +- La sangría debe ser de 4 espacios, no de tabulaciones. Los saltos de línea + deben ser similares a los de UNIX (`\n`). +- Todos los archivos fuente deben ser ASCII puro, excepto los archivos + `.properties`, que deben cumplir la norma ISO-8859-1. +- Debe agregarse como _autor_ (por ejemplo, Javadoc `@author`) a cualquier + archivo que cree o modifique sustancialmente (más allá de cambios + superficiales). + +### Directrices específicas para el código Java: + +- Todo su código debe compilarse y ejecutarse en la versión mínima actual de + Java del proyecto. +- Todo su código debe seguir las convenciones de código Java en cuanto a la + nomenclatura de variables, métodos y clases. - Se prohíbe el autoboxing y/o + autounboxing de números. +- Cada clase debe definir un constructor, incluso si es el constructor sin + argumentos, e incluir una llamada a `super()`. +- Todos los parámetros del método deben declararse como `final` para que no se + puedan modificar ni reasignar en el método. +- Todos los parámetros no nulos en los métodos públicos deben validarse primero + para verificar su no nulidad dentro del código. +- La documentación Java existente debe mantenerse junto con los cambios + realizados. La adición de nueva documentación Java para métodos públicos o + comentarios de código para cualquier algoritmo no trivial siempre es + bienvenida. +- La escritura de pruebas unitarias para código nuevo, existente y modificado + también es bienvenida. Para cualquier nuevo algoritmo o funcionalidad + aportada, o modificaciones sustanciales realizadas a los existentes, el equipo + podría considerarlos un requisito. [cla]: https://github.com/thymeleaf/thymeleaf-org/blob/CLA_CURRENT/CLA/ -[code-of-coduct]: https://github.com/thymeleaf/thymeleaf-org/blob/CoC_CURRENT/CoC/THYMELEAF_CODE_OF_CONDUCT.markdown +[code-of-conduct]: https://github.com/thymeleaf/thymeleaf-org/blob/CoC_CURRENT/CoC/THYMELEAF_CODE_OF_CONDUCT.markdown [thymeleaf-team]: https://www.thymeleaf.org/team.html [stackoverflow]: https://stackoverflow.com -[stackoverflow-thymeleaf]: https://stackoverflow.com/tags/thymeleaf +[stackoverflow-thymeleaf]: https://stackoverflow.com/tags/thymeleaf \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index d645695..b191cfb 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,202 +1,195 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Licencia Apache + Versión 2.0, enero de 2004 + http://www.apache.org/licenses/ + +TÉRMINOS Y CONDICIONES DE USO, REPRODUCCIÓN Y DISTRIBUCIÓN + +1. Definiciones. + +"Licencia" se refiere a los términos y condiciones de uso, reproducción y +distribución, tal como se definen en las Secciones 1 a 9 de este documento. + +"Licenciante" se refiere al titular de los derechos de autor o a la entidad +autorizada por este que otorga la Licencia. + +"Persona Jurídica" se refiere a la unión de la entidad actuante y todas las +demás entidades que controlan, son controladas por o se encuentran bajo control +común con dicha entidad. A los efectos de esta definición, "control" se refiere +a + (i) la facultad, directa o indirecta, de dirigir o gestionar dicha entidad, + ya sea por contrato o de otro modo, o + + (ii) la propiedad del cincuenta por ciento (50%) o más de las acciones en + circulación, o + + (iii) la titularidad efectiva de dicha entidad. + +"Usted" (o "Su") se refiere a una persona física o jurídica que ejerce los +permisos otorgados por esta Licencia. + +"Formato fuente" se refiere al formato preferido para realizar modificaciones, +incluyendo, entre otros, el código fuente del software, la documentación fuente +y los archivos de configuración. + +"Formato objeto" se refiere a cualquier formato resultante de la transformación +o traducción mecánica de un formato fuente, incluyendo, entre otros, el código +objeto compilado, la documentación generada y las conversiones a otros tipos de +medios. + +"Obra" se refiere a la obra de autoría, ya sea en formato fuente o de objeto, +disponible bajo la Licencia, según lo indicado por un aviso de derechos de autor +incluido o adjunto a la obra (se proporciona un ejemplo en el Apéndice a +continuación). + +"Obras derivadas" se refiere a cualquier obra, ya sea en formato fuente o de +objeto, que se base en (o derive de) la Obra y cuyas revisiones editoriales, +anotaciones, elaboraciones u otras modificaciones representen, en su conjunto, +una obra original de autoría. A los efectos de esta Licencia, las Obras +Derivadas no incluirán obras que sean separables de, o que simplemente se +vinculen (o se vinculen por nombre) con, las interfaces de, la Obra y sus Obras +Derivadas. + +"Contribución" se refiere a cualquier obra de autoría, incluyendo la versión +original de la Obra y cualquier modificación o adición a dicha Obra o sus Obras +Derivadas, que se envíe intencionalmente al Licenciante para su inclusión en la +Obra por el titular de los derechos de autor o por una persona física o jurídica +autorizada para enviar en nombre del titular de los derechos de autor. A los +efectos de esta definición, "enviado" se refiere a cualquier forma de +comunicación electrónica, verbal o escrita enviada al Licenciante o sus +representantes, incluyendo, entre otros, la comunicación en listas de correo +electrónico, sistemas de control de código fuente y sistemas de seguimiento de +problemas gestionados por, o en nombre de, el Licenciante con el fin de debatir +y mejorar la Obra, pero excluyendo la comunicación que esté claramente marcada o +designada por escrito por el titular de los derechos de autor como +"No Contribución". + +"Colaborador" se refiere al Licenciante y a cualquier persona física o jurídica +en cuyo nombre el Licenciante haya recibido una Contribución y la haya +incorporado posteriormente a la Obra. + +2. Concesión de Licencia de Derechos de Autor. Sujeto a los términos y +condiciones de esta Licencia, cada Colaborador le otorga a Usted una licencia de +derechos de autor perpetua, mundial, no exclusiva, gratuita, libre de regalías e +irrevocable para reproducir, preparar Obras Derivadas, exhibir públicamente, +ejecutar públicamente, sublicenciar y distribuir la Obra y dichas Obras +Derivadas en formato fuente u objeto. + +3. Concesión de Licencia de Patente. Sujeto a los términos y condiciones de esta +Licencia, cada Colaborador le otorga a Usted una licencia de patente perpetua, +mundial, no exclusiva, gratuita, libre de regalías e irrevocable (salvo lo +establecido en esta sección) para crear, haber creado, usar, ofrecer la venta, +vender, importar y transferir de cualquier otra forma la Obra. Dicha licencia se +aplica únicamente a las reivindicaciones de patente licenciables por dicho +Colaborador que sean necesariamente infringidas por su(s) Contribución(es) por +sí sola(s) o por la combinación de estas con la Obra a la que se presentó +dicha(s). Si Usted inicia un litigio de patentes contra cualquier entidad +(incluida una demanda cruzada o reconvención en una demanda) alegando que la +Obra o una Contribución incorporada a ella constituye una infracción directa o +indirecta de patente, cualquier licencia de patente otorgada a Usted en virtud +de esta Licencia para dicha Obra finalizará a partir de la fecha de presentación +de dicho litigio. + +4. Redistribución. Puede reproducir y distribuir copias de la Obra o de sus +Obras Derivadas en cualquier medio, con o sin modificaciones, y en formato +Fuente u Objeto, siempre que cumpla las siguientes condiciones: + + (a) Debe proporcionar a cualquier otro destinatario de la Obra o de las + Obras Derivadas una copia de esta Licencia; y + + (b) Debe hacer que cualquier archivo modificado incluya avisos visibles que + indiquen que ha realizado cambios; y + + (c) Debe conservar, en el formato Fuente de cualquier Obra Derivada que + distribuya, todos los avisos de derechos de autor, patentes, marcas + registradas y atribución del formato Fuente de la Obra, excluyendo aquellos + avisos que no se refieran a ninguna parte de las Obras Derivadas. y + + (d) Si la Obra incluye un archivo de texto de "AVISO" como parte de su + distribución, cualquier Obra Derivada que distribuya deberá incluir una + copia legible de los avisos de atribución contenidos en dicho archivo de + AVISO, excluyendo aquellos avisos que no pertenezcan a ninguna parte de las + Obras Derivadas, en al menos uno de los siguientes lugares: en un archivo de + texto de AVISO distribuido como parte de las Obras Derivadas; en el formato + o documentación fuente, si se proporciona junto con las Obras Derivadas; o + en una visualización generada por las Obras Derivadas, siempre que dichos + avisos de terceros aparezcan habitualmente. El contenido del archivo de + AVISO es solo para fines informativos y no modifica la Licencia. Puede + agregar sus propios avisos de atribución en las Obras Derivadas que + distribuya, junto con el texto del AVISO de la Obra o como apéndice al + mismo, siempre que dichos avisos de atribución adicionales no puedan + interpretarse como una modificación de la Licencia. + +Puede añadir su propia declaración de derechos de autor a sus modificaciones y +establecer términos y condiciones de licencia adicionales o diferentes para el +uso, la reproducción o la distribución de sus modificaciones, o para cualquier +Obra Derivada en su conjunto, siempre que su uso, reproducción y distribución de +la Obra cumpla con las condiciones establecidas en esta Licencia. + +5. Presentación de Contribuciones. Salvo que Usted indique explícitamente lo +contrario, cualquier Contribución que Usted envíe intencionalmente para su +inclusión en la Obra al Licenciante se regirá por los términos y condiciones de +esta Licencia, sin términos ni condiciones adicionales. +No obstante lo anterior, nada de lo aquí dispuesto sustituirá ni modificará los +términos de cualquier contrato de licencia independiente que usted haya firmado +con el Licenciante en relación con dichas Contribuciones. + +6. Marcas comerciales. Esta Licencia no autoriza el uso de los nombres +comerciales, marcas registradas, marcas de servicio o nombres de productos del +Licenciante, excepto según sea necesario para el uso razonable y habitual al +describir el origen de la Obra y reproducir el contenido del archivo AVISO. + +7. Exención de garantía. Salvo que lo exija la legislación aplicable o se +acuerde por escrito, el Licenciante proporciona la Obra (y cada Colaborador +proporciona sus Contribuciones) "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE +NINGÚN TIPO, ni expresas ni implícitas, incluyendo, entre otras, las garantías o +condiciones de TÍTULO, NO INFRACCIÓN, COMERCIABILIDAD o IDONEIDAD PARA UN +PROPÓSITO PARTICULAR. Usted es el único responsable de determinar la idoneidad +del uso o la redistribución de la Obra y asume cualquier riesgo asociado con el +ejercicio de los permisos otorgados en virtud de esta Licencia. + +8. Limitación de responsabilidad. En ningún caso ni bajo ninguna teoría legal, +ya sea por agravio (incluida la negligencia), contrato o de cualquier otra +manera, a menos que lo exija la ley aplicable (como actos deliberados y de +negligencia grave) o se acuerde por escrito, ningún Colaborador será responsable +ante Usted por daños, incluidos los daños directos, indirectos, especiales, +incidentales o consecuentes de cualquier naturaleza que surjan como resultado de +esta Licencia o del uso o la imposibilidad de usar la Obra (incluidos, entre +otros, daños por pérdida de prestigio, interrupción del trabajo, fallo o mal +funcionamiento del ordenador o cualquier otro daño o pérdida comercial), incluso +si dicho Colaborador ha sido advertido de la posibilidad de dichos daños. + +9. Aceptación de Garantía o Responsabilidad Adicional. Al redistribuir la Obra o +sus Obras Derivadas, Usted podrá optar por ofrecer y cobrar una tarifa por la +aceptación de soporte, garantía, indemnización u otras obligaciones y/o derechos +de responsabilidad conforme a esta Licencia. Sin embargo, al aceptar dichas +obligaciones, Usted podrá actuar únicamente en Su propio nombre y bajo Su +exclusiva responsabilidad, no en nombre de ningún otro Colaborador, y solo si +acepta indemnizar, defender y eximir de responsabilidad a cada Colaborador por +cualquier responsabilidad en la que incurra o reclamación presentada contra él +debido a la aceptación de dicha garantía o responsabilidad adicional. + +FIN DE LOS TÉRMINOS Y CONDICIONES + +APÉNDICE: Cómo aplicar la Licencia Apache a su obra. + +Para aplicar la Licencia Apache a su obra, adjunte el siguiente aviso estándar, +reemplazando los campos entre corchetes "[]" con su información de +identificación. (¡No incluya los corchetes!) El texto debe incluirse en la +sintaxis de comentarios adecuada para el formato del archivo. También +recomendamos incluir el nombre del archivo o clase y la descripción de su +propósito en la misma página impresa que el aviso de derechos de autor para +facilitar su identificación en archivos de terceros. + +Copyright [aaaa] [nombre del titular de los derechos de autor] + +Licencia Apache, versión 2.0 (la "Licencia"); no puede utilizar este archivo +excepto de conformidad con la Licencia. +Puede obtener una copia de la Licencia en + +http://www.apache.org/licenses/LICENSE-2.0 + +Salvo que la legislación aplicable lo exija o se acuerde por escrito, el +software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI +CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas. +Consulte la Licencia para conocer el lenguaje específico que rige los permisos y +las limitaciones de la misma. diff --git a/PANDOC_INSTALL.txt b/PANDOC_INSTALL.txt index 07a7e66..54eac9d 100644 --- a/PANDOC_INSTALL.txt +++ b/PANDOC_INSTALL.txt @@ -1,17 +1,16 @@ -HOW TO INSTALL AN UPDATED VERSION OF PANDOC ON LINUX ----------------------------------------------------- +CÓMO INSTALAR UNA VERSIÓN ACTUALIZADA DE PANDOC EN LINUX +-------------------------------------------------------- -1. Install the environment - Ubuntu 14.10 - - Install ghc, libghc-zlib-dev libgmp-dev packages +1. Instale el entorno + Ubuntu 14,10 + - Instale los paquetes gch, libghc-zlib-dev libgmp-dev CentOS 6.5 - - Install an updated ghc from https://www.haskell.org/ghc/ and add its binaries to the path. - - Install the zlib-devel and gmp-devel packages (i686 + x86_64 versions) - - Link (symbolic) /usr/lib/libgmp.so as /usr/lib/libgmp.so.10, which will be needed during the execution of the downloaded cabal binary (link can be removed after cabal has been re-compiled). -2. Download cabal executable (binary) from https://www.haskell.org/cabal/download.html -3. Execute ./cabal update, and then ./cabal install cabal-install -4. Cabal will be installed to $HOME/.cabal/bin/cabal -5. Remove the downloaded binary (use only the new one) -6. Execute .cabal/bin/cabal install pandoc -7. Create symlinks to cabal and pandoc from $HOME/bin and add to PATH. + - Instale un ghc actualizado desde https://www.haskell.org/ghc/ y agregue sus binarios a la ruta. + - Instale los paquetes zlib-devel y gmp-devel (versiones i686 + x86_64) +2. Descargue el ejecutable cabal (binario) de https://www.haskell.org/cabal/download.html +3. Ejecute ./cabal update, y después /cabal install cabal-install +4. Cabal será instalado en $HOME/.cabal/bin/cabal +5. Elimine el binario descargado (utilize solo el nuevo) +6. Ejecute .cabal/bin/cabal install pandoc +7. Cree enlaces simbólicos a cabal y pandoc desde $HOME/bin y agréguelos al PATH. diff --git a/README.md b/README.md index 81d2e36..cc17218 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,92 @@ -Thymeleaf Docs -============== +Documentación Thymeleaf +======================= -[](https://github.com/thymeleaf/thymeleaf-docs/actions/workflows/build.yaml) +[](https://github.com/thymeleaf/thymeleaf-docs/actions/workflows/build.yaml) -Thymeleaf documentation in Markdown format, which is then converted to HTML, EPUB -(using [Pandoc](https://johnmacfarlane.net/pandoc/)), MOBI (using [Calibre](https://calibre-ebook.com/)) -and PDF (using [wkhtmltopdf](https://wkhtmltopdf.org/)) -formats using the supplied Gradle build script. +La documentación de Thymeleaf está en formato Markdown, la cual es después +convertida a los formatos HTML, EPUB +(usando [Pandoc](https://johnmacfarlane.net/pandoc/)), +MOBI (usando [Calibre](https://calibre-ebook.com/)) +y PDF (usando [wkhtmltopdf](https://wkhtmltopdf.org/)) usando el script de construcción de Gradle +proporcionado. -The flavour of Markdown used is pandoc's Markdown. Its specifics and extensions can be -examined here: https://pandoc.org/MANUAL.html#pandocs-markdown +El estilo de Markdown utilizado es el Markdown de Pandoc. Sus particularidades y +extensiones pueden examinarse aquí.: +https://pandoc.org/MANUAL.html#pandocs-markdown -Types of documents managed --------------------------- +Tipos de documentos gestionados +------------------------------- - * Tutorials, living in `docs/tutorials`. Output: HTML, PDF, EPUB and Kindle. - Given their length, tutorials use their own HTML style, with an index frame - on the left side. - * Articles, living in `docs/articles`. Output: HTML only. Articles are output - with the same HTML style as the rest of the Thymeleaf web site. + * Tutoriales, que se encuentran en `docs/tutorials`. Salidas: HTML, PDF, EPUB y + Kindle. Dados sus tamaños, los tutoriales usan sus propios estilos HTML, con + un marco de índice en el lado izquierdo. + * Artículos, que se encuentran en `docs\articles. Salidas: Solo HTML. Los + artículos son salidas con el mismo estilo de HTML que el resto dei sitio web + de Thymeleaf. -Building the documentation --------------------------- +Construyendo la documentación +----------------------------- -The docs can be generated using the ["build" workflow](https://github.com/thymeleaf/thymeleaf-docs/actions/workflows/build.yaml) -in GitHub Actions. The artifact created contains the docs in the same structure -as used for copying to and updating the Thymeleaf website (https://github.com/thymeleaf/thymeleaf.github.io). +Los documentos pueden ser generados usando el +[flujo de trabajo "build"](https://github.com/thymeleaf/thymeleaf-docs/actions/workflows/build.yaml) +en las Acciones de GitHub. El artefacto creado contiene los documentos en +la misma estructura que se usa para copiar y actualizar el sitio web de +Thymeleaf (https://github.com/thymeleaf/thymeleaf.github.io). -If you want to build the docs on your own machine, then you can follow the -instructions below. +Si quiere construir los documentos en su propia máquina, entonces puede seguir +las instrucciones de debajo. -### Dependencies / things to install +### Dependencias / cosas a instalar - Java 11+ - - Pandoc 2.2.1+ for HTML docs: https://johnmacfarlane.net/pandoc/installing.html - - wkhtmltopdf 0.12.6+ for PDF and EPUB/MOBI docs (optional): https://wkhtmltopdf.org/downloads.html - - Calibre for EPUB/MOBI docs (optional): https://calibre-ebook.com/download + - Pandoc 2.2.1+ para los documentos HTML: https://johnmacfarlane.net/pandoc/installing.html + - wkhtmltopdf 0.12.6+ para los documentos PDF y EPUB/MOBI (opcional): https://wkhtmltopdf.org/downloads.html + - Calibre para los documentos EPUB/MOBI (opcional): https://calibre-ebook.com/download -### Generating the docs +### Generando los documentos -Use the Gradle wrapper build script (`./gradlew` which is included in this repo) -to generate the documentation from the Markdown sources to your desired format, -HTML, PDF, or e-books. The following Gradle tasks perform these jobs: +Utilize la envoltura del script de construcción de Gradle (`./gradlew` que está +incluído en este repositorio) para generar la documentación desde los fuentes +de Markdown a su formato deseado, HTML, PDF o libros electrónicos. Las +siguientes tareas de Gradle realizan estos trabajos: - * `generateDocsHTML` - Create the HTML docs. - * `generateDocsPDF` - Create the PDF docs (also creates the HTML docs since it - depends on them) - * `generateDocsEbook` - Create the e-books. - * `generateDocs`/`build` - Create all the above. + * `generateDocsHTML` - Crea los documentos HTML. + * `generateDocsPDF` - Crea los documentos PDF (también crea los documentos HTML + ya que depende de ellos) + * `generateDocsEbook` - Crea los libros electrónicos. + * `generateDocs`/`build` - Crea todo lo anterior. -The generated docs will end up in the `build/site/doc` directory. The entire -`build/site` directory will be prepared for direct copy (`cp -R`) to the -Thymeleaf website repository for publishing. +Los documentos generados terminarán en el directorio `build/site/doc`. El +directorio entero `build/site` se preparará para copia directa (`cp -R`) +al repositorio del sitio web de Thymeleaf para su publicación. -### Updating the docs for a new version +### Actualizando los documentos para una versión nueva -To change the version number that appears in the generated docs, update the -`documentMetadata` object in the `build.gradle` script for the date and -version of docs that need updating. +Para cambiar el número de versión que aparece en los documentos generados, +actualize el objeto `documentMetadata` en el script `build.gradle` para la fecha +y la versión de los documentos que necesitan actualizarse. -How the docs are generated --------------------------- +Cómo se generan los documentos +------------------------------ -**Pandoc** is used to convert the Markdown sources into HTML, using the -appropriate HTML template in the `templates` directory, which in turn make use -of JavaScript and CSS files copied from the `scripts` and `styles` directories. +Se usa **Pandoc** para convertir los fuentes de Markdown en HTML, usando la +plantilla apropiada de HTML en el directorio `templates`, que a su vez utiliza +archivos JavaScript y CSS copiados de los directorios `scripts` y `styles`. -**Pandoc** is also used to generate e-books in EPUB format. +También se usa **Pandoc** para generar los libros electrónicos en formato EPUB. -**Calibre** is used to convert e-books to MOBI (Kindle) format. +Se usa **Calibre** para convertir los libros electrónicos al formato MOBI +(Kindle) -**wkhtmltopdf** is used to create PDF versions of the HTML docs based on the -`media="print"` stylesheet instead of the `media="screen"` one you normally see -when opening it in your browser. The PDF generation task also launches a -**Jetty** server to host the HTML files since wkhtmltopdf uses **WebKit** and -not using a server would prevent many of the JavaScript files in the HTML -documentation from running due to WebKit's same-origin policies being stricter -with the `file://` protocol. +Se usa **wkhtmltopdf** para crear las versiones PDF de los documentos HTML +basados en la hoja de estilos `media="print"` en lugar de la `media="screen"` +que normalmente se ve al abrirlos en el navegador. La tarea de generación de PDF +también lanza un servidor **Jetty** para hospedar los ficheros HTML ya que +wkhtmltopdf usa **WebKit** y no usar un servidor evitaría que muchos de los +archivos JavaScript en la documentación HTML se ejecuten debido a que las +políticas del mismo origen de WebKit son más estrictas con el protocolo +`file://`. diff --git a/build.gradle b/build.gradle index aaac7f6..9e3bd5d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,32 +1,35 @@ -/* +/* * Copyright 2013, The Thymeleaf Project (http://www.thymeleaf.org/) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * + * Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); + * No puede usar este archivo excepto de conformidad con la Licencia. + * Puede obtener una copia de la Licencia en + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Salvo que lo exija la legislación aplicable o se acuerde por escrito, el software + * distribuido bajo la Licencia se distribuye "TAL CUAL", + * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas. + * Consulte la Licencia para conocer el idioma específico que rige los permisos y las + * limitaciones de la Licencia. */ + import com.github.psxpaul.task.ExecFork import org.apache.tools.ant.filters.ReplaceTokens - import java.time.LocalDate import java.time.format.DateTimeFormatter +import java.time.temporal.TemporalAccessor /** - * Gradle build script for the Thymeleaf Docs project, converts the - * documentation files, in Markdown format, into HTML and PDF formats. + * El script de compilación de Gradle para el proyecto Thymeleaf Docs convierte + * los archivos de documentación, en formato Markdown, a formatos HTML y PDF. * * @author Emanuel Rabina */ + + plugins { id 'java' id 'war' @@ -34,18 +37,30 @@ plugins { id 'org.gretty' version '4.0.3' } +war { + webAppDirectory = file("${project.layout.buildDirectory.get()}/site/doc") +} + + + +dependencies { + // Needed for org.apache.tools.ant.filters.ReplaceTokens + implementation 'org.apache.ant:ant:1.10.14' +} + + repositories { mavenCentral() maven { - url 'https://plugins.gradle.org/m2/' + url = 'https://plugins.gradle.org/m2/' } } gretty { - scanInterval 0 + scanInterval = 0 } -// Replaces @projectVersion@ and @documentVersion@ placeholders in the docs +// Reemplaza los marcadores de posición @projectVersion@ y @documentVersion@ en los documentos def documentMetadata = [ '2.1': [ version: '2.1.6.RELEASE', @@ -70,42 +85,62 @@ def imagesDir = file("${projectDir}/images") def scriptsDir = file("${projectDir}/scripts") def stylesDir = file("${projectDir}/styles") def templatesDir = file("${projectDir}/templates") -def srcDir = file("${buildDir}/source") -def outputDir = file("${buildDir}/site/doc") +def builddir = file("${project.layout.buildDirectory.get()}") +def srcDir = file("${builddir}/source") +def outputDir = file("${builddir}/site/doc") + +/* Creo que mejor se incluyen estos ejecutables en el path */ +/* En Windows FILEMON */ +def cmdPandoc = "C:\\des\\bin\\Pandoc\\pandoc.exe" +def cmdWkhtmltopdf = "C:\\des\\bin\\wkhtmltopdf\\bin\\wkhtmltopdf.exe" + + + +/* En Windows ELSUPER +def cmdPandoc = "E:\\des\\bin\\Pandoc\\pandoc.exe" +def cmdWkhtmltopdf = "E:\\des\\bin\\wkhtmltopdf\\bin\\wkhtmltopdf.exe" +*/ +/* En Linux +def cmdPandoc = "pandoc" +def cmdWkhtmltopdf = "wkhtmltopdf" + */ + + -project.webAppDirName = outputDir def docNames = [] as Set def docTypes = [:] + /** - * Copy all docs and resources to the source dir, from where they will be fed to - * pandoc. Also, during this copy operation markdown files will be filtered so - * that Gradle properties are resolved in their metadata sections. - * - * Note that, for doc files, the name of the folder they are immediately in will - * be considered their "document type", and this will have an influence on the - * type of conversions that will be applied to them. + * Copia todos los documentos y recursos al directorio de origen, desde donde + * se enviarán a pandoc. Además, durante esta operación de copia, los archivos + * Markdown se filtrarán para que las propiedades de Gradle se resuelvan en sus + * secciones de metadatos. + * + * Tenga en cuenta que, para los archivos .doc, el nombre de la carpeta en la + * que se encuentran se considerará su "tipo de documento", lo que influirá en + * el tipo de conversiones que se les aplicarán. */ tasks.register('copyResources') { doLast { - // Copy docs files to the src folder. For markdown files, apply property filtering and build the name-type map + // Copia los archivos docs a la carpeta src. Para los archivos Markdown, aplica el filtro de propiedades y crea el mapa de nombre-tipo. copy { from docsDir into srcDir - filesMatching('**/*.md') { + filesMatching("**/*.md") { - // We need a file path relative to the 'docs' folder + // Necesitamos una ruta de archivo relativa a la carpeta 'docs' def docFileName = (it.relativePath.toString() - ".md").replace('\\', '/') def docFileType = it.file.parentFile.name def thymeleafVersion = null - // The parent folder in some cases might be a version number (e.g. tutorials for 2.1, 3.0...) In - // such case, we need to obtain the document type from the parent of the parent. Note three types - // of version specifications are allowed: '2.1', '2.1.4', '2.1.x' + // En algunos casos, la carpeta principal puede ser un número de versión (p. ej., tutoriales para 2.1, 3.0, etc.). En + // tal caso, necesitamos obtener el tipo de documento de la carpeta principal. Tenga en cuenta + // que se permiten tres tipos de especificaciones de versión: '2.1', '2.1.4', '2.1.x'. if (docFileType ==~ /\d+\.\d+(\.\d+)?/ || docFileType ==~ /\d+\.\d+(\.x)?/) { thymeleafVersion = it.file.parentFile.name docFileType = it.file.parentFile.parentFile.name @@ -114,10 +149,10 @@ tasks.register('copyResources') { docNames.add(docFileName) docTypes.put(docFileName, docFileType) - // Property filtering, this will replace all @gradle-properties@ (mainly used in markdown metadata) - var documentMetadataForVersion = documentMetadata[(thymeleafVersion)] + // Filtrado de propiedades, esto reemplazará todas las @gradle-properties@ (principalmente utilizadas en metadatos de Markdown) + def documentMetadataForVersion = documentMetadata[thymeleafVersion] if (documentMetadataForVersion) { - def documentVersion = DateTimeFormatter.ofPattern('yyyyMMdd - dd MMMM yyyy', Locale.ENGLISH).format(documentMetadataForVersion.date) + def documentVersion = DateTimeFormatter.ofPattern('yyyyMMdd - dd MMMM yyyy', Locale.ENGLISH).format(documentMetadataForVersion.date as TemporalAccessor) def projectVersion = documentMetadataForVersion.version filter(ReplaceTokens, tokens: [ @@ -128,7 +163,7 @@ tasks.register('copyResources') { } } - // Copy all resource directories straight over + // Copiar todos los directorios de recursos directamente copy { from scriptsDir into "${srcDir.path}/scripts" @@ -142,67 +177,69 @@ tasks.register('copyResources') { into "${srcDir.path}/styles" } - // Generate output directory structure + // Generar la estructura del directorio de salida mkdir outputDir } } /** - * Generate HTML versions of the Thymeleaf documentation. + * Generar versiones HTML de la documentación de Thymeleaf. */ tasks.register('generateDocsHTML') { dependsOn 'copyResources' - description "Generate HTML docs from Thymeleaf's markdown docs" + description = "Genera documentos HTML a partir de los documentos de rebajas de Thymeleaf" doLast { docNames.each { docName -> def docType = docTypes.get(docName) if (conversions[docType].contains('html')) { - println "Generating HTML doc for ${docName} (${docType})..." - - def outputFile = file("${outputDir}/${docName}.html") - file(outputFile.parent).mkdirs() - exec { - commandLine = "pandoc" - args = [ - "--write=html5", - "--template=" + file("${templatesDir.path}/${docType}.html"), - "--wrap=none", - "--toc", - "--toc-depth=4", - "--section-divs", - "--no-highlight", - "--output=" + outputFile, - "${srcDir.path}/${docName}.md" - ] - } + println "Generando el documento HTML para ${docName} (${docType})..." + + def outputFile = file("${outputDir}/${docName}.html") + file(outputFile.parent).mkdirs() + exec { + // Aquí se indica la ruta al ejecutable de pandoc, 'pandoc.exe', que dependerá de + // la elección que hayas tomado en la instalación (N. del T.) + commandLine = cmdPandoc + args = [ + "--write=html5", + "--template=" + file("${templatesDir.path}/${docType}.html"), + "--wrap=none", + "--toc", + "--toc-depth=4", + "--section-divs", + "--syntax-highlighting=none", + "--output=" + outputFile, + "${srcDir.path}/${docName}.md" + ] + } } } - // Copy over resources needed for the HTML docs + // Copiar los recursos necesarios para los documentos HTML copy { from srcDir into outputDir - exclude '**/*.md' + exclude "**/*.md" } } } /** - * Generate e-books of the Thymeleaf documentation. + * Genera libros electrónicos de la documentación de Thymeleaf. */ tasks.register('generateDocsEbook') { - description "Generate e-books from Thymeleaf's markdown docs" + description "Genera libros electrónicos a partir de los documentos markdown de Thymeleaf" dependsOn 'copyResources' doLast { - // Currently only limited to tutorials + // Actualmente solo limitada a tutoriales. docNames.each { docName -> def docType = docTypes.get(docName) if (conversions[docType].contains('ebook')) { - println "Generating E-Book docs for ${docName} (${docType})..." + println "Generando el documento E-Book para ${docName} (${docType})..." def epubOutputFile = file("${outputDir}/${docName}.epub") def mobiOutputFile = file("${outputDir}/${docName}.mobi") @@ -210,20 +247,23 @@ tasks.register('generateDocsEbook') { def inputFile = file("${srcDir.path}/${docName}.md") - exec { - // We need to set the working dir in order for pandoc to find images - workingDir = file(inputFile.parent) - commandLine = "pandoc" - args = [ - "--write=epub", - "--template=" + file("${templatesDir.path}/${docType}.epub"), - "--toc", - "--toc-depth=4", - "--section-divs", - "--output=" + epubOutputFile, - inputFile - ] - } + exec { + // Necesitamos configurar el directorio de trabajo para que pandoc encuentre imágenes + workingDir = file(inputFile.parent) + + // Aquí se indica la ruta al ejecutable de pandoc, 'pandoc.exe', que dependerá de + // la elección que hayas tomado en la instalación (N. del T.) + commandLine = cmdPandoc + args = [ + "--write=epub", + "--template=" + file("${templatesDir.path}/${docType}.epub"), + "--toc", + "--toc-depth=4", + "--section-divs", + "--output=" + epubOutputFile, + inputFile + ] + } exec { commandLine = "ebook-convert" args = [ @@ -237,41 +277,44 @@ tasks.register('generateDocsEbook') { } /** - * Uses a combination of the Gretty and ExecFork plugins to start a server in a - * background process. This is because Gretty by itself blocks the existing - * thread until the server is shut down via other means. + * Usa una combinación de los plugins Gretty y ExecFork para iniciar un servidor + * en un proceso en segundo plano. Esto se debe a que Gretty bloquea el hilo + * existente hasta que el servidor se apaga por otros medios. */ tasks.register('startServer', ExecFork) { + doNotTrackState("se declara no trazable la tarea") dependsOn 'war' - - commandLine = './gradlew' + commandLine = './gradlew.bat' args = ['appStartWar'] - waitForOutput = 'Run \'gradle appStop\' to stop the server' + waitForOutput = 'Gretty: Server is running' } /** - * Generate PDF versions of the Thymeleaf documentation. Uses a Jetty server to - * host the HTML documents and wkhtmltopdf which uses the server to read files - * via the http:// protocol (otherwise the same-origin restriction kicks in, as - * do some file:// bugs on Windows) and saves them as PDF documents. + * Genera versiones PDF de la documentación de Thymeleaf. Utiliza un servidor + * Jetty para alojar los documentos HTML y wkhtmltopdf, que utiliza el servidor + * para leer archivos mediante el protocolo http:// (de lo contrario, se aplica + * la restricción del mismo origen, al igual que algunos errores de file:// en + * Windows) y los guarda como documentos PDF. */ tasks.register('generateDocsPDF') { - description "Generate PDF documents from Thymeleaf's HTML docs" + description "Genera documentos PDF a partir de los documentos HTML de Thymeleaf" dependsOn 'generateDocsHTML', 'startServer' doLast { - // Generate the PDF documents from the modified HTML documents - fileTree(outputDir) { include '*/**/*.html' }.each { docFile -> + // Genera los documentos PDF a partir de los documentos HTML modificados + fileTree(outputDir) { include '*/**/*.html' as Closure }.each { docFile -> def folderBase = relativePath(file(outputDir)) def docName = (relativePath(docFile).substring(folderBase.length() + 1) - ".html") def docType = docTypes.get(docName) if (conversions[docType].contains('pdf')) { - println "Generating PDF doc for ${docName} (${docType})..." + println "Generando el documento PDF para ${docName} (${docType})..." exec { - commandLine = 'wkhtmltopdf' + // Aquí se indica la ruta al ejecutable 'whhtmltopdf.exe', que dependerá de + // la elección que hayas tomado en la instalación (N. del T.) + commandLine = cmdWkhtmltopdf args = [ "--print-media-type", "--dpi", "300", @@ -290,19 +333,19 @@ tasks.register('generateDocsPDF') { } exec { - commandLine = './gradlew' + commandLine = './gradlew.bat' args = ['appStop'] } } } /** - * Generate HTML, E-book and PDF versions of the Thymeleaf documentation. + * Genera versiones HTML, de libro electrónico y PDF de la documentación de Thymeleaf. */ tasks.register('generateDocs') { dependsOn 'generateDocsHTML', 'generateDocsEbook', 'generateDocsPDF' - // Just an aggregator task + // Solo una tarea de agregador } tasks.named('build') { diff --git a/docs/articles/fromhtmltohtmlviahtml.md b/docs/articles/fromhtmltohtmlviahtml.md index a8203eb..78fde3c 100644 --- a/docs/articles/fromhtmltohtmlviahtml.md +++ b/docs/articles/fromhtmltohtmlviahtml.md @@ -1,390 +1,386 @@ --- -title: From HTML to HTML (via HTML) +title: De HTML a HTML (vía HTML) --- -Knowing the internals of the HTML family of web standards is quite -important when you are using software such as Thymeleaf. At least if you -want to understand what you are doing. +Conocer los fundamentos de la familia de estándares web HTML es fundamental al +utilizar software como Thymeleaf. Al menos si se quiere comprender lo que se +está haciendo. -The problem is that many people know the technologies they are using for -creating webs, but don't really know where these technologies come from. -It has been a long way since the inception of the first web interfaces, -and since then every new technology has been changing the way we -developed for the web by deprecating a good amount of our work and, -especially, our knowledge. +El problema es que mucha gente conoce las tecnologías que utiliza para crear +sitios web, pero desconoce su origen. Ha transcurrido un largo camino desde la +creación de las primeras interfaces web, y desde entonces, cada nueva tecnología +ha cambiado la forma en que desarrollamos para la web, desvalorizando gran parte +de nuestro trabajo y, sobre todo, nuestros conocimientos. -And now, with the arrival of HTML5, things have become even more -complicated. *What's it?* *Why is it HTML instead of XHTML?* *Wasn't the -HTML tag soup considered harmful?* +Y ahora, con la llegada de HTML5, las cosas se han complicado aún más. +*¿Qué es?* *¿Por qué es HTML en lugar de XHTML?* *¿No se consideraba perjudicial +la sopa de etiquetas HTML?* -So let's take a step back, and see how we arrived where we are now, and -why. +Así que demos un paso atrás y veamos cómo llegamos a donde estamos ahora y por +qué. -Back in the 90s, there was HTML... +En los años 90, existía el HTML... ---------------------------------- -...and HTML was a standard (or more correctly, a *recommendation*) -maintained by the *World Wide Web Consortium* (a.k.a. W3C). Extending -from a language called SGML, HTML defined a tag-based markup language -for writing rich hyper-text documents, highly coupled to the protocol -that was used for serving them and their related resources across the -network: the *Hyper-Text Transfer Protocol* (HTTP). - -HTTP used text *headers* for defining what was being served to clients -and how, one of which was extremely important: the `Content-Type` -header. This header explained to browsers what type of content was being -served to them in a language called *MIME (Multipurpose Internet Mail -Extensions)*. And the MIME type used for serving HTML documents was +...y HTML era un estándar (o más correctamente, una *recomendación*) mantenido +por el *Consorcio World Wide Web* (también conocido como W3C). A partir de un +lenguaje llamado SGML, HTML definió un lenguaje de marcado basado en etiquetas +para escribir documentos de hipertexto enriquecidos, altamente acoplado al +protocolo utilizado para servirlos y sus recursos relacionados a través de la +red: el *Protocolo de Transferencia de Hipertexto* (HTTP). + +HTTP utilizaba *encabezados* de texto para definir qué se servía a los clientes +y cómo. Uno de ellos era extremadamente importante: el encabezado +`Content-Type`. Este encabezado explicaba a los navegadores el tipo de contenido +que se les servía en un lenguaje llamado *MIME (Extensiones Multipropósito de +Correo de Internet)*. El tipo MIME utilizado para servir documentos HTML era `text/html`: ```html Content-Type: text/html ``` -HTML also defined a way to check whether a document was *valid*. Being -valid basically meant that the document was written according to the -HTML rules that dictated what attributes a tag could have, where a tag -could appear in the document, etc. +HTML también definió una forma de comprobar si un documento era *válido*. Ser +válido significaba básicamente que el documento se había escrito según las +reglas HTML que dictaban qué atributos podía tener una etiqueta, dónde podía +aparecer en el documento, etc. -These validity rules were specified using a language for defining the -structure of SGML documents called *Document Type Definition* or DTD. A -Standard DTD was created for each version of HTML, and HTML documents -had to declare the DTD (and therefore the version of HTML) they -conformed to by means of a clause that should appear as their first -line, the *Document Type Declaration* or `DOCTYPE` clause: +Estas reglas de validez se especificaron mediante un lenguaje para definir la +estructura de los documentos SGML llamado *Definición de Tipo de Documento* o +DTD. Se creó una DTD estándar para cada versión de HTML, y los documentos HTML +debían declarar la DTD (y, por lo tanto, la versión de HTML) a la que se +ajustaban mediante una cláusula que debía aparecer en su primera línea: la +*Declaración de Tipo de Documento* o cláusula `DOCTYPE`: ```html ``` -The Document Object Model and the tag soup ------------------------------------------- - -HTML was meant for displaying documents in browsers, and back in the -late 90s browsers were made by fiercely competing companies that wanted -to offer the maximum amount of cool features to their users. Given that -HTML only defined rules for document formatting, many other features -were left to the browser developers' imagination. - -And one of the most interesting ideas that appeared in browsers was -*client-side interactivity*. This interactivity was achieved by -executing *scripts* -- in languages such as JavaScript -- inside the -browser itself, and giving these scripts the ability to handle, modify -and even execute events on parts of the document being displayed. For -this, browsers had to model HTML documents as in-memory trees of -objects, each of them with state and events, and thus the *Document -Object Model* (DOM) was born. - -The problem was that HTML rules for well-formedness were quite loose -whereas DOM trees were strictly hierarchical structures, and this meant -that different interpretations of HTML tag positions and sequences could -lead to different DOM object trees in different browsers. Add to this -the fact that these different browsers modelled the API of DOM nodes in -different ways (different names, events, etc) and you will start to get -the idea of how difficult it was to create cross-browser interactivity -back then. - -What's more: while all this was happening, browsers had been growing -quite forgiving with HTML authors, allowing them to write HTML documents -that were not well formed (*tag soups*) by automagically correcting -their errors. This lead HTML authors to create even worse formed -documents, and then browsers to allow even more errors in format, adding -to a quite destructive cycle. And guess what: each browser was -correcting all these errors in a different way. Hooray. - -The W3C finally standardized the DOM API and a language for scripting in -web browsers: JavaScript (although for some complex reasons they -insisted on calling it ECMAScript). But the damage done by the world of -tag soups coupled with the slow adoption of these standards in full by -browser makers -- in many cases fearing they would damage backwards -compatibility -- produced effects that are still influencing the way we -create web applications today. - - -Enter XML ---------- - -Some time after HTML became a widely spread language, the W3C developed -a new specification called XML (*eXtensible Markup Language*), aimed at -the representation of general-purpose data (not only web) in the form of -hierarchical markup text. - -XML was extensible in that it allowed the definition of purpose-specific -languages (tags and their attributes) to fit the needs of specific -scenarios. But HTML documents were not well formed from the XML -perspective, XML and HTML remained in fact incompatible languages. It -was not possible to express HTML as an XML *application*. - -Being strictly hierarchical and removing the structural ambiguities of -HTML, XML documents were more directly translatable to standardized DOM -trees (a process known as *XML Parsing*). Also given the fact that XML -was a text-based language, and that text is a sort of -technology-agnostic format (as opposed to binary), XML became especially -suited for the cross-platform interchange of data across the internet. -In fact, it led to the birth of the now-ubiquitous *Web Services* -technologies. +El modelo de objetos de documento y la sopa de etiquetas +-------------------------------------------------------- + +HTML se diseñó para mostrar documentos en navegadores, y a finales de los 90, +estos navegadores eran desarrollados por empresas que competían ferozmente y que +buscaban ofrecer el máximo número de funciones interesantes a sus usuarios. Dado +que HTML solo definía reglas para el formato de documentos, muchas otras +funciones quedaron a la imaginación de los desarrolladores de navegadores. + +Una de las ideas más interesantes que surgieron en los navegadores fue la +*interactividad del lado del cliente*. Esta interactividad se logró ejecutando +*scripts*, en lenguajes como JavaScript, dentro del propio navegador, y dándoles +la capacidad de manejar, modificar e incluso ejecutar eventos en partes del +documento mostrado. Para ello, los navegadores tuvieron que modelar los +documentos HTML como árboles de objetos en memoria, cada uno con su estado y +eventos, y así nació el *Modelo de Objetos del Documento* (DOM). + +El problema residía en que las reglas HTML para la correcta formación eran +bastante laxas, mientras que los árboles DOM eran estructuras estrictamente +jerárquicas. Esto implicaba que las diferentes interpretaciones de las +posiciones y secuencias de las etiquetas HTML podían generar distintos árboles +de objetos DOM en distintos navegadores. Si a esto le sumamos que estos +distintos navegadores modelaban la API de los nodos DOM de distintas maneras +(con distintos nombres, eventos, etc.), empezaremos a hacernos una idea de lo +difícil que era crear interactividad entre navegadores en aquel entonces. + +Es más: mientras todo esto sucedía, los navegadores se habían vuelto bastante +indulgentes con los autores de HTML, permitiéndoles escribir documentos HTML mal +formados (*sopa de etiquetas*) corrigiendo automáticamente sus errores. Esto +llevó a los autores de HTML a crear documentos aún peor formados, y luego a los +navegadores a permitir aún más errores de formato, lo que contribuyó a un ciclo +bastante destructivo. Y adivina qué: cada navegador corregía todos estos errores +de forma diferente. ¡Genial! + +El W3C finalmente estandarizó la API DOM y un lenguaje para scripting en +navegadores web: JavaScript (aunque por razones complejas insistieron en +llamarlo ECMAScript). Sin embargo, el daño causado por el mundo de las sopas +de etiquetas, sumado a la lenta adopción total de estos estándares por parte de +los desarrolladores de navegadores —en muchos casos por temor a que perjudicaran +la compatibilidad con versiones anteriores—, tuvo consecuencias que aún influyen +en la forma en que creamos aplicaciones web hoy en día. + + +Introducción de XML +------------------- + +Algún tiempo después de que HTML se convirtiera en un lenguaje ampliamente +difundido, el W3C desarrolló una nueva especificación llamada XML +(*eXtensible Markup Language*), destinada a la representación de datos de +propósito general (no sólo web) en forma de texto marcado jerárquico. + +XML era extensible, ya que permitía la definición de lenguajes específicos +(etiquetas y sus atributos) para adaptarse a las necesidades de escenarios +específicos. Sin embargo, los documentos HTML no estaban bien estructurados +desde la perspectiva XML; de hecho, XML y HTML seguían siendo lenguajes +incompatibles. No era posible expresar HTML como una *aplicación* XML. + +Al ser estrictamente jerárquicos y eliminar las ambigüedades estructurales +del HTML, los documentos XML se traducían más directamente a árboles DOM +estandarizados (un proceso conocido como *Análisis de XML*). Además, dado +que XML era un lenguaje basado en texto y que el texto es un formato +independiente de la tecnología (a diferencia del binario), XML se volvió +especialmente adecuado para el intercambio de datos entre plataformas a +través de internet. De hecho, condujo al nacimiento de las ahora +omnipresentes tecnologías de *Servicios Web*. HTML + XML = XHTML ------------------ -At some point, driven by the obvious usefulness of XML and the fact that -it could make web documents more extensible and interoperable (like, for -example, producing more predictable DOMs across browsers), the W3C -decided to reformulate HTML as an XML dialect (or *application*) instead -of an SGML one, and so XHTML was born. - -XHTML required web authors to write their documents as well-formed XML, -which introduced some formatting rules that didn't exist in HTML before: -tags should always be closed, attributes should always be escaped and -surrounded by quotes, etc. - -The introduction of XHTML and the transformation of web documents into -well formed XML was generally perceived as a step forward, because it -would allow higher levels of standardization across browsers, less space -for authoring errors that had to be corrected in browser-specific ways, -and easier parsing and automated processing of web pages. - -As a part of this, XHTML introduced a controversial concept coming -directly from XML and known as *Draconian Error Handling*, which meant -that any interpreter of XML -- including now a browser -- should fail -immediately should any kind of format error be found in the XML document -being processed. In practice, this meant that XHTML authors would have -to create perfectly well-formed documents or accept the fact that -browsers would never be able (in fact, allowed) to display them at all. - -For validation, the XHTML 1.0 specification defined a set of DTDs that -could be used in `DOCTYPE` clauses: `XHTML 1.0 Strict`, -`XHTML 1.0 Transitional` and `XHTML 1.0 Frameset`. The first one was -meant for *pure* XHTML documents that didn't use any deprecated tags -coming from HTML, the second one for transitional documents that still -made use of deprecated tags and attributes, and the third one for -frameset pages. +En algún momento, impulsado por la evidente utilidad de XML y su capacidad +para hacer que los documentos web fueran más extensibles e interoperables +(como, por ejemplo, la producción de DOM más predecibles en distintos +navegadores), el W3C decidió reformular HTML como un dialecto XML (o +*aplicación*) en lugar de SGML, y así nació XHTML. + +XHTML requería que los autores web escribieran sus documentos como XML bien +formado, lo que introdujo algunas reglas de formato que no existían antes +en HTML: las etiquetas siempre debían estar cerradas, los atributos siempre +debían escaparse y estar entre comillas, etc. + +La introducción de XHTML y la transformación de los documentos web en XML +bien formado se percibió generalmente como un avance, ya que permitiría una +mayor estandarización en todos los navegadores, menos margen para errores de +autor que debían corregirse de forma específica para cada navegador, y un +análisis y procesamiento automatizado más sencillos de las páginas web. + +Como parte de esto, XHTML introdujo un concepto controvertido, derivado +directamente de XML y conocido como *Manejo Draconiano de Errores*. Este +concepto implicaba que cualquier intérprete de XML, incluyendo ahora un +navegador, debería fallar inmediatamente si se detectaba cualquier error de +formato en el documento XML procesado. En la práctica, esto implicaba que los +autores de XHTML tendrían que crear documentos perfectamente bien formados o +aceptar que los navegadores nunca podrían (de hecho, no se les permitiría) +mostrarlos. + +Para la validación, la especificación XHTML 1.0 definió un conjunto de DTD que +podían usarse en cláusulas DOCTYPE: XHTML 1.0 Strict, XHTML 1.0 Transitional y +XHTML 1.0 Frameset. El primero estaba destinado a documentos XHTML *puros* que +no utilizaban etiquetas obsoletas de HTML; el segundo, a documentos +transicionales que aún utilizaban etiquetas y atributos obsoletos; y el +tercero, a páginas con conjuntos de marcos. ```html ``` -But one of the most important aspects of XHTML was that it also -introduced a new MIME type, which was the one that every web server was -supposed to use for serving XHTML so that browsers knew that they had to -use their XHTML parser and engine instead of their HTML equivalents. -This was `application/xhtml+xml`: +Pero uno de los aspectos más importantes de XHTML fue que también introdujo un +nuevo tipo MIME, el que todos los servidores web debían usar para servir XHTML, +de modo que los navegadores supieran que debían usar su analizador y motor +XHTML en lugar de sus equivalentes HTML. Este era `application/xhtml+xml`: + ```html Content-Type: application/xhtml+xml ``` -Crashing down to (XHTML's) reality ----------------------------------- +Cayendo ante la realidad (de XHTML) +----------------------------------- + +Justo después de su introducción, todo pintaba bien para XHTML. Los +desarrolladores solo teníamos que esperar a que los navegadores lo +implementaran por completo y el mundo del desarrollo web se vería mucho más +feliz... + +El problema es que eso nunca ocurrió. + +Lo que ocurrió fue que un navegador en particular simplemente denegó la +compatibilidad con el tipo de contenido `application/xhtml+xml`. Adivina +cuál. Sí, exactamente ese: Internet Explorer. + +Las versiones de IE anteriores a la 11 mostraban un cuadro de diálogo de +descarga al intentar acceder a un documento con el tipo de contenido propio +de XHTML, lo que, por supuesto, significaba que no se podía usar ese tipo de +contenido si se quería mostrar el sitio web a los usuarios de IE. Para cuando +esto se corrigió, ya era demasiado tarde. + +Por suerte, o quizás por desgracia, la especificación XHTML 1.0 incluía un +apéndice que indicaba que el contenido XHTML 1.0 también podía mostrarse con +el antiguo tipo de contenido `text/html` de la época de HTML, para facilitar +la transición. Y eso es exactamente lo que la mayoría de nosotros hemos estado +haciendo en los últimos años: crear contenido XHTML 1.0 y luego servirlo como +`text/html`. Dado que la especificación XHTML 1.0 se publicó en el año 2000, +la *transición* ha sido larga. + +Pero lo cierto es que al servir contenido como HTML en lugar de XHTML, los +navegadores utilizan sus motores HTML, y no los específicos para XHTML. Y +aunque sus motores HTML son compatibles con XHTML, aún deben ofrecer +compatibilidad con versiones anteriores del código HTML 4 antiguo, lo que los +convierte en programas muy complejos. Y, lo que es más importante, carecen de +algunas de las características más propias de XML de XHTML, empezando por... +la gestión de errores drástica. + +Y si no tienes un Manejo de Errores Draconiano, tienes un motor indulgente que +te permitirá mostrar documentos con formato incorrecto, corrigiendo +automáticamente los errores. Y si sabes que el navegador corregirá tus errores +(de forma específica para cada navegador), probablemente nunca corregirás tus +documentos... y así la historia de terror del HTML continúa. + +Sabiendo esto, piensa que probablemente nunca has creado un sitio web +verdaderamente XHTML. Lo que has hecho es mostrar documentos XHTML +(probablemente mal formados) como HTML simple. ¿Qué te parece? + +Pero la cosa empeoró, porque en 2002, «XHTML 1.1» eliminó la posibilidad de usar +el tipo de contenido HTML, permitiendo solo «application/xhtml+xml». El problema +fue que, en lugar de obligar a Internet Explorer a admitir +`application/xhtml+xml`, lo cual no ocurrió, esta restricción simplemente +convirtió a XHTML 1.1 en una criatura tan mitológica como Nessie. Casi nadie lo +usó. + +En 2009, el W3C permitió de nuevo el uso de `text/html` con XHTML 1.1, pero, una +vez más, ya era demasiado tarde. + + +Hacia HTML5: Una historia de divorcio +------------------------------------- + +En algún momento (concretamente en 2004), algunos desarrolladores de navegadores +se dieron cuenta de que las especificaciones XHTML existentes evolucionaban con +demasiada lentitud para satisfacer las crecientes demandas de la web (vídeo, +audio, interfaces de aplicaciones más completas, etc.), y que el W3C los +impulsaba cada vez más a crear interpretaciones más estrictas de los documentos +que podrían acabar inutilizando grandes cantidades de código existente (mal +formado). + +Querían mejorar las aplicaciones web con funciones como vídeo, audio, +almacenamiento local o procesamiento avanzado de formularios, y de hecho podían +hacerlo simplemente añadiendo esas funciones de forma específica para cada +navegador, pero no querían volver a caer en la falta de interoperabilidad. +Necesitaban que los estándares evolucionaran e incluyeran estas nuevas +funciones. + +Sin embargo, existía un problema con la evolución de los estándares existentes +en aquel momento (en concreto, XHTML): aún existían muchísimos sitios web y +aplicaciones que dependían del HTML heredado, y si esas nuevas y atractivas +funciones se estandarizaban siguiendo el estricto método XHTML, todas esas +aplicaciones nunca podrían usarlas a menos que se reescribieran por completo. +Todos querían una web más interoperable y estándar, pero no a costa de +desperdiciar muchos años de trabajo de millones de autores web. + +Así que estos creadores (junto con otras personas) presentaron al W3C la idea de +evolucionar el HTML de forma que todo (o la mayor parte) del código HTML y XHTML +existente siguiera siendo válido como *nuevo HTML*, a la vez que proporcionaba +nuevas y potentes funciones para las aplicaciones web y, lo que es más +importante, definía claramente cómo debía gestionarse el error. + +Este último punto significaba que, en lugar de fallar con el primer error, los +navegadores sabrían *por especificación* cómo realizar la corrección automática +de errores creados por los autores web y, por lo tanto, reaccionarían a ellos +exactamente de la misma manera, convirtiendo el código HTML (ya fuera en formato +XML o no) en totalmente compatible con todos los navegadores. Se seguiría +recomendando crear código en formato XML para sitios nuevos, pero si no te +apetecía o aún tenías mucho HTML antiguo (y sin duda lo tenías), estarías +invitado a unirte a la fiesta. ¿Ves ese viejo sitio HTML? ¡Agreguémosle un +vídeo! Todo sonaba bastante sensato. + +Pero lo cierto es que nada de esto le sonaba tan bien al W3C en 2004, y +rechazaron la propuesta y decidieron seguir estrictamente el camino XHTML. HTML +estaba muerto para ellos, no había razón para resucitarlo, y «XHTML 2.0» era el +futuro. + +Esto llevó al divorcio. Los promotores de este nuevo concepto de HTML, un grupo +que incluía a personas de Opera Software, la Fundación Mozilla y Apple, +abandonaron el W3C y fundaron el *Web Hypertext Application Technology Working +Group (WHATWG)* con el objetivo de definir lo que hoy conocemos como HTML5. + +Finalmente, en 2007, el W3C creó un grupo de trabajo para HTML de nueva +generación, que posteriormente aceptó colaborar con WHATWG, adoptando HTML5 como +su especificación de trabajo y futuro producto. + +El W3C y WHATWG se unieron para crear HTML5, y en 2009 el W3C simplemente +abandonó XHTML 2.0 al cerrar el grupo que trabajaba en su especificación. + +HTML5 se convirtió en el *único* futuro de los estándares web. + +Entonces, ¿qué es HTML5? +------------------------ -Just after its introduction, everything looked bright for XHTML. We -developers should just have to wait for browsers to fully implement it -and the world of web development would suddenly look much happier... - -Trouble is, that never happened. - -What happened was that one specific browser simply denied implementing -support for the `application/xhtml+xml` content type. Guess which one. -Yeah, exactly, that one. Internet Explorer. - -Versions of IE older than 11 showed a download dialog when you tried to access a -document served with XHTML's own content type, and that of course meant -that you could not use that content type if you wanted to be able to display -your web site to IE users. By the time this was corrected, -it was simply too late. - -Fortunately -- or maybe unfortunately -- The XHTML 1.0 specification -included an appendix that stated that XHTML 1.0 content could also be -served using the old `text/html` content type from the HTML times, in -order to ease the transition. And that's exactly what most of us have -been doing the past several years: creating XHTML 1.0 content, and then -serving it as `text/html`. Given that the XHTML 1.0 specification was -published in 2000, the *transition* has taken long. - -But the fact is that when you serve content as HTML instead of XHTML -browsers will use their HTML engines for it, and not the XHTML-specific -ones. And although their HTML engines have been XHTML-enabled, they -still have to provide backwards compatibility for old HTML 4 code --- -which makes them very tricky pieces of software -- and importantly, they -lack some of the most XML-ish features of XHTML, starting with... -Draconian Error Handling. - -And if you don't have Draconian Error Handling, you have a forgiving -engine that will let you serve documents that are not well formed, -automagically correcting your errors. And if you know the browser will -correct your errors (in a browser-specific way), you will probably never -correct your documents... and so the HTML horror story still goes on. - -Knowing this, think that you've probably never really created a truly -XHTML web site. What you've done is (probably ill-formed) XHTML -documents served and displayed as plain old HTML. How about that? - -But it went worse, because in 2002 `XHTML 1.1` removed the possibility -of using the HTML content type, therefore allowing only -`application/xhtml+xml`. The problem was that, instead of this forcing -Internet Explorer to support `application/xhtml+xml`, which didn't -happen, this restriction simply turned XHTML 1.1 into as much a -mythological creature as Nessie. Almost no one ever used it. - -In 2009, the W3C allowed again the use of `text/html` with XHTML 1.1 -but, again, it was too late. - - -Towards HTML5: A divorce story ------------------------------- - -At some point (specifically, 2004), some browser makers realised that -the existing XHTML specifications were evolving too slowly to cope with -the increasing demands of the web (video, audio, richer application -interfaces...), and that the W3C was increasingly pushing them towards -creating stricter interpretations of documents that could end up -rendering huge amounts of (ill-formed) existing code useless. - -They wanted to enhance web applications with capabilities like video, -audio, local storage, or advanced form processing, and in fact they -could do it by just adding those features in a browser-specific way, but -they didn't want to go the non-interoperable way again. They needed the -standards to evolve and include these new features. - -Nevertheless, there was a problem with evolving the existing standards -of the time (namely XHTML): there were still lots and lots of web sites -and applications still relying on legacy HTML out there, and if those -cool new features were standardized by going the XHTML ultra-strict way, -all those applications would never be able to use the new features -unless they were completely rewritten. And everybody wanted a more -interoperable and standard web, but not at the cost of throwing away -many years of work done by millions of web authors. - -So these makers (along with other individuals) presented the W3C with -the idea of evolving HTML in a way that made all (or most) existing HTML -and XHTML code still valid as *new HTML* while providing powerful new -features for web applications and -- importantly -- clearly defining the -way in which error handling should be done. - -This latter point meant that instead of failing on the first error, -browsers would know *by specification* how to perform the automagical -correction of errors created by web authors and therefore would react to -them in exactly the same way, effectively turning HTML code (be it -XML-formed or not) fully cross-browser. You would still be recommended -to create XML-formed code for new sites, but if you didn't fancy or you -still had some tons of old legacy HTML (and most certainly you had), you -would still be invited to join the party. See that old HTML site there? -Let's add some video to it! It all sounded quite sensible. - -But the fact is, all of this didn't sound quite as well to W3C back in -2004, and they rejected the proposal and decided to go strictly the -XHTML way. HTML was dead for them, there was no reason to resurrect it, -and `XHTML 2.0` was the future. - -This led to divorce. The proponents of this new concept for HTML, a -group that included individuals from Opera Software, the Mozilla -Foundation and Apple, left the W3C and founded the *Web Hypertext -Application Technology Working Group (WHATWG)* with the aim of defining -what we today know as HTML5. - -Finally, in 2007, the W3C created a working group for *next-generation -HTML*, which later accepted to join efforts with WHATWG, effectively -adopting HTML5 as their working specification and future deliverable. -W3C and WHATWG were now united for creating HTML5, and in 2009 the W3C -just let XHTML 2.0 die by closing the group working on its -specification. - -HTML5 was now the *only* future of web standards. - - -So what is HTML5? ------------------ - -HTML5 is a set of standards -- still under development as of 2011 --- -evolving from current HTML 4 and XHTML specifications and aimed at: - -- Adding advanced new capabilities to HTML that effectively move web - development slightly away from the document-oriented philosophy and - towards a more application-oriented one. Such capabilities are - called *HTML5 features* and are in some cases defined by standards - on their own, apart from the HTML5 core one. HTML5 features include, - among others: video, audio, drawing canvas, geolocation, local - storage, offline support and advanced form-related capabilities. -- Providing a pain-free path for migration from HTML and XHTML, which - enables the adoption of HTML5 with little or no rewriting of code at - all. -- Providing a standard way of handling code errors, so that ill-formed - HTML5 code will perform in the same predictable way in all browsers. - -From a practical point of view, this means that (probably all of) your -current HTML and XHTML code will be considered valid HTML5 just by -changing your `DOCTYPE` to the HTML5 one: +HTML5 es un conjunto de estándares, aún en desarrollo en 2011, que evoluciona a +partir de las especificaciones actuales de HTML 4 y XHTML y tiene como objetivo: + +- Añadir nuevas capacidades avanzadas a HTML que alejan el desarrollo web de la +filosofía orientada a documentos y lo acercan a una más orientada a +aplicaciones. Estas capacidades se denominan *características HTML5* y, en +algunos casos, están definidas por estándares independientes, aparte del +estándar principal de HTML5. Las características de HTML5 incluyen, entre otras: +vídeo, audio, lienzo de dibujo, geolocalización, almacenamiento local, +compatibilidad sin conexión y funciones avanzadas relacionadas con formularios. +- Ofrecer una ruta sencilla para la migración desde HTML y XHTML, lo que permite +la adopción de HTML5 con poca o ninguna reescritura de código. +- Proporcionar una forma estándar de gestionar errores de código, de modo que el +código HTML5 mal formado funcione de forma predecible en todos los navegadores. + +Desde un punto de vista práctico, esto significa que (probablemente todo) su +código HTML y XHTML actual se considerará HTML5 válido con solo cambiar su +`DOCTYPE` al de HTML5: ```html ``` -And by serving your content with content type `text/html`: +Y al servir su contenido con el tipo de contenido `text/html`: ```html Content-Type: text/html ``` - -And here you might be thinking: why does that `DOCTYPE` specify no DTD -at all? Because there isn't one. HTML5 has no DTD because the rules that -define whether a document is valid HTML5 or not are defined as -human-readable text in the specification itself, but cannot be expressed -in the DTD language. - -But this does not mean that an HTML5 parser and/or engine cannot -validate. It can. It simply has to be a piece of software especially -devoted to HTML5 parsing including specific code programmed for -executing the rules that are involved in validating HTML5 (as opposed to -reading those rules from a DTD file). Even if the specification is now -quite flexible, it still *is* a specification, and you have to conform -to it. - -But if there is no DTD, then why have a DOCTYPE clause at all? Because a -DOCTYPE clause is needed in order to make browsers display documents in -*Standards Mode* (as opposed to *Quirks Mode*). The clause -`` is the minimum valid DOCTYPE declaration possible, and -that is exactly all we need. It just acts as a switch. - - -Can I use HTML5 already? ------------------------- - -Mostly yes. While (as of 2016) there is no browser that fully -implements the whole HTML5 feature set, most of the common ones do -implement a large part of it. So as long as your users are not stuck -with very old versions of (now-defunct) Internet Explorer, you should -be fine in most scenarios. - -Also, note that browser support actually evolves with time not only -because of the quick pace at which browsers release new versions, but -also because the specification itself is still work in progress. - -For a list of HTML5 features and the corresponding browser support, check the -[Can I use...](http://caniuse.com/) website. Notably, the HTML5 category list -for all of the features: [http://caniuse.com/#cats=HTML5](http://caniuse.com/#cats=HTML5) - - - -And what about XHTML5? Does that exist? +Y aquí podrías estar pensando: ¿por qué ese `DOCTYPE` no especifica ninguna DTD? +Porque no la hay. HTML5 no tiene DTD porque las reglas que definen si un +documento es HTML5 válido o no se definen como texto legible en la propia +especificación, pero no se pueden expresar en el lenguaje DTD. + +Pero esto no significa que un analizador o motor de HTML5 no pueda validar. Sí +puede. Simplemente debe ser un software especialmente dedicado al análisis de +HTML5, que incluya código específico programado para ejecutar las reglas +involucradas en la validación de HTML5 (en lugar de leer esas reglas desde un +archivo DTD). Aunque la especificación ahora sea bastante flexible, sigue siendo +una especificación, y hay que cumplirla. + +Pero si no hay DTD, ¿por qué tener una cláusula DOCTYPE? Porque se necesita una +cláusula DOCTYPE para que los navegadores muestren los documentos en +*Modo Estándar* (en lugar de *Modo Peculiar*). La cláusula `` es +la declaración DOCTYPE mínima válida posible, y eso es exactamente lo que +necesitamos. Simplemente actúa como un interruptor. + + +¿Ya puedo usar HTML5? +--------------------- + +En general, sí. Si bien (a fecha de 2016) ningún navegador implementa +completamente todas las funciones de HTML5, la mayoría de los más comunes sí +implementan gran parte de ellas. Por lo tanto, mientras sus usuarios no se vean +obligados a usar versiones muy antiguas del (ahora obsoleto) Internet Explorer, +debería funcionar correctamente en la mayoría de los casos. + +Además, tenga en cuenta que la compatibilidad de los navegadores evoluciona con +el tiempo, no solo debido al rápido ritmo con el que los navegadores lanzan +nuevas versiones, sino también porque la especificación en sí aún está en +desarrollo. + +Para obtener una lista de las características de HTML5 y la compatibilidad con +los navegadores correspondientes, consulte el sitio web +[¿Puedo usar...?](http://caniuse.com/). En particular, la lista de categorías de +HTML5 para todas las características: +[http://caniuse.com/#cats=HTML5](http://caniuse.com/#cats=HTML5) + + +¿Y qué hay de XHTML5? ¿Existe? --------------------------------------- -In theory, yes. XHTML5 is just HTML5 served with: +En teoría, sí. XHTML5 es simplemente HTML5 servido con: ```html Content-Type: application/xhtml+xml ``` -But note that IE didn't support this until version 11 (Microsoft -Edge does support it). So again, think about your users' browser capabilities - -Also, note that the difference between HTML5 and XHTML5 is the -content type and *only* the content type, because an XML-well-formed -HTML5 document is in fact a perfectly valid HTML5 document. This is quite -different to the relation between HTML4 and XHTML 1.0/1.1, which were -incompatible languages. +Pero tenga en cuenta que IE no era compatible con esto hasta la versión 11 +(Microsoft Edge sí lo es). Por lo tanto, considere las capacidades del navegador +de sus usuarios. +Además, tenga en cuenta que la diferencia entre HTML5 y XHTML5 radica en el tipo +de contenido y *solo* en el tipo de contenido, ya que un documento HTML5 con +formato XML correcto es, de hecho, un documento HTML5 perfectamente válido. Esto +es muy diferente a la relación entre HTML4 y XHTML 1.0/1.1, que eran lenguajes +incompatibles. \ No newline at end of file diff --git a/docs/articles/layouts.md b/docs/articles/layouts.md index 014d217..636c462 100644 --- a/docs/articles/layouts.md +++ b/docs/articles/layouts.md @@ -1,74 +1,74 @@ --- -title: Thymeleaf Page Layouts -author: 'Rafał Borowiec — http://blog.codeleak.pl' +title: Diseños de página de Thymeleaf +author: 'Rafał Borowiec — https://blog.codeleak.pl' --- -Introduction +Introducción ------------ -Usually websites share common page components like the header, footer, -menu and possibly many more. These page components can be used by the -same or different layouts. There are two main styles of organizing -layouts in projects: *include* style and *hierarchical* style. Both -styles can be easily utilized with Thymeleaf without losing its biggest -value: **natural templating**. +Normalmente, los sitios web comparten componentes de página comunes, como el encabezado, el pie de página, el menú y +posiblemente muchos más. Estos componentes de página pueden usarse con el mismo diseño o con diseños diferentes. Existen +dos estilos principales para organizar los diseños en los proyectos: el estilo *include* y el estilo *jerárquico*. +Ambos estilos se pueden utilizar fácilmente con Thymeleaf sin perder su principal valor: **las plantillas naturales**. -### Include-style layouts +### Diseños de estilo de inclusión -In this style pages are built by embedding common page component code -directly within each view to generate the final result. In Thymeleaf -this can be done using **Thymeleaf Standard Layout System**: +En este estilo, las páginas se crean integrando código de componente común directamente en cada vista para generar el +resultado final. En Thymeleaf, esto se puede lograr mediante el **Sistema de Diseño Estándar de Thymeleaf**: ```xml
- Welcome to the Spring MVC Quickstart application! - Get started quickly by signing up. + ¡Bienvenido a la aplicación de inicio rápido de Spring MVC! + Regístrate para empezar rápidamente.
- Sign up + Inscribirse