From a279269f8f978355b6933c0aedc68fd362fbe12b Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Thu, 20 Aug 2026 10:18:45 -0300 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- DESIGN.md | 32 +- app/comparacao/page.jsx | 2 +- app/globals.css | 4 +- app/glossario/page.jsx | 4 +- app/seletor/page.jsx | 2 +- app/series/[key]/page.jsx | 10 +- app/series/page.jsx | 4 +- app/sobre/page.jsx | 2 +- components/CodeExample.jsx | 2 +- components/PinRestrictions.jsx | 10 +- components/SeriesTabMenu.jsx | 2 +- public/apostilas/1/.next/trace | 1 + public/apostilas/1/esp32-s3-blocos.png | Bin 0 -> 280172 bytes public/apostilas/1/index.html | 1863 ++ public/apostilas/1/pratica.fzz | Bin 0 -> 42160 bytes public/apostilas/1/pratica.png | Bin 0 -> 78031 bytes public/apostilas/assets/apostila.css | 670 + public/apostilas/assets/capa-curvas.svg | 33 + public/apostilas/assets/laser-escuro.svg | 17 + public/apostilas/assets/laser.svg | 17 + public/apostilas/assets/paged.polyfill.js | 33251 ++++++++++++++++++++ scripts/auditar-temas.mjs | 22 +- 22 files changed, 35900 insertions(+), 48 deletions(-) create mode 100644 public/apostilas/1/.next/trace create mode 100644 public/apostilas/1/esp32-s3-blocos.png create mode 100644 public/apostilas/1/index.html create mode 100644 public/apostilas/1/pratica.fzz create mode 100644 public/apostilas/1/pratica.png create mode 100644 public/apostilas/assets/apostila.css create mode 100644 public/apostilas/assets/capa-curvas.svg create mode 100644 public/apostilas/assets/laser-escuro.svg create mode 100644 public/apostilas/assets/laser.svg create mode 100644 public/apostilas/assets/paged.polyfill.js diff --git a/DESIGN.md b/DESIGN.md index 5ed3edb..8333d96 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,4 +1,4 @@ -# Diretrizes de tema — claro e escuro +# Diretrizes de tema: claro e escuro Regras para manter os dois temas consistentes. Não tratam da identidade visual (degradê da marca, arredondamentos, hierarquia): essas decisões já estão tomadas @@ -10,7 +10,7 @@ e não mudam. A escala do Tailwind anda de 100 em 100: `50, 100, 200, 300 … 900, 950`. Os meios-tons (`150, 250, 350, 450, 550, 650, 750, 850`) **não existem por -padrão** — uma classe como `text-slate-350` não gera CSS nenhum, e o elemento +padrão**. Uma classe como `text-slate-350` não gera CSS nenhum, e o elemento herda silenciosamente a cor do pai. Era a causa da maior parte das inconsistências: o mesmo texto ficava certo num tema e lavado no outro. @@ -38,9 +38,9 @@ classe com um valor que não está na escala. No tema escuro o fundo é escuro, então o texto precisa **clarear**. - **Texto:** o número do `dark:` é sempre **menor** que o do claro. - `text-slate-800 dark:text-slate-200` ✅ — `text-slate-400 dark:text-slate-500` ❌ + `text-slate-800 dark:text-slate-200` ✅ · `text-slate-400 dark:text-slate-500` ❌ - **Fundo e borda:** o número do `dark:` é sempre **maior**. - `bg-white dark:bg-slate-900` ✅ — `border-slate-200 dark:border-slate-800` ✅ + `bg-white dark:bg-slate-900` ✅ · `border-slate-200 dark:border-slate-800` ✅ Um par invertido não quebra o build e não aparece em revisão de código: só enfraquece o contraste justamente onde ele deveria aumentar. Havia 71 deles. @@ -63,7 +63,7 @@ elemento gráfico, **3:1**. | Menor ênfase | `text-slate-500 dark:text-slate-450` | 4.8 | 5.2 | `text-slate-500 dark:text-slate-400` é o par mais usado do projeto (100 -ocorrências) — é o rótulo em caixa alta, a legenda, o texto de apoio. +ocorrências): é o rótulo em caixa alta, a legenda, o texto de apoio. **Não use** `slate-400` como cor de texto no tema claro: sobre branco dá 2.56:1. Era o erro mais repetido. @@ -72,7 +72,7 @@ Era o erro mais repetido. ## 4. Exceção: superfícies escuras nos dois temas -Alguns blocos são escuros independente do tema — painéis de CTA com degradê, +Alguns blocos são escuros independente do tema: painéis de CTA com degradê, bloco de código, tooltip do diagrama de pinos. Dentro deles: - **Não use variante `dark:`.** O fundo não muda, então o texto também não deve. @@ -101,11 +101,11 @@ aparência entre os temas. Botão carrega a **própria cor**, igual nos dois tem | Papel | Classe | Contraste com texto branco | |-------|--------|---------------------------| -| Ação principal | `bg-gradient-to-r from-purple-600 to-indigo-600 text-white` | 5.4 – 6.3 | +| Ação principal | `bg-gradient-to-r from-purple-600 to-indigo-600 text-white` | 5.4 a 6.3 | | Ação secundária | `bg-blue-600 hover:bg-blue-700 text-white` | 5.2 | -| Ação terciária | `bg-white dark:bg-slate-900` + borda + texto neutro | — | +| Ação terciária | `bg-white dark:bg-slate-900` + borda + texto neutro | · | -Como a cor é a mesma nos dois temas, o texto branco também é — sem variante +Como a cor é a mesma nos dois temas, o texto branco também é, sem variante `dark:`. Isso vale inclusive dentro de painel escuro: o botão de gradiente funciona sobre fundo claro e escuro. @@ -130,17 +130,17 @@ Com o conteúdo pareado: título `text-slate-900 dark:text-white`, corpo ## 4.3. Separação de superfície no tema claro -Entre near-whites o contraste é sempre baixo — quem separa o card do fundo é a +Entre near-whites o contraste é sempre baixo. Quem separa o card do fundo é a **borda**, não o fundo. Por isso: | Camada | Valor | Contraste | |--------|-------|-----------| -| Fundo da página | `from-slate-100 via-slate-50 to-purple-100/40` | — | +| Fundo da página | `from-slate-100 via-slate-50 to-purple-100/40` | · | | Card | `bg-white` (sólido, sem `/70` ou `/80`) | 1.10 vs fundo | | Borda do card | `border-slate-300` | 1.48 vs card | | Divisória interna | `border-slate-200` | mais sutil | -`border-slate-200/60` sobre card branco dava 1.14 — imperceptível. Não use borda +`border-slate-200/60` sobre card branco dava 1.14, praticamente imperceptível. Não use borda com opacidade para delimitar card. --- @@ -155,12 +155,12 @@ Cada série tem sua cor em [`public/series.json`](public/series.json) (campo ``` Esses valores são iguais nos dois temas. Ao usá-los como **fundo**, mantenha o -alfa baixo (`18`–`30` em hex) para que funcione sobre superfície clara e escura. -Como **texto**, só sobre superfície neutra — nunca sobre outra cor de série. +alfa baixo (de `18` a `30` em hex) para que funcione sobre superfície clara e escura. +Como **texto**, só sobre superfície neutra, nunca sobre outra cor de série. ### Nunca escreva cor fixa em `style` inline -`style` inline vence qualquer classe — inclusive as variantes `dark:` e +`style` inline vence qualquer classe, inclusive as variantes `dark:` e `hover:`, que deixam de existir para aquele elemento. Só cor **vinda do dado** pode ir no inline. @@ -178,7 +178,7 @@ style={{ borderColor: isSelected ? serie.cor : undefined }} Esse bug é traiçoeiro porque **some depois do primeiro hover**: o `onMouseLeave` faz `style.borderColor = ''`, que apaga o inline e devolve o -controle à classe. A borda passa a aparecer e nunca mais some — dando a +controle à classe. A borda passa a aparecer e nunca mais some, dando a impressão de que só falha "antes de passar o mouse". --- diff --git a/app/comparacao/page.jsx b/app/comparacao/page.jsx index 0b82142..074d21f 100644 --- a/app/comparacao/page.jsx +++ b/app/comparacao/page.jsx @@ -154,7 +154,7 @@ export default function Comparacao() { const renderValue = (value) => { if (!value || value === "Não") { - return —; + return Não; } if (value === "Sim") { return ( diff --git a/app/globals.css b/app/globals.css index 4a03a64..83bfb51 100644 --- a/app/globals.css +++ b/app/globals.css @@ -13,8 +13,8 @@ Meios-tons de slate. A escala do Tailwind anda de 100 em 100 (50, 100, 200 ... 950), então - classes como text-slate-350 ou border-slate-850 — usadas em ~190 pontos - do projeto — não geravam CSS nenhum: o elemento herdava a cor do pai e + classes como text-slate-350 ou border-slate-850, usadas em cerca de 190 + pontos do projeto, não geravam CSS nenhum: o elemento herdava a cor do pai e ficava diferente em cada tema, sem padrão. Cada valor abaixo é o ponto médio exato entre os dois degraus oficiais diff --git a/app/glossario/page.jsx b/app/glossario/page.jsx index 34f694f..98aa32d 100644 --- a/app/glossario/page.jsx +++ b/app/glossario/page.jsx @@ -41,7 +41,7 @@ export default function Glossario() { }, { termo: "Aceleradores Criptográficos", - definicao: "Blocos de hardware dedicados que executam algoritmos de criptografia muito mais rápido e com menor consumo do que a CPU. Praticamente toda série tem algum, mas o conjunto varia bastante — por isso vale olhar item por item.", + definicao: "Blocos de hardware dedicados que executam algoritmos de criptografia muito mais rápido e com menor consumo do que a CPU. Praticamente toda série tem algum, mas o conjunto varia bastante, por isso vale olhar item por item.", exemplo: "ESP32-C2 e ESP32-C61 não têm acelerador AES: só SHA e curvas elípticas.", }, { @@ -51,7 +51,7 @@ export default function Glossario() { }, { termo: "ECDSA", - definicao: "Algoritmo de assinatura digital baseado em curvas elípticas. Ter o periférico ECDSA no silício significa assinar e verificar sem carregar a CPU — é o que o Matter exige para o atestado de dispositivo.", + definicao: "Algoritmo de assinatura digital baseado em curvas elípticas. Ter o periférico ECDSA no silício significa assinar e verificar sem carregar a CPU. É o que o Matter exige para o atestado de dispositivo.", exemplo: "Só ESP32-S31, C5, C61, P4, H2 e H4 têm ECDSA em hardware.", }, { diff --git a/app/seletor/page.jsx b/app/seletor/page.jsx index b69dcdf..26a9ffd 100644 --- a/app/seletor/page.jsx +++ b/app/seletor/page.jsx @@ -386,7 +386,7 @@ export default function Seletor() { if (answers.security === "matter") { if (temECDSA) { scores[key] += 30; - reasons[key].push(`ECDSA em hardware (${seg.ecc}) — atestado de dispositivo Matter assinado sem custo de CPU`); + reasons[key].push(`ECDSA em hardware (${seg.ecc}): atestado de dispositivo Matter assinado sem custo de CPU`); } else if (temECC) { scores[key] += 10; reasons[key].push(`Tem ECC (${seg.ecc}) mas não o periférico ECDSA: a assinatura roda parcialmente em software`); diff --git a/app/series/[key]/page.jsx b/app/series/[key]/page.jsx index a85deb6..1348e48 100644 --- a/app/series/[key]/page.jsx +++ b/app/series/[key]/page.jsx @@ -100,11 +100,11 @@ export default async function SerieDetail({ params }) { ]; const ferramentasSpecs = [ - { label: "ESP-IDF mínimo", value: serie.esp_idf_minimo || "—", icon: }, - { label: "Core Arduino", value: serie.arduino_core || "—", icon: }, - { label: "Depuração", value: serie.depuracao || "—", icon: }, - { label: "Encapsulamento", value: serie.encapsulamento || "—", icon: }, - { label: "Módulos disponíveis", value: serie.modulos || "—", icon: }, + { label: "ESP-IDF mínimo", value: serie.esp_idf_minimo || "Não informado", icon: }, + { label: "Core Arduino", value: serie.arduino_core || "Não informado", icon: }, + { label: "Depuração", value: serie.depuracao || "Não informado", icon: }, + { label: "Encapsulamento", value: serie.encapsulamento || "Não informado", icon: }, + { label: "Módulos disponíveis", value: serie.modulos || "Não informado", icon: }, ]; const conectividadeSpecs = [ diff --git a/app/series/page.jsx b/app/series/page.jsx index fd1a275..b93ce9a 100644 --- a/app/series/page.jsx +++ b/app/series/page.jsx @@ -126,7 +126,7 @@ export default function Series() { {String(serie.wifi).includes("Não") ? ( - — + Não ) : ( Sim )} @@ -140,7 +140,7 @@ export default function Series() { {serie.bluetooth === "Não" ? ( - — + Não ) : ( Sim )} diff --git a/app/sobre/page.jsx b/app/sobre/page.jsx index 3e01c2b..268bb08 100644 --- a/app/sobre/page.jsx +++ b/app/sobre/page.jsx @@ -100,7 +100,7 @@ export default function Sobre() {

As informações sobre os microcontroladores ESP32 muitas vezes estão dispersas em datasheets densos, - manuais de referência (TRM), repositórios secundários e documentação técnica — tudo inteiramente em inglês. + manuais de referência (TRM), repositórios secundários e documentação técnica, tudo inteiramente em inglês. O ESPDocs condensa e estrutura esses dados, auxiliando na triagem rápida antes de aprofundar na engenharia oficial.

diff --git a/components/CodeExample.jsx b/components/CodeExample.jsx index 7d558b4..cb775d3 100644 --- a/components/CodeExample.jsx +++ b/components/CodeExample.jsx @@ -77,7 +77,7 @@ export default function CodeExample({ framework }) { Demonstração de Código -

Trecho de inicialização rápida — copie e personalize em seu projeto.

+

Trecho de inicialização rápida. Copie e personalize em seu projeto.

diff --git a/components/PinRestrictions.jsx b/components/PinRestrictions.jsx index ca1a5bc..0b3c427 100644 --- a/components/PinRestrictions.jsx +++ b/components/PinRestrictions.jsx @@ -13,7 +13,7 @@ import { /** * Restrições de pinos por série. * - * Os grupos são DERIVADOS de public/conexoes/.json — o mesmo arquivo que + * Os grupos são DERIVADOS de public/conexoes/.json, o mesmo arquivo que * alimenta o diagrama de conexões. Nada aqui é escrito à mão, então a seção e o * diagrama nunca divergem: corrigir um pino no JSON corrige os dois. */ @@ -25,7 +25,7 @@ const GRUPOS = [ icone: ArrowDownToLine, cor: "text-sky-500", explicacao: - "Aceitam apenas leitura. Não podem ser configurados como saída e não possuem resistores de pull-up ou pull-down internos — se precisar de um, coloque no circuito.", + "Aceitam apenas leitura. Não podem ser configurados como saída e não possuem resistores de pull-up ou pull-down internos. Se precisar de um, coloque no circuito.", combina: (avisos) => /apenas de entrada|input only/.test(avisos), }, { @@ -45,7 +45,7 @@ const GRUPOS = [ icone: Power, cor: "text-amber-500", explicacao: - "O chip lê o nível destes pinos no instante do reset para decidir como inicializar. Dá para usá-los depois do boot, mas o circuito externo não pode forçar o nível errado durante o reset — senão a placa não inicia ou entra em modo de gravação sozinha.", + "O chip lê o nível destes pinos no instante do reset para decidir como inicializar. Dá para usá-los depois do boot, mas o circuito externo não pode forçar o nível errado durante o reset, senão a placa não inicia ou entra em modo de gravação sozinha.", combina: (avisos, cats) => cats.includes("Strapping") || /strapping|modo de boot|modo de inicialização/.test(avisos), @@ -65,7 +65,7 @@ const GRUPOS = [ icone: Usb, cor: "text-teal-500", explicacao: - "Saem de fábrica ligados ao USB Serial/JTAG interno. Para usá-los como GPIO é preciso desativar essa função — o que também remove a gravação por USB direto.", + "Saem de fábrica ligados ao USB Serial/JTAG interno. Para usá-los como GPIO é preciso desativar essa função, o que também remove a gravação por USB direto.", combina: (avisos) => /usb serial\/jtag|usb_d[+-]/.test(avisos), }, { @@ -118,7 +118,7 @@ export default function PinRestrictions({ conexoes, serieKey, cor }) {

Nem todo pino do {serieKey} está livre para uso geral. {totalPinos} deles têm alguma - condição — já estão ocupados por memória, são lidos durante o boot ou só funcionam + condição: já estão ocupados por memória, são lidos durante o boot ou só funcionam como entrada. Vale conferir antes de fechar o esquemático.

diff --git a/components/SeriesTabMenu.jsx b/components/SeriesTabMenu.jsx index 1cd9c2d..63a87be 100644 --- a/components/SeriesTabMenu.jsx +++ b/components/SeriesTabMenu.jsx @@ -9,7 +9,7 @@ export default function SeriesTabMenu({ tabs, color }) { // Troca manual limpa o hash. Sem isso, depois de abrir o diagrama pelo link e // mudar de aba na mão, o hash continuaria em #connections e um novo clique no - // link não dispararia hashchange — o botão pareceria quebrado. + // link não dispararia hashchange e o botão pareceria quebrado. const trocarAba = (id) => { setActiveTab(id); if (window.location.hash) { diff --git a/public/apostilas/1/.next/trace b/public/apostilas/1/.next/trace new file mode 100644 index 0000000..fbb92cd --- /dev/null +++ b/public/apostilas/1/.next/trace @@ -0,0 +1 @@ +[{"name":"generate-buildid","duration":224,"timestamp":13103889101,"id":4,"parentId":1,"tags":{},"startTime":1787229898989,"traceId":"aad4d6d36b5e5e6b"},{"name":"load-custom-routes","duration":309,"timestamp":13103889458,"id":5,"parentId":1,"tags":{},"startTime":1787229898989,"traceId":"aad4d6d36b5e5e6b"},{"name":"next-build","duration":129948,"timestamp":13103762107,"id":1,"tags":{"buildMode":"default","isTurboBuild":"false","version":"15.5.9"},"startTime":1787229898862,"traceId":"aad4d6d36b5e5e6b"}] diff --git a/public/apostilas/1/esp32-s3-blocos.png b/public/apostilas/1/esp32-s3-blocos.png new file mode 100644 index 0000000000000000000000000000000000000000..e556491d9240bbbcf7c5eeb68c61ea4ac28c1acf GIT binary patch literal 280172 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 $)! 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 literal 0 HcmV?d00001 diff --git a/public/apostilas/1/index.html b/public/apostilas/1/index.html new file mode 100644 index 0000000..95e218e --- /dev/null +++ b/public/apostilas/1/index.html @@ -0,0 +1,1863 @@ + + + + +LASER · Formação em ESP32 · Módulo 1: Conhecendo a Família + + + + + + + + + +

Paginando a apostila…

+ + +
+
+ + +
+ LASER + Liga Acadêmica de Sistemas Embarcados
Centro de Informática · UFPE
+
+ +
Formação em ESP32 · Módulo 1
+ +

Conhecendo a
família ESP32

+ +

+ Do silício à bancada: como esses microcontroladores funcionam por dentro, o que cada + uma das doze séries faz e não faz, onde eles superam Arduino e STM32, e como escolher + o chip certo antes de fechar um projeto. +

+ +
+
+ Lucas Rayan Guerra + Ciência Embarcada · ESPDocs +
+
+ Material de apoio + Uso livre para fins educacionais +
+
+
+
+ + +
+
+
+

Apresentação

+

Sobre a formação, sobre a liga, e como aproveitar esta apostila.

+
+
+ +

+ A LASER, Liga Acadêmica de Sistemas Embarcados do Centro de Informática + da UFPE tem como propósito fortalecer a área de sistemas embarcados na universidade, + promovendo estudo, pesquisa e aplicação de tecnologias que envolvem tanto hardware quanto + software. Suas frentes vão de automação e Internet das Coisas a IA na borda, robótica, + sistemas críticos, tecnologias veiculares e engenharia biomédica. +

+ +

+ Esta apostila acompanha a formação em ESP32 da liga. A escolha da plataforma não é + acidental: o ESP32 atravessa quase todas as frentes da LASER. Ele é o nó de IoT, é a + placa de automação, roda inferência na borda, e é barato o bastante para que cada pessoa + tenha o seu. +

+ +

O que você vai levar deste módulo

+
    +
  • Entender o que existe dentro de um ESP32 e por que ele é diferente de um Arduino.
  • +
  • Saber navegar as doze séries da família sem se perder na nomenclatura.
  • +
  • Ter um método objetivo para escolher a série de um projeto novo.
  • +
  • Reconhecer as limitações reais da plataforma antes de esbarrar nelas.
  • +
  • Sair com um sensor real lendo temperatura e umidade na sua bancada.
  • +
+ +

Pré-requisitos

+

+ Espera-se que você já tenha ligado um LED em algum microcontrolador e saiba o que é uma + porta digital. Programação em C ou C++ em nível básico ajuda, mas o código da prática é + curto e comentado. Não é preciso saber nada de Wi-Fi, RTOS, RISC-V ou + criptografia. Tudo isso aparece explicado no caminho. +

+ +

Material para a prática

+

+ Uma placa ESP32-S3-DevKitC-1, um sensor DHT11, um + resistor de 10 kΩ, jumpers, protoboard e um cabo USB de dados. A lista + completa e o esquema de ligação estão no capítulo 9. +

+ +

Como esta apostila está organizada

+

+ Os capítulos 1 a 3 constroem o entendimento do hardware. Os capítulos 4 a 6 apresentam a + família e comparam com alternativas. Os capítulos 7 e 8 são de decisão: como escolher série + e ferramenta. O capítulo 9 é a prática, e o 10 fecha com glossário e caminhos de estudo. +

+ +
+

Ao longo do texto você encontra quatro tipos de caixa:

+ +
+
Dica
+

Atalho, boa prática ou recomendação que economiza tempo.

+
+ +
+
Atenção
+

Ponto que costuma causar problema se passar despercebido.

+
+ +
+
Erro comum
+

Armadilha concreta, com o sintoma que ela produz e como escapar.

+
+ +
+
Curiosidade
+

Contexto ou detalhe técnico que ajuda a fixar o conceito.

+
+
+
+ + +
+
+
+

Sumário

+

Dez capítulos, do conceito à bancada.

+
+
+ +
+
+ + +
+
+
1
+
+

O que é o ESP32

+

De onde ele veio e por que virou padrão de fato em projetos conectados.

+
+
+ +

+ O ESP32 é uma linha de microcontroladores da Espressif Systems, empresa + fundada em 2008 e sediada em Xangai. A história que interessa começa em 2014, com o + ESP8266: um chip barato de Wi-Fi vendido como "módulo serial para internet", que a + comunidade descobriu ser, na verdade, um microcontrolador completo por poucos dólares. +

+ +

+ Em 2016 veio o ESP32 original, já projetado como plataforma: dois núcleos, Wi-Fi, + Bluetooth e um conjunto grande de periféricos. A partir de 2020 a linha se ramificou, e + hoje são doze séries, cada uma otimizada para um recorte diferente de + custo, consumo, conectividade e desempenho. +

+ +

Linha do tempo

+ + + + + + + + + + + + + + +
AnoLançamentoO que mudou
2014ESP8266Wi-Fi barato ao alcance de qualquer projeto. Ainda muito usado.
2016ESP32Dois núcleos, Bluetooth e periféricos de verdade. O marco da plataforma.
2019ESP32-S2Foco em segurança e USB nativo; abre mão do Bluetooth.
2020ESP32-C3Primeira série RISC-V. Marca a virada de arquitetura da empresa.
2021ESP32-S3Dois núcleos com instruções vetoriais para IA. Vira o carro-chefe.
2022ESP32-C6, H2Chega o rádio 802.15.4: Zigbee, Thread e Matter entram na família.
2023ESP32-P4Alto desempenho sem rádio, com MIPI para câmera e display.
2024 e 2025C5, C61, H4, S31Wi-Fi 6, dual-band de 5 GHz e a geração seguinte de malha.
Datas de anúncio. A disponibilidade comercial e o suporte nas ferramentas costumam vir meses depois.
+ +

O que explica a adoção

+ +

+ Antes do ESP8266, colocar um projeto na internet significava comprar um microcontrolador + e um módulo de rede, ligá-los por serial ou SPI, e gastar boa parte da memória + disponível com a pilha de comunicação. O ESP32 traz o rádio dentro do mesmo + encapsulamento do processador, com as pilhas de Wi-Fi e Bluetooth prontas, + testadas em campo por centenas de milhões de dispositivos. +

+ +

+ Some a isso o preço, já que um módulo custa menos que muitos microcontroladores sem rádio, e + uma documentação pública completa, com datasheets, manuais de referência e código-fonte + abertos. Essa combinação é rara no mercado de semicondutores. +

+ +

SoC, módulo, placa e série: quatro coisas diferentes

+ +

+ Muita confusão nasce de usar "ESP32" para quatro coisas distintas. Vale separar desde já, + porque isso muda o que você compra, quanto custa e como projeta: +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TermoO que éExemplo
Chip (SoC)O silício nu, num encapsulamento QFN de poucos milímetros. Precisa de antena, + cristal e memória flash externos para funcionar. É o que a Espressif vende em + bobina para fábricas.ESP32-S3
MóduloO chip montado numa plaquinha com flash, cristal, antena, blindagem e, o + mais importante, homologação de rádio. É o que vai dentro + de um produto comercial.ESP32-S3-WROOM-1
Placa de desenvolvimentoO módulo numa placa com regulador de tensão, conector USB, botões de boot e + reset e pinos em barra. É o que usamos para aprender e prototipar.ESP32-S3-DevKitC-1
SérieA família daquele silício: define a arquitetura do processador, quais rádios + existem e quais periféricos estão presentes.Série S3
+ +
+
Homologação pertence ao módulo, não ao chip
+

+ Se um dia você levar um projeto a produto, lembre que as certificações de rádio + (Anatel no Brasil, FCC nos Estados Unidos, CE na Europa) são emitidas para o + módulo. Usar um módulo já homologado evita um processo de certificação + caro e demorado. Projetar com o chip nu significa homologar o seu produto do zero. +

+
+ +
+ Diagrama do ESP32-S3-DevKitC-1 com a pinagem completa, mostrando o módulo ESP32-S3-WROOM soldado no centro da placa. +
+ Os três primeiros níveis numa imagem só. O retângulo prateado no centro é o + módulo ESP32-S3-WROOM, com a antena impressa numa ponta e a blindagem + metálica cobrindo o resto; dentro dele, sem aparecer, está o chip. Todo + o resto (regulador de tensão, conversor USB-serial, botões e as barras de pinos) é a + placa de desenvolvimento. Num produto seu, só o módulo iria para a PCB. +
+
+ +

O que a Espressif entrega junto com o silício

+ +

+ Boa parte do valor do ESP32 não está no chip, e sim no software que vem junto. O + ESP-IDF (Espressif IoT Development Framework) é o ambiente oficial: + baseado em FreeRTOS, traz as pilhas de Wi-Fi, Bluetooth, TCP/IP, TLS, atualização remota + de firmware (OTA), sistemas de arquivos, provisionamento e ferramentas de depuração. É + software que levaria anos para uma equipe escrever do zero. +

+ +

+ Existe também o core Arduino para ESP32, que traduz esse ambiente para as + funções que você já conhece. É a porta de entrada, e é o que usaremos na prática, mas por + baixo continua sendo o ESP-IDF rodando. Entender isso ajuda quando algo não funciona: + muitas respostas estão na documentação do IDF, não na do Arduino. +

+
+ + +
+
+
2
+
+

Anatomia: o que existe dentro do chip

+

Os blocos que aparecem em qualquer série, e por que cada um importa.

+
+
+ +
+ Diagrama de blocos oficial do ESP32-S3: CPU principal, memórias, rádio Wi-Fi e Bluetooth, cadeia de RF, periféricos, domínio RTC e bloco de segurança. +
+ Diagrama de blocos do ESP32-S3, publicado pela Espressif. Vale voltar a ele ao longo da + apostila: o Main CPU com os dois núcleos Xtensa e, ao lado, as memórias + internas (ROM, SRAM e o cache que discutimos adiante). O bloco + RF é a parte analógica do rádio, que fala com a antena. Em + RTC mora o coprocessador ULP, que continua acordado com o resto do chip + dormindo. E o bloco Security é exatamente o assunto do capítulo 5: SHA, + AES, RSA, RNG, HMAC, assinatura digital, Secure Boot e criptografia de flash, tudo em + silício. +

+ Cada série tem o seu diagrama equivalente, com blocos a mais ou a menos. Imagem da + Espressif Systems, reproduzida para fins didáticos. +
+
+ +

Processador: Xtensa ou RISC-V

+ +

+ As séries mais antigas (ESP32, S2, S3) usam núcleos Xtensa, arquitetura + licenciada da Cadence. As séries novas (C2, C3, C5, C6, C61, H2, H4, P4, S31) migraram + para RISC-V, um conjunto de instruções aberto e livre de royalties. +

+ +

+ Para quem programa em C, a diferença é quase invisível, porque o compilador cuida disso. Ela + aparece quando você precisa de assembly, de ferramentas de análise de baixo nível, + ou quando uma biblioteca pré-compilada existe só para uma das arquiteturas. A tendência é + clara: todo lançamento recente é RISC-V. +

+ +

Um ou dois núcleos, e o que fazer com eles

+

+ Séries como ESP32, S3, P4, H4 e S31 têm dois núcleos. No ESP-IDF eles recebem nomes: + PRO_CPU (núcleo 0) e APP_CPU (núcleo 1). Por convenção, as + tarefas do Wi-Fi e do Bluetooth rodam no núcleo 0, deixando o 1 mais livre para o seu + código. É possível fixar uma tarefa em um núcleo específico, recurso valioso quando você + precisa de um laço com temporização mais previsível. +

+ +

O coprocessador de baixo consumo

+

+ Algumas séries trazem um segundo processador de baixíssimo consumo, o ULP + ou LP core. Ele continua acordado enquanto o processador principal dorme, lendo um sensor + de tempos em tempos e só acordando o resto do chip quando algo interessa. É o que permite + um projeto a bateria durar meses em vez de dias. +

+ +

Memória: quatro tipos, quatro papéis

+ + + + + + + + + + + + + + + + + + + + + + + + + +
MemóriaPara que serveOrdem de grandeza
SRAMMemória de trabalho: variáveis, pilha, buffers. Rápida e volátil. É o recurso + que acaba primeiro em projetos com Wi-Fi: a pilha de rede sozinha consome + dezenas de kilobytes.272 KB a 768 KB
ROMGravada de fábrica pela Espressif. Contém o bootloader inicial e rotinas + básicas. Você não altera, e é por isso que um ESP32 é praticamente + impossível de "brickar" de forma permanente.128 KB a 576 KB
Flash externaOnde mora o seu programa. Fica fora do núcleo do chip, num segundo + componente ou dentro do mesmo encapsulamento, e conversa por SPI.2 MB a 16 MB típico
PSRAMRAM extra externa, opcional, para quando a SRAM não basta: buffer de câmera, + tela gráfica, áudio, modelo de rede neural.2 MB a 32 MB
+ +
+
O detalhe que pega todo mundo
+

+ A flash é externa ao núcleo. Isso significa que alguns pinos do chip + já estão ocupados conversando com ela o tempo todo. No ESP32 original, são os GPIO 6 a 11. + Se você usar esses pinos para um LED, o chip trava, porque você está interferindo no + barramento de onde o programa está sendo lido. Todo ESP32 tem um conjunto assim; o + número e a posição mudam conforme a série. +

+
+ +
+ + + O chip + + + Processador + SRAM e ROM internas + + + Cache + MMU + traz o código para dentro + + + Matriz de roteamento: função quase livre por pino + + + + + + + + + + 6 + + SPI + CS, CLK, D, Q, WP e HD + + + Flash externa + o seu firmware mora aqui + + + PSRAM (opcional) + buffers grandes + +
+ O que o diagrama de blocos não deixa evidente: a flash fica fora do + chip. O cache e a MMU escondem isso do seu código, mas os seis pinos desse barramento + ficam ocupados de forma permanente, mesmo com o seu programa rodando. É daí que sai o + primeiro grupo de pinos com restrição, mais adiante neste capítulo. A barra diagonal + com o número é a notação usual de esquemático para um feixe de condutores. +
+
+ +
+
Como o código roda se ele está fora do chip?
+

+ Existe um bloco chamado MMU com cache entre o processador e a flash. + Ele traz para dentro do chip os pedaços de código que estão sendo executados, mantendo + os mais usados em cache. O efeito é que a flash externa "parece" memória interna, com a ressalva de que um acesso fora do cache custa bem mais caro. Esse é um dos + motivos pelos quais o desempenho de um ESP32 varia mais que o de um microcontrolador + com flash interna. +

+
+ +
+

Rádio

+ +

+ É o bloco que distingue o ESP32 da maioria dos microcontroladores. Dependendo da série + você encontra: +

+ + + + + + + + + + +
TecnologiaPara quê
Wi-Fi 4 (802.11 b/g/n)Conexão direta à internet pela rede local. Presente na maioria das séries.
Wi-Fi 6 (802.11ax)Melhor desempenho em redes congestionadas e menor consumo com o recurso Target Wake Time.
Bluetooth LEComunicação com celular, sensores de baixo consumo, provisionamento de rede.
Bluetooth ClássicoÁudio (A2DP) e porta serial sem fio (SPP). Só no ESP32 e no S31.
IEEE 802.15.4Base do Zigbee e do Thread, redes em malha de baixo consumo, e portanto do Matter.
+
+ +

+ O rádio não é de graça: transmitir custa corrente, com picos que passam de 300 mA, ocupa + memória e consome tempo de processamento. Voltaremos a isso no capítulo 7. +

+ +

Periféricos e a matriz de roteamento

+ +

+ GPIO, UART, SPI, I²C, I²S, PWM, ADC, sensor de temperatura interno, USB, controlador CAN + (que a Espressif chama de TWAI), contador de pulsos, transceptor de infravermelho. O + conjunto varia por série. +

+ +

+ Uma característica facilita muito a vida: na maioria das séries existe uma + matriz de roteamento (GPIO matrix) que permite mapear quase + qualquer função para quase qualquer pino, por software. Em um microcontrolador tradicional, + a UART2 só existe nos pinos que o fabricante escolheu; aqui, você decide na hora de + programar. Na prática do projeto de placa isso é ouro: você desenha o traçado da forma mais + limpa e depois adapta o firmware. +

+ +
+
A matriz tem limite
+

+ Sinais de alta velocidade (o SPI da flash, o USB, o cristal, algumas linhas de I²S e + LCD) não passam pela matriz: eles usam IO_MUX, um caminho direto e mais + rápido, disponível apenas em pinos específicos. Se você rotear um SPI rápido por um + pino qualquer, ele funciona, mas a frequência máxima cai. +

+
+ +

Pinos com restrição, e o estrago que eles causam

+ +

+ Aqui está a diferença mais concreta entre ler o datasheet e não ler. Num Arduino UNO, + os vinte pinos são praticamente equivalentes. Num ESP32, uma parte deles já tem dono, e + usar o pino errado não produz um erro de compilação: produz uma placa que não liga, um + firmware que trava, ou pior, um protótipo que funciona na bancada e falha em campo. +

+ +

+ São cinco grupos, e cada um quebra o projeto de um jeito diferente. +

+ +
+ Diagrama de pinagem do ESP32-DevKitC, com legenda indicando pinos de flash, strapping, somente entrada e depuração. +
+ A pinagem do ESP32 clássico já traz as restrições marcadas, se você souber o que + procurar. As barras vermelhas à esquerda dos GPIO 6 a 11 significam + "compartilhado com a memória flash, não pode ser usado como GPIO comum". As etiquetas + rosa STRAP marcam os pinos de boot. As setas simples (em vez de duplas) + nos GPIO 34 a 39 indicam somente entrada. E as etiquetas + DEBUG em azul são as linhas de JTAG. +
+
+ +

1. Ligados à memória flash ou PSRAM

+

+ Estes pinos conversam com a memória de onde o firmware está sendo lido, o tempo todo, + enquanto o chip funciona. Escrever neles interrompe essa conversa no meio. +

+

+ Como falha: o chip reinicia em laço, ou trava no boot com uma mensagem de + erro de leitura da flash. Não é intermitente e não tem contorno em software. +

+

+ Como evitar: no ESP32-S3 são os GPIO 26 a 32; no ESP32 clássico, os GPIO + 6 a 11 (mais o 16 e o 17 em módulos WROVER, que têm PSRAM). Boa notícia: em muitos módulos + esses pinos nem chegam à barra de pinos, justamente para você não ter como errar. +

+ +

2. Strapping (seleção do modo de boot)

+

+ O chip lê o nível destes pinos no instante do reset para decidir como inicializar. Depois + do boot eles voltam a ser GPIO normais, e é aí que mora a armadilha: o pino funciona + perfeitamente enquanto a placa está ligada, mas o que você pendurou nele atrapalha o + próximo reset. +

+

+ Como falha: a placa para de iniciar quando o circuito externo puxa o pino + para o nível errado. Um exemplo comum: você liga um LED com resistor no GPIO0 do ESP32. + O LED funciona. Na próxima energização, o resistor mantém o pino em nível baixo, o chip + entende que deve entrar em modo de gravação e fica esperando um firmware que nunca chega. + A placa parece morta. +

+

+ Como evitar: reserve os pinos de strapping para saídas que ficam em alta + impedância no boot, ou use-os para entradas com o resistor de pull no sentido que o chip + espera. Se puder, simplesmente não use. +

+ +

3. Somente entrada

+

+ Alguns pinos são fisicamente incapazes de acionar uma saída, e não têm resistores de + pull-up nem pull-down internos. +

+

+ Como falha: silenciosamente. O pinMode(pino, OUTPUT) não + reclama, o digitalWrite não reclama, e o pino simplesmente não muda de nível. + Você passa a tarde procurando o problema no código. +

+

+ Como evitar: no ESP32 clássico são os GPIO 34, 35, 36, 37, 38 e 39. Use-os + para leitura, e lembre de colocar o resistor de pull no circuito, já que não existe um + interno para ativar. As séries RISC-V mais novas não têm pinos assim. +

+ +

4. Gravação e depuração

+

+ São a UART0 (por onde o firmware é gravado e as mensagens de Serial saem) e + as quatro linhas de JTAG. +

+

+ Como falha: você não perde o projeto, perde a capacidade de trabalhar + nele. Se um sensor ocupa os pinos da UART0, cada gravação exige desconectar o sensor. Se + algo escreve nesses pinos durante a execução, o monitor serial enche de lixo. +

+

+ Como evitar: deixe a UART0 livre até o projeto estar fechado. Se precisar + de mais uma serial, use a UART1 ou a UART2, que a matriz de roteamento leva para quase + qualquer pino. +

+ +

5. USB nativo

+

+ Nas séries com USB no próprio chip, dois pinos saem de fábrica ligados ao periférico + USB Serial/JTAG. +

+

+ Como falha: ao usá-los como GPIO comum, a porta USB de gravação some do + computador. Recuperar exige o modo de gravação manual pelos botões BOOT e RESET. +

+

+ Como evitar: no ESP32-S3 são o GPIO19 e o GPIO20. Trate-os como + indisponíveis, a não ser que você tenha certeza de que não vai precisar do USB nativo. +

+ +
+

Os pinos com restrição do ESP32-S3

+ +

+ Como a prática do capítulo 9 usa um ESP32-S3, vale ter esta lista à mão. Dos 45 GPIOs + da série, 18 têm alguma condição: +

+ + + + + + + + + + + +
GrupoPinos
Flash e PSRAMGPIO26, 27, 28, 29, 30, 31 e 32
StrappingGPIO0, GPIO45 e GPIO46
Gravação e JTAGGPIO39, 40, 41, 42 (JTAG) e GPIO43, 44 (UART0)
USB nativoGPIO19 e GPIO20
Somente entradaNenhum nesta série
Sobram 27 pinos totalmente livres, incluindo o GPIO12 que usaremos na prática.
+
+ +
+
O erro que mais custa caro
+

+ Fechar o esquemático de uma placa própria distribuindo os sinais pelos pinos "que + sobraram no traçado", sem conferir a lista. O protótipo chega da fábrica, a placa não + liga, e a correção passa por cortar trilha ou mandar refazer o lote. +

+

+ Cinco minutos de conferência antes do envio valem semanas de prazo. E como a matriz de + roteamento deixa quase toda função ir para quase todo pino, quase sempre dá para + reorganizar o traçado sem perder nada. +

+
+ +
+
Onde consultar
+

+ A página de cada série no ESPDocs traz uma seção de pinos com + restrição, com os grupos acima listados pino a pino para aquela série específica, mais + o diagrama de conexões completo com todas as funções de cada pino. + Em espdocs.cienciaembarcada.com.br. +

+
+
+ + +
+
+
3
+
+

Como o chip acorda: boot e execução

+

Entender esta sequência economiza horas de depuração.

+
+
+ + + +
+ + + 1. Energização + CHIP_EN em nível alto + + + 2. Bootloader da ROM + lê os pinos de strapping + + + 3. Segundo estágio + partições, assinatura, + descriptografia + + + 4. Sua aplicação + app_main() ou + setup() + loop() + + + + + + + + + + Modo de gravação + espera firmware pela serial + strapping + em nível de boot + + É este desvio que os botões BOOT e RESET forçam na mão + + +
+ Quando a gravação falha com timeout, é a etapa 2 que não chegou ao desvio. + Segurar BOOT e pressionar RESET força o caminho pontilhado. +
+
+ +

A sequência de partida

+ +
+
1
+
+

Energização e reset

+

+ Ao receber energia, o chip mantém o processador parado até as tensões estabilizarem. + O pino de habilitação (CHIP_EN ou CHIP_PU) precisa estar + em nível alto, e é por isso que ele nunca pode ficar flutuando. +

+
+
+ +
+
2
+
+

Bootloader da ROM

+

+ O processador começa a executar código gravado de fábrica na ROM. Esse código lê o + nível dos pinos de strapping para decidir o que fazer: iniciar + normalmente a partir da flash, ou entrar em modo de gravação e + esperar um firmware chegar pela serial. +

+
+
+ +
+
3
+
+

Bootloader de segundo estágio

+

+ Se o boot for normal, a ROM carrega da flash um segundo bootloader, este sim + gravado por você junto com o firmware. Ele lê a tabela de partições, escolhe qual + imagem executar (importante para OTA, onde há duas), verifica assinatura se o + Secure Boot estiver ativo, e descriptografa se a flash estiver cifrada. +

+
+
+ +
+
4
+
+

Sua aplicação

+

+ Só então o seu programa começa. No ESP-IDF, o ponto de entrada é + app_main(). No Arduino, o core cria uma tarefa que chama + setup() e depois loop() repetidamente. Ou seja: o + loop() que você conhece é, por baixo, uma tarefa do FreeRTOS. +

+
+
+ +
+
Os botões BOOT e RESET
+

+ É por causa do passo 2 que as placas têm esses dois botões. Segurar BOOT + enquanto pressiona e solta RESET força o modo de gravação. A maioria + das placas modernas faz isso automaticamente pelo conversor USB, mas quando a gravação + falha com timeout, esse é o truque manual que resolve. +

+
+ +

FreeRTOS: seu código não está sozinho

+ +

+ Diferente de um Arduino UNO, onde o seu loop() é literalmente a única coisa + executando, no ESP32 há um sistema operacional de tempo real gerenciando + várias tarefas ao mesmo tempo: a sua, as do Wi-Fi, as do Bluetooth, o temporizador de + sistema, o coletor de estatísticas. +

+ +

+ O escalonador distribui o processador entre elas por prioridade. Isso traz dois efeitos + práticos que surpreendem quem vem do Arduino: +

+ +

+ Primeiro: um delay() no ESP32 não trava o chip: ele cede o + processador para outras tarefas. É por isso que o Wi-Fi continua funcionando enquanto o seu + código "espera". +

+ +

+ Segundo: um laço que nunca cede o processador causa problema. Se você + escrever um while(true) sem delay() nem espera, o + watchdog vai reiniciar o chip, reclamando que a tarefa não alimentou o cão de + guarda. Não é bug: é o sistema protegendo as tarefas do rádio. +

+ +
+
"Task watchdog got triggered"
+

+ Esta mensagem no monitor serial quase sempre significa laço apertado sem ceder tempo. + A correção costuma ser um delay(1) ou um vTaskDelay() dentro + do laço. Parece contraintuitivo colocar espera para o programa funcionar, mas em um + sistema com RTOS é exatamente o que se faz. +

+
+ +

Partições: a flash não é um bloco só

+ +

+ A memória flash é dividida segundo uma tabela de partições. Um layout + típico tem: o bootloader, a tabela em si, uma área nvs para guardar + configurações (como a senha do Wi-Fi), uma ou duas partições de aplicação e, às vezes, um + sistema de arquivos. +

+ +

+ Duas partições de aplicação existem para permitir OTA: o firmware novo é + gravado na partição inativa, e só depois de validado o chip passa a iniciar por ela. Se a + imagem nova falhar, ele volta sozinho para a anterior. É por isso que um projeto com + atualização remota precisa de mais que o dobro do espaço do firmware. +

+
+ + +
+
+
4
+
+

A família completa: as 12 séries

+

Cada uma nasceu para resolver um problema diferente.

+
+
+ +

+ A nomenclatura ajuda mais do que parece. A letra indica a vocação da série: + S de sensing, desempenho e USB; C de custo + reduzido em RISC-V; H de malha 802.15.4 sem Wi-Fi; P de + processamento bruto sem rádio. +

+ +
+ +
+
ESP32
+
O clássico
+

O original de 2016. Dois núcleos, Bluetooth Clássico (raro na família), Ethernet e + dois DACs. Ainda é o mais barato e o de maior base instalada.

+
Núcleo
Xtensa LX6 ×2, 240 MHz
+
SRAM
520 KB
GPIO
34
+
+ +
+
ESP32-S2
+
USB e segurança
+

Um núcleo e sem Bluetooth, mas trouxe USB OTG nativo e muitos GPIOs. Bom quando o + projeto precisa se comportar como dispositivo USB.

+
Núcleo
Xtensa LX7, 240 MHz
+
SRAM
320 KB
GPIO
43
+
+ +
+
ESP32-S3
+
O cavalo de batalha
+

Dois núcleos, BLE 5, USB nativo, muita RAM e instruções vetoriais para IA. A série + mais usada em projetos novos, e a da nossa prática.

+
Núcleo
Xtensa LX7 ×2, 240 MHz
+
SRAM
512 KB
GPIO
45
+
+ +
+
ESP32-C2
+
O mínimo viável
+

Também vendido como ESP8684. Feito para custo: poucos pinos, sem I²S e sem + acelerador AES. Para dispositivos simples em altíssimo volume.

+
Núcleo
RISC-V, 120 MHz
+
SRAM
272 KB
GPIO
14
+
+ +
+
ESP32-C3
+
O substituto do clássico
+

O primeiro RISC-V da casa. Wi-Fi, BLE 5 e USB para depuração num chip barato. + Escolha natural para trocar um ESP8266 antigo.

+
Núcleo
RISC-V, 160 MHz
+
SRAM
400 KB
GPIO
22
+
+ +
+
ESP32-C6
+
Matter e malha
+

Wi-Fi 6, BLE 6 e 802.15.4 no mesmo chip: fala Zigbee, Thread e Matter. A porta de + entrada para automação residencial moderna.

+
Núcleo
RISC-V + LP, 160 MHz
+
SRAM
512 KB
GPIO
30
+
+ +
+
ESP32-C5
+
Wi-Fi de duas faixas
+

O primeiro da família com Wi-Fi 6 em 2,4 GHz e 5 GHz. Útil onde a faixa de + 2,4 GHz está congestionada.

+
Núcleo
RISC-V + LP, 240 MHz
+
SRAM
384 KB
GPIO
29
+
+ +
+
ESP32-C61
+
Wi-Fi 6 econômico
+

Wi-Fi 6 com foco em custo, com flash e PSRAM já no encapsulamento. Sem 802.15.4 e + sem acelerador AES.

+
Núcleo
RISC-V, 160 MHz
+
SRAM
320 KB
GPIO
30
+
+ +
+
ESP32-H2
+
Malha a bateria
+

Sem Wi-Fi de propósito: só BLE 6 e 802.15.4. Sem o rádio mais faminto, o consumo + despenca. Ideal para sensor Zigbee/Thread alimentado por pilha.

+
Núcleo
RISC-V, 96 MHz
+
SRAM
320 KB
GPIO
19
+
+ +
+
ESP32-H4
+
Malha, segunda geração
+

Sucessor do H2, com dois núcleos e BLE 5.4 com LE Audio. Ainda em documentação + preliminar, sem datasheet publicado e sem suporte estável.

+
Núcleo
RISC-V ×2, 96 MHz
+
SRAM
384 KB
GPIO
40
+
+ +
+
ESP32-P4
+
Força bruta, sem rádio
+

400 MHz, dois núcleos, MIPI para câmera e display, Ethernet. Não tem Wi-Fi nem + Bluetooth: é para interface gráfica e processamento pesado.

+
Núcleo
RISC-V ×2 + LP, 400 MHz
+
SRAM
768 KB
GPIO
55
+
+ +
+
ESP32-S31
+
O topo de linha
+

320 MHz, Wi-Fi 6, Bluetooth Clássico, 802.15.4, CAN FD e aceleração de IA. Ainda + sem versão estável do ESP-IDF nem suporte no Arduino.

+
Núcleo
RISC-V ×2 + LP, 320 MHz
+
SRAM
512 KB
GPIO
60
+
+ +
+ +

Tabelas comparativas

+ +

Processamento e memória

+ + + + + + + + + + + + + + + + + +
SérieNúcleoClockSRAMGPIOESP-IDF mínimo
ESP32Xtensa LX6 ×2240 MHz520 KB34v3.x
ESP32-S2Xtensa LX7 ×1240 MHz320 KB43v4.2
ESP32-S3Xtensa LX7 ×2240 MHz512 KB45v4.4
ESP32-S31RISC-V ×2320 MHz512 KB60master
ESP32-C2RISC-V ×1120 MHz272 KB14v5.0
ESP32-C3RISC-V ×1160 MHz400 KB22v4.3
ESP32-C5RISC-V ×1240 MHz384 KB29v5.5.2
ESP32-C6RISC-V ×1160 MHz512 KB30v5.1
ESP32-C61RISC-V ×1160 MHz320 KB30v5.5.2
ESP32-P4RISC-V ×2400 MHz768 KB55v5.3
ESP32-H2RISC-V ×196 MHz320 KB19v5.1
ESP32-H4RISC-V ×296 MHz384 KB40master
"master" indica série que ainda não entrou em versão estável do ESP-IDF.
+ +

Rádios

+ + + + + + + + + + + + + + + + +
SérieWi-FiBluetooth802.15.4Matter
ESP32Wi-Fi 4BLE + ClássicoNãoNão
ESP32-S2Wi-Fi 4NãoNãoNão
ESP32-S3Wi-Fi 4BLE 5.4NãoNão
ESP32-S31Wi-Fi 6BLE + ClássicoSimSim
ESP32-C2Wi-Fi 4BLE 5.3NãoNão
ESP32-C3Wi-Fi 4BLE 5.4NãoNão
ESP32-C5Wi-Fi 6 · 2,4 e 5 GHzBLE 6.0SimSim
ESP32-C6Wi-Fi 6BLE 6.0SimSim
ESP32-C61Wi-Fi 6BLE 6.0NãoVia Wi-Fi
ESP32-P4NãoNãoNãoNão
ESP32-H2NãoBLE 6.0SimSim
ESP32-H4NãoBLE 5.4SimSim
+ +

Ferramentas e encapsulamento

+ + + + + + + + + + + + + + + + + +
SérieCore ArduinoDepuraçãoEncapsulamento
ESP32147 placasSonda externaQFN48 (6×6 e 5×5 mm)
ESP32-S226 placasSonda externaQFN56 (7×7 mm)
ESP32-S3158 placasUSB integradoQFN56 (7×7 mm)
ESP32-S31NãoUSB integradoQFN80 (8×8 mm)
ESP32-C21 placaSonda externaQFN24 (4×4 mm)
ESP32-C329 placasUSB integradoQFN32 (5×5) e QFN28 (4×4 mm)
ESP32-C510 placasUSB integradoQFN48 (6×6 mm)
ESP32-C621 placasUSB integradoQFN40 e QFN32 (5×5 mm)
ESP32-C611 placaUSB integradoQFN40 (5×5 mm)
ESP32-P47 placasUSB integradoQFN104 (10×10 mm)
ESP32-H23 placasUSB integradoQFN32 (4×4 mm)
ESP32-H4NãoUSB integradoNão divulgado
Número de definições de placa no core oficial arduino-esp32, um bom termômetro da maturidade do ecossistema.
+ +
+
Lançado não é o mesmo que utilizável
+

+ Um chip anunciado pode levar meses até ter suporte estável nas ferramentas. O + S31 e o H4 hoje só existem no branch de + desenvolvimento do ESP-IDF e não têm suporte no core Arduino. Antes de escolher uma + série recente para um projeto com prazo, verifique em qual versão do ESP-IDF ela entrou + e se ela já tem módulo à venda. +

+
+
+ + +
+
+
5
+
+

Segurança em hardware

+

O que existe no silício, para que serve, e por que isso separa as séries.

+
+
+ +

+ Segurança costuma ser tratada como assunto de software, mas boa parte dela depende de + blocos de hardware. Executar criptografia em hardware é dezenas de vezes mais rápido e + mais econômico que na CPU. E alguns recursos, como esconder uma chave privada do próprio + firmware, são impossíveis sem apoio do silício. +

+ +

+ Este é também o assunto em que as séries mais divergem, o que faz dele um bom critério de + escolha. +

+ +

Os blocos e o que cada um resolve

+ + + + + + + + + + + + + + + + + +
BlocoPara que serve
AESCifra simétrica: é o que protege o tráfego depois que uma conexão TLS é estabelecida.
SHAFunções de resumo (hash). Base de assinaturas, verificação de integridade e HMAC.
RSA / MPIAritmética de números grandes, usada em chave pública clássica. É o que acelera o handshake TLS.
ECCCriptografia de curvas elípticas: mesma segurança do RSA com chaves muito menores, o que importa bastante em microcontrolador.
ECDSAAssinatura digital sobre curvas elípticas. É o que o Matter exige para o atestado de dispositivo.
HMACAutenticação de mensagem com chave secreta.
Digital SignatureAssina usando uma chave RSA guardada em eFuse, sem que o firmware chegue a vê-la.
Key ManagerProvisiona e usa chaves sem que elas fiquem legíveis para o firmware, nem se alguém extrair a imagem.
RNGGerador de números verdadeiramente aleatórios. Sem ele, toda a criptografia fica previsível.
Criptografia de flashCifra o conteúdo da flash, impedindo que alguém leia o firmware soldando um gravador na memória.
Secure BootO chip se recusa a executar firmware que não esteja assinado pela sua chave.
Proteção DPADefesa contra ataque que deduz a chave medindo variações no consumo de energia durante a operação.
+ +

O que cada série tem

+ + + + + + + + + + + + + + + + + + +
SérieAESECCECDSAKey ManagerSecure Boot
ESP32128/192/256NãoNãoNãoV1 (legado)
ESP32-S2128/192/256 + GCMNãoNãoNãoV2 · RSA-3072
ESP32-S3128/256NãoNãoNãoV2 · RSA-3072
ESP32-S31128/256 + GCMP-192/256/384SimSimV2 · RSA-3072
ESP32-C2NãoP-192/256NãoNãoV2 · ECDSA
ESP32-C3128/256NãoNãoNãoV2 · RSA-3072
ESP32-C5128/256P-192/256/384SimSimV2 · RSA/ECDSA
ESP32-C6128/256P-192/256NãoNãoV2 · RSA/ECDSA
ESP32-C61NãoP-192/256SimNãoV2 · ECDSA
ESP32-P4128/256 + GCMP-192/256/384SimSimV2 · RSA/ECDSA
ESP32-H2128/256P-192/256SimNãoV2 · RSA/ECDSA
ESP32-H4128/256P-192/256/384SimNãoPendente
Dados extraídos das definições de hardware (soc_caps.h) do ESP-IDF.
+ +

Três leituras que essa tabela permite

+ +

+ Nem toda série tem acelerador AES. O C2 e o C61 não têm. Eles conseguem + fazer TLS, mas a cifra do tráfego roda na CPU, o que pesa se o dispositivo transmitir + muito dado. +

+ +

+ ECC é um divisor claro. As séries mais antigas (ESP32, S2, S3 e C3) não + têm curvas elípticas em hardware. Como o mundo caminha para ECC (chaves menores, menos + memória), essa é uma diferença que tende a pesar mais com o tempo. +

+ +

+ Key Manager é raro. Só S31, C5 e P4. Se o seu produto precisa que a chave + privada seja inacessível mesmo para quem tem o firmware em mãos, a lista de candidatos é + bem curta. +

+ +
+
eFuse: memória que só grava uma vez
+

+ Os segredos ficam em eFuses, bits que podem ser queimados uma única + vez e nunca mais voltam. É assim que se grava a chave do Secure Boot e da criptografia + de flash, e é por isso que essas operações são irreversíveis: uma vez ativado o Secure + Boot, aquela placa só executa firmware assinado por você. Para sempre. Em bancada, é + uma ótima forma de inutilizar uma placa por engano. Ative apenas quando souber + exatamente o que está fazendo. +

+
+
+ + +
+
+
6
+
+

ESP32, ESP8266, Arduino e STM32

+

Quatro mundos diferentes, e por que "qual é o melhor" não tem resposta.

+
+
+ +

+ Comparar plataformas exige cuidado: "Arduino" é uma marca de placas e um ambiente de + programação, e "STM32" é uma família enorme da STMicroelectronics que vai de chips de + centavos a processadores de 480 MHz. Para a comparação fazer sentido, usaremos + representantes concretos. +

+ + + + + + + + + + + + + + + + + + +
Arduino UNO R3ESP8266ESP32-S3STM32F103
NúcleoAVR 8 bitsXtensa L106Xtensa LX7 ×2Cortex-M3
Clock16 MHz80 a 160 MHz240 MHz72 MHz
SRAM2 KB~50 KB úteis512 KB20 KB
Flash32 KBExterna, 1 a 4 MBExterna, 4 a 16 MB64 a 128 KB
Wi-FiNãoSimSimNão
BluetoothNãoNãoBLE 5Não
Tensão de E/S5 V3,3 V3,3 V3,3 V (alguns 5 V)
ADC10 bits, linear1 canal, 10 bits12 bits, calibrar12 bits, bom
GPIO úteis20~94537
Dormindo~35 µA~20 µA~7 µA~2 µA
Valores típicos para ordem de grandeza. Confira sempre o datasheet da peça exata.
+ +

Onde cada um ganha

+ +

Arduino UNO

+

+ Ganha em simplicidade e previsibilidade. Sem sistema operacional, sem + pilha de rede: o que você escreve é exatamente o que executa, na ordem que escreveu. + Trabalha em 5 V, o que dispensa conversão de nível com muitos sensores e módulos antigos. + É insuperável como primeiro contato e para ensinar eletrônica. Perde feio em memória, porque 2 KB + de SRAM acabam rápido, e não tem qualquer conectividade. +

+ +

ESP8266

+

+ Ganha em preço puro. Ainda é o jeito mais barato de colocar algo simples + no Wi-Fi, e tem uma base gigante de tutoriais. Perde em quase todo o resto: poucos GPIOs + utilizáveis, um único canal de ADC, sem Bluetooth, e uma arquitetura que a Espressif já não + desenvolve. Para projeto novo, o C3 costuma custar quase o mesmo e é melhor em tudo. +

+ +

ESP32

+

+ Ganha em conectividade e relação recurso/preço. Você recebe centenas de + kilobytes de RAM, dois núcleos, Wi-Fi, Bluetooth e criptografia por hardware pelo preço de + um microcontrolador simples. Para qualquer coisa que precise falar com a rede, é difícil + justificar outra escolha. Perde em determinismo de tempo real rígido e na qualidade do + conversor analógico. +

+ +

STM32

+

+ Ganha em controle fino e diversidade. A família cobre desde encapsulamentos + de 8 pinos até chips com centenas, com variantes especializadas em consumo ultrabaixo + (série L), desempenho (H7) ou segurança. Os periféricos de temporização são muito superiores + para controle de motor e conversão de potência, e o ecossistema é padrão industrial, com + ferramentas de certificação e suporte de longo prazo. Perde na curva de aprendizado, já que a HAL + da ST é bem mais verbosa, e não tem rádio integrado, salvo nas séries WB e WL. +

+ +
+
Regra prática para decidir
+

+ Precisa falar com a internet ou com um celular? ESP32, quase sempre.
+ É controle de tempo real crítico, como motor, inversor ou malha rápida? STM32.
+ É para ensinar eletrônica ou um protótipo simples em 5 V? Arduino.
+ É produto comercial com certificação e vida longa? Avalie STM32 e ESP32 + juntos, olhando módulos homologados e compromisso de fornecimento. +

+
+ +
+
"Programar em Arduino" não é o mesmo que "usar um Arduino"
+

+ O ambiente Arduino é só uma camada de software. Você pode programar um ESP32 ou um + STM32 usando a IDE do Arduino, e é exatamente o que faremos no capítulo 9. Placa e + linguagem são escolhas independentes. +

+
+
+ + +
+
+
7
+
+

Pontos fortes e limitações reais

+

O que ninguém conta no vídeo de unboxing.

+
+
+ +

Onde o ESP32 é muito bom

+ +

+ Conectividade sem dor. Subir um cliente MQTT com TLS, um servidor HTTP ou + uma conexão BLE são tarefas de dezenas de linhas, com pilhas maduras. +

+

+ Recursos por real gasto. Nenhuma outra plataforma entrega tanta memória, + clock e rádio nessa faixa de preço. +

+

+ Segurança de verdade. Boot seguro, criptografia de flash e aceleradores + criptográficos estão presentes até nas séries baratas, recursos que em outras famílias + aparecem só nas linhas premium. +

+

+ Flexibilidade de pinos. A matriz de roteamento simplifica muito o traçado + da placa: você adapta o firmware ao layout, não o contrário. +

+

+ Atualização remota. OTA com partição dupla e reversão automática vem + pronto no framework. +

+

+ Documentação aberta. Datasheets, manuais de referência, erratas e o + código-fonte do framework são públicos e versionados. +

+ +

Onde ele decepciona

+ +

O conversor analógico é fraco

+

+ É a queixa mais comum e mais justa. O ADC do ESP32 tem não-linearidade perceptível, ruído + e variação entre unidades; precisa de calibração para medidas sérias. Pior: em várias + séries, o bloco ADC2 fica indisponível enquanto o Wi-Fi está ligado, + porque ambos compartilham recursos internos. Se o seu projeto depende de medida analógica + precisa, use um ADC externo por I²C ou SPI. +

+ +

O rádio consome muito

+

+ Picos de transmissão passam de 300 mA. Um regulador subdimensionado ou uma bateria com + resistência interna alta provoca reinicializações aparentemente aleatórias, que parecem + bug de software e não são. +

+ +

Tempo real é aproximado

+

+ O firmware roda sobre FreeRTOS, e o rádio tem tarefas de alta prioridade que precisam ser + atendidas. Isso introduz variação de alguns microssegundos a milissegundos no seu laço. + Existem soluções, como fixar tarefa em um núcleo, usar o periférico RMT ou delegar a + hardware dedicado, mas todas exigem planejamento. +

+ +

Só 3,3 V

+

+ Os pinos não toleram 5 V. Sensor ou display antigo em 5 V exige conversor de nível; ligar + direto degrada ou destrói a entrada. +

+ +

Documentação viva demais

+

+ A família cresce rápido, e com ela erratas, diferenças entre revisões de silício e + funcionalidades que mudam de comportamento entre versões do IDF. Ler a errata do seu chip + antes de fechar o projeto é hábito recomendado. +

+ +

Consumo em repouso não é mágico

+

+ Os 7 µA de deep sleep que aparecem no datasheet valem para o chip nu, em + condições ideais. Numa placa de desenvolvimento, o regulador, o LED de energia e o + conversor USB-serial costumam consumir muito mais que o próprio ESP32. Medir consumo em + DevKit leva a conclusões erradas. +

+ +
+
Erro clássico de bancada
+

+ Alimentar a placa pela USB do notebook e ligar nela um motor, uma fita de LED ou um + display grande. Na hora em que o Wi-Fi transmite, a corrente ultrapassa o que a porta + fornece, a tensão cai e o chip reinicia. O sintoma parece software travando; a causa é + alimentação. Use fonte externa adequada para as cargas. +

+
+
+ + +
+
+
8
+
+

Como escolher a série do seu projeto

+

Um método em cinco perguntas, na ordem que elimina mais opções primeiro.

+
+
+ +

+ A escolha fica muito mais simples quando feita na ordem certa. Comece pelo que é impossível + contornar depois, que é o rádio, e só no fim olhe para o que é ajustável. +

+ +

Pergunta 1: Como ele se comunica?

+

+ Esta pergunta sozinha elimina a maior parte da família, porque rádio não se acrescenta + depois. +

+ + + + + + + + + + + +
NecessidadeSéries que atendem
Wi-Fi + Bluetooth LEESP32, S3, C3, C6, C5, C61, S31
Bluetooth Clássico (áudio, SPP)ESP32, S31
Zigbee / Thread / Matter em malhaC6, C5, H2, H4, S31
Wi-Fi 5 GHzC5
Ethernet cabeadaESP32, P4
Sem rádio, só processamentoP4
+ +

Pergunta 2: De onde vem a energia?

+

+ Se o projeto vive de bateria ou painel solar, o consumo em repouso passa a mandar em tudo. + Séries com processador de baixo consumo (C5, C6, P4, S31) mantêm uma tarefa simples rodando + com o resto do chip dormindo. E se você não precisa de Wi-Fi, o H2 e o H4 economizam + justamente por não carregarem o rádio mais faminto. +

+ +

Pergunta 3: O que vai ligado nele?

+

+ Conte os pinos de que precisa e verifique as interfaces especiais. Display gráfico grande + ou câmera pedem S3 ou P4 (que tem MIPI). Muitos atuadores pedem uma série com bastante + GPIO, lembrando de descontar os pinos com restrição. USB nativo, para o dispositivo se + apresentar como teclado ou pendrive, existe do S2 em diante e nas séries C recentes. +

+ +

Pergunta 4: Que exigência de segurança existe?

+

+ Para um protótipo, qualquer série serve. Para produto, o requisito define o chip: atestado + de dispositivo Matter pede ECDSA em hardware; chave privada que o firmware nunca pode ler + pede Key Manager. Consulte a tabela do capítulo 5. +

+ +

Pergunta 5: Quando precisa estar pronto?

+

+ Esta é a pergunta esquecida. Uma série recém-anunciada pode não ter suporte estável no + ESP-IDF, não ter core Arduino, não ter módulo à venda e não ter placa de desenvolvimento + acessível. Para trabalho com prazo, prefira séries com pelo menos um ano de estrada. +

+ +

Atalhos por perfil de projeto

+ + + + + + + + + + + + + +
Se o seu projeto é…Comece porPor quê
Primeiro projeto, aprendendoESP32-S3Muita RAM, USB nativo para depurar e o maior ecossistema de exemplos
Sensor Wi-Fi simples e baratoESP32-C3Faz o essencial pelo menor preço, com boa maturidade
Automação residencial / MatterESP32-C6Único caminho maduro com Wi-Fi 6 e 802.15.4 juntos
Sensor a pilha, sem Wi-FiESP32-H2Sem o rádio mais custoso, a autonomia muda de patamar
Tela, câmera ou interface gráficaESP32-P4 ou S3MIPI e RAM suficiente para buffer de vídeo
Áudio por Bluetooth ClássicoESP32Praticamente a única série com BR/EDR
Visão computacional na bordaESP32-S3Instruções vetoriais e PSRAM para o buffer da câmera
Produto em altíssimo volumeESP32-C2O menor custo da família, se os requisitos couberem nele
+ +

ESP-IDF ou Arduino?

+ +

+ Escolhida a série, falta escolher a ferramenta. As duas são oficiais e mantidas pela + Espressif; a diferença é o nível de controle. +

+ + + + + + + + + + + +
Core ArduinoESP-IDF
Curva de entradaBaixa, familiarÍngreme: menuconfig, CMake, componentes
Controle do hardwareParcialTotal
Acesso a recursos novosChega depoisImediato
Bibliotecas de sensoresEnormeMenor, mais técnica
Consumo de memóriaMaiorAjustável
Indicado paraAprender, prototiparProduto, otimização, recursos avançados
+ +
+
Não é escolha definitiva
+

+ Dá para usar o core Arduino como componente dentro de um projeto ESP-IDF, + misturando os dois. Um caminho comum é começar no Arduino para validar a ideia e migrar + para o IDF quando aparecer a necessidade de afinar consumo, segurança ou tempo de boot. +

+
+ +
+
Ferramenta de apoio
+

+ O ESPDocs tem um seletor que faz exatamente estas perguntas e devolve + uma recomendação justificada, além de comparar até quatro séries lado a lado, com + pinagem interativa e ficha de segurança. + Em espdocs.cienciaembarcada.com.br. +

+
+
+ + +
+
+
9
+
+

Prática: lendo um DHT11 com o ESP32-S3

+

Do jumper ao terminal mostrando temperatura e umidade.

+
+
+ +

+ Vamos montar o "olá mundo" dos sensores: ler temperatura e umidade do ambiente e imprimir + no monitor serial. O DHT11 é barato, comum e usa um protocolo digital próprio de um único + fio, o que já ensina algo além de acender um LED. +

+ +

Lista de material

+ + + + + + + + + + + +
ItemQtd.Observação
ESP32-S3-DevKitC-11Qualquer variante de flash/PSRAM serve
Sensor DHT111O componente azul de 4 pinos
Resistor de 10 kΩ1Pull-up do dado (marrom, preto, laranja)
Protoboard1Meia protoboard basta
Jumpers4Vermelho, preto e amarelo, por convenção
Cabo USB1De dados. Cabo só de carga não funciona
+ +

Montagem

+ + + + + + + + + + +
LigaçãoCor na figuraFunção
VCC do DHT11 → 3V3VermelhoAlimentação do sensor
DATA do DHT11 → GPIO12AmareloLinha de dados bidirecional
GND do DHT11 → GNDPretoReferência de terra
10 kΩ entre DATA e 3V3ResistorMantém a linha em nível alto em repouso
O terceiro pino do DHT11 (contando da esquerda) não é usado.
+ +
+ Esquema de ligação do DHT11 ao ESP32-S3-DevKitC: fio vermelho do VCC ao 3V3, fio amarelo do DATA ao GPIO12, fio preto do GND ao GND, e um resistor de 10 kΩ entre a linha de dados e o 3V3. +
+ Ligação completa. O fio amarelo leva o dado ao GPIO12; o resistor de + 10 kΩ conecta essa mesma linha ao 3V3, funcionando como pull-up. Repare que a + placa tem duas portas USB na borda inferior, marcadas UART e USB. A + diferença entre elas importa e está explicada no passo 4. +

+ Arquivo editável do Fritzing: + baixar pratica.fzz +
+
+ +
+
Por que o resistor de pull-up é necessário
+

+ A linha de dados do DHT11 é bidirecional: ora o ESP32 fala, ora o + sensor responde. Para isso funcionar sem que os dois disputem a linha, ambos apenas + "puxam para baixo" quando querem enviar um zero, e soltam a linha quando querem enviar + um um. Só que uma linha solta não tem nível definido: ela flutua e capta ruído. +

+

+ O resistor de 10 kΩ resolve isso mantendo a linha em nível alto em repouso, com força + suficiente para definir o nível, mas fraca o bastante para que qualquer um dos dois + consiga puxá-la para baixo. Módulos DHT11 já montados em plaquinha trazem esse resistor + embutido; o componente azul sozinho, não. +

+
+ +
+

Como o sensor conversa

+ +

+ Vale entender o que a biblioteca faz por você. A cada leitura acontece esta troca, toda + por um único fio: +

+ +
+ + + + + + + alto + baixo + + + + + + + + + + 18 ms + 80 µs + 70 µs + 26 µs + + o ESP32 pede a leitura + o sensor responde + bit 1 + bit 0 + …40 bits + + + a partir daqui, o valor do bit está na largura do pulso alto + +
+ O mesmo fio serve para os dois lados conversarem, em momentos diferentes. Um zero e um + um se distinguem só pela duração do nível alto, e é por isso que a + leitura falha quando o pull-up está ausente: sem ele a linha não sobe rápido o bastante + e os tempos saem errados. +
+
+
+ +
    +
  1. O ESP32 puxa a linha para baixo por cerca de 18 ms, que é o "acorda" do sensor.
  2. +
  3. Solta a linha; o pull-up a leva para alto.
  4. +
  5. O DHT11 responde puxando para baixo por 80 µs e soltando por mais 80 µs.
  6. +
  7. Em seguida envia 40 bits: umidade (2 bytes), temperatura (2 bytes) e + um byte de verificação.
  8. +
  9. Cada bit é codificado pela duração do nível alto: cerca de 26 µs é zero, + cerca de 70 µs é um.
  10. +
+ +

+ A biblioteca mede esses tempos e confere o byte de verificação. Se a soma não bater, + seja por ruído, fio solto ou falta de pull-up, ela devolve NaN, e é isso que o + nosso código testa. +

+ +

Passo a passo

+ +
+
1
+
+

Instale o suporte ao ESP32 na IDE

+

+ Na Arduino IDE, abra Arquivo → Preferências e adicione em "URLs adicionais + para gerenciadores de placas": +

+ +
https://espressif.github.io/arduino-esp32/package_esp32_index.json
+

+ Depois vá em Ferramentas → Placa → Gerenciador de placas, procure por + esp32 e instale o pacote da Espressif Systems. São alguns minutos + de download. +

+
+
+ +
+
2
+
+

Instale a biblioteca do sensor

+

+ Em Ferramentas → Gerenciar bibliotecas, procure por + DHT sensor library, da Adafruit, e instale. A IDE vai perguntar se + quer instalar as dependências. Aceite, porque ela precisa da + Adafruit Unified Sensor junto. +

+
+
+ +
+
3
+
+

Escreva o programa

+
#include <DHT.h>
+
+#define PINO_DHT  12       // fio amarelo
+#define TIPO_DHT  DHT11
+
+DHT dht(PINO_DHT, TIPO_DHT);
+
+void setup() {
+  Serial.begin(115200);
+  delay(1000);              // tempo para a USB enumerar
+  dht.begin();
+  Serial.println("Leitor DHT11 - ESP32-S3");
+}
+
+void loop() {
+  float umidade     = dht.readHumidity();
+  float temperatura = dht.readTemperature();
+
+  if (isnan(umidade) || isnan(temperatura)) {
+    Serial.println("Falha na leitura do sensor");
+  } else {
+    Serial.printf("Temperatura: %.1f C | Umidade: %.1f %%\n",
+                  temperatura, umidade);
+  }
+
+  delay(2000);              // DHT11 nao aceita leitura mais rapida
+}
+

+ O delay(2000) não é enfeite: o DHT11 leva cerca de um segundo para + fazer uma medição e responde com erro se for consultado antes disso. +

+
+
+ +
+
4
+
+

Configure a placa: o passo onde todo mundo tropeça

+

+ Em Ferramentas, selecione a placa ESP32S3 Dev Module. + Agora, o detalhe importante: o DevKitC tem duas portas USB. +

+

+ A porta marcada UART passa por um conversor USB-serial e funciona + como em qualquer Arduino. A porta marcada USB é o USB nativo do + próprio ESP32-S3. +

+

+ Se você ligar o cabo na porta USB, precisa habilitar + USB CDC On Boot → Enabled, senão o monitor serial fica mudo mesmo com o + programa rodando. Ligando na porta UART, deixe essa opção como + Disabled. +

+
+
+ +
+
5
+
+

Grave e observe

+

+ Selecione a porta em Ferramentas → Porta, clique em carregar e abra o + monitor serial em 115200 baud. Depois de alguns segundos: +

+ +
Leitor DHT11 - ESP32-S3
+Temperatura: 26.0 C | Umidade: 61.0 %
+Temperatura: 26.0 C | Umidade: 61.0 %
+Temperatura: 26.1 C | Umidade: 62.0 %
+

+ Segure o sensor entre os dedos e sopre nele: a umidade sobe rápido e a temperatura + acompanha devagar. Essa diferença de velocidade é real: o elemento de umidade + responde muito mais rápido que o termistor. +

+
+
+ +

Quando não funciona

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SintomaCausa provável e solução
Monitor serial vazioCabo na porta USB nativa sem USB CDC On Boot habilitado. Veja o passo + 4. Confira também a velocidade em 115200.
"Falha na leitura" sempreFio de dados no pino errado, VCC não conectado, ou resistor de pull-up ausente + ou mal encaixado na protoboard.
Leitura falha às vezesJumper com mau contato, fio de dados muito longo, ou delay menor + que 2 segundos.
A porta não apareceCabo só de carga (troque por um de dados) ou driver do conversor USB-serial + faltando.
Erro ao gravar, timeoutPlaca não entrou em modo de gravação: segure BOOT, pressione e solte RESET, + solte BOOT e tente de novo.
Temperatura sempre inteiraNão é defeito. O DHT11 tem resolução de 1 °C. O DHT22 dá 0,1 °C.
Valores absurdos e constantesSensor invertido na alimentação. Confira VCC e GND antes de energizar de novo.
+ +
+
Por que o GPIO12?
+

+ No ESP32-S3, o GPIO12 é um pino comum: não participa do boot, não conversa com a flash + e não é usado para depuração. Ele até tem funções alternativas de touch e ADC2, mas + nenhuma delas atrapalha o uso como entrada e saída digital. +

+

+ Em outras séries, cuidado: no ESP32 original o GPIO12 é pino de strapping: + ele seleciona a tensão da flash, e um nível alto durante o reset impede a placa de + iniciar. Mesmo número de pino, comportamento completamente diferente. +

+

+ Se você montasse este mesmo circuito num ESP32 clássico sem trocar o pino, o resistor + de pull-up de 10 kΩ que o DHT11 exige seguraria o GPIO12 em nível alto exatamente + durante o reset. A placa simplesmente não iniciaria, e o sintoma não apontaria para o + sensor em momento algum. É o grupo 2 do capítulo 2 acontecendo na prática. +

+
+ +

Desafios

+ +

Se sobrar tempo na formação, ou para praticar depois:

+ +
    +
  1. Acenda o LED RGB da placa em vermelho quando a temperatura passar de 28 °C e em azul + abaixo disso.
  2. +
  3. Calcule e imprima a média das últimas dez leituras, para suavizar o ruído.
  4. +
  5. Troque o delay por controle de tempo com millis(), de modo + que o programa continue respondendo enquanto espera.
  6. +
  7. Detecte e conte quantas vezes a umidade subiu mais de 5 % entre leituras consecutivas.
  8. +
  9. Publique a leitura numa página web servida pelo próprio ESP32, acessível por qualquer + aparelho na mesma rede.
  10. +
+
+ + +
+
+
10
+
+

Glossário e próximos passos

+

Os termos que aparecem o tempo todo, e para onde seguir.

+
+
+ +

Glossário

+ + + + + + + + + + + + + + + + + + + + + +
TermoSignificado
SoCSystem on Chip: um único chip reunindo processador, memória, rádio e periféricos.
GPIOPino de entrada e saída de uso geral.
StrappingPino lido no reset para definir o modo de boot.
Pull-up / pull-downResistor que define o nível de uma linha em repouso.
ULP / LP coreCoprocessador de baixíssimo consumo que roda com o chip principal dormindo.
PSRAMMemória RAM externa opcional, para buffers grandes.
eFuseMemória que só pode ser gravada uma vez, usada para chaves e configurações permanentes.
Deep sleepModo em que quase tudo desliga, mantendo só o mínimo para acordar depois.
OTAOver-The-Air: atualização de firmware pela rede.
FreeRTOSSistema operacional de tempo real que gerencia as tarefas do ESP32.
WatchdogTemporizador que reinicia o chip se uma tarefa travar.
TWAINome que a Espressif dá ao controlador compatível com CAN.
MatterPadrão de interoperabilidade para casa conectada, sobre Wi-Fi ou Thread.
Thread / ZigbeeProtocolos de rede em malha de baixo consumo sobre IEEE 802.15.4.
Secure BootMecanismo que impede o chip de executar firmware não assinado.
ErrataDocumento com os defeitos conhecidos de uma revisão do silício.
+ +

Onde consultar

+ + + + + + + + + + + + +
FontePara quê
ESPDocsEspecificações, pinagem, segurança e comparação das séries em português. Em espdocs.cienciaembarcada.com.br
Datasheet da sérieVerdade final sobre limites elétricos, pinagem e encapsulamento
Technical Reference ManualDetalhe de registradores e comportamento de cada periférico
ESP-IDF Programming GuideAPI oficial, exemplos e guias de Wi-Fi, BLE, OTA e segurança
Errata do chipDefeitos conhecidos daquela revisão. Leia antes de fechar projeto
Fórum esp32.comDúvidas específicas, com participação de engenheiros da Espressif
GitHub da EspressifCódigo-fonte, exemplos e issues abertas
+ +

Por onde continuar

+

+ Com o sensor funcionando, o caminho natural é tirar o dado da bancada. Na ordem que + costuma render mais aprendizado por hora investida: +

+ +
    +
  1. Conectar ao Wi-Fi e servir uma página com a leitura. É o exercício que + mais amarra os conceitos: rede, memória e o laço principal disputando espaço.
  2. +
  3. Publicar em um broker MQTT, que é o protocolo padrão de IoT e o que + permite o dado chegar a um painel ou a outro dispositivo.
  4. +
  5. Economizar energia com deep sleep, medindo de verdade quanto tempo uma + bateria aguenta.
  6. +
  7. Atualizar o firmware pelo ar com OTA, fechando o ciclo de um produto + que não precisa mais de cabo depois de instalado.
  8. +
  9. Migrar um projeto para o ESP-IDF, para enxergar o que o core Arduino + estava escondendo.
  10. +
+ +
+
Um conselho para levar
+

+ Quando algo não funcionar, resista à vontade de trocar linhas de código no chute. + Pergunte antes: o hardware está certo? A alimentação aguenta? Esse pino tem restrição? + A biblioteca é a certa para esta série? A maior parte dos problemas em sistemas + embarcados não está no algoritmo, e sim na fronteira entre o software e o mundo físico. +

+
+ +

+ Material produzido para a LASER, Liga Acadêmica de Sistemas Embarcados do Centro de Informática + da UFPE. Dados técnicos conferidos nos datasheets oficiais da + Espressif e nas definições de hardware do ESP-IDF. Este é um material independente, sem + vínculo com a Espressif Systems. +

+
+ + + + + diff --git a/public/apostilas/1/pratica.fzz b/public/apostilas/1/pratica.fzz new file mode 100644 index 0000000000000000000000000000000000000000..faa29fd8cfea64c88da61923d794b449b0c578f4 GIT binary patch literal 42160 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 BuNeRU literal 0 HcmV?d00001 diff --git a/public/apostilas/assets/apostila.css b/public/apostilas/assets/apostila.css new file mode 100644 index 0000000..4243041 --- /dev/null +++ b/public/apostilas/assets/apostila.css @@ -0,0 +1,670 @@ +/* ========================================================================= + Sistema visual das apostilas da LASER, compartilhado por todas as edições. + Paginação A4 via Paged.js. Identidade da liga: prussiano, âmbar, laranja e + vermelho, tirados da logo oficial (laser.cin.ufpe.br). + + Uma apostila nova só precisa de: + + + e usar as classes documentadas aqui. + ========================================================================= */ + +:root { + /* Paleta da LASER, extraída da logo oficial (laser.cin.ufpe.br). + O gradiente é o próprio "feixe" da marca. */ + --prussiano: #003049; + --vermelho: #D62828; + --laranja: #F77F00; + --ambar: #FCBF49; + --creme: #EAE2B7; + /* O laranja da marca é vibrante demais para texto: 2,63:1 sobre branco. + Esta versão queimada mantém a matiz e passa em AA (4,74:1). */ + --laranja-texto: #B85800; + + --tinta: #062639; + --tinta-2: #33566a; + --tinta-3: #557080; /* 5,23:1 no branco e 4,94:1 na linha zebrada */ + --linha: #c2d2db; + --linha-suave: #dde7ed; + --fundo-suave: #f5f9fb; + + /* O feixe da marca. Use APENAS em superfície grande e decorativa: uma faixa, + um traço largo, o desenho da capa. Nunca recortado em texto: cinco paradas + de cor num glifo viram arco-íris e ainda quebram o contraste. */ + --marca: linear-gradient(90deg, var(--prussiano), var(--creme), var(--ambar), var(--laranja), var(--vermelho)); +} + +/* ------------------------------------------------------------------------- + 1. Página A4 + ------------------------------------------------------------------------- */ + +@page { + size: A4; + margin: 20mm 18mm 18mm 18mm; + + @bottom-left { + content: string(titulo-corrente); + font-family: "Inter", sans-serif; + font-size: 7.5pt; + color: #94a3b8; + padding-bottom: 4mm; + } + + @bottom-right { + content: counter(page); + font-family: "Outfit", sans-serif; + font-size: 9pt; + font-weight: 700; + color: #64748b; + padding-bottom: 4mm; + } +} + +/* Capa e contracapa sem cabeçalho, rodapé ou margem. */ +@page capa { + margin: 0; + @bottom-left { content: none; } + @bottom-right { content: none; } +} + +.pagina-capa { + page: capa; + /* Sem break-after: todo .capitulo já traz break-before, e as duas juntas + podem gerar uma página em branco depois da capa. */ +} + +/* Capa: clara e minimalista. O desenho é o feixe da LASER atravessando + a página. Conceitual, não decorativo. */ +.capa { + width: 210mm; + height: 297mm; + background: #fdfdfb; + color: var(--tinta); + display: flex; + flex-direction: column; + padding: 30mm 24mm 24mm; + position: relative; + overflow: hidden; +} + +.capa-curvas { + position: absolute; + inset: 0; + width: 210mm; + height: 297mm; + pointer-events: none; +} + +/* O desenho fica no fundo; todo o resto sobe acima dele. + Precisa excluir .capa-curvas: mesma especificidade sobrescreveria o absolute. */ +.capa > *:not(.capa-curvas) { position: relative; z-index: 1; } + +.capa-marca { + display: flex; + align-items: center; + gap: 4mm; + margin-bottom: 26mm; +} + +.capa-marca img { height: 9mm; width: auto; } + +.capa-marca span { + font-size: 8pt; + line-height: 1.35; + color: var(--tinta-3); + border-left: 0.6pt solid var(--linha); + padding-left: 4mm; +} + +.capa-selo { + font-family: "Outfit", sans-serif; + font-size: 8pt; + font-weight: 600; + letter-spacing: 0.22em; + text-transform: uppercase; + color: var(--laranja-texto); + margin-bottom: 5mm; +} + +.capa-titulo { + font-family: "Outfit", sans-serif; + font-size: 42pt; + font-weight: 300; + line-height: 1.02; + letter-spacing: -0.025em; + margin: 0 0 6mm; + color: var(--prussiano); + max-width: 140mm; +} + +.capa-titulo strong { font-weight: 700; } + +.capa-sub { + font-size: 11pt; + font-weight: 300; + line-height: 1.55; + color: var(--tinta-2); + max-width: 116mm; + text-align: left; + margin-bottom: 0; +} + +.capa-rodape { + margin-top: auto; + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: 8mm; + font-size: 8pt; + color: var(--tinta-3); + line-height: 1.6; + border-top: 0.6pt solid var(--linha); + padding-top: 5mm; +} + +.capa-rodape strong { + color: var(--tinta); + font-weight: 600; + display: block; + font-size: 9pt; + margin-bottom: 0.8mm; +} + +/* ------------------------------------------------------------------------- + 2. Base tipográfica + ------------------------------------------------------------------------- */ + +* { box-sizing: border-box; } + +html { + /* Faz fundos e cores chegarem ao PDF em vez de imprimirem em branco. */ + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} + +body { + margin: 0; + font-family: "Inter", system-ui, -apple-system, sans-serif; + font-size: 10pt; + line-height: 1.62; + color: var(--tinta-2); + hyphens: auto; +} + +p { + margin: 0 0 3.2mm; + text-align: justify; + /* Nunca deixa uma ou duas linhas soltas no pé nem no topo da página. */ + orphans: 3; + widows: 3; +} +strong { color: var(--tinta); font-weight: 600; } + +a { color: #b34700; text-decoration: none; border-bottom: 0.6pt solid #f7c9a0; } + +ul, ol { margin: 0 0 3.5mm; padding-left: 5.5mm; } +li { margin-bottom: 1.4mm; orphans: 2; widows: 2; } +li::marker { color: var(--laranja-texto); } + +/* ------------------------------------------------------------------------- + 3. Capítulos e títulos + ------------------------------------------------------------------------- */ + +.capitulo { break-before: page; } + +.capitulo-abertura { + display: flex; + align-items: flex-start; + gap: 5mm; + margin-bottom: 7mm; + padding-bottom: 4mm; + border-bottom: 2.2pt solid var(--tinta); +} + +.capitulo-numero { + font-family: "Outfit", sans-serif; + font-size: 44pt; + font-weight: 300; /* leve, para não competir com o título em 800 */ + line-height: 0.8; + letter-spacing: -0.03em; + color: var(--laranja-texto); + flex-shrink: 0; + font-variant-numeric: lining-nums; +} + +h1, h2, h3, h4 { + font-family: "Outfit", sans-serif; + color: var(--tinta); + margin: 0; + break-after: avoid; + text-align: left; +} + +h2 { + font-size: 19pt; + font-weight: 800; + line-height: 1.1; + letter-spacing: -0.01em; + /* Alimenta o rodapé com o capítulo corrente. */ + string-set: titulo-corrente content(); +} + +.capitulo-abertura .subtitulo { + font-family: "Inter", sans-serif; + font-size: 9pt; + font-weight: 400; + color: var(--tinta-3); + margin-top: 1.5mm; + line-height: 1.45; +} + +h3 { + font-size: 12.5pt; + break-before: auto; + font-weight: 700; + margin: 7mm 0 2.5mm; + padding-left: 3mm; + border-left: 2.5pt solid var(--laranja); +} + +h4 { + font-size: 10pt; + font-weight: 700; + margin: 5mm 0 2mm; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--tinta-3); +} + +/* ------------------------------------------------------------------------- + 3.1. Coesão entre blocos + + O fragmentador quebra onde couber, e o resultado padrão separa coisas que + pertencem juntas: a frase que apresenta uma tabela numa página e a tabela na + seguinte. Estas duas classes resolvem, e devem ser usadas sempre que um + trecho só faz sentido lido de uma vez. + ------------------------------------------------------------------------- */ + +/* Na frase que apresenta o que vem logo abaixo. Proíbe quebra logo depois dela. */ +.junto { break-after: avoid; } + +/* NÃO declare break-before:avoid de forma genérica (h3 + *, .junto + *). + Testado: o Paged.js encadeia as recusas e produz páginas com 2% de conteúdo, + além de partir palavras entre páginas. Para manter um título junto do que ele + apresenta, envolva os dois em .grupo, que usa break-inside:avoid, o único + controle que o fragmentador aplica de forma previsível. */ + +/* No wrapper de um conjunto curto que precisa caber inteiro na mesma página + (uma introdução mais os itens que ela apresenta, por exemplo). */ +.grupo { break-inside: avoid; } + +/* ------------------------------------------------------------------------- + 4. Caixas de destaque + Cada tipo tem um papel didático fixo. Não misture. + ------------------------------------------------------------------------- */ + +.caixa { + break-inside: avoid; + margin: 4.5mm 0; + padding: 3.5mm 4mm; + border-radius: 2mm; + border-left: 2.5pt solid var(--cor-caixa, var(--laranja)); + background: var(--fundo-caixa, #fff8ec); + font-size: 9pt; + line-height: 1.55; +} + +.caixa p { margin-bottom: 2mm; text-align: left; } +.caixa p:last-child { margin-bottom: 0; } + +.caixa-titulo { + font-family: "Outfit", sans-serif; + font-weight: 800; + font-size: 8.5pt; + text-transform: uppercase; + letter-spacing: 0.07em; + color: var(--cor-caixa, var(--laranja)); + margin-bottom: 1.5mm; +} + +.caixa.atencao { --cor-caixa: #a35a00; --fundo-caixa: #fff8ea; } +.caixa.erro { --cor-caixa: #b01f1f; --fundo-caixa: #fdf1f1; } +.caixa.dica { --cor-caixa: #0b6b52; --fundo-caixa: #eefaf5; } +.caixa.curiosidade { --cor-caixa: #003049; --fundo-caixa: #eff6fa; } + +/* ------------------------------------------------------------------------- + 5. Tabelas + ------------------------------------------------------------------------- */ + +table { + width: 100%; + border-collapse: collapse; + font-size: 8.5pt; + margin: 4mm 0 5mm; + break-inside: avoid; +} + +caption { + caption-side: bottom; + font-size: 7.5pt; + color: var(--tinta-3); + text-align: left; + padding-top: 1.8mm; +} + +thead { + break-inside: avoid; + break-after: avoid; + /* Repete o cabeçalho quando a tabela atravessa a página. */ + display: table-header-group; +} + +tbody tr { break-inside: avoid; } + +/* As tabelas de 12 linhas (uma por série) podem dividir: mantê-las inteiras + empurrava a tabela toda e deixava quase metade da página em branco. */ +table.compacta { break-inside: auto; } + +th { + font-family: "Outfit", sans-serif; + font-weight: 700; + font-size: 7.5pt; + text-transform: uppercase; + letter-spacing: 0.05em; + text-align: left; + color: #fff; + background: var(--tinta); + padding: 2.2mm 2.5mm; +} + +td { + padding: 2.2mm 2.5mm; + border-bottom: 0.5pt solid var(--linha-suave); + vertical-align: top; +} + +tbody tr:nth-child(even) { background: var(--fundo-suave); } +td.destaque { font-weight: 600; color: var(--tinta); } +td.sim { color: #0b6b52; font-weight: 600; } +td.nao { color: var(--tinta-3); } + +/* ------------------------------------------------------------------------- + 6. Código + ------------------------------------------------------------------------- */ + +pre { + break-inside: avoid; + margin: 4mm 0; + padding: 4mm 4.5mm; + background: #062639; + border-radius: 2mm; + color: #e2e8f0; + font-family: "JetBrains Mono", ui-monospace, "Courier New", monospace; + font-size: 8pt; + line-height: 1.6; + white-space: pre-wrap; + overflow-wrap: break-word; +} + +code { + font-family: "JetBrains Mono", ui-monospace, "Courier New", monospace; + font-size: 8.6pt; + background: #f2f6f8; + color: #b34700; + padding: 0.4mm 1.2mm; + border-radius: 1mm; +} + +pre code { background: none; color: inherit; padding: 0; font-size: inherit; } + +.c-com { color: #94a3b8; font-style: italic; } /* comentário */ +.c-key { color: #c4b5fd; } /* palavra-chave */ +.c-fun { color: #7dd3fc; } /* função */ +.c-str { color: #86efac; } /* string */ +.c-num { color: #fdba74; } /* número */ +.c-pre { color: #f9a8d4; } /* diretiva */ + +.legenda-codigo { + font-size: 7.5pt; + color: var(--tinta-3); + margin: -2.5mm 0 4mm; +} + +/* ------------------------------------------------------------------------- + 7. Figuras + ------------------------------------------------------------------------- */ + +figure { + break-inside: avoid; + margin: 5mm 0; + text-align: center; +} + +figure img { + max-width: 100%; + height: auto; + border-radius: 1.5mm; +} + +/* Diagramas desenhados em SVG dentro do próprio documento, para herdarem a + paleta da liga. Traço fino e sem preenchimento pesado: imprimem bem. */ +.diagrama { + width: 100%; + height: auto; + display: block; +} + +.diagrama text { + font-family: "Inter", system-ui, sans-serif; + fill: var(--tinta-2); +} + +.diagrama .rotulo { + font-family: "Outfit", sans-serif; + font-weight: 700; + fill: var(--tinta); +} + +.diagrama .miudo { fill: var(--tinta-3); } +.diagrama .caixa { fill: #ffffff; stroke: var(--linha); stroke-width: 1.2; } +.diagrama .caixa-destaque { fill: #fff6ea; stroke: var(--laranja); stroke-width: 1.4; } +.diagrama .traco { stroke: var(--tinta-3); stroke-width: 1.2; fill: none; } +.diagrama .onda { stroke: var(--prussiano); stroke-width: 1.8; fill: none; stroke-linejoin: round; } + +figcaption { + font-size: 7.5pt; + color: var(--tinta-3); + margin-top: 2mm; + text-align: left; + line-height: 1.5; +} + +/* ------------------------------------------------------------------------- + 8. Grade de séries: cada chip com a cor que o site usa + ------------------------------------------------------------------------- */ + +.grade-series { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3mm; + margin: 4mm 0; +} + +.chip { + break-inside: avoid; + border: 0.8pt solid var(--linha); + border-top: 2.5pt solid var(--cor-chip, var(--laranja)); + border-radius: 1.5mm; + padding: 3mm 3.5mm; +} + +.chip-nome { + font-family: "Outfit", sans-serif; + font-weight: 800; + font-size: 11pt; + line-height: 1.1; + /* A cor da série fica na faixa superior do card, que é decoração e não + precisa de contraste. Dez das doze cores reprovam em AA como texto + (o amarelo do P4 dá 1,63:1 sobre branco), então o nome vai em tinta. */ + color: var(--tinta); +} + +.chip-papel { + font-size: 7.5pt; + font-weight: 600; + color: var(--tinta-3); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 2mm; +} + +.chip p { font-size: 8.2pt; line-height: 1.5; margin-bottom: 2mm; text-align: left; } + +.chip dl { + margin: 0; + font-size: 7.6pt; + display: grid; + grid-template-columns: auto 1fr; + gap: 0.6mm 2mm; + border-top: 0.5pt solid var(--linha-suave); + padding-top: 1.8mm; +} + +.chip dt { color: var(--tinta-3); font-weight: 500; } +.chip dd { margin: 0; color: var(--tinta); font-weight: 600; } + +/* ------------------------------------------------------------------------- + 9. Sumário: numeração de página resolvida pelo Paged.js + ------------------------------------------------------------------------- */ + +.sumario { margin-top: 6mm; } + +.sumario a { + display: flex; + align-items: baseline; + gap: 2mm; + border: none; + color: var(--tinta); + text-decoration: none; + padding: 1.8mm 0; + border-bottom: 0.5pt solid var(--linha-suave); + font-size: 10pt; +} + +.sumario .num { + font-family: "Outfit", sans-serif; + font-weight: 700; + color: var(--laranja-texto); + min-width: 7mm; +} + +.sumario .txt { font-weight: 600; } + +.sumario .pontos { + flex: 1; + border-bottom: 0.5pt dotted var(--linha); + transform: translateY(-1mm); +} + +.sumario a::after { + content: target-counter(attr(href url), page); + font-family: "Outfit", sans-serif; + font-weight: 700; + color: var(--tinta-3); +} + +/* ------------------------------------------------------------------------- + 10. Passos numerados da prática + ------------------------------------------------------------------------- */ + +.passo { + /* Indivisível: testado com break-inside:auto, o círculo com o número do + passo ficava sozinho no pé da página, separado do próprio conteúdo. */ + break-inside: avoid; + display: grid; + grid-template-columns: 8mm 1fr; + gap: 3mm; + margin-bottom: 5mm; +} + +.passo-num { + font-family: "Outfit", sans-serif; + font-weight: 800; + font-size: 12pt; + color: #fff; + background: var(--prussiano); + width: 8mm; + height: 8mm; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; +} + +.passo h3 { margin-top: 0.5mm; border: none; padding: 0; } + +/* ------------------------------------------------------------------------- + 11. Visual só de tela (Paged.js desenha as folhas) + ------------------------------------------------------------------------- */ + +@media screen { + body { + background: + radial-gradient(60rem 40rem at 50% -10rem, #eaf1f5 0%, transparent 70%), + #dfe7ec; + padding: 10mm 0 16mm; + } + + /* Pilha de folhas centralizada na janela, com respiro entre elas. */ + .pagedjs_pages { + display: flex; + flex-direction: column; + align-items: center; + gap: 9mm; + width: 100%; + max-width: none; + } + + .pagedjs_page { + background: #fff; + box-shadow: + 0 0 0 1px rgba(6, 38, 57, 0.07), + 0 6px 22px -6px rgba(6, 38, 57, 0.22); + border-radius: 1.5mm; + margin: 0; + transition: box-shadow 0.2s ease; + } + + .pagedjs_page:hover { + box-shadow: + 0 0 0 1px rgba(6, 38, 57, 0.12), + 0 10px 30px -8px rgba(6, 38, 57, 0.3); + } + + /* A capa é sangria total: sem cantos arredondados brigando com o desenho. */ + .pagedjs_page:first-child { border-radius: 0; } + + .aviso-carregando { + font-family: "Inter", sans-serif; + text-align: center; + padding: 40mm 20mm; + color: #5b7688; + font-size: 11pt; + } + + /* Leitura confortável: um pouco mais de corpo do que no papel. */ + .pagedjs_page_content { font-size: 10.2pt; } +} + +/* Telas estreitas: encolhe a folha inteira em vez de estourar a largura. */ +@media screen and (max-width: 230mm) { + .pagedjs_pages { + transform: scale(calc(100vw / 232mm)); + transform-origin: top center; + } +} + +@media print { + .aviso-carregando { display: none; } +} diff --git a/public/apostilas/assets/capa-curvas.svg b/public/apostilas/assets/capa-curvas.svg new file mode 100644 index 0000000..36cad9b --- /dev/null +++ b/public/apostilas/assets/capa-curvas.svg @@ -0,0 +1,33 @@ + diff --git a/public/apostilas/assets/laser-escuro.svg b/public/apostilas/assets/laser-escuro.svg new file mode 100644 index 0000000..386eac9 --- /dev/null +++ b/public/apostilas/assets/laser-escuro.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/public/apostilas/assets/laser.svg b/public/apostilas/assets/laser.svg new file mode 100644 index 0000000..946365c --- /dev/null +++ b/public/apostilas/assets/laser.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/public/apostilas/assets/paged.polyfill.js b/public/apostilas/assets/paged.polyfill.js new file mode 100644 index 0000000..3100799 --- /dev/null +++ b/public/apostilas/assets/paged.polyfill.js @@ -0,0 +1,33251 @@ +/** + * @license Paged.js v0.4.3 | MIT | https://gitlab.coko.foundation/pagedjs/pagedjs + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.PagedPolyfill = factory()); +})(this, (function () { 'use strict'; + + function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + } + + var eventEmitter = {exports: {}}; + + var d$2 = {exports: {}}; + + var isImplemented$6 = function () { + var assign = Object.assign, obj; + if (typeof assign !== "function") return false; + obj = { foo: "raz" }; + assign(obj, { bar: "dwa" }, { trzy: "trzy" }); + return (obj.foo + obj.bar + obj.trzy) === "razdwatrzy"; + }; + + var isImplemented$5; + var hasRequiredIsImplemented$1; + + function requireIsImplemented$1 () { + if (hasRequiredIsImplemented$1) return isImplemented$5; + hasRequiredIsImplemented$1 = 1; + + isImplemented$5 = function () { + try { + Object.keys("primitive"); + return true; + } catch (e) { + return false; + } + }; + return isImplemented$5; + } + + // eslint-disable-next-line no-empty-function + var noop$4 = function () {}; + + var _undefined = noop$4(); // Support ES3 engines + + var isValue$3 = function (val) { + return (val !== _undefined) && (val !== null); + }; + + var shim$5; + var hasRequiredShim$5; + + function requireShim$5 () { + if (hasRequiredShim$5) return shim$5; + hasRequiredShim$5 = 1; + + var isValue = isValue$3; + + var keys = Object.keys; + + shim$5 = function (object) { + return keys(isValue(object) ? Object(object) : object); + }; + return shim$5; + } + + var keys; + var hasRequiredKeys; + + function requireKeys () { + if (hasRequiredKeys) return keys; + hasRequiredKeys = 1; + + keys = requireIsImplemented$1()() + ? Object.keys + : requireShim$5(); + return keys; + } + + var isValue$2 = isValue$3; + + var validValue = function (value) { + if (!isValue$2(value)) throw new TypeError("Cannot use null or undefined"); + return value; + }; + + var shim$4; + var hasRequiredShim$4; + + function requireShim$4 () { + if (hasRequiredShim$4) return shim$4; + hasRequiredShim$4 = 1; + + var keys = requireKeys() + , value = validValue + , max = Math.max; + + shim$4 = function (dest, src /*, …srcn*/) { + var error, i, length = max(arguments.length, 2), assign; + dest = Object(value(dest)); + assign = function (key) { + try { + dest[key] = src[key]; + } catch (e) { + if (!error) error = e; + } + }; + for (i = 1; i < length; ++i) { + src = arguments[i]; + keys(src).forEach(assign); + } + if (error !== undefined) throw error; + return dest; + }; + return shim$4; + } + + var assign$2 = isImplemented$6() + ? Object.assign + : requireShim$4(); + + var isValue$1 = isValue$3; + + var forEach$1 = Array.prototype.forEach, create$5 = Object.create; + + var process = function (src, obj) { + var key; + for (key in src) obj[key] = src[key]; + }; + + // eslint-disable-next-line no-unused-vars + var normalizeOptions = function (opts1 /*, …options*/) { + var result = create$5(null); + forEach$1.call(arguments, function (options) { + if (!isValue$1(options)) return; + process(Object(options), result); + }); + return result; + }; + + var isCallable$1 = function (obj) { + return typeof obj === "function"; + }; + + var str = "razdwatrzy"; + + var isImplemented$4 = function () { + if (typeof str.contains !== "function") return false; + return (str.contains("dwa") === true) && (str.contains("foo") === false); + }; + + var shim$3; + var hasRequiredShim$3; + + function requireShim$3 () { + if (hasRequiredShim$3) return shim$3; + hasRequiredShim$3 = 1; + + var indexOf = String.prototype.indexOf; + + shim$3 = function (searchString/*, position*/) { + return indexOf.call(this, searchString, arguments[1]) > -1; + }; + return shim$3; + } + + var contains$1 = isImplemented$4() + ? String.prototype.contains + : requireShim$3(); + + var assign$1 = assign$2 + , normalizeOpts = normalizeOptions + , isCallable = isCallable$1 + , contains = contains$1 + + , d$1; + + d$1 = d$2.exports = function (dscr, value/*, options*/) { + var c, e, w, options, desc; + if ((arguments.length < 2) || (typeof dscr !== 'string')) { + options = value; + value = dscr; + dscr = null; + } else { + options = arguments[2]; + } + if (dscr == null) { + c = w = true; + e = false; + } else { + c = contains.call(dscr, 'c'); + e = contains.call(dscr, 'e'); + w = contains.call(dscr, 'w'); + } + + desc = { value: value, configurable: c, enumerable: e, writable: w }; + return !options ? desc : assign$1(normalizeOpts(options), desc); + }; + + d$1.gs = function (dscr, get, set/*, options*/) { + var c, e, options, desc; + if (typeof dscr !== 'string') { + options = set; + set = get; + get = dscr; + dscr = null; + } else { + options = arguments[3]; + } + if (get == null) { + get = undefined; + } else if (!isCallable(get)) { + options = get; + get = set = undefined; + } else if (set == null) { + set = undefined; + } else if (!isCallable(set)) { + options = set; + set = undefined; + } + if (dscr == null) { + c = true; + e = false; + } else { + c = contains.call(dscr, 'c'); + e = contains.call(dscr, 'e'); + } + + desc = { get: get, set: set, configurable: c, enumerable: e }; + return !options ? desc : assign$1(normalizeOpts(options), desc); + }; + + var dExports = d$2.exports; + + var validCallable = function (fn) { + if (typeof fn !== "function") throw new TypeError(fn + " is not a function"); + return fn; + }; + + (function (module, exports) { + + var d = dExports + , callable = validCallable + + , apply = Function.prototype.apply, call = Function.prototype.call + , create = Object.create, defineProperty = Object.defineProperty + , defineProperties = Object.defineProperties + , hasOwnProperty = Object.prototype.hasOwnProperty + , descriptor = { configurable: true, enumerable: false, writable: true } + + , on, once, off, emit, methods, descriptors, base; + + on = function (type, listener) { + var data; + + callable(listener); + + if (!hasOwnProperty.call(this, '__ee__')) { + data = descriptor.value = create(null); + defineProperty(this, '__ee__', descriptor); + descriptor.value = null; + } else { + data = this.__ee__; + } + if (!data[type]) data[type] = listener; + else if (typeof data[type] === 'object') data[type].push(listener); + else data[type] = [data[type], listener]; + + return this; + }; + + once = function (type, listener) { + var once, self; + + callable(listener); + self = this; + on.call(this, type, once = function () { + off.call(self, type, once); + apply.call(listener, this, arguments); + }); + + once.__eeOnceListener__ = listener; + return this; + }; + + off = function (type, listener) { + var data, listeners, candidate, i; + + callable(listener); + + if (!hasOwnProperty.call(this, '__ee__')) return this; + data = this.__ee__; + if (!data[type]) return this; + listeners = data[type]; + + if (typeof listeners === 'object') { + for (i = 0; (candidate = listeners[i]); ++i) { + if ((candidate === listener) || + (candidate.__eeOnceListener__ === listener)) { + if (listeners.length === 2) data[type] = listeners[i ? 0 : 1]; + else listeners.splice(i, 1); + } + } + } else { + if ((listeners === listener) || + (listeners.__eeOnceListener__ === listener)) { + delete data[type]; + } + } + + return this; + }; + + emit = function (type) { + var i, l, listener, listeners, args; + + if (!hasOwnProperty.call(this, '__ee__')) return; + listeners = this.__ee__[type]; + if (!listeners) return; + + if (typeof listeners === 'object') { + l = arguments.length; + args = new Array(l - 1); + for (i = 1; i < l; ++i) args[i - 1] = arguments[i]; + + listeners = listeners.slice(); + for (i = 0; (listener = listeners[i]); ++i) { + apply.call(listener, this, args); + } + } else { + switch (arguments.length) { + case 1: + call.call(listeners, this); + break; + case 2: + call.call(listeners, this, arguments[1]); + break; + case 3: + call.call(listeners, this, arguments[1], arguments[2]); + break; + default: + l = arguments.length; + args = new Array(l - 1); + for (i = 1; i < l; ++i) { + args[i - 1] = arguments[i]; + } + apply.call(listeners, this, args); + } + } + }; + + methods = { + on: on, + once: once, + off: off, + emit: emit + }; + + descriptors = { + on: d(on), + once: d(once), + off: d(off), + emit: d(emit) + }; + + base = defineProperties({}, descriptors); + + module.exports = exports = function (o) { + return (o == null) ? create(base) : defineProperties(Object(o), descriptors); + }; + exports.methods = methods; + } (eventEmitter, eventEmitter.exports)); + + var eventEmitterExports = eventEmitter.exports; + var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventEmitterExports); + + /** + * Hooks allow for injecting functions that must all complete in order before finishing + * They will execute in parallel but all must finish before continuing + * Functions may return a promise if they are asycn. + * From epubjs/src/utils/hooks + * @param {any} context scope of this + * @example this.content = new Hook(this); + */ + class Hook { + constructor(context){ + this.context = context || this; + this.hooks = []; + } + + /** + * Adds a function to be run before a hook completes + * @example this.content.register(function(){...}); + * @return {undefined} void + */ + register(){ + for(var i = 0; i < arguments.length; ++i) { + if (typeof arguments[i] === "function") { + this.hooks.push(arguments[i]); + } else { + // unpack array + for(var j = 0; j < arguments[i].length; ++j) { + this.hooks.push(arguments[i][j]); + } + } + } + } + + /** + * Triggers a hook to run all functions + * @example this.content.trigger(args).then(function(){...}); + * @return {Promise} results + */ + trigger(){ + var args = arguments; + var context = this.context; + var promises = []; + + this.hooks.forEach(function(task) { + var executing = task.apply(context, args); + + if(executing && typeof executing["then"] === "function") { + // Task is a function that returns a promise + promises.push(executing); + } else { + // Otherwise Task resolves immediately, add resolved promise with result + promises.push(new Promise((resolve, reject) => { + resolve(executing); + })); + } + }); + + + return Promise.all(promises); + } + + /** + * Triggers a hook to run all functions synchronously + * @example this.content.trigger(args).then(function(){...}); + * @return {Array} results + */ + triggerSync(){ + var args = arguments; + var context = this.context; + var results = []; + + this.hooks.forEach(function(task) { + var executing = task.apply(context, args); + + results.push(executing); + }); + + + return results; + } + + // Adds a function to be run before a hook completes + list(){ + return this.hooks; + } + + clear(){ + return this.hooks = []; + } + } + + function getBoundingClientRect(element) { + if (!element) { + return; + } + let rect; + if (typeof element.getBoundingClientRect !== "undefined") { + rect = element.getBoundingClientRect(); + } else { + let range = document.createRange(); + range.selectNode(element); + rect = range.getBoundingClientRect(); + } + return rect; + } + + function getClientRects(element) { + if (!element) { + return; + } + let rect; + if (typeof element.getClientRects !== "undefined") { + rect = element.getClientRects(); + } else { + let range = document.createRange(); + range.selectNode(element); + rect = range.getClientRects(); + } + return rect; + } + + /** + * Generates a UUID + * based on: http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript + * @returns {string} uuid + */ + function UUID() { + var d = new Date().getTime(); + if (typeof performance !== "undefined" && typeof performance.now === "function") { + d += performance.now(); //use high-precision timer if available + } + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === "x" ? r : (r & 0x3 | 0x8)).toString(16); + }); + } + + function attr(element, attributes) { + for (var i = 0; i < attributes.length; i++) { + if (element.hasAttribute(attributes[i])) { + return element.getAttribute(attributes[i]); + } + } + } + + /* Based on by https://mths.be/cssescape v1.5.1 by @mathias | MIT license + * Allows # and . + */ + function querySelectorEscape(value) { + if (arguments.length == 0) { + throw new TypeError("`CSS.escape` requires an argument."); + } + var string = String(value); + + var length = string.length; + var index = -1; + var codeUnit; + var result = ""; + var firstCodeUnit = string.charCodeAt(0); + while (++index < length) { + codeUnit = string.charCodeAt(index); + + + + // Note: there’s no need to special-case astral symbols, surrogate + // pairs, or lone surrogates. + + // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER + // (U+FFFD). + if (codeUnit == 0x0000) { + result += "\uFFFD"; + continue; + } + + if ( + // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is + // U+007F, […] + (codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F || + // If the character is the first character and is in the range [0-9] + // (U+0030 to U+0039), […] + (index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) || + // If the character is the second character and is in the range [0-9] + // (U+0030 to U+0039) and the first character is a `-` (U+002D), […] + ( + index == 1 && + codeUnit >= 0x0030 && codeUnit <= 0x0039 && + firstCodeUnit == 0x002D + ) + ) { + // https://drafts.csswg.org/cssom/#escape-a-character-as-code-point + result += "\\" + codeUnit.toString(16) + " "; + continue; + } + + if ( + // If the character is the first character and is a `-` (U+002D), and + // there is no second character, […] + index == 0 && + length == 1 && + codeUnit == 0x002D + ) { + result += "\\" + string.charAt(index); + continue; + } + + // support for period character in id + if (codeUnit == 0x002E) { + if (string.charAt(0) == "#") { + result += "\\."; + continue; + } + } + + + // If the character is not handled by one of the above rules and is + // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or + // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to + // U+005A), or [a-z] (U+0061 to U+007A), […] + if ( + codeUnit >= 0x0080 || + codeUnit == 0x002D || + codeUnit == 0x005F || + codeUnit == 35 || // Allow # + codeUnit == 46 || // Allow . + codeUnit >= 0x0030 && codeUnit <= 0x0039 || + codeUnit >= 0x0041 && codeUnit <= 0x005A || + codeUnit >= 0x0061 && codeUnit <= 0x007A + ) { + // the character itself + result += string.charAt(index); + continue; + } + + // Otherwise, the escaped character. + // https://drafts.csswg.org/cssom/#escape-a-character + result += "\\" + string.charAt(index); + + } + return result; + } + + /** + * Creates a new pending promise and provides methods to resolve or reject it. + * From: https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Deferred#backwards_forwards_compatible + * @returns {object} defered + */ + function defer() { + this.resolve = null; + + this.reject = null; + + this.id = UUID(); + + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + Object.freeze(this); + } + + const requestIdleCallback = typeof window !== "undefined" && ("requestIdleCallback" in window ? window.requestIdleCallback : window.requestAnimationFrame); + + function CSSValueToString(obj) { + return obj.value + (obj.unit || ""); + } + + function isElement(node) { + return node && node.nodeType === 1; + } + + function isText(node) { + return node && node.nodeType === 3; + } + + function* walk$2(start, limiter) { + let node = start; + + while (node) { + + yield node; + + if (node.childNodes.length) { + node = node.firstChild; + } else if (node.nextSibling) { + if (limiter && node === limiter) { + node = undefined; + break; + } + node = node.nextSibling; + } else { + while (node) { + node = node.parentNode; + if (limiter && node === limiter) { + node = undefined; + break; + } + if (node && node.nextSibling) { + node = node.nextSibling; + break; + } + + } + } + } + } + + function nodeAfter(node, limiter) { + if (limiter && node === limiter) { + return; + } + let significantNode = nextSignificantNode(node); + if (significantNode) { + return significantNode; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + significantNode = nextSignificantNode(node); + if (significantNode) { + return significantNode; + } + } + } + } + + function nodeBefore(node, limiter) { + if (limiter && node === limiter) { + return; + } + let significantNode = previousSignificantNode(node); + if (significantNode) { + return significantNode; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + significantNode = previousSignificantNode(node); + if (significantNode) { + return significantNode; + } + } + } + } + + function elementAfter(node, limiter) { + let after = nodeAfter(node, limiter); + + while (after && after.nodeType !== 1) { + after = nodeAfter(after, limiter); + } + + return after; + } + + function elementBefore(node, limiter) { + let before = nodeBefore(node, limiter); + + while (before && before.nodeType !== 1) { + before = nodeBefore(before, limiter); + } + + return before; + } + + function displayedElementAfter(node, limiter) { + let after = elementAfter(node, limiter); + + while (after && after.dataset.undisplayed) { + after = elementAfter(after, limiter); + } + + return after; + } + + function displayedElementBefore(node, limiter) { + let before = elementBefore(node, limiter); + + while (before && before.dataset.undisplayed) { + before = elementBefore(before, limiter); + } + + return before; + } + + function rebuildAncestors(node) { + let parent, ancestor; + let ancestors = []; + let added = []; + + let fragment = document.createDocumentFragment(); + + // Handle rowspan on table + if (node.nodeName === "TR") { + let previousRow = node.previousElementSibling; + let previousRowDistance = 1; + while (previousRow) { + // previous row has more columns, might indicate a rowspan. + if (previousRow.childElementCount > node.childElementCount) { + const initialColumns = Array.from(node.children); + while (node.firstChild) { + node.firstChild.remove(); + } + let k = 0; + for (let j = 0; j < previousRow.children.length; j++) { + let column = previousRow.children[j]; + if (column.rowSpan && column.rowSpan > previousRowDistance) { + const duplicatedColumn = column.cloneNode(true); + // Adjust rowspan value + duplicatedColumn.rowSpan = column.rowSpan - previousRowDistance; + // Add the column to the row + node.appendChild(duplicatedColumn); + } else { + // Fill the gap with the initial columns (if exists) + const initialColumn = initialColumns[k++]; + // The initial column can be undefined if the newly created table has less columns than the original table + if (initialColumn) { + node.appendChild(initialColumn); + } + } + } + } + previousRow = previousRow.previousElementSibling; + previousRowDistance++; + } + } + + // Gather all ancestors + let element = node; + while(element.parentNode && element.parentNode.nodeType === 1) { + ancestors.unshift(element.parentNode); + element = element.parentNode; + } + + for (var i = 0; i < ancestors.length; i++) { + ancestor = ancestors[i]; + parent = ancestor.cloneNode(false); + + parent.setAttribute("data-split-from", parent.getAttribute("data-ref")); + // ancestor.setAttribute("data-split-to", parent.getAttribute("data-ref")); + + if (parent.hasAttribute("id")) { + let dataID = parent.getAttribute("id"); + parent.setAttribute("data-id", dataID); + parent.removeAttribute("id"); + } + + // This is handled by css :not, but also tidied up here + if (parent.hasAttribute("data-break-before")) { + parent.removeAttribute("data-break-before"); + } + + if (parent.hasAttribute("data-previous-break-after")) { + parent.removeAttribute("data-previous-break-after"); + } + + if (added.length) { + let container = added[added.length-1]; + container.appendChild(parent); + } else { + fragment.appendChild(parent); + } + added.push(parent); + + // rebuild table rows + if (parent.nodeName === "TD" && ancestor.parentElement.contains(ancestor)) { + let td = ancestor; + let prev = parent; + while ((td = td.previousElementSibling)) { + let sib = td.cloneNode(false); + parent.parentElement.insertBefore(sib, prev); + prev = sib; + } + + } + } + + added = undefined; + return fragment; + } + /* + export function split(bound, cutElement, breakAfter) { + let needsRemoval = []; + let index = indexOf(cutElement); + + if (!breakAfter && index === 0) { + return; + } + + if (breakAfter && index === (cutElement.parentNode.children.length - 1)) { + return; + } + + // Create a fragment with rebuilt ancestors + let fragment = rebuildAncestors(cutElement); + + // Clone cut + if (!breakAfter) { + let clone = cutElement.cloneNode(true); + let ref = cutElement.parentNode.getAttribute('data-ref'); + let parent = fragment.querySelector("[data-ref='" + ref + "']"); + parent.appendChild(clone); + needsRemoval.push(cutElement); + } + + // Remove all after cut + let next = nodeAfter(cutElement, bound); + while (next) { + let clone = next.cloneNode(true); + let ref = next.parentNode.getAttribute('data-ref'); + let parent = fragment.querySelector("[data-ref='" + ref + "']"); + parent.appendChild(clone); + needsRemoval.push(next); + next = nodeAfter(next, bound); + } + + // Remove originals + needsRemoval.forEach((node) => { + if (node) { + node.remove(); + } + }); + + // Insert after bounds + bound.parentNode.insertBefore(fragment, bound.nextSibling); + return [bound, bound.nextSibling]; + } + */ + + function needsBreakBefore(node) { + if( typeof node !== "undefined" && + typeof node.dataset !== "undefined" && + typeof node.dataset.breakBefore !== "undefined" && + (node.dataset.breakBefore === "always" || + node.dataset.breakBefore === "page" || + node.dataset.breakBefore === "left" || + node.dataset.breakBefore === "right" || + node.dataset.breakBefore === "recto" || + node.dataset.breakBefore === "verso") + ) { + return true; + } + + return false; + } + + function needsPreviousBreakAfter(node) { + if( typeof node !== "undefined" && + typeof node.dataset !== "undefined" && + typeof node.dataset.previousBreakAfter !== "undefined" && + (node.dataset.previousBreakAfter === "always" || + node.dataset.previousBreakAfter === "page" || + node.dataset.previousBreakAfter === "left" || + node.dataset.previousBreakAfter === "right" || + node.dataset.previousBreakAfter === "recto" || + node.dataset.previousBreakAfter === "verso") + ) { + return true; + } + + return false; + } + + function needsPageBreak(node, previousSignificantNode) { + if (typeof node === "undefined" || !previousSignificantNode || isIgnorable(node)) { + return false; + } + if (node.dataset && node.dataset.undisplayed) { + return false; + } + let previousSignificantNodePage = previousSignificantNode.dataset ? previousSignificantNode.dataset.page : undefined; + if (typeof previousSignificantNodePage === "undefined") { + const nodeWithNamedPage = getNodeWithNamedPage(previousSignificantNode); + if (nodeWithNamedPage) { + previousSignificantNodePage = nodeWithNamedPage.dataset.page; + } + } + let currentNodePage = node.dataset ? node.dataset.page : undefined; + if (typeof currentNodePage === "undefined") { + const nodeWithNamedPage = getNodeWithNamedPage(node, previousSignificantNode); + if (nodeWithNamedPage) { + currentNodePage = nodeWithNamedPage.dataset.page; + } + } + return currentNodePage !== previousSignificantNodePage; + } + + function *words(node) { + let currentText = node.nodeValue; + let max = currentText.length; + let currentOffset = 0; + let currentLetter; + + let range; + const significantWhitespaces = node.parentElement && node.parentElement.nodeName === "PRE"; + + while (currentOffset < max) { + currentLetter = currentText[currentOffset]; + if (/^[\S\u202F\u00A0]$/.test(currentLetter) || significantWhitespaces) { + if (!range) { + range = document.createRange(); + range.setStart(node, currentOffset); + } + } else { + if (range) { + range.setEnd(node, currentOffset); + yield range; + range = undefined; + } + } + + currentOffset += 1; + } + + if (range) { + range.setEnd(node, currentOffset); + yield range; + } + } + + function *letters(wordRange) { + let currentText = wordRange.startContainer; + let max = currentText.length; + let currentOffset = wordRange.startOffset; + // let currentLetter; + + let range; + + while(currentOffset < max) { + // currentLetter = currentText[currentOffset]; + range = document.createRange(); + range.setStart(currentText, currentOffset); + range.setEnd(currentText, currentOffset+1); + + yield range; + + currentOffset += 1; + } + } + + function isContainer(node) { + let container; + + if (typeof node.tagName === "undefined") { + return true; + } + + if (node.style && node.style.display === "none") { + return false; + } + + switch (node.tagName) { + // Inline + case "A": + case "ABBR": + case "ACRONYM": + case "B": + case "BDO": + case "BIG": + case "BR": + case "BUTTON": + case "CITE": + case "CODE": + case "DFN": + case "EM": + case "I": + case "IMG": + case "INPUT": + case "KBD": + case "LABEL": + case "MAP": + case "OBJECT": + case "Q": + case "SAMP": + case "SCRIPT": + case "SELECT": + case "SMALL": + case "SPAN": + case "STRONG": + case "SUB": + case "SUP": + case "TEXTAREA": + case "TIME": + case "TT": + case "VAR": + case "P": + case "H1": + case "H2": + case "H3": + case "H4": + case "H5": + case "H6": + case "FIGCAPTION": + case "BLOCKQUOTE": + case "PRE": + case "LI": + case "TD": + case "DT": + case "DD": + case "VIDEO": + case "CANVAS": + container = false; + break; + default: + container = true; + } + + return container; + } + + function cloneNode(n, deep=false) { + return n.cloneNode(deep); + } + + function findElement(node, doc, forceQuery) { + const ref = node.getAttribute("data-ref"); + return findRef(ref, doc, forceQuery); + } + + function findRef(ref, doc, forceQuery) { + if (!forceQuery && doc.indexOfRefs && doc.indexOfRefs[ref]) { + return doc.indexOfRefs[ref]; + } else { + return doc.querySelector(`[data-ref='${ref}']`); + } + } + + function validNode(node) { + if (isText(node)) { + return true; + } + + if (isElement(node) && node.dataset.ref) { + return true; + } + + return false; + } + + function prevValidNode(node) { + while (!validNode(node)) { + if (node.previousSibling) { + node = node.previousSibling; + } else { + node = node.parentNode; + } + + if (!node) { + break; + } + } + + return node; + } + + + function indexOf$2(node) { + let parent = node.parentNode; + if (!parent) { + return 0; + } + return Array.prototype.indexOf.call(parent.childNodes, node); + } + + function child(node, index) { + return node.childNodes[index]; + } + + function hasContent(node) { + if (isElement(node)) { + return true; + } else if (isText(node) && + node.textContent.trim().length) { + return true; + } + return false; + } + + function indexOfTextNode(node, parent) { + if (!isText(node)) { + return -1; + } + let nodeTextContent = node.textContent; + let child; + let index = -1; + for (var i = 0; i < parent.childNodes.length; i++) { + child = parent.childNodes[i]; + if (child.nodeType === 3) { + let text = parent.childNodes[i].textContent; + if (text.includes(nodeTextContent)) { + index = i; + break; + } + } + } + + return index; + } + + + /** + * Throughout, whitespace is defined as one of the characters + * "\t" TAB \u0009 + * "\n" LF \u000A + * "\r" CR \u000D + * " " SPC \u0020 + * + * This does not use Javascript's "\s" because that includes non-breaking + * spaces (and also some other characters). + */ + + /** + * Determine if a node should be ignored by the iterator functions. + * taken from https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Whitespace#Whitespace_helper_functions + * + * @param {Node} node An object implementing the DOM1 |Node| interface. + * @return {boolean} true if the node is: + * 1) A |Text| node that is all whitespace + * 2) A |Comment| node + * and otherwise false. + */ + function isIgnorable(node) { + return (node.nodeType === 8) || // A comment node + ((node.nodeType === 3) && isAllWhitespace(node)); // a text node, all whitespace + } + + /** + * Determine whether a node's text content is entirely whitespace. + * + * @param {Node} node A node implementing the |CharacterData| interface (i.e., a |Text|, |Comment|, or |CDATASection| node + * @return {boolean} true if all of the text content of |nod| is whitespace, otherwise false. + */ + function isAllWhitespace(node) { + return !(/[^\t\n\r ]/.test(node.textContent)); + } + + /** + * Version of |previousSibling| that skips nodes that are entirely + * whitespace or comments. (Normally |previousSibling| is a property + * of all DOM nodes that gives the sibling node, the node that is + * a child of the same parent, that occurs immediately before the + * reference node.) + * + * @param {ChildNode} sib The reference node. + * @return {Node|null} Either: + * 1) The closest previous sibling to |sib| that is not ignorable according to |is_ignorable|, or + * 2) null if no such node exists. + */ + function previousSignificantNode(sib) { + while ((sib = sib.previousSibling)) { + if (!isIgnorable(sib)) return sib; + } + return null; + } + + function getNodeWithNamedPage(node, limiter) { + if (node && node.dataset && node.dataset.page) { + return node; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + if (node.dataset && node.dataset.page) { + return node; + } + } + } + return null; + } + + function breakInsideAvoidParentNode(node) { + while ((node = node.parentNode)) { + if (node && node.dataset && node.dataset.breakInside === "avoid") { + return node; + } + } + return null; + } + + /** + * Find a parent with a given node name. + * @param {Node} node - initial Node + * @param {string} nodeName - node name (eg. "TD", "TABLE", "STRONG"...) + * @param {Node} limiter - go up to the parent until there's no more parent or the current node is equals to the limiter + * @returns {Node|undefined} - Either: + * 1) The closest parent for a the given node name, or + * 2) undefined if no such node exists. + */ + function parentOf(node, nodeName, limiter) { + if (limiter && node === limiter) { + return; + } + if (node.parentNode) { + while ((node = node.parentNode)) { + if (limiter && node === limiter) { + return; + } + if (node.nodeName === nodeName) { + return node; + } + } + } + } + + /** + * Version of |nextSibling| that skips nodes that are entirely + * whitespace or comments. + * + * @param {ChildNode} sib The reference node. + * @return {Node|null} Either: + * 1) The closest next sibling to |sib| that is not ignorable according to |is_ignorable|, or + * 2) null if no such node exists. + */ + function nextSignificantNode(sib) { + while ((sib = sib.nextSibling)) { + if (!isIgnorable(sib)) return sib; + } + return null; + } + + function filterTree(content, func, what) { + const treeWalker = document.createTreeWalker( + content || this.dom, + what || NodeFilter.SHOW_ALL, + func ? { acceptNode: func } : null, + false + ); + + let node; + let current; + node = treeWalker.nextNode(); + while(node) { + current = node; + node = treeWalker.nextNode(); + current.parentNode.removeChild(current); + } + } + + /** + * BreakToken + * @class + */ + class BreakToken { + + constructor(node, offset) { + this.node = node; + this.offset = offset; + } + + equals(otherBreakToken) { + if (!otherBreakToken) { + return false; + } + if (this["node"] && otherBreakToken["node"] && + this["node"] !== otherBreakToken["node"]) { + return false; + } + if (this["offset"] && otherBreakToken["offset"] && + this["offset"] !== otherBreakToken["offset"]) { + return false; + } + return true; + } + + toJSON(hash) { + let node; + let index = 0; + if (!this.node) { + return {}; + } + if (isElement(this.node) && this.node.dataset.ref) { + node = this.node.dataset.ref; + } else if (hash) { + node = this.node.parentElement.dataset.ref; + } + + if (this.node.parentElement) { + const children = Array.from(this.node.parentElement.childNodes); + index = children.indexOf(this.node); + } + + return JSON.stringify({ + "node": node, + "index" : index, + "offset": this.offset + }); + } + + } + + /** + * Render result. + * @class + */ + class RenderResult { + + constructor(breakToken, error) { + this.breakToken = breakToken; + this.error = error; + } + } + + class OverflowContentError extends Error { + constructor(message, items) { + super(message); + this.items = items; + } + } + + const MAX_CHARS_PER_BREAK = 1500; + + /** + * Layout + * @class + */ + class Layout { + + constructor(element, hooks, options) { + this.element = element; + + this.bounds = this.element.getBoundingClientRect(); + this.parentBounds = this.element.offsetParent.getBoundingClientRect(); + let gap = parseFloat(window.getComputedStyle(this.element).columnGap); + + if (gap) { + let leftMargin = this.bounds.left - this.parentBounds.left; + this.gap = gap - leftMargin; + } else { + this.gap = 0; + } + + if (hooks) { + this.hooks = hooks; + } else { + this.hooks = {}; + this.hooks.onPageLayout = new Hook(); + this.hooks.layout = new Hook(); + this.hooks.renderNode = new Hook(); + this.hooks.layoutNode = new Hook(); + this.hooks.beforeOverflow = new Hook(); + this.hooks.onOverflow = new Hook(); + this.hooks.afterOverflowRemoved = new Hook(); + this.hooks.onBreakToken = new Hook(); + this.hooks.beforeRenderResult = new Hook(); + } + + this.settings = options || {}; + + this.maxChars = this.settings.maxChars || MAX_CHARS_PER_BREAK; + this.forceRenderBreak = false; + } + + async renderTo(wrapper, source, breakToken, bounds = this.bounds) { + let start = this.getStart(source, breakToken); + let walker = walk$2(start, source); + + let node; + let prevNode; + let done; + let next; + + let hasRenderedContent = false; + let newBreakToken; + + let length = 0; + + let prevBreakToken = breakToken || new BreakToken(start); + + this.hooks && this.hooks.onPageLayout.trigger(wrapper, prevBreakToken, this); + + while (!done && !newBreakToken) { + next = walker.next(); + prevNode = node; + node = next.value; + done = next.done; + + if (!node) { + this.hooks && this.hooks.layout.trigger(wrapper, this); + + let imgs = wrapper.querySelectorAll("img"); + if (imgs.length) { + await this.waitForImages(imgs); + } + + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", prevNode); + this.hooks && this.hooks.beforeRenderResult.trigger(undefined, wrapper, this); + return new RenderResult(undefined, new OverflowContentError("Unable to layout item", [prevNode])); + } + + this.rebuildTableFromBreakToken(newBreakToken, wrapper); + + this.hooks && this.hooks.beforeRenderResult.trigger(newBreakToken, wrapper, this); + return new RenderResult(newBreakToken); + } + + this.hooks && this.hooks.layoutNode.trigger(node); + + // Check if the rendered element has a break set + if (hasRenderedContent && this.shouldBreak(node, start)) { + this.hooks && this.hooks.layout.trigger(wrapper, this); + + let imgs = wrapper.querySelectorAll("img"); + if (imgs.length) { + await this.waitForImages(imgs); + } + + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (!newBreakToken) { + newBreakToken = this.breakAt(node); + } else { + this.rebuildTableFromBreakToken(newBreakToken, wrapper); + } + + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", node); + let after = newBreakToken.node && nodeAfter(newBreakToken.node); + if (after) { + newBreakToken = new BreakToken(after); + } else { + return new RenderResult(undefined, new OverflowContentError("Unable to layout item", [node])); + } + } + + length = 0; + + break; + } + + if (node.dataset && node.dataset.page) { + let named = node.dataset.page; + let page = this.element.closest(".pagedjs_page"); + page.classList.add("pagedjs_named_page"); + page.classList.add("pagedjs_" + named + "_page"); + + if (!node.dataset.splitFrom) { + page.classList.add("pagedjs_" + named + "_first_page"); + } + } + + // Should the Node be a shallow or deep clone + let shallow = isContainer(node); + + let rendered = this.append(node, wrapper, breakToken, shallow); + + length += rendered.textContent.length; + + // Check if layout has content yet + if (!hasRenderedContent) { + hasRenderedContent = hasContent(node); + } + + // Skip to the next node if a deep clone was rendered + if (!shallow) { + walker = walk$2(nodeAfter(node, source), source); + } + + if (this.forceRenderBreak) { + this.hooks && this.hooks.layout.trigger(wrapper, this); + + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (!newBreakToken) { + newBreakToken = this.breakAt(node); + } else { + this.rebuildTableFromBreakToken(newBreakToken, wrapper); + } + + length = 0; + this.forceRenderBreak = false; + + break; + } + + // Only check x characters + if (length >= this.maxChars) { + + this.hooks && this.hooks.layout.trigger(wrapper, this); + + let imgs = wrapper.querySelectorAll("img"); + if (imgs.length) { + await this.waitForImages(imgs); + } + + newBreakToken = this.findBreakToken(wrapper, source, bounds, prevBreakToken); + + if (newBreakToken) { + length = 0; + this.rebuildTableFromBreakToken(newBreakToken, wrapper); + } + + if (newBreakToken && newBreakToken.equals(prevBreakToken)) { + console.warn("Unable to layout item: ", node); + let after = newBreakToken.node && nodeAfter(newBreakToken.node); + if (after) { + newBreakToken = new BreakToken(after); + } else { + this.hooks && this.hooks.beforeRenderResult.trigger(undefined, wrapper, this); + return new RenderResult(undefined, new OverflowContentError("Unable to layout item", [node])); + } + } + } + + } + + this.hooks && this.hooks.beforeRenderResult.trigger(newBreakToken, wrapper, this); + return new RenderResult(newBreakToken); + } + + breakAt(node, offset = 0) { + let newBreakToken = new BreakToken( + node, + offset + ); + let breakHooks = this.hooks.onBreakToken.triggerSync(newBreakToken, undefined, node, this); + breakHooks.forEach((newToken) => { + if (typeof newToken != "undefined") { + newBreakToken = newToken; + } + }); + + return newBreakToken; + } + + shouldBreak(node, limiter) { + let previousNode = nodeBefore(node, limiter); + let parentNode = node.parentNode; + let parentBreakBefore = needsBreakBefore(node) && parentNode && !previousNode && needsBreakBefore(parentNode); + let doubleBreakBefore; + + if (parentBreakBefore) { + doubleBreakBefore = node.dataset.breakBefore === parentNode.dataset.breakBefore; + } + + return !doubleBreakBefore && needsBreakBefore(node) || needsPreviousBreakAfter(node) || needsPageBreak(node, previousNode); + } + + forceBreak() { + this.forceRenderBreak = true; + } + + getStart(source, breakToken) { + let start; + let node = breakToken && breakToken.node; + + if (node) { + start = node; + } else { + start = source.firstChild; + } + + return start; + } + + append(node, dest, breakToken, shallow = true, rebuild = true) { + + let clone = cloneNode(node, !shallow); + + if (node.parentNode && isElement(node.parentNode)) { + let parent = findElement(node.parentNode, dest); + // Rebuild chain + if (parent) { + parent.appendChild(clone); + } else if (rebuild) { + let fragment = rebuildAncestors(node); + parent = findElement(node.parentNode, fragment); + if (!parent) { + dest.appendChild(clone); + } else if (breakToken && isText(breakToken.node) && breakToken.offset > 0) { + clone.textContent = clone.textContent.substring(breakToken.offset); + parent.appendChild(clone); + } else { + parent.appendChild(clone); + } + + dest.appendChild(fragment); + } else { + dest.appendChild(clone); + } + + + } else { + dest.appendChild(clone); + } + + if (clone.dataset && clone.dataset.ref) { + if (!dest.indexOfRefs) { + dest.indexOfRefs = {}; + } + dest.indexOfRefs[clone.dataset.ref] = clone; + } + + let nodeHooks = this.hooks.renderNode.triggerSync(clone, node, this); + nodeHooks.forEach((newNode) => { + if (typeof newNode != "undefined") { + clone = newNode; + } + }); + + return clone; + } + + rebuildTableFromBreakToken(breakToken, dest) { + if (!breakToken || !breakToken.node) { + return; + } + let node = breakToken.node; + let td = isElement(node) ? node.closest("td") : node.parentElement.closest("td"); + if (td) { + let rendered = findElement(td, dest, true); + if (!rendered) { + return; + } + while ((td = td.nextElementSibling)) { + this.append(td, dest, null, true); + } + } + } + + async waitForImages(imgs) { + let results = Array.from(imgs).map(async (img) => { + return this.awaitImageLoaded(img); + }); + await Promise.all(results); + } + + async awaitImageLoaded(image) { + return new Promise(resolve => { + if (image.complete !== true) { + image.onload = function () { + let {width, height} = window.getComputedStyle(image); + resolve(width, height); + }; + image.onerror = function (e) { + let {width, height} = window.getComputedStyle(image); + resolve(width, height, e); + }; + } else { + let {width, height} = window.getComputedStyle(image); + resolve(width, height); + } + }); + } + + avoidBreakInside(node, limiter) { + let breakNode; + + if (node === limiter) { + return; + } + + while (node.parentNode) { + node = node.parentNode; + + if (node === limiter) { + break; + } + + if (window.getComputedStyle(node)["break-inside"] === "avoid") { + breakNode = node; + break; + } + + } + return breakNode; + } + + createBreakToken(overflow, rendered, source) { + let container = overflow.startContainer; + let offset = overflow.startOffset; + let node, renderedNode, parent, index, temp; + + if (isElement(container)) { + temp = child(container, offset); + + if (isElement(temp)) { + renderedNode = findElement(temp, rendered); + + if (!renderedNode) { + // Find closest element with data-ref + let prevNode = prevValidNode(temp); + if (!isElement(prevNode)) { + prevNode = prevNode.parentElement; + } + renderedNode = findElement(prevNode, rendered); + // Check if temp is the last rendered node at its level. + if (!temp.nextSibling) { + // We need to ensure that the previous sibling of temp is fully rendered. + const renderedNodeFromSource = findElement(renderedNode, source); + const walker = document.createTreeWalker(renderedNodeFromSource, NodeFilter.SHOW_ELEMENT); + const lastChildOfRenderedNodeFromSource = walker.lastChild(); + const lastChildOfRenderedNodeMatchingFromRendered = findElement(lastChildOfRenderedNodeFromSource, rendered); + // Check if we found that the last child in source + if (!lastChildOfRenderedNodeMatchingFromRendered) { + // Pending content to be rendered before virtual break token + return; + } + // Otherwise we will return a break token as per below + } + // renderedNode is actually the last unbroken box that does not overflow. + // Break Token is therefore the next sibling of renderedNode within source node. + node = findElement(renderedNode, source).nextSibling; + offset = 0; + } else { + node = findElement(renderedNode, source); + offset = 0; + } + } else { + renderedNode = findElement(container, rendered); + + if (!renderedNode) { + renderedNode = findElement(prevValidNode(container), rendered); + } + + parent = findElement(renderedNode, source); + index = indexOfTextNode(temp, parent); + // No seperatation for the first textNode of an element + if(index === 0) { + node = parent; + offset = 0; + } else { + node = child(parent, index); + offset = 0; + } + } + } else { + renderedNode = findElement(container.parentNode, rendered); + + if (!renderedNode) { + renderedNode = findElement(prevValidNode(container.parentNode), rendered); + } + + parent = findElement(renderedNode, source); + index = indexOfTextNode(container, parent); + + if (index === -1) { + return; + } + + node = child(parent, index); + + offset += node.textContent.indexOf(container.textContent); + } + + if (!node) { + return; + } + + return new BreakToken( + node, + offset + ); + + } + + findBreakToken(rendered, source, bounds = this.bounds, prevBreakToken, extract = true) { + let overflow = this.findOverflow(rendered, bounds); + let breakToken, breakLetter; + + let overflowHooks = this.hooks.onOverflow.triggerSync(overflow, rendered, bounds, this); + overflowHooks.forEach((newOverflow) => { + if (typeof newOverflow != "undefined") { + overflow = newOverflow; + } + }); + + if (overflow) { + breakToken = this.createBreakToken(overflow, rendered, source); + // breakToken is nullable + let breakHooks = this.hooks.onBreakToken.triggerSync(breakToken, overflow, rendered, this); + breakHooks.forEach((newToken) => { + if (typeof newToken != "undefined") { + breakToken = newToken; + } + }); + + // Stop removal if we are in a loop + if (breakToken && breakToken.equals(prevBreakToken)) { + return breakToken; + } + + if (breakToken && breakToken["node"] && breakToken["offset"] && breakToken["node"].textContent) { + breakLetter = breakToken["node"].textContent.charAt(breakToken["offset"]); + } else { + breakLetter = undefined; + } + + if (breakToken && breakToken.node && extract) { + let removed = this.removeOverflow(overflow, breakLetter); + this.hooks && this.hooks.afterOverflowRemoved.trigger(removed, rendered, this); + } + + } + return breakToken; + } + + hasOverflow(element, bounds = this.bounds) { + let constrainingElement = element && element.parentNode; // this gets the element, instead of the wrapper for the width workaround + let {width, height} = element.getBoundingClientRect(); + let scrollWidth = constrainingElement ? constrainingElement.scrollWidth : 0; + let scrollHeight = constrainingElement ? constrainingElement.scrollHeight : 0; + return Math.max(Math.floor(width), scrollWidth) > Math.round(bounds.width) || + Math.max(Math.floor(height), scrollHeight) > Math.round(bounds.height); + } + + findOverflow(rendered, bounds = this.bounds, gap = this.gap) { + if (!this.hasOverflow(rendered, bounds)) return; + + let start = Math.floor(bounds.left); + let end = Math.round(bounds.right + gap); + let vStart = Math.round(bounds.top); + let vEnd = Math.round(bounds.bottom); + let range; + + let walker = walk$2(rendered.firstChild, rendered); + + // Find Start + let next, done, node, offset, skip, breakAvoid, prev, br; + while (!done) { + next = walker.next(); + done = next.done; + node = next.value; + skip = false; + breakAvoid = false; + prev = undefined; + br = undefined; + + if (node) { + let pos = getBoundingClientRect(node); + let left = Math.round(pos.left); + let right = Math.floor(pos.right); + let top = Math.round(pos.top); + let bottom = Math.floor(pos.bottom); + + if (!range && (left >= end || top >= vEnd)) { + // Check if it is a float + let isFloat = false; + + // Check if the node is inside a break-inside: avoid table cell + const insideTableCell = parentOf(node, "TD", rendered); + if (insideTableCell && window.getComputedStyle(insideTableCell)["break-inside"] === "avoid") { + // breaking inside a table cell produces unexpected result, as a workaround, we forcibly avoid break inside in a cell. + // But we take the whole row, not just the cell that is causing the break. + prev = insideTableCell.parentElement; + } else if (isElement(node)) { + let styles = window.getComputedStyle(node); + isFloat = styles.getPropertyValue("float") !== "none"; + skip = styles.getPropertyValue("break-inside") === "avoid"; + breakAvoid = node.dataset.breakBefore === "avoid" || node.dataset.previousBreakAfter === "avoid"; + prev = breakAvoid && nodeBefore(node, rendered); + br = node.tagName === "BR" || node.tagName === "WBR"; + } + + let tableRow; + if (node.nodeName === "TR") { + tableRow = node; + } else { + tableRow = parentOf(node, "TR", rendered); + } + if (tableRow) { + // honor break-inside="avoid" in parent tbody/thead + let container = tableRow.parentElement; + if (["TBODY", "THEAD"].includes(container.nodeName)) { + let styles = window.getComputedStyle(container); + if (styles.getPropertyValue("break-inside") === "avoid") prev = container; + } + + // Check if the node is inside a row with a rowspan + const table = parentOf(tableRow, "TABLE", rendered); + const rowspan = table.querySelector("[colspan]"); + if (table && rowspan) { + let columnCount = 0; + for (const cell of Array.from(table.rows[0].cells)) { + columnCount += parseInt(cell.getAttribute("colspan") || "1"); + } + if (tableRow.cells.length !== columnCount) { + let previousRow = tableRow.previousElementSibling; + let previousRowColumnCount; + while (previousRow !== null) { + previousRowColumnCount = 0; + for (const cell of Array.from(previousRow.cells)) { + previousRowColumnCount += parseInt(cell.getAttribute("colspan") || "1"); + } + if (previousRowColumnCount === columnCount) { + break; + } + previousRow = previousRow.previousElementSibling; + } + if (previousRowColumnCount === columnCount) { + prev = previousRow; + } + } + } + } + + if (prev) { + range = document.createRange(); + range.selectNode(prev); + break; + } + + if (!br && !isFloat && isElement(node)) { + range = document.createRange(); + range.selectNode(node); + break; + } + + if (isText(node) && node.textContent.trim().length) { + range = document.createRange(); + range.selectNode(node); + break; + } + + } + + if (!range && isText(node) && + node.textContent.trim().length && + !breakInsideAvoidParentNode(node.parentNode)) { + + let rects = getClientRects(node); + let rect; + left = 0; + top = 0; + for (var i = 0; i != rects.length; i++) { + rect = rects[i]; + if (rect.width > 0 && (!left || rect.left > left)) { + left = rect.left; + } + if (rect.height > 0 && (!top || rect.top > top)) { + top = rect.top; + } + } + + if (left >= end || top >= vEnd) { + range = document.createRange(); + offset = this.textBreak(node, start, end, vStart, vEnd); + if (!offset) { + range = undefined; + } else { + range.setStart(node, offset); + } + break; + } + } + + // Skip children + if (skip || (right <= end && bottom <= vEnd)) { + next = nodeAfter(node, rendered); + if (next) { + walker = walk$2(next, rendered); + } + + } + + } + } + + // Find End + if (range) { + range.setEndAfter(rendered.lastChild); + return range; + } + + } + + findEndToken(rendered, source) { + if (rendered.childNodes.length === 0) { + return; + } + + let lastChild = rendered.lastChild; + + let lastNodeIndex; + while (lastChild && lastChild.lastChild) { + if (!validNode(lastChild)) { + // Only get elements with refs + lastChild = lastChild.previousSibling; + } else if (!validNode(lastChild.lastChild)) { + // Deal with invalid dom items + lastChild = prevValidNode(lastChild.lastChild); + break; + } else { + lastChild = lastChild.lastChild; + } + } + + if (isText(lastChild)) { + + if (lastChild.parentNode.dataset.ref) { + lastNodeIndex = indexOf$2(lastChild); + lastChild = lastChild.parentNode; + } else { + lastChild = lastChild.previousSibling; + } + } + + let original = findElement(lastChild, source); + + if (lastNodeIndex) { + original = original.childNodes[lastNodeIndex]; + } + + let after = nodeAfter(original); + + return this.breakAt(after); + } + + textBreak(node, start, end, vStart, vEnd) { + let wordwalker = words(node); + let left = 0; + let right = 0; + let top = 0; + let bottom = 0; + let word, next, done, pos; + let offset; + while (!done) { + next = wordwalker.next(); + word = next.value; + done = next.done; + + if (!word) { + break; + } + + pos = getBoundingClientRect(word); + + left = Math.floor(pos.left); + right = Math.floor(pos.right); + top = Math.floor(pos.top); + bottom = Math.floor(pos.bottom); + + if (left >= end || top >= vEnd) { + offset = word.startOffset; + break; + } + + if (right > end || bottom > vEnd) { + let letterwalker = letters(word); + let letter, nextLetter, doneLetter; + + while (!doneLetter) { + nextLetter = letterwalker.next(); + letter = nextLetter.value; + doneLetter = nextLetter.done; + + if (!letter) { + break; + } + + pos = getBoundingClientRect(letter); + left = Math.floor(pos.left); + top = Math.floor(pos.top); + + if (left >= end || top >= vEnd) { + offset = letter.startOffset; + done = true; + + break; + } + } + } + + } + + return offset; + } + + removeOverflow(overflow, breakLetter) { + let {startContainer} = overflow; + let extracted = overflow.extractContents(); + + this.hyphenateAtBreak(startContainer, breakLetter); + + return extracted; + } + + hyphenateAtBreak(startContainer, breakLetter) { + if (isText(startContainer)) { + let startText = startContainer.textContent; + let prevLetter = startText[startText.length - 1]; + + // Add a hyphen if previous character is a letter or soft hyphen + if ( + (breakLetter && /^\w|\u00AD$/.test(prevLetter) && /^\w|\u00AD$/.test(breakLetter)) || + (!breakLetter && /^\w|\u00AD$/.test(prevLetter)) + ) { + startContainer.parentNode.classList.add("pagedjs_hyphen"); + startContainer.textContent += this.settings.hyphenGlyph || "\u2011"; + } + } + } + + equalTokens(a, b) { + if (!a || !b) { + return false; + } + if (a["node"] && b["node"] && a["node"] !== b["node"]) { + return false; + } + if (a["offset"] && b["offset"] && a["offset"] !== b["offset"]) { + return false; + } + return true; + } + } + + EventEmitter(Layout.prototype); + + /** + * Render a page + * @class + */ + class Page { + constructor(pagesArea, pageTemplate, blank, hooks, options) { + this.pagesArea = pagesArea; + this.pageTemplate = pageTemplate; + this.blank = blank; + + this.width = undefined; + this.height = undefined; + + this.hooks = hooks; + + this.settings = options || {}; + + // this.element = this.create(this.pageTemplate); + } + + create(template, after) { + //let documentFragment = document.createRange().createContextualFragment( TEMPLATE ); + //let page = documentFragment.children[0]; + let clone = document.importNode(this.pageTemplate.content, true); + + let page, index; + if (after) { + this.pagesArea.insertBefore(clone, after.nextElementSibling); + index = Array.prototype.indexOf.call(this.pagesArea.children, after.nextElementSibling); + page = this.pagesArea.children[index]; + } else { + this.pagesArea.appendChild(clone); + page = this.pagesArea.lastChild; + } + + let pagebox = page.querySelector(".pagedjs_pagebox"); + let area = page.querySelector(".pagedjs_page_content"); + let footnotesArea = page.querySelector(".pagedjs_footnote_area"); + + + let size = area.getBoundingClientRect(); + + + area.style.columnWidth = Math.round(size.width) + "px"; + area.style.columnGap = "calc(var(--pagedjs-margin-right) + var(--pagedjs-margin-left) + var(--pagedjs-bleed-right) + var(--pagedjs-bleed-left) + var(--pagedjs-column-gap-offset))"; + // area.style.overflow = "scroll"; + + this.width = Math.round(size.width); + this.height = Math.round(size.height); + + this.element = page; + this.pagebox = pagebox; + this.area = area; + this.footnotesArea = footnotesArea; + + return page; + } + + createWrapper() { + let wrapper = document.createElement("div"); + + this.area.appendChild(wrapper); + + this.wrapper = wrapper; + + return wrapper; + } + + index(pgnum) { + this.position = pgnum; + + let page = this.element; + // let pagebox = this.pagebox; + + let index = pgnum + 1; + + let id = `page-${index}`; + + this.id = id; + + // page.dataset.pageNumber = index; + + page.dataset.pageNumber = index; + page.setAttribute("id", id); + + if (this.name) { + page.classList.add("pagedjs_" + this.name + "_page"); + } + + if (this.blank) { + page.classList.add("pagedjs_blank_page"); + } + + if (pgnum === 0) { + page.classList.add("pagedjs_first_page"); + } + + if (pgnum % 2 !== 1) { + page.classList.remove("pagedjs_left_page"); + page.classList.add("pagedjs_right_page"); + } else { + page.classList.remove("pagedjs_right_page"); + page.classList.add("pagedjs_left_page"); + } + } + + /* + size(width, height) { + if (width === this.width && height === this.height) { + return; + } + this.width = width; + this.height = height; + + this.element.style.width = Math.round(width) + "px"; + this.element.style.height = Math.round(height) + "px"; + this.element.style.columnWidth = Math.round(width) + "px"; + } + */ + + async layout(contents, breakToken, maxChars) { + + this.clear(); + + this.startToken = breakToken; + + let settings = this.settings; + if (!settings.maxChars && maxChars) { + settings.maxChars = maxChars; + } + + this.layoutMethod = new Layout(this.area, this.hooks, settings); + + let renderResult = await this.layoutMethod.renderTo(this.wrapper, contents, breakToken); + let newBreakToken = renderResult.breakToken; + + this.addListeners(contents); + + this.endToken = newBreakToken; + + return newBreakToken; + } + + async append(contents, breakToken) { + + if (!this.layoutMethod) { + return this.layout(contents, breakToken); + } + + let renderResult = await this.layoutMethod.renderTo(this.wrapper, contents, breakToken); + let newBreakToken = renderResult.breakToken; + + this.endToken = newBreakToken; + + return newBreakToken; + } + + getByParent(ref, entries) { + let e; + for (var i = 0; i < entries.length; i++) { + e = entries[i]; + if (e.dataset.ref === ref) { + return e; + } + } + } + + onOverflow(func) { + this._onOverflow = func; + } + + onUnderflow(func) { + this._onUnderflow = func; + } + + clear() { + this.removeListeners(); + this.wrapper && this.wrapper.remove(); + this.createWrapper(); + } + + addListeners(contents) { + if (typeof ResizeObserver !== "undefined") { + this.addResizeObserver(contents); + } else { + this._checkOverflowAfterResize = this.checkOverflowAfterResize.bind(this, contents); + this.element.addEventListener("overflow", this._checkOverflowAfterResize, false); + this.element.addEventListener("underflow", this._checkOverflowAfterResize, false); + } + // TODO: fall back to mutation observer? + + this._onScroll = function () { + if (this.listening) { + this.element.scrollLeft = 0; + } + }.bind(this); + + // Keep scroll left from changing + this.element.addEventListener("scroll", this._onScroll); + + this.listening = true; + + return true; + } + + removeListeners() { + this.listening = false; + + if (typeof ResizeObserver !== "undefined" && this.ro) { + this.ro.disconnect(); + } else if (this.element) { + this.element.removeEventListener("overflow", this._checkOverflowAfterResize, false); + this.element.removeEventListener("underflow", this._checkOverflowAfterResize, false); + } + + this.element && this.element.removeEventListener("scroll", this._onScroll); + + } + + addResizeObserver(contents) { + let wrapper = this.wrapper; + let prevHeight = wrapper.getBoundingClientRect().height; + this.ro = new ResizeObserver(entries => { + + if (!this.listening) { + return; + } + requestAnimationFrame(() => { + for (let entry of entries) { + const cr = entry.contentRect; + + if (cr.height > prevHeight) { + this.checkOverflowAfterResize(contents); + prevHeight = wrapper.getBoundingClientRect().height; + } else if (cr.height < prevHeight) { // TODO: calc line height && (prevHeight - cr.height) >= 22 + this.checkUnderflowAfterResize(contents); + prevHeight = cr.height; + } + } + }); + }); + + this.ro.observe(wrapper); + } + + checkOverflowAfterResize(contents) { + if (!this.listening || !this.layoutMethod) { + return; + } + + let newBreakToken = this.layoutMethod.findBreakToken(this.wrapper, contents, this.startToken); + + if (newBreakToken) { + this.endToken = newBreakToken; + this._onOverflow && this._onOverflow(newBreakToken); + } + } + + checkUnderflowAfterResize(contents) { + if (!this.listening || !this.layoutMethod) { + return; + } + + let endToken = this.layoutMethod.findEndToken(this.wrapper, contents); + + if (endToken) { + this._onUnderflow && this._onUnderflow(endToken); + } + } + + + destroy() { + this.removeListeners(); + + this.element.remove(); + + this.element = undefined; + this.wrapper = undefined; + } + } + + EventEmitter(Page.prototype); + + /** + * Render a flow of text offscreen + * @class + */ + class ContentParser { + + constructor(content, cb) { + if (content && content.nodeType) { + // handle dom + this.dom = this.add(content); + } else if (typeof content === "string") { + this.dom = this.parse(content); + } + + return this.dom; + } + + parse(markup, mime) { + let range = document.createRange(); + let fragment = range.createContextualFragment(markup); + + this.addRefs(fragment); + + return fragment; + } + + add(contents) { + // let fragment = document.createDocumentFragment(); + // + // let children = [...contents.childNodes]; + // for (let child of children) { + // let clone = child.cloneNode(true); + // fragment.appendChild(clone); + // } + + this.addRefs(contents); + + return contents; + } + + addRefs(content) { + var treeWalker = document.createTreeWalker( + content, + NodeFilter.SHOW_ELEMENT, + null, + false + ); + + let node = treeWalker.nextNode(); + while(node) { + + if (!node.hasAttribute("data-ref")) { + let uuid = UUID(); + node.setAttribute("data-ref", uuid); + } + + if (node.id) { + node.setAttribute("data-id", node.id); + } + + // node.setAttribute("data-children", node.childNodes.length); + + // node.setAttribute("data-text", node.textContent.trim().length); + node = treeWalker.nextNode(); + } + } + + find(ref) { + return this.refs[ref]; + } + + destroy() { + this.refs = undefined; + this.dom = undefined; + } + } + + /** + * Queue for handling tasks one at a time + * @class + * @param {scope} context what this will resolve to in the tasks + */ + class Queue { + constructor(context){ + this._q = []; + this.context = context; + this.tick = requestAnimationFrame; + this.running = false; + this.paused = false; + } + + /** + * Add an item to the queue + * @return {Promise} enqueued + */ + enqueue() { + var deferred, promise; + var queued; + var task = [].shift.call(arguments); + var args = arguments; + + // Handle single args without context + // if(args && !Array.isArray(args)) { + // args = [args]; + // } + if(!task) { + throw new Error("No Task Provided"); + } + + if(typeof task === "function"){ + + deferred = new defer(); + promise = deferred.promise; + + queued = { + "task" : task, + "args" : args, + //"context" : context, + "deferred" : deferred, + "promise" : promise + }; + + } else { + // Task is a promise + queued = { + "promise" : task + }; + + } + + this._q.push(queued); + + // Wait to start queue flush + if (this.paused == false && !this.running) { + this.run(); + } + + return queued.promise; + } + + /** + * Run one item + * @return {Promise} dequeued + */ + dequeue(){ + var inwait, task, result; + + if(this._q.length && !this.paused) { + inwait = this._q.shift(); + task = inwait.task; + if(task){ + // console.log(task) + + result = task.apply(this.context, inwait.args); + + if(result && typeof result["then"] === "function") { + // Task is a function that returns a promise + return result.then(function(){ + inwait.deferred.resolve.apply(this.context, arguments); + }.bind(this), function() { + inwait.deferred.reject.apply(this.context, arguments); + }.bind(this)); + } else { + // Task resolves immediately + inwait.deferred.resolve.apply(this.context, result); + return inwait.promise; + } + + + + } else if(inwait.promise) { + // Task is a promise + return inwait.promise; + } + + } else { + inwait = new defer(); + inwait.deferred.resolve(); + return inwait.promise; + } + + } + + // Run All Immediately + dump(){ + while(this._q.length) { + this.dequeue(); + } + } + + /** + * Run all tasks sequentially, at convince + * @return {Promise} all run + */ + run(){ + + if(!this.running){ + this.running = true; + this.defered = new defer(); + } + + this.tick.call(window, () => { + + if(this._q.length) { + + this.dequeue() + .then(function(){ + this.run(); + }.bind(this)); + + } else { + this.defered.resolve(); + this.running = undefined; + } + + }); + + // Unpause + if(this.paused == true) { + this.paused = false; + } + + return this.defered.promise; + } + + /** + * Flush all, as quickly as possible + * @return {Promise} ran + */ + flush(){ + + if(this.running){ + return this.running; + } + + if(this._q.length) { + this.running = this.dequeue() + .then(function(){ + this.running = undefined; + return this.flush(); + }.bind(this)); + + return this.running; + } + + } + + /** + * Clear all items in wait + * @return {void} + */ + clear(){ + this._q = []; + } + + /** + * Get the number of tasks in the queue + * @return {number} tasks + */ + length(){ + return this._q.length; + } + + /** + * Pause a running queue + * @return {void} + */ + pause(){ + this.paused = true; + } + + /** + * End the queue + * @return {void} + */ + stop(){ + this._q = []; + this.running = false; + this.paused = true; + } + } + + const TEMPLATE = ` +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
`; + + /** + * Chop up text into flows + * @class + */ + class Chunker { + constructor(content, renderTo, options) { + // this.preview = preview; + + this.settings = options || {}; + + this.hooks = {}; + this.hooks.beforeParsed = new Hook(this); + this.hooks.filter = new Hook(this); + this.hooks.afterParsed = new Hook(this); + this.hooks.beforePageLayout = new Hook(this); + this.hooks.onPageLayout = new Hook(this); + this.hooks.layout = new Hook(this); + this.hooks.renderNode = new Hook(this); + this.hooks.layoutNode = new Hook(this); + this.hooks.onOverflow = new Hook(this); + this.hooks.afterOverflowRemoved = new Hook(this); + this.hooks.onBreakToken = new Hook(); + this.hooks.beforeRenderResult = new Hook(this); + this.hooks.afterPageLayout = new Hook(this); + this.hooks.finalizePage = new Hook(this); + this.hooks.afterRendered = new Hook(this); + + this.pages = []; + this.total = 0; + + this.q = new Queue(this); + this.stopped = false; + this.rendered = false; + + this.content = content; + + this.charsPerBreak = []; + this.maxChars; + + if (content) { + this.flow(content, renderTo); + } + } + + setup(renderTo) { + this.pagesArea = document.createElement("div"); + this.pagesArea.classList.add("pagedjs_pages"); + + if (renderTo) { + renderTo.appendChild(this.pagesArea); + } else { + document.querySelector("body").appendChild(this.pagesArea); + } + + this.pageTemplate = document.createElement("template"); + this.pageTemplate.innerHTML = TEMPLATE; + + } + + async flow(content, renderTo) { + let parsed; + + await this.hooks.beforeParsed.trigger(content, this); + + parsed = new ContentParser(content); + + this.hooks.filter.triggerSync(parsed); + + this.source = parsed; + this.breakToken = undefined; + + if (this.pagesArea && this.pageTemplate) { + this.q.clear(); + this.removePages(); + } else { + this.setup(renderTo); + } + + this.emit("rendering", parsed); + + await this.hooks.afterParsed.trigger(parsed, this); + + await this.loadFonts(); + + let rendered = await this.render(parsed, this.breakToken); + while (rendered.canceled) { + this.start(); + rendered = await this.render(parsed, this.breakToken); + } + + this.rendered = true; + this.pagesArea.style.setProperty("--pagedjs-page-count", this.total); + + await this.hooks.afterRendered.trigger(this.pages, this); + + this.emit("rendered", this.pages); + + + + return this; + } + + // oversetPages() { + // let overset = []; + // for (let i = 0; i < this.pages.length; i++) { + // let page = this.pages[i]; + // if (page.overset) { + // overset.push(page); + // // page.overset = false; + // } + // } + // return overset; + // } + // + // async handleOverset(parsed) { + // let overset = this.oversetPages(); + // if (overset.length) { + // console.log("overset", overset); + // let index = this.pages.indexOf(overset[0]) + 1; + // console.log("INDEX", index); + // + // // Remove pages + // // this.removePages(index); + // + // // await this.render(parsed, overset[0].overset); + // + // // return this.handleOverset(parsed); + // } + // } + + async render(parsed, startAt) { + let renderer = this.layout(parsed, startAt); + + let done = false; + let result; + while (!done) { + result = await this.q.enqueue(() => { return this.renderAsync(renderer); }); + done = result.done; + } + + return result; + } + + start() { + this.rendered = false; + this.stopped = false; + } + + stop() { + this.stopped = true; + // this.q.clear(); + } + + renderOnIdle(renderer) { + return new Promise(resolve => { + requestIdleCallback(async () => { + if (this.stopped) { + return resolve({ done: true, canceled: true }); + } + let result = await renderer.next(); + if (this.stopped) { + resolve({ done: true, canceled: true }); + } else { + resolve(result); + } + }); + }); + } + + async renderAsync(renderer) { + if (this.stopped) { + return { done: true, canceled: true }; + } + let result = await renderer.next(); + if (this.stopped) { + return { done: true, canceled: true }; + } else { + return result; + } + } + + async handleBreaks(node, force) { + let currentPage = this.total + 1; + let currentPosition = currentPage % 2 === 0 ? "left" : "right"; + // TODO: Recto and Verso should reverse for rtl languages + let currentSide = currentPage % 2 === 0 ? "verso" : "recto"; + let previousBreakAfter; + let breakBefore; + let page; + + if (currentPage === 1) { + return; + } + + if (node && + typeof node.dataset !== "undefined" && + typeof node.dataset.previousBreakAfter !== "undefined") { + previousBreakAfter = node.dataset.previousBreakAfter; + } + + if (node && + typeof node.dataset !== "undefined" && + typeof node.dataset.breakBefore !== "undefined") { + breakBefore = node.dataset.breakBefore; + } + + if (force) { + page = this.addPage(true); + } else if( previousBreakAfter && + (previousBreakAfter === "left" || previousBreakAfter === "right") && + previousBreakAfter !== currentPosition) { + page = this.addPage(true); + } else if( previousBreakAfter && + (previousBreakAfter === "verso" || previousBreakAfter === "recto") && + previousBreakAfter !== currentSide) { + page = this.addPage(true); + } else if( breakBefore && + (breakBefore === "left" || breakBefore === "right") && + breakBefore !== currentPosition) { + page = this.addPage(true); + } else if( breakBefore && + (breakBefore === "verso" || breakBefore === "recto") && + breakBefore !== currentSide) { + page = this.addPage(true); + } + + if (page) { + await this.hooks.beforePageLayout.trigger(page, undefined, undefined, this); + this.emit("page", page); + // await this.hooks.layout.trigger(page.element, page, undefined, this); + await this.hooks.afterPageLayout.trigger(page.element, page, undefined, this); + await this.hooks.finalizePage.trigger(page.element, page, undefined, this); + this.emit("renderedPage", page); + } + } + + async *layout(content, startAt) { + let breakToken = startAt || false; + let tokens = []; + + while (breakToken !== undefined && (true)) { + + if (breakToken && breakToken.node) { + await this.handleBreaks(breakToken.node); + } else { + await this.handleBreaks(content.firstChild); + } + + let page = this.addPage(); + + await this.hooks.beforePageLayout.trigger(page, content, breakToken, this); + this.emit("page", page); + + // Layout content in the page, starting from the breakToken + breakToken = await page.layout(content, breakToken, this.maxChars); + + if (breakToken) { + let newToken = breakToken.toJSON(true); + if (tokens.lastIndexOf(newToken) > -1) { + // loop + let err = new OverflowContentError("Layout repeated", [breakToken.node]); + console.error("Layout repeated at: ", breakToken.node); + return err; + } else { + tokens.push(newToken); + } + } + + await this.hooks.afterPageLayout.trigger(page.element, page, breakToken, this); + await this.hooks.finalizePage.trigger(page.element, page, undefined, this); + this.emit("renderedPage", page); + + this.recoredCharLength(page.wrapper.textContent.length); + + yield breakToken; + + // Stop if we get undefined, showing we have reached the end of the content + } + + + } + + recoredCharLength(length) { + if (length === 0) { + return; + } + + this.charsPerBreak.push(length); + + // Keep the length of the last few breaks + if (this.charsPerBreak.length > 4) { + this.charsPerBreak.shift(); + } + + this.maxChars = this.charsPerBreak.reduce((a, b) => a + b, 0) / (this.charsPerBreak.length); + } + + removePages(fromIndex=0) { + + if (fromIndex >= this.pages.length) { + return; + } + + // Remove pages + for (let i = fromIndex; i < this.pages.length; i++) { + this.pages[i].destroy(); + } + + if (fromIndex > 0) { + this.pages.splice(fromIndex); + } else { + this.pages = []; + } + + this.total = this.pages.length; + } + + addPage(blank) { + let lastPage = this.pages[this.pages.length - 1]; + // Create a new page from the template + let page = new Page(this.pagesArea, this.pageTemplate, blank, this.hooks, this.settings); + + this.pages.push(page); + + // Create the pages + page.create(undefined, lastPage && lastPage.element); + + page.index(this.total); + + if (!blank) { + // Listen for page overflow + page.onOverflow((overflowToken) => { + console.warn("overflow on", page.id, overflowToken); + + // Only reflow while rendering + if (this.rendered) { + return; + } + + let index = this.pages.indexOf(page) + 1; + + // Stop the rendering + this.stop(); + + // Set the breakToken to resume at + this.breakToken = overflowToken; + + // Remove pages + this.removePages(index); + + if (this.rendered === true) { + this.rendered = false; + + this.q.enqueue(async () => { + + this.start(); + + await this.render(this.source, this.breakToken); + + this.rendered = true; + + }); + } + + + }); + + page.onUnderflow((overflowToken) => { + // console.log("underflow on", page.id, overflowToken); + + // page.append(this.source, overflowToken); + + }); + } + + this.total = this.pages.length; + + return page; + } + /* + insertPage(index, blank) { + let lastPage = this.pages[index]; + // Create a new page from the template + let page = new Page(this.pagesArea, this.pageTemplate, blank, this.hooks); + + let total = this.pages.splice(index, 0, page); + + // Create the pages + page.create(undefined, lastPage && lastPage.element); + + page.index(index + 1); + + for (let i = index + 2; i < this.pages.length; i++) { + this.pages[i].index(i); + } + + if (!blank) { + // Listen for page overflow + page.onOverflow((overflowToken) => { + if (total < this.pages.length) { + this.pages[total].layout(this.source, overflowToken); + } else { + let newPage = this.addPage(); + newPage.layout(this.source, overflowToken); + } + }); + + page.onUnderflow(() => { + // console.log("underflow on", page.id); + }); + } + + this.total += 1; + + return page; + } + */ + + async clonePage(originalPage) { + let lastPage = this.pages[this.pages.length - 1]; + + let page = new Page(this.pagesArea, this.pageTemplate, false, this.hooks); + + this.pages.push(page); + + // Create the pages + page.create(undefined, lastPage && lastPage.element); + + page.index(this.total); + + await this.hooks.beforePageLayout.trigger(page, undefined, undefined, this); + this.emit("page", page); + + for (const className of originalPage.element.classList) { + if (className !== "pagedjs_left_page" && className !== "pagedjs_right_page") { + page.element.classList.add(className); + } + } + + await this.hooks.afterPageLayout.trigger(page.element, page, undefined, this); + await this.hooks.finalizePage.trigger(page.element, page, undefined, this); + this.emit("renderedPage", page); + } + + loadFonts() { + let fontPromises = []; + (document.fonts || []).forEach((fontFace) => { + if (fontFace.status !== "loaded") { + let fontLoaded = fontFace.load().then((r) => { + return fontFace.family; + }, (r) => { + console.warn("Failed to preload font-family:", fontFace.family); + return fontFace.family; + }); + fontPromises.push(fontLoaded); + } + }); + return Promise.all(fontPromises).catch((err) => { + console.warn(err); + }); + } + + destroy() { + this.pagesArea.remove(); + this.pageTemplate.remove(); + } + + } + + EventEmitter(Chunker.prototype); + + var syntax = {exports: {}}; + + var create$4 = {}; + + // + // list + // ┌──────┐ + // ┌──────────────┼─head │ + // │ │ tail─┼──────────────┐ + // │ └──────┘ │ + // ▼ ▼ + // item item item item + // ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ + // null ◀──┼─prev │◀───┼─prev │◀───┼─prev │◀───┼─prev │ + // │ next─┼───▶│ next─┼───▶│ next─┼───▶│ next─┼──▶ null + // ├──────┤ ├──────┤ ├──────┤ ├──────┤ + // │ data │ │ data │ │ data │ │ data │ + // └──────┘ └──────┘ └──────┘ └──────┘ + // + + function createItem(data) { + return { + prev: null, + next: null, + data: data + }; + } + + function allocateCursor(node, prev, next) { + var cursor; + + if (cursors !== null) { + cursor = cursors; + cursors = cursors.cursor; + cursor.prev = prev; + cursor.next = next; + cursor.cursor = node.cursor; + } else { + cursor = { + prev: prev, + next: next, + cursor: node.cursor + }; + } + + node.cursor = cursor; + + return cursor; + } + + function releaseCursor(node) { + var cursor = node.cursor; + + node.cursor = cursor.cursor; + cursor.prev = null; + cursor.next = null; + cursor.cursor = cursors; + cursors = cursor; + } + + var cursors = null; + var List$6 = function() { + this.cursor = null; + this.head = null; + this.tail = null; + }; + + List$6.createItem = createItem; + List$6.prototype.createItem = createItem; + + List$6.prototype.updateCursors = function(prevOld, prevNew, nextOld, nextNew) { + var cursor = this.cursor; + + while (cursor !== null) { + if (cursor.prev === prevOld) { + cursor.prev = prevNew; + } + + if (cursor.next === nextOld) { + cursor.next = nextNew; + } + + cursor = cursor.cursor; + } + }; + + List$6.prototype.getSize = function() { + var size = 0; + var cursor = this.head; + + while (cursor) { + size++; + cursor = cursor.next; + } + + return size; + }; + + List$6.prototype.fromArray = function(array) { + var cursor = null; + + this.head = null; + + for (var i = 0; i < array.length; i++) { + var item = createItem(array[i]); + + if (cursor !== null) { + cursor.next = item; + } else { + this.head = item; + } + + item.prev = cursor; + cursor = item; + } + + this.tail = cursor; + + return this; + }; + + List$6.prototype.toArray = function() { + var cursor = this.head; + var result = []; + + while (cursor) { + result.push(cursor.data); + cursor = cursor.next; + } + + return result; + }; + + List$6.prototype.toJSON = List$6.prototype.toArray; + + List$6.prototype.isEmpty = function() { + return this.head === null; + }; + + List$6.prototype.first = function() { + return this.head && this.head.data; + }; + + List$6.prototype.last = function() { + return this.tail && this.tail.data; + }; + + List$6.prototype.each = function(fn, context) { + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, null, this.head); + + while (cursor.next !== null) { + item = cursor.next; + cursor.next = item.next; + + fn.call(context, item.data, item, this); + } + + // pop cursor + releaseCursor(this); + }; + + List$6.prototype.forEach = List$6.prototype.each; + + List$6.prototype.eachRight = function(fn, context) { + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, this.tail, null); + + while (cursor.prev !== null) { + item = cursor.prev; + cursor.prev = item.prev; + + fn.call(context, item.data, item, this); + } + + // pop cursor + releaseCursor(this); + }; + + List$6.prototype.forEachRight = List$6.prototype.eachRight; + + List$6.prototype.reduce = function(fn, initialValue, context) { + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, null, this.head); + var acc = initialValue; + + while (cursor.next !== null) { + item = cursor.next; + cursor.next = item.next; + + acc = fn.call(context, acc, item.data, item, this); + } + + // pop cursor + releaseCursor(this); + + return acc; + }; + + List$6.prototype.reduceRight = function(fn, initialValue, context) { + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, this.tail, null); + var acc = initialValue; + + while (cursor.prev !== null) { + item = cursor.prev; + cursor.prev = item.prev; + + acc = fn.call(context, acc, item.data, item, this); + } + + // pop cursor + releaseCursor(this); + + return acc; + }; + + List$6.prototype.nextUntil = function(start, fn, context) { + if (start === null) { + return; + } + + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, null, start); + + while (cursor.next !== null) { + item = cursor.next; + cursor.next = item.next; + + if (fn.call(context, item.data, item, this)) { + break; + } + } + + // pop cursor + releaseCursor(this); + }; + + List$6.prototype.prevUntil = function(start, fn, context) { + if (start === null) { + return; + } + + var item; + + if (context === undefined) { + context = this; + } + + // push cursor + var cursor = allocateCursor(this, start, null); + + while (cursor.prev !== null) { + item = cursor.prev; + cursor.prev = item.prev; + + if (fn.call(context, item.data, item, this)) { + break; + } + } + + // pop cursor + releaseCursor(this); + }; + + List$6.prototype.some = function(fn, context) { + var cursor = this.head; + + if (context === undefined) { + context = this; + } + + while (cursor !== null) { + if (fn.call(context, cursor.data, cursor, this)) { + return true; + } + + cursor = cursor.next; + } + + return false; + }; + + List$6.prototype.map = function(fn, context) { + var result = new List$6(); + var cursor = this.head; + + if (context === undefined) { + context = this; + } + + while (cursor !== null) { + result.appendData(fn.call(context, cursor.data, cursor, this)); + cursor = cursor.next; + } + + return result; + }; + + List$6.prototype.filter = function(fn, context) { + var result = new List$6(); + var cursor = this.head; + + if (context === undefined) { + context = this; + } + + while (cursor !== null) { + if (fn.call(context, cursor.data, cursor, this)) { + result.appendData(cursor.data); + } + cursor = cursor.next; + } + + return result; + }; + + List$6.prototype.clear = function() { + this.head = null; + this.tail = null; + }; + + List$6.prototype.copy = function() { + var result = new List$6(); + var cursor = this.head; + + while (cursor !== null) { + result.insert(createItem(cursor.data)); + cursor = cursor.next; + } + + return result; + }; + + List$6.prototype.prepend = function(item) { + // head + // ^ + // item + this.updateCursors(null, item, this.head, item); + + // insert to the beginning of the list + if (this.head !== null) { + // new item <- first item + this.head.prev = item; + + // new item -> first item + item.next = this.head; + } else { + // if list has no head, then it also has no tail + // in this case tail points to the new item + this.tail = item; + } + + // head always points to new item + this.head = item; + + return this; + }; + + List$6.prototype.prependData = function(data) { + return this.prepend(createItem(data)); + }; + + List$6.prototype.append = function(item) { + return this.insert(item); + }; + + List$6.prototype.appendData = function(data) { + return this.insert(createItem(data)); + }; + + List$6.prototype.insert = function(item, before) { + if (before !== undefined && before !== null) { + // prev before + // ^ + // item + this.updateCursors(before.prev, item, before, item); + + if (before.prev === null) { + // insert to the beginning of list + if (this.head !== before) { + throw new Error('before doesn\'t belong to list'); + } + + // since head points to before therefore list doesn't empty + // no need to check tail + this.head = item; + before.prev = item; + item.next = before; + + this.updateCursors(null, item); + } else { + + // insert between two items + before.prev.next = item; + item.prev = before.prev; + + before.prev = item; + item.next = before; + } + } else { + // tail + // ^ + // item + this.updateCursors(this.tail, item, null, item); + + // insert to the ending of the list + if (this.tail !== null) { + // last item -> new item + this.tail.next = item; + + // last item <- new item + item.prev = this.tail; + } else { + // if list has no tail, then it also has no head + // in this case head points to new item + this.head = item; + } + + // tail always points to new item + this.tail = item; + } + + return this; + }; + + List$6.prototype.insertData = function(data, before) { + return this.insert(createItem(data), before); + }; + + List$6.prototype.remove = function(item) { + // item + // ^ + // prev next + this.updateCursors(item, item.prev, item, item.next); + + if (item.prev !== null) { + item.prev.next = item.next; + } else { + if (this.head !== item) { + throw new Error('item doesn\'t belong to list'); + } + + this.head = item.next; + } + + if (item.next !== null) { + item.next.prev = item.prev; + } else { + if (this.tail !== item) { + throw new Error('item doesn\'t belong to list'); + } + + this.tail = item.prev; + } + + item.prev = null; + item.next = null; + + return item; + }; + + List$6.prototype.push = function(data) { + this.insert(createItem(data)); + }; + + List$6.prototype.pop = function() { + if (this.tail !== null) { + return this.remove(this.tail); + } + }; + + List$6.prototype.unshift = function(data) { + this.prepend(createItem(data)); + }; + + List$6.prototype.shift = function() { + if (this.head !== null) { + return this.remove(this.head); + } + }; + + List$6.prototype.prependList = function(list) { + return this.insertList(list, this.head); + }; + + List$6.prototype.appendList = function(list) { + return this.insertList(list); + }; + + List$6.prototype.insertList = function(list, before) { + // ignore empty lists + if (list.head === null) { + return this; + } + + if (before !== undefined && before !== null) { + this.updateCursors(before.prev, list.tail, before, list.head); + + // insert in the middle of dist list + if (before.prev !== null) { + // before.prev <-> list.head + before.prev.next = list.head; + list.head.prev = before.prev; + } else { + this.head = list.head; + } + + before.prev = list.tail; + list.tail.next = before; + } else { + this.updateCursors(this.tail, list.tail, null, list.head); + + // insert to end of the list + if (this.tail !== null) { + // if destination list has a tail, then it also has a head, + // but head doesn't change + + // dest tail -> source head + this.tail.next = list.head; + + // dest tail <- source head + list.head.prev = this.tail; + } else { + // if list has no a tail, then it also has no a head + // in this case points head to new item + this.head = list.head; + } + + // tail always start point to new item + this.tail = list.tail; + } + + list.head = null; + list.tail = null; + + return this; + }; + + List$6.prototype.replace = function(oldItem, newItemOrList) { + if ('head' in newItemOrList) { + this.insertList(newItemOrList, oldItem); + } else { + this.insert(newItemOrList, oldItem); + } + + this.remove(oldItem); + }; + + var List_1 = List$6; + + var createCustomError$3 = function createCustomError(name, message) { + // use Object.create(), because some VMs prevent setting line/column otherwise + // (iOS Safari 10 even throws an exception) + var error = Object.create(SyntaxError.prototype); + var errorStack = new Error(); + + error.name = name; + error.message = message; + + Object.defineProperty(error, 'stack', { + get: function() { + return (errorStack.stack || '').replace(/^(.+\n){1,3}/, name + ': ' + message + '\n'); + } + }); + + return error; + }; + + var createCustomError$2 = createCustomError$3; + var MAX_LINE_LENGTH = 100; + var OFFSET_CORRECTION = 60; + var TAB_REPLACEMENT = ' '; + + function sourceFragment(error, extraLines) { + function processLines(start, end) { + return lines.slice(start, end).map(function(line, idx) { + var num = String(start + idx + 1); + + while (num.length < maxNumLength) { + num = ' ' + num; + } + + return num + ' |' + line; + }).join('\n'); + } + + var lines = error.source.split(/\r\n?|\n|\f/); + var line = error.line; + var column = error.column; + var startLine = Math.max(1, line - extraLines) - 1; + var endLine = Math.min(line + extraLines, lines.length + 1); + var maxNumLength = Math.max(4, String(endLine).length) + 1; + var cutLeft = 0; + + // column correction according to replaced tab before column + column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length; + + if (column > MAX_LINE_LENGTH) { + cutLeft = column - OFFSET_CORRECTION + 3; + column = OFFSET_CORRECTION - 2; + } + + for (var i = startLine; i <= endLine; i++) { + if (i >= 0 && i < lines.length) { + lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT); + lines[i] = + (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') + + lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) + + (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : ''); + } + } + + return [ + processLines(startLine, line), + new Array(column + maxNumLength + 2).join('-') + '^', + processLines(line, endLine) + ].filter(Boolean).join('\n'); + } + + var SyntaxError$4 = function(message, source, offset, line, column) { + var error = createCustomError$2('SyntaxError', message); + + error.source = source; + error.offset = offset; + error.line = line; + error.column = column; + + error.sourceFragment = function(extraLines) { + return sourceFragment(error, isNaN(extraLines) ? 0 : extraLines); + }; + Object.defineProperty(error, 'formattedMessage', { + get: function() { + return ( + 'Parse error: ' + error.message + '\n' + + sourceFragment(error, 2) + ); + } + }); + + // for backward capability + error.parseError = { + offset: offset, + line: line, + column: column + }; + + return error; + }; + + var _SyntaxError$1 = SyntaxError$4; + + // CSS Syntax Module Level 3 + // https://www.w3.org/TR/css-syntax-3/ + var TYPE$H = { + EOF: 0, // + Ident: 1, // + Function: 2, // + AtKeyword: 3, // + Hash: 4, // + String: 5, // + BadString: 6, // + Url: 7, // + BadUrl: 8, // + Delim: 9, // + Number: 10, // + Percentage: 11, // + Dimension: 12, // + WhiteSpace: 13, // + CDO: 14, // + CDC: 15, // + Colon: 16, // : + Semicolon: 17, // ; + Comma: 18, // , + LeftSquareBracket: 19, // <[-token> + RightSquareBracket: 20, // <]-token> + LeftParenthesis: 21, // <(-token> + RightParenthesis: 22, // <)-token> + LeftCurlyBracket: 23, // <{-token> + RightCurlyBracket: 24, // <}-token> + Comment: 25 + }; + + var NAME$3 = Object.keys(TYPE$H).reduce(function(result, key) { + result[TYPE$H[key]] = key; + return result; + }, {}); + + var _const = { + TYPE: TYPE$H, + NAME: NAME$3 + }; + + var EOF$1 = 0; + + // https://drafts.csswg.org/css-syntax-3/ + // § 4.2. Definitions + + // digit + // A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9). + function isDigit$5(code) { + return code >= 0x0030 && code <= 0x0039; + } + + // hex digit + // A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F), + // or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f). + function isHexDigit$4(code) { + return ( + isDigit$5(code) || // 0 .. 9 + (code >= 0x0041 && code <= 0x0046) || // A .. F + (code >= 0x0061 && code <= 0x0066) // a .. f + ); + } + + // uppercase letter + // A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z). + function isUppercaseLetter$1(code) { + return code >= 0x0041 && code <= 0x005A; + } + + // lowercase letter + // A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z). + function isLowercaseLetter(code) { + return code >= 0x0061 && code <= 0x007A; + } + + // letter + // An uppercase letter or a lowercase letter. + function isLetter(code) { + return isUppercaseLetter$1(code) || isLowercaseLetter(code); + } + + // non-ASCII code point + // A code point with a value equal to or greater than U+0080 . + function isNonAscii(code) { + return code >= 0x0080; + } + + // name-start code point + // A letter, a non-ASCII code point, or U+005F LOW LINE (_). + function isNameStart(code) { + return isLetter(code) || isNonAscii(code) || code === 0x005F; + } + + // name code point + // A name-start code point, a digit, or U+002D HYPHEN-MINUS (-). + function isName$2(code) { + return isNameStart(code) || isDigit$5(code) || code === 0x002D; + } + + // non-printable code point + // A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION, + // or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE. + function isNonPrintable(code) { + return ( + (code >= 0x0000 && code <= 0x0008) || + (code === 0x000B) || + (code >= 0x000E && code <= 0x001F) || + (code === 0x007F) + ); + } + + // newline + // U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition, + // as they are converted to U+000A LINE FEED during preprocessing. + // TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED + function isNewline$1(code) { + return code === 0x000A || code === 0x000D || code === 0x000C; + } + + // whitespace + // A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE. + function isWhiteSpace$2(code) { + return isNewline$1(code) || code === 0x0020 || code === 0x0009; + } + + // § 4.3.8. Check if two code points are a valid escape + function isValidEscape$2(first, second) { + // If the first code point is not U+005C REVERSE SOLIDUS (\), return false. + if (first !== 0x005C) { + return false; + } + + // Otherwise, if the second code point is a newline or EOF, return false. + if (isNewline$1(second) || second === EOF$1) { + return false; + } + + // Otherwise, return true. + return true; + } + + // § 4.3.9. Check if three code points would start an identifier + function isIdentifierStart$2(first, second, third) { + // Look at the first code point: + + // U+002D HYPHEN-MINUS + if (first === 0x002D) { + // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS, + // or the second and third code points are a valid escape, return true. Otherwise, return false. + return ( + isNameStart(second) || + second === 0x002D || + isValidEscape$2(second, third) + ); + } + + // name-start code point + if (isNameStart(first)) { + // Return true. + return true; + } + + // U+005C REVERSE SOLIDUS (\) + if (first === 0x005C) { + // If the first and second code points are a valid escape, return true. Otherwise, return false. + return isValidEscape$2(first, second); + } + + // anything else + // Return false. + return false; + } + + // § 4.3.10. Check if three code points would start a number + function isNumberStart$1(first, second, third) { + // Look at the first code point: + + // U+002B PLUS SIGN (+) + // U+002D HYPHEN-MINUS (-) + if (first === 0x002B || first === 0x002D) { + // If the second code point is a digit, return true. + if (isDigit$5(second)) { + return 2; + } + + // Otherwise, if the second code point is a U+002E FULL STOP (.) + // and the third code point is a digit, return true. + // Otherwise, return false. + return second === 0x002E && isDigit$5(third) ? 3 : 0; + } + + // U+002E FULL STOP (.) + if (first === 0x002E) { + // If the second code point is a digit, return true. Otherwise, return false. + return isDigit$5(second) ? 2 : 0; + } + + // digit + if (isDigit$5(first)) { + // Return true. + return 1; + } + + // anything else + // Return false. + return 0; + } + + // + // Misc + // + + // detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark) + function isBOM$2(code) { + // UTF-16BE + if (code === 0xFEFF) { + return 1; + } + + // UTF-16LE + if (code === 0xFFFE) { + return 1; + } + + return 0; + } + + // Fast code category + // + // https://drafts.csswg.org/css-syntax/#tokenizer-definitions + // > non-ASCII code point + // > A code point with a value equal to or greater than U+0080 + // > name-start code point + // > A letter, a non-ASCII code point, or U+005F LOW LINE (_). + // > name code point + // > A name-start code point, a digit, or U+002D HYPHEN-MINUS (-) + // That means only ASCII code points has a special meaning and we define a maps for 0..127 codes only + var CATEGORY = new Array(0x80); + charCodeCategory$1.Eof = 0x80; + charCodeCategory$1.WhiteSpace = 0x82; + charCodeCategory$1.Digit = 0x83; + charCodeCategory$1.NameStart = 0x84; + charCodeCategory$1.NonPrintable = 0x85; + + for (var i = 0; i < CATEGORY.length; i++) { + switch (true) { + case isWhiteSpace$2(i): + CATEGORY[i] = charCodeCategory$1.WhiteSpace; + break; + + case isDigit$5(i): + CATEGORY[i] = charCodeCategory$1.Digit; + break; + + case isNameStart(i): + CATEGORY[i] = charCodeCategory$1.NameStart; + break; + + case isNonPrintable(i): + CATEGORY[i] = charCodeCategory$1.NonPrintable; + break; + + default: + CATEGORY[i] = i || charCodeCategory$1.Eof; + } + } + + function charCodeCategory$1(code) { + return code < 0x80 ? CATEGORY[code] : charCodeCategory$1.NameStart; + } + var charCodeDefinitions$1 = { + isDigit: isDigit$5, + isHexDigit: isHexDigit$4, + isUppercaseLetter: isUppercaseLetter$1, + isLowercaseLetter: isLowercaseLetter, + isLetter: isLetter, + isNonAscii: isNonAscii, + isNameStart: isNameStart, + isName: isName$2, + isNonPrintable: isNonPrintable, + isNewline: isNewline$1, + isWhiteSpace: isWhiteSpace$2, + isValidEscape: isValidEscape$2, + isIdentifierStart: isIdentifierStart$2, + isNumberStart: isNumberStart$1, + + isBOM: isBOM$2, + charCodeCategory: charCodeCategory$1 + }; + + var charCodeDef = charCodeDefinitions$1; + var isDigit$4 = charCodeDef.isDigit; + var isHexDigit$3 = charCodeDef.isHexDigit; + var isUppercaseLetter = charCodeDef.isUppercaseLetter; + var isName$1 = charCodeDef.isName; + var isWhiteSpace$1 = charCodeDef.isWhiteSpace; + var isValidEscape$1 = charCodeDef.isValidEscape; + + function getCharCode(source, offset) { + return offset < source.length ? source.charCodeAt(offset) : 0; + } + + function getNewlineLength$1(source, offset, code) { + if (code === 13 /* \r */ && getCharCode(source, offset + 1) === 10 /* \n */) { + return 2; + } + + return 1; + } + + function cmpChar$5(testStr, offset, referenceCode) { + var code = testStr.charCodeAt(offset); + + // code.toLowerCase() for A..Z + if (isUppercaseLetter(code)) { + code = code | 32; + } + + return code === referenceCode; + } + + function cmpStr$6(testStr, start, end, referenceStr) { + if (end - start !== referenceStr.length) { + return false; + } + + if (start < 0 || end > testStr.length) { + return false; + } + + for (var i = start; i < end; i++) { + var testCode = testStr.charCodeAt(i); + var referenceCode = referenceStr.charCodeAt(i - start); + + // testCode.toLowerCase() for A..Z + if (isUppercaseLetter(testCode)) { + testCode = testCode | 32; + } + + if (testCode !== referenceCode) { + return false; + } + } + + return true; + } + + function findWhiteSpaceStart$1(source, offset) { + for (; offset >= 0; offset--) { + if (!isWhiteSpace$1(source.charCodeAt(offset))) { + break; + } + } + + return offset + 1; + } + + function findWhiteSpaceEnd$1(source, offset) { + for (; offset < source.length; offset++) { + if (!isWhiteSpace$1(source.charCodeAt(offset))) { + break; + } + } + + return offset; + } + + function findDecimalNumberEnd(source, offset) { + for (; offset < source.length; offset++) { + if (!isDigit$4(source.charCodeAt(offset))) { + break; + } + } + + return offset; + } + + // § 4.3.7. Consume an escaped code point + function consumeEscaped$1(source, offset) { + // It assumes that the U+005C REVERSE SOLIDUS (\) has already been consumed and + // that the next input code point has already been verified to be part of a valid escape. + offset += 2; + + // hex digit + if (isHexDigit$3(getCharCode(source, offset - 1))) { + // Consume as many hex digits as possible, but no more than 5. + // Note that this means 1-6 hex digits have been consumed in total. + for (var maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) { + if (!isHexDigit$3(getCharCode(source, offset))) { + break; + } + } + + // If the next input code point is whitespace, consume it as well. + var code = getCharCode(source, offset); + if (isWhiteSpace$1(code)) { + offset += getNewlineLength$1(source, offset, code); + } + } + + return offset; + } + + // §4.3.11. Consume a name + // Note: This algorithm does not do the verification of the first few code points that are necessary + // to ensure the returned code points would constitute an . If that is the intended use, + // ensure that the stream starts with an identifier before calling this algorithm. + function consumeName$1(source, offset) { + // Let result initially be an empty string. + // Repeatedly consume the next input code point from the stream: + for (; offset < source.length; offset++) { + var code = source.charCodeAt(offset); + + // name code point + if (isName$1(code)) { + // Append the code point to result. + continue; + } + + // the stream starts with a valid escape + if (isValidEscape$1(code, getCharCode(source, offset + 1))) { + // Consume an escaped code point. Append the returned code point to result. + offset = consumeEscaped$1(source, offset) - 1; + continue; + } + + // anything else + // Reconsume the current input code point. Return result. + break; + } + + return offset; + } + + // §4.3.12. Consume a number + function consumeNumber$5(source, offset) { + var code = source.charCodeAt(offset); + + // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-), + // consume it and append it to repr. + if (code === 0x002B || code === 0x002D) { + code = source.charCodeAt(offset += 1); + } + + // 3. While the next input code point is a digit, consume it and append it to repr. + if (isDigit$4(code)) { + offset = findDecimalNumberEnd(source, offset + 1); + code = source.charCodeAt(offset); + } + + // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then: + if (code === 0x002E && isDigit$4(source.charCodeAt(offset + 1))) { + // 4.1 Consume them. + // 4.2 Append them to repr. + code = source.charCodeAt(offset += 2); + + // 4.3 Set type to "number". + // TODO + + // 4.4 While the next input code point is a digit, consume it and append it to repr. + + offset = findDecimalNumberEnd(source, offset); + } + + // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E) + // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then: + if (cmpChar$5(source, offset, 101 /* e */)) { + var sign = 0; + code = source.charCodeAt(offset + 1); + + // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ... + if (code === 0x002D || code === 0x002B) { + sign = 1; + code = source.charCodeAt(offset + 2); + } + + // ... followed by a digit + if (isDigit$4(code)) { + // 5.1 Consume them. + // 5.2 Append them to repr. + + // 5.3 Set type to "number". + // TODO + + // 5.4 While the next input code point is a digit, consume it and append it to repr. + offset = findDecimalNumberEnd(source, offset + 1 + sign + 1); + } + } + + return offset; + } + + // § 4.3.14. Consume the remnants of a bad url + // ... its sole use is to consume enough of the input stream to reach a recovery point + // where normal tokenizing can resume. + function consumeBadUrlRemnants$1(source, offset) { + // Repeatedly consume the next input code point from the stream: + for (; offset < source.length; offset++) { + var code = source.charCodeAt(offset); + + // U+0029 RIGHT PARENTHESIS ()) + // EOF + if (code === 0x0029) { + // Return. + offset++; + break; + } + + if (isValidEscape$1(code, getCharCode(source, offset + 1))) { + // Consume an escaped code point. + // Note: This allows an escaped right parenthesis ("\)") to be encountered + // without ending the . This is otherwise identical to + // the "anything else" clause. + offset = consumeEscaped$1(source, offset); + } + } + + return offset; + } + + var utils$2 = { + consumeEscaped: consumeEscaped$1, + consumeName: consumeName$1, + consumeNumber: consumeNumber$5, + consumeBadUrlRemnants: consumeBadUrlRemnants$1, + + cmpChar: cmpChar$5, + cmpStr: cmpStr$6, + + getNewlineLength: getNewlineLength$1, + findWhiteSpaceStart: findWhiteSpaceStart$1, + findWhiteSpaceEnd: findWhiteSpaceEnd$1 + }; + + var constants$2 = _const; + var TYPE$G = constants$2.TYPE; + var NAME$2 = constants$2.NAME; + + var utils$1 = utils$2; + var cmpStr$5 = utils$1.cmpStr; + + var EOF = TYPE$G.EOF; + var WHITESPACE$c = TYPE$G.WhiteSpace; + var COMMENT$a = TYPE$G.Comment; + + var OFFSET_MASK$1 = 0x00FFFFFF; + var TYPE_SHIFT$1 = 24; + + var TokenStream$4 = function() { + this.offsetAndType = null; + this.balance = null; + + this.reset(); + }; + + TokenStream$4.prototype = { + reset: function() { + this.eof = false; + this.tokenIndex = -1; + this.tokenType = 0; + this.tokenStart = this.firstCharOffset; + this.tokenEnd = this.firstCharOffset; + }, + + lookupType: function(offset) { + offset += this.tokenIndex; + + if (offset < this.tokenCount) { + return this.offsetAndType[offset] >> TYPE_SHIFT$1; + } + + return EOF; + }, + lookupOffset: function(offset) { + offset += this.tokenIndex; + + if (offset < this.tokenCount) { + return this.offsetAndType[offset - 1] & OFFSET_MASK$1; + } + + return this.source.length; + }, + lookupValue: function(offset, referenceStr) { + offset += this.tokenIndex; + + if (offset < this.tokenCount) { + return cmpStr$5( + this.source, + this.offsetAndType[offset - 1] & OFFSET_MASK$1, + this.offsetAndType[offset] & OFFSET_MASK$1, + referenceStr + ); + } + + return false; + }, + getTokenStart: function(tokenIndex) { + if (tokenIndex === this.tokenIndex) { + return this.tokenStart; + } + + if (tokenIndex > 0) { + return tokenIndex < this.tokenCount + ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK$1 + : this.offsetAndType[this.tokenCount] & OFFSET_MASK$1; + } + + return this.firstCharOffset; + }, + + // TODO: -> skipUntilBalanced + getRawLength: function(startToken, mode) { + var cursor = startToken; + var balanceEnd; + var offset = this.offsetAndType[Math.max(cursor - 1, 0)] & OFFSET_MASK$1; + var type; + + loop: + for (; cursor < this.tokenCount; cursor++) { + balanceEnd = this.balance[cursor]; + + // stop scanning on balance edge that points to offset before start token + if (balanceEnd < startToken) { + break loop; + } + + type = this.offsetAndType[cursor] >> TYPE_SHIFT$1; + + // check token is stop type + switch (mode(type, this.source, offset)) { + case 1: + break loop; + + case 2: + cursor++; + break loop; + + default: + // fast forward to the end of balanced block + if (this.balance[balanceEnd] === cursor) { + cursor = balanceEnd; + } + + offset = this.offsetAndType[cursor] & OFFSET_MASK$1; + } + } + + return cursor - this.tokenIndex; + }, + isBalanceEdge: function(pos) { + return this.balance[this.tokenIndex] < pos; + }, + isDelim: function(code, offset) { + if (offset) { + return ( + this.lookupType(offset) === TYPE$G.Delim && + this.source.charCodeAt(this.lookupOffset(offset)) === code + ); + } + + return ( + this.tokenType === TYPE$G.Delim && + this.source.charCodeAt(this.tokenStart) === code + ); + }, + + getTokenValue: function() { + return this.source.substring(this.tokenStart, this.tokenEnd); + }, + getTokenLength: function() { + return this.tokenEnd - this.tokenStart; + }, + substrToCursor: function(start) { + return this.source.substring(start, this.tokenStart); + }, + + skipWS: function() { + for (var i = this.tokenIndex, skipTokenCount = 0; i < this.tokenCount; i++, skipTokenCount++) { + if ((this.offsetAndType[i] >> TYPE_SHIFT$1) !== WHITESPACE$c) { + break; + } + } + + if (skipTokenCount > 0) { + this.skip(skipTokenCount); + } + }, + skipSC: function() { + while (this.tokenType === WHITESPACE$c || this.tokenType === COMMENT$a) { + this.next(); + } + }, + skip: function(tokenCount) { + var next = this.tokenIndex + tokenCount; + + if (next < this.tokenCount) { + this.tokenIndex = next; + this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK$1; + next = this.offsetAndType[next]; + this.tokenType = next >> TYPE_SHIFT$1; + this.tokenEnd = next & OFFSET_MASK$1; + } else { + this.tokenIndex = this.tokenCount; + this.next(); + } + }, + next: function() { + var next = this.tokenIndex + 1; + + if (next < this.tokenCount) { + this.tokenIndex = next; + this.tokenStart = this.tokenEnd; + next = this.offsetAndType[next]; + this.tokenType = next >> TYPE_SHIFT$1; + this.tokenEnd = next & OFFSET_MASK$1; + } else { + this.tokenIndex = this.tokenCount; + this.eof = true; + this.tokenType = EOF; + this.tokenStart = this.tokenEnd = this.source.length; + } + }, + + forEachToken(fn) { + for (var i = 0, offset = this.firstCharOffset; i < this.tokenCount; i++) { + var start = offset; + var item = this.offsetAndType[i]; + var end = item & OFFSET_MASK$1; + var type = item >> TYPE_SHIFT$1; + + offset = end; + + fn(type, start, end, i); + } + }, + + dump() { + var tokens = new Array(this.tokenCount); + + this.forEachToken((type, start, end, index) => { + tokens[index] = { + idx: index, + type: NAME$2[type], + chunk: this.source.substring(start, end), + balance: this.balance[index] + }; + }); + + return tokens; + } + }; + + var TokenStream_1 = TokenStream$4; + + function noop$3(value) { + return value; + } + + function generateMultiplier(multiplier) { + if (multiplier.min === 0 && multiplier.max === 0) { + return '*'; + } + + if (multiplier.min === 0 && multiplier.max === 1) { + return '?'; + } + + if (multiplier.min === 1 && multiplier.max === 0) { + return multiplier.comma ? '#' : '+'; + } + + if (multiplier.min === 1 && multiplier.max === 1) { + return ''; + } + + return ( + (multiplier.comma ? '#' : '') + + (multiplier.min === multiplier.max + ? '{' + multiplier.min + '}' + : '{' + multiplier.min + ',' + (multiplier.max !== 0 ? multiplier.max : '') + '}' + ) + ); + } + + function generateTypeOpts(node) { + switch (node.type) { + case 'Range': + return ( + ' [' + + (node.min === null ? '-∞' : node.min) + + ',' + + (node.max === null ? '∞' : node.max) + + ']' + ); + + default: + throw new Error('Unknown node type `' + node.type + '`'); + } + } + + function generateSequence(node, decorate, forceBraces, compact) { + var combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' '; + var result = node.terms.map(function(term) { + return generate$2(term, decorate, forceBraces, compact); + }).join(combinator); + + if (node.explicit || forceBraces) { + result = (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]'); + } + + return result; + } + + function generate$2(node, decorate, forceBraces, compact) { + var result; + + switch (node.type) { + case 'Group': + result = + generateSequence(node, decorate, forceBraces, compact) + + (node.disallowEmpty ? '!' : ''); + break; + + case 'Multiplier': + // return since node is a composition + return ( + generate$2(node.term, decorate, forceBraces, compact) + + decorate(generateMultiplier(node), node) + ); + + case 'Type': + result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>'; + break; + + case 'Property': + result = '<\'' + node.name + '\'>'; + break; + + case 'Keyword': + result = node.name; + break; + + case 'AtKeyword': + result = '@' + node.name; + break; + + case 'Function': + result = node.name + '('; + break; + + case 'String': + case 'Token': + result = node.value; + break; + + case 'Comma': + result = ','; + break; + + default: + throw new Error('Unknown node type `' + node.type + '`'); + } + + return decorate(result, node); + } + + var generate_1 = function(node, options) { + var decorate = noop$3; + var forceBraces = false; + var compact = false; + + if (typeof options === 'function') { + decorate = options; + } else if (options) { + forceBraces = Boolean(options.forceBraces); + compact = Boolean(options.compact); + if (typeof options.decorate === 'function') { + decorate = options.decorate; + } + } + + return generate$2(node, decorate, forceBraces, compact); + }; + + const createCustomError$1 = createCustomError$3; + const generate$1 = generate_1; + const defaultLoc = { offset: 0, line: 1, column: 1 }; + + function locateMismatch(matchResult, node) { + const tokens = matchResult.tokens; + const longestMatch = matchResult.longestMatch; + const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null; + const badNode = mismatchNode !== node ? mismatchNode : null; + let mismatchOffset = 0; + let mismatchLength = 0; + let entries = 0; + let css = ''; + let start; + let end; + + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i].value; + + if (i === longestMatch) { + mismatchLength = token.length; + mismatchOffset = css.length; + } + + if (badNode !== null && tokens[i].node === badNode) { + if (i <= longestMatch) { + entries++; + } else { + entries = 0; + } + } + + css += token; + } + + if (longestMatch === tokens.length || entries > 1) { // last + start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css); + end = buildLoc(start); + } else { + start = fromLoc(badNode, 'start') || + buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset)); + end = fromLoc(badNode, 'end') || + buildLoc(start, css.substr(mismatchOffset, mismatchLength)); + } + + return { + css, + mismatchOffset, + mismatchLength, + start, + end + }; + } + + function fromLoc(node, point) { + const value = node && node.loc && node.loc[point]; + + if (value) { + return 'line' in value ? buildLoc(value) : value; + } + + return null; + } + + function buildLoc({ offset, line, column }, extra) { + const loc = { + offset, + line, + column + }; + + if (extra) { + const lines = extra.split(/\n|\r\n?|\f/); + + loc.offset += extra.length; + loc.line += lines.length - 1; + loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1; + } + + return loc; + } + + const SyntaxReferenceError$1 = function(type, referenceName) { + const error = createCustomError$1( + 'SyntaxReferenceError', + type + (referenceName ? ' `' + referenceName + '`' : '') + ); + + error.reference = referenceName; + + return error; + }; + + const SyntaxMatchError$1 = function(message, syntax, node, matchResult) { + const error = createCustomError$1('SyntaxMatchError', message); + const { + css, + mismatchOffset, + mismatchLength, + start, + end + } = locateMismatch(matchResult, node); + + error.rawMessage = message; + error.syntax = syntax ? generate$1(syntax) : ''; + error.css = css; + error.mismatchOffset = mismatchOffset; + error.mismatchLength = mismatchLength; + error.message = message + '\n' + + ' syntax: ' + error.syntax + '\n' + + ' value: ' + (css || '') + '\n' + + ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^'; + + Object.assign(error, start); + error.loc = { + source: (node && node.loc && node.loc.source) || '', + start, + end + }; + + return error; + }; + + var error = { + SyntaxReferenceError: SyntaxReferenceError$1, + SyntaxMatchError: SyntaxMatchError$1 + }; + + var hasOwnProperty$7 = Object.prototype.hasOwnProperty; + var keywords$1 = Object.create(null); + var properties$1 = Object.create(null); + var HYPHENMINUS$5 = 45; // '-'.charCodeAt() + + function isCustomProperty$1(str, offset) { + offset = offset || 0; + + return str.length - offset >= 2 && + str.charCodeAt(offset) === HYPHENMINUS$5 && + str.charCodeAt(offset + 1) === HYPHENMINUS$5; + } + + function getVendorPrefix(str, offset) { + offset = offset || 0; + + // verdor prefix should be at least 3 chars length + if (str.length - offset >= 3) { + // vendor prefix starts with hyper minus following non-hyper minus + if (str.charCodeAt(offset) === HYPHENMINUS$5 && + str.charCodeAt(offset + 1) !== HYPHENMINUS$5) { + // vendor prefix should contain a hyper minus at the ending + var secondDashIndex = str.indexOf('-', offset + 2); + + if (secondDashIndex !== -1) { + return str.substring(offset, secondDashIndex + 1); + } + } + } + + return ''; + } + + function getKeywordDescriptor(keyword) { + if (hasOwnProperty$7.call(keywords$1, keyword)) { + return keywords$1[keyword]; + } + + var name = keyword.toLowerCase(); + + if (hasOwnProperty$7.call(keywords$1, name)) { + return keywords$1[keyword] = keywords$1[name]; + } + + var custom = isCustomProperty$1(name, 0); + var vendor = !custom ? getVendorPrefix(name, 0) : ''; + + return keywords$1[keyword] = Object.freeze({ + basename: name.substr(vendor.length), + name: name, + vendor: vendor, + prefix: vendor, + custom: custom + }); + } + + function getPropertyDescriptor(property) { + if (hasOwnProperty$7.call(properties$1, property)) { + return properties$1[property]; + } + + var name = property; + var hack = property[0]; + + if (hack === '/') { + hack = property[1] === '/' ? '//' : '/'; + } else if (hack !== '_' && + hack !== '*' && + hack !== '$' && + hack !== '#' && + hack !== '+' && + hack !== '&') { + hack = ''; + } + + var custom = isCustomProperty$1(name, hack.length); + + // re-use result when possible (the same as for lower case) + if (!custom) { + name = name.toLowerCase(); + if (hasOwnProperty$7.call(properties$1, name)) { + return properties$1[property] = properties$1[name]; + } + } + + var vendor = !custom ? getVendorPrefix(name, hack.length) : ''; + var prefix = name.substr(0, hack.length + vendor.length); + + return properties$1[property] = Object.freeze({ + basename: name.substr(prefix.length), + name: name.substr(hack.length), + hack: hack, + vendor: vendor, + prefix: prefix, + custom: custom + }); + } + + var names$2 = { + keyword: getKeywordDescriptor, + property: getPropertyDescriptor, + isCustomProperty: isCustomProperty$1, + vendorPrefix: getVendorPrefix + }; + + var MIN_SIZE = 16 * 1024; + var SafeUint32Array = typeof Uint32Array !== 'undefined' ? Uint32Array : Array; // fallback on Array when TypedArray is not supported + + var adoptBuffer$2 = function adoptBuffer(buffer, size) { + if (buffer === null || buffer.length < size) { + return new SafeUint32Array(Math.max(size + 1024, MIN_SIZE)); + } + + return buffer; + }; + + var TokenStream$3 = TokenStream_1; + var adoptBuffer$1 = adoptBuffer$2; + + var constants$1 = _const; + var TYPE$F = constants$1.TYPE; + + var charCodeDefinitions = charCodeDefinitions$1; + var isNewline = charCodeDefinitions.isNewline; + var isName = charCodeDefinitions.isName; + var isValidEscape = charCodeDefinitions.isValidEscape; + var isNumberStart = charCodeDefinitions.isNumberStart; + var isIdentifierStart$1 = charCodeDefinitions.isIdentifierStart; + var charCodeCategory = charCodeDefinitions.charCodeCategory; + var isBOM$1 = charCodeDefinitions.isBOM; + + var utils = utils$2; + var cmpStr$4 = utils.cmpStr; + var getNewlineLength = utils.getNewlineLength; + var findWhiteSpaceEnd = utils.findWhiteSpaceEnd; + var consumeEscaped = utils.consumeEscaped; + var consumeName = utils.consumeName; + var consumeNumber$4 = utils.consumeNumber; + var consumeBadUrlRemnants = utils.consumeBadUrlRemnants; + + var OFFSET_MASK = 0x00FFFFFF; + var TYPE_SHIFT = 24; + + function tokenize$3(source, stream) { + function getCharCode(offset) { + return offset < sourceLength ? source.charCodeAt(offset) : 0; + } + + // § 4.3.3. Consume a numeric token + function consumeNumericToken() { + // Consume a number and let number be the result. + offset = consumeNumber$4(source, offset); + + // If the next 3 input code points would start an identifier, then: + if (isIdentifierStart$1(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) { + // Create a with the same value and type flag as number, and a unit set initially to the empty string. + // Consume a name. Set the ’s unit to the returned value. + // Return the . + type = TYPE$F.Dimension; + offset = consumeName(source, offset); + return; + } + + // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it. + if (getCharCode(offset) === 0x0025) { + // Create a with the same value as number, and return it. + type = TYPE$F.Percentage; + offset++; + return; + } + + // Otherwise, create a with the same value and type flag as number, and return it. + type = TYPE$F.Number; + } + + // § 4.3.4. Consume an ident-like token + function consumeIdentLikeToken() { + const nameStartOffset = offset; + + // Consume a name, and let string be the result. + offset = consumeName(source, offset); + + // If string’s value is an ASCII case-insensitive match for "url", + // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it. + if (cmpStr$4(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) { + // While the next two input code points are whitespace, consume the next input code point. + offset = findWhiteSpaceEnd(source, offset + 1); + + // If the next one or two input code points are U+0022 QUOTATION MARK ("), U+0027 APOSTROPHE ('), + // or whitespace followed by U+0022 QUOTATION MARK (") or U+0027 APOSTROPHE ('), + // then create a with its value set to string and return it. + if (getCharCode(offset) === 0x0022 || + getCharCode(offset) === 0x0027) { + type = TYPE$F.Function; + offset = nameStartOffset + 4; + return; + } + + // Otherwise, consume a url token, and return it. + consumeUrlToken(); + return; + } + + // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it. + // Create a with its value set to string and return it. + if (getCharCode(offset) === 0x0028) { + type = TYPE$F.Function; + offset++; + return; + } + + // Otherwise, create an with its value set to string and return it. + type = TYPE$F.Ident; + } + + // § 4.3.5. Consume a string token + function consumeStringToken(endingCodePoint) { + // This algorithm may be called with an ending code point, which denotes the code point + // that ends the string. If an ending code point is not specified, + // the current input code point is used. + if (!endingCodePoint) { + endingCodePoint = getCharCode(offset++); + } + + // Initially create a with its value set to the empty string. + type = TYPE$F.String; + + // Repeatedly consume the next input code point from the stream: + for (; offset < source.length; offset++) { + var code = source.charCodeAt(offset); + + switch (charCodeCategory(code)) { + // ending code point + case endingCodePoint: + // Return the . + offset++; + return; + + // EOF + case charCodeCategory.Eof: + // This is a parse error. Return the . + return; + + // newline + case charCodeCategory.WhiteSpace: + if (isNewline(code)) { + // This is a parse error. Reconsume the current input code point, + // create a , and return it. + offset += getNewlineLength(source, offset, code); + type = TYPE$F.BadString; + return; + } + break; + + // U+005C REVERSE SOLIDUS (\) + case 0x005C: + // If the next input code point is EOF, do nothing. + if (offset === source.length - 1) { + break; + } + + var nextCode = getCharCode(offset + 1); + + // Otherwise, if the next input code point is a newline, consume it. + if (isNewline(nextCode)) { + offset += getNewlineLength(source, offset + 1, nextCode); + } else if (isValidEscape(code, nextCode)) { + // Otherwise, (the stream starts with a valid escape) consume + // an escaped code point and append the returned code point to + // the ’s value. + offset = consumeEscaped(source, offset) - 1; + } + break; + + // anything else + // Append the current input code point to the ’s value. + } + } + } + + // § 4.3.6. Consume a url token + // Note: This algorithm assumes that the initial "url(" has already been consumed. + // This algorithm also assumes that it’s being called to consume an "unquoted" value, like url(foo). + // A quoted value, like url("foo"), is parsed as a . Consume an ident-like token + // automatically handles this distinction; this algorithm shouldn’t be called directly otherwise. + function consumeUrlToken() { + // Initially create a with its value set to the empty string. + type = TYPE$F.Url; + + // Consume as much whitespace as possible. + offset = findWhiteSpaceEnd(source, offset); + + // Repeatedly consume the next input code point from the stream: + for (; offset < source.length; offset++) { + var code = source.charCodeAt(offset); + + switch (charCodeCategory(code)) { + // U+0029 RIGHT PARENTHESIS ()) + case 0x0029: + // Return the . + offset++; + return; + + // EOF + case charCodeCategory.Eof: + // This is a parse error. Return the . + return; + + // whitespace + case charCodeCategory.WhiteSpace: + // Consume as much whitespace as possible. + offset = findWhiteSpaceEnd(source, offset); + + // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF, + // consume it and return the + // (if EOF was encountered, this is a parse error); + if (getCharCode(offset) === 0x0029 || offset >= source.length) { + if (offset < source.length) { + offset++; + } + return; + } + + // otherwise, consume the remnants of a bad url, create a , + // and return it. + offset = consumeBadUrlRemnants(source, offset); + type = TYPE$F.BadUrl; + return; + + // U+0022 QUOTATION MARK (") + // U+0027 APOSTROPHE (') + // U+0028 LEFT PARENTHESIS (() + // non-printable code point + case 0x0022: + case 0x0027: + case 0x0028: + case charCodeCategory.NonPrintable: + // This is a parse error. Consume the remnants of a bad url, + // create a , and return it. + offset = consumeBadUrlRemnants(source, offset); + type = TYPE$F.BadUrl; + return; + + // U+005C REVERSE SOLIDUS (\) + case 0x005C: + // If the stream starts with a valid escape, consume an escaped code point and + // append the returned code point to the ’s value. + if (isValidEscape(code, getCharCode(offset + 1))) { + offset = consumeEscaped(source, offset) - 1; + break; + } + + // Otherwise, this is a parse error. Consume the remnants of a bad url, + // create a , and return it. + offset = consumeBadUrlRemnants(source, offset); + type = TYPE$F.BadUrl; + return; + + // anything else + // Append the current input code point to the ’s value. + } + } + } + + if (!stream) { + stream = new TokenStream$3(); + } + + // ensure source is a string + source = String(source || ''); + + var sourceLength = source.length; + var offsetAndType = adoptBuffer$1(stream.offsetAndType, sourceLength + 1); // +1 because of eof-token + var balance = adoptBuffer$1(stream.balance, sourceLength + 1); + var tokenCount = 0; + var start = isBOM$1(getCharCode(0)); + var offset = start; + var balanceCloseType = 0; + var balanceStart = 0; + var balancePrev = 0; + + // https://drafts.csswg.org/css-syntax-3/#consume-token + // § 4.3.1. Consume a token + while (offset < sourceLength) { + var code = source.charCodeAt(offset); + var type = 0; + + balance[tokenCount] = sourceLength; + + switch (charCodeCategory(code)) { + // whitespace + case charCodeCategory.WhiteSpace: + // Consume as much whitespace as possible. Return a . + type = TYPE$F.WhiteSpace; + offset = findWhiteSpaceEnd(source, offset + 1); + break; + + // U+0022 QUOTATION MARK (") + case 0x0022: + // Consume a string token and return it. + consumeStringToken(); + break; + + // U+0023 NUMBER SIGN (#) + case 0x0023: + // If the next input code point is a name code point or the next two input code points are a valid escape, then: + if (isName(getCharCode(offset + 1)) || isValidEscape(getCharCode(offset + 1), getCharCode(offset + 2))) { + // Create a . + type = TYPE$F.Hash; + + // If the next 3 input code points would start an identifier, set the ’s type flag to "id". + // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) { + // // TODO: set id flag + // } + + // Consume a name, and set the ’s value to the returned string. + offset = consumeName(source, offset + 1); + + // Return the . + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + + break; + + // U+0027 APOSTROPHE (') + case 0x0027: + // Consume a string token and return it. + consumeStringToken(); + break; + + // U+0028 LEFT PARENTHESIS (() + case 0x0028: + // Return a <(-token>. + type = TYPE$F.LeftParenthesis; + offset++; + break; + + // U+0029 RIGHT PARENTHESIS ()) + case 0x0029: + // Return a <)-token>. + type = TYPE$F.RightParenthesis; + offset++; + break; + + // U+002B PLUS SIGN (+) + case 0x002B: + // If the input stream starts with a number, ... + if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) { + // ... reconsume the current input code point, consume a numeric token, and return it. + consumeNumericToken(); + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + break; + + // U+002C COMMA (,) + case 0x002C: + // Return a . + type = TYPE$F.Comma; + offset++; + break; + + // U+002D HYPHEN-MINUS (-) + case 0x002D: + // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it. + if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) { + consumeNumericToken(); + } else { + // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a . + if (getCharCode(offset + 1) === 0x002D && + getCharCode(offset + 2) === 0x003E) { + type = TYPE$F.CDC; + offset = offset + 3; + } else { + // Otherwise, if the input stream starts with an identifier, ... + if (isIdentifierStart$1(code, getCharCode(offset + 1), getCharCode(offset + 2))) { + // ... reconsume the current input code point, consume an ident-like token, and return it. + consumeIdentLikeToken(); + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + } + } + break; + + // U+002E FULL STOP (.) + case 0x002E: + // If the input stream starts with a number, ... + if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) { + // ... reconsume the current input code point, consume a numeric token, and return it. + consumeNumericToken(); + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + + break; + + // U+002F SOLIDUS (/) + case 0x002F: + // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*), + if (getCharCode(offset + 1) === 0x002A) { + // ... consume them and all following code points up to and including the first U+002A ASTERISK (*) + // followed by a U+002F SOLIDUS (/), or up to an EOF code point. + type = TYPE$F.Comment; + offset = source.indexOf('*/', offset + 2) + 2; + if (offset === 1) { + offset = source.length; + } + } else { + type = TYPE$F.Delim; + offset++; + } + break; + + // U+003A COLON (:) + case 0x003A: + // Return a . + type = TYPE$F.Colon; + offset++; + break; + + // U+003B SEMICOLON (;) + case 0x003B: + // Return a . + type = TYPE$F.Semicolon; + offset++; + break; + + // U+003C LESS-THAN SIGN (<) + case 0x003C: + // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ... + if (getCharCode(offset + 1) === 0x0021 && + getCharCode(offset + 2) === 0x002D && + getCharCode(offset + 3) === 0x002D) { + // ... consume them and return a . + type = TYPE$F.CDO; + offset = offset + 4; + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + + break; + + // U+0040 COMMERCIAL AT (@) + case 0x0040: + // If the next 3 input code points would start an identifier, ... + if (isIdentifierStart$1(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) { + // ... consume a name, create an with its value set to the returned value, and return it. + type = TYPE$F.AtKeyword; + offset = consumeName(source, offset + 1); + } else { + // Otherwise, return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + + break; + + // U+005B LEFT SQUARE BRACKET ([) + case 0x005B: + // Return a <[-token>. + type = TYPE$F.LeftSquareBracket; + offset++; + break; + + // U+005C REVERSE SOLIDUS (\) + case 0x005C: + // If the input stream starts with a valid escape, ... + if (isValidEscape(code, getCharCode(offset + 1))) { + // ... reconsume the current input code point, consume an ident-like token, and return it. + consumeIdentLikeToken(); + } else { + // Otherwise, this is a parse error. Return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + break; + + // U+005D RIGHT SQUARE BRACKET (]) + case 0x005D: + // Return a <]-token>. + type = TYPE$F.RightSquareBracket; + offset++; + break; + + // U+007B LEFT CURLY BRACKET ({) + case 0x007B: + // Return a <{-token>. + type = TYPE$F.LeftCurlyBracket; + offset++; + break; + + // U+007D RIGHT CURLY BRACKET (}) + case 0x007D: + // Return a <}-token>. + type = TYPE$F.RightCurlyBracket; + offset++; + break; + + // digit + case charCodeCategory.Digit: + // Reconsume the current input code point, consume a numeric token, and return it. + consumeNumericToken(); + break; + + // name-start code point + case charCodeCategory.NameStart: + // Reconsume the current input code point, consume an ident-like token, and return it. + consumeIdentLikeToken(); + break; + + // EOF + case charCodeCategory.Eof: + // Return an . + break; + + // anything else + default: + // Return a with its value set to the current input code point. + type = TYPE$F.Delim; + offset++; + } + + switch (type) { + case balanceCloseType: + balancePrev = balanceStart & OFFSET_MASK; + balanceStart = balance[balancePrev]; + balanceCloseType = balanceStart >> TYPE_SHIFT; + balance[tokenCount] = balancePrev; + balance[balancePrev++] = tokenCount; + for (; balancePrev < tokenCount; balancePrev++) { + if (balance[balancePrev] === sourceLength) { + balance[balancePrev] = tokenCount; + } + } + break; + + case TYPE$F.LeftParenthesis: + case TYPE$F.Function: + balance[tokenCount] = balanceStart; + balanceCloseType = TYPE$F.RightParenthesis; + balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount; + break; + + case TYPE$F.LeftSquareBracket: + balance[tokenCount] = balanceStart; + balanceCloseType = TYPE$F.RightSquareBracket; + balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount; + break; + + case TYPE$F.LeftCurlyBracket: + balance[tokenCount] = balanceStart; + balanceCloseType = TYPE$F.RightCurlyBracket; + balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount; + break; + } + + offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | offset; + } + + // finalize buffers + offsetAndType[tokenCount] = (TYPE$F.EOF << TYPE_SHIFT) | offset; // + balance[tokenCount] = sourceLength; + balance[sourceLength] = sourceLength; // prevents false positive balance match with any token + while (balanceStart !== 0) { + balancePrev = balanceStart & OFFSET_MASK; + balanceStart = balance[balancePrev]; + balance[balancePrev] = sourceLength; + } + + // update stream + stream.source = source; + stream.firstCharOffset = start; + stream.offsetAndType = offsetAndType; + stream.tokenCount = tokenCount; + stream.balance = balance; + stream.reset(); + stream.next(); + + return stream; + } + + // extend tokenizer with constants + Object.keys(constants$1).forEach(function(key) { + tokenize$3[key] = constants$1[key]; + }); + + // extend tokenizer with static methods from utils + Object.keys(charCodeDefinitions).forEach(function(key) { + tokenize$3[key] = charCodeDefinitions[key]; + }); + Object.keys(utils).forEach(function(key) { + tokenize$3[key] = utils[key]; + }); + + var tokenizer$3 = tokenize$3; + + var isDigit$3 = tokenizer$3.isDigit; + var cmpChar$4 = tokenizer$3.cmpChar; + var TYPE$E = tokenizer$3.TYPE; + + var DELIM$6 = TYPE$E.Delim; + var WHITESPACE$b = TYPE$E.WhiteSpace; + var COMMENT$9 = TYPE$E.Comment; + var IDENT$i = TYPE$E.Ident; + var NUMBER$9 = TYPE$E.Number; + var DIMENSION$7 = TYPE$E.Dimension; + var PLUSSIGN$8 = 0x002B; // U+002B PLUS SIGN (+) + var HYPHENMINUS$4 = 0x002D; // U+002D HYPHEN-MINUS (-) + var N$4 = 0x006E; // U+006E LATIN SMALL LETTER N (n) + var DISALLOW_SIGN$1 = true; + var ALLOW_SIGN$1 = false; + + function isDelim$1(token, code) { + return token !== null && token.type === DELIM$6 && token.value.charCodeAt(0) === code; + } + + function skipSC(token, offset, getNextToken) { + while (token !== null && (token.type === WHITESPACE$b || token.type === COMMENT$9)) { + token = getNextToken(++offset); + } + + return offset; + } + + function checkInteger$1(token, valueOffset, disallowSign, offset) { + if (!token) { + return 0; + } + + var code = token.value.charCodeAt(valueOffset); + + if (code === PLUSSIGN$8 || code === HYPHENMINUS$4) { + if (disallowSign) { + // Number sign is not allowed + return 0; + } + valueOffset++; + } + + for (; valueOffset < token.value.length; valueOffset++) { + if (!isDigit$3(token.value.charCodeAt(valueOffset))) { + // Integer is expected + return 0; + } + } + + return offset + 1; + } + + // ... + // ... ['+' | '-'] + function consumeB$1(token, offset_, getNextToken) { + var sign = false; + var offset = skipSC(token, offset_, getNextToken); + + token = getNextToken(offset); + + if (token === null) { + return offset_; + } + + if (token.type !== NUMBER$9) { + if (isDelim$1(token, PLUSSIGN$8) || isDelim$1(token, HYPHENMINUS$4)) { + sign = true; + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + if (token === null && token.type !== NUMBER$9) { + return 0; + } + } else { + return offset_; + } + } + + if (!sign) { + var code = token.value.charCodeAt(0); + if (code !== PLUSSIGN$8 && code !== HYPHENMINUS$4) { + // Number sign is expected + return 0; + } + } + + return checkInteger$1(token, sign ? 0 : 1, sign, offset); + } + + // An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb + var genericAnPlusB = function anPlusB(token, getNextToken) { + /* eslint-disable brace-style*/ + var offset = 0; + + if (!token) { + return 0; + } + + // + if (token.type === NUMBER$9) { + return checkInteger$1(token, 0, ALLOW_SIGN$1, offset); // b + } + + // -n + // -n + // -n ['+' | '-'] + // -n- + // + else if (token.type === IDENT$i && token.value.charCodeAt(0) === HYPHENMINUS$4) { + // expect 1st char is N + if (!cmpChar$4(token.value, 1, N$4)) { + return 0; + } + + switch (token.value.length) { + // -n + // -n + // -n ['+' | '-'] + case 2: + return consumeB$1(getNextToken(++offset), offset, getNextToken); + + // -n- + case 3: + if (token.value.charCodeAt(2) !== HYPHENMINUS$4) { + return 0; + } + + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger$1(token, 0, DISALLOW_SIGN$1, offset); + + // + default: + if (token.value.charCodeAt(2) !== HYPHENMINUS$4) { + return 0; + } + + return checkInteger$1(token, 3, DISALLOW_SIGN$1, offset); + } + } + + // '+'? n + // '+'? n + // '+'? n ['+' | '-'] + // '+'? n- + // '+'? + else if (token.type === IDENT$i || (isDelim$1(token, PLUSSIGN$8) && getNextToken(offset + 1).type === IDENT$i)) { + // just ignore a plus + if (token.type !== IDENT$i) { + token = getNextToken(++offset); + } + + if (token === null || !cmpChar$4(token.value, 0, N$4)) { + return 0; + } + + switch (token.value.length) { + // '+'? n + // '+'? n + // '+'? n ['+' | '-'] + case 1: + return consumeB$1(getNextToken(++offset), offset, getNextToken); + + // '+'? n- + case 2: + if (token.value.charCodeAt(1) !== HYPHENMINUS$4) { + return 0; + } + + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger$1(token, 0, DISALLOW_SIGN$1, offset); + + // '+'? + default: + if (token.value.charCodeAt(1) !== HYPHENMINUS$4) { + return 0; + } + + return checkInteger$1(token, 2, DISALLOW_SIGN$1, offset); + } + } + + // + // + // + // + // ['+' | '-'] + else if (token.type === DIMENSION$7) { + var code = token.value.charCodeAt(0); + var sign = code === PLUSSIGN$8 || code === HYPHENMINUS$4 ? 1 : 0; + + for (var i = sign; i < token.value.length; i++) { + if (!isDigit$3(token.value.charCodeAt(i))) { + break; + } + } + + if (i === sign) { + // Integer is expected + return 0; + } + + if (!cmpChar$4(token.value, i, N$4)) { + return 0; + } + + // + // + // ['+' | '-'] + if (i + 1 === token.value.length) { + return consumeB$1(getNextToken(++offset), offset, getNextToken); + } else { + if (token.value.charCodeAt(i + 1) !== HYPHENMINUS$4) { + return 0; + } + + // + if (i + 2 === token.value.length) { + offset = skipSC(getNextToken(++offset), offset, getNextToken); + token = getNextToken(offset); + + return checkInteger$1(token, 0, DISALLOW_SIGN$1, offset); + } + // + else { + return checkInteger$1(token, i + 2, DISALLOW_SIGN$1, offset); + } + } + } + + return 0; + }; + + var isHexDigit$2 = tokenizer$3.isHexDigit; + var cmpChar$3 = tokenizer$3.cmpChar; + var TYPE$D = tokenizer$3.TYPE; + + var IDENT$h = TYPE$D.Ident; + var DELIM$5 = TYPE$D.Delim; + var NUMBER$8 = TYPE$D.Number; + var DIMENSION$6 = TYPE$D.Dimension; + var PLUSSIGN$7 = 0x002B; // U+002B PLUS SIGN (+) + var HYPHENMINUS$3 = 0x002D; // U+002D HYPHEN-MINUS (-) + var QUESTIONMARK$2 = 0x003F; // U+003F QUESTION MARK (?) + var U$2 = 0x0075; // U+0075 LATIN SMALL LETTER U (u) + + function isDelim(token, code) { + return token !== null && token.type === DELIM$5 && token.value.charCodeAt(0) === code; + } + + function startsWith$1(token, code) { + return token.value.charCodeAt(0) === code; + } + + function hexSequence(token, offset, allowDash) { + for (var pos = offset, hexlen = 0; pos < token.value.length; pos++) { + var code = token.value.charCodeAt(pos); + + if (code === HYPHENMINUS$3 && allowDash && hexlen !== 0) { + if (hexSequence(token, offset + hexlen + 1, false) > 0) { + return 6; // dissallow following question marks + } + + return 0; // dash at the ending of a hex sequence is not allowed + } + + if (!isHexDigit$2(code)) { + return 0; // not a hex digit + } + + if (++hexlen > 6) { + return 0; // too many hex digits + } } + + return hexlen; + } + + function withQuestionMarkSequence(consumed, length, getNextToken) { + if (!consumed) { + return 0; // nothing consumed + } + + while (isDelim(getNextToken(length), QUESTIONMARK$2)) { + if (++consumed > 6) { + return 0; // too many question marks + } + + length++; + } + + return length; + } + + // https://drafts.csswg.org/css-syntax/#urange + // Informally, the production has three forms: + // U+0001 + // Defines a range consisting of a single code point, in this case the code point "1". + // U+0001-00ff + // Defines a range of codepoints between the first and the second value, in this case + // the range between "1" and "ff" (255 in decimal) inclusive. + // U+00?? + // Defines a range of codepoints where the "?" characters range over all hex digits, + // in this case defining the same as the value U+0000-00ff. + // In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat "?" as a hexadecimal digit). + // + // = + // u '+' '?'* | + // u '?'* | + // u '?'* | + // u | + // u | + // u '+' '?'+ + var genericUrange = function urange(token, getNextToken) { + var length = 0; + + // should start with `u` or `U` + if (token === null || token.type !== IDENT$h || !cmpChar$3(token.value, 0, U$2)) { + return 0; + } + + token = getNextToken(++length); + if (token === null) { + return 0; + } + + // u '+' '?'* + // u '+' '?'+ + if (isDelim(token, PLUSSIGN$7)) { + token = getNextToken(++length); + if (token === null) { + return 0; + } + + if (token.type === IDENT$h) { + // u '+' '?'* + return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken); + } + + if (isDelim(token, QUESTIONMARK$2)) { + // u '+' '?'+ + return withQuestionMarkSequence(1, ++length, getNextToken); + } + + // Hex digit or question mark is expected + return 0; + } + + // u '?'* + // u + // u + if (token.type === NUMBER$8) { + if (!startsWith$1(token, PLUSSIGN$7)) { + return 0; + } + + var consumedHexLength = hexSequence(token, 1, true); + if (consumedHexLength === 0) { + return 0; + } + + token = getNextToken(++length); + if (token === null) { + // u + return length; + } + + if (token.type === DIMENSION$6 || token.type === NUMBER$8) { + // u + // u + if (!startsWith$1(token, HYPHENMINUS$3) || !hexSequence(token, 1, false)) { + return 0; + } + + return length + 1; + } + + // u '?'* + return withQuestionMarkSequence(consumedHexLength, length, getNextToken); + } + + // u '?'* + if (token.type === DIMENSION$6) { + if (!startsWith$1(token, PLUSSIGN$7)) { + return 0; + } + + return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken); + } + + return 0; + }; + + var tokenizer$2 = tokenizer$3; + var isIdentifierStart = tokenizer$2.isIdentifierStart; + var isHexDigit$1 = tokenizer$2.isHexDigit; + var isDigit$2 = tokenizer$2.isDigit; + var cmpStr$3 = tokenizer$2.cmpStr; + var consumeNumber$3 = tokenizer$2.consumeNumber; + var TYPE$C = tokenizer$2.TYPE; + var anPlusB = genericAnPlusB; + var urange = genericUrange; + + var cssWideKeywords$1 = ['unset', 'initial', 'inherit']; + var calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc(']; + + // https://www.w3.org/TR/css-values-3/#lengths + var LENGTH = { + // absolute length units + 'px': true, + 'mm': true, + 'cm': true, + 'in': true, + 'pt': true, + 'pc': true, + 'q': true, + + // relative length units + 'em': true, + 'ex': true, + 'ch': true, + 'rem': true, + + // viewport-percentage lengths + 'vh': true, + 'vw': true, + 'vmin': true, + 'vmax': true, + 'vm': true + }; + + var ANGLE = { + 'deg': true, + 'grad': true, + 'rad': true, + 'turn': true + }; + + var TIME = { + 's': true, + 'ms': true + }; + + var FREQUENCY = { + 'hz': true, + 'khz': true + }; + + // https://www.w3.org/TR/css-values-3/#resolution (https://drafts.csswg.org/css-values/#resolution) + var RESOLUTION = { + 'dpi': true, + 'dpcm': true, + 'dppx': true, + 'x': true // https://github.com/w3c/csswg-drafts/issues/461 + }; + + // https://drafts.csswg.org/css-grid/#fr-unit + var FLEX = { + 'fr': true + }; + + // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume + var DECIBEL = { + 'db': true + }; + + // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch + var SEMITONES = { + 'st': true + }; + + // safe char code getter + function charCode(str, index) { + return index < str.length ? str.charCodeAt(index) : 0; + } + + function eqStr(actual, expected) { + return cmpStr$3(actual, 0, actual.length, expected); + } + + function eqStrAny(actual, expected) { + for (var i = 0; i < expected.length; i++) { + if (eqStr(actual, expected[i])) { + return true; + } + } + + return false; + } + + // IE postfix hack, i.e. 123\0 or 123px\9 + function isPostfixIeHack(str, offset) { + if (offset !== str.length - 2) { + return false; + } + + return ( + str.charCodeAt(offset) === 0x005C && // U+005C REVERSE SOLIDUS (\) + isDigit$2(str.charCodeAt(offset + 1)) + ); + } + + function outOfRange(opts, value, numEnd) { + if (opts && opts.type === 'Range') { + var num = Number( + numEnd !== undefined && numEnd !== value.length + ? value.substr(0, numEnd) + : value + ); + + if (isNaN(num)) { + return true; + } + + if (opts.min !== null && num < opts.min) { + return true; + } + + if (opts.max !== null && num > opts.max) { + return true; + } + } + + return false; + } + + function consumeFunction(token, getNextToken) { + var startIdx = token.index; + var length = 0; + + // balanced token consuming + do { + length++; + + if (token.balance <= startIdx) { + break; + } + } while (token = getNextToken(length)); + + return length; + } + + // TODO: implement + // can be used wherever , , ,