UNPKG

silegismg-interpretador-articulacao

Version:
101 lines (100 loc) 5.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /* Copyright 2017 Assembleia Legislativa de Minas Gerais * * This file is part of Interpretador-Articulacao. * * Interpretador-Articulacao is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3. * * Interpretador-Articulacao is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Interpretador-Articulacao. If not, see <http://www.gnu.org/licenses/>. */ const agrupadores_1 = require("../dispositivos/agrupadores"); const Escapamento_1 = __importDefault(require("./escapamento/Escapamento")); const EscapeAspas_1 = require("./escapamento/impl/EscapeAspas"); const Contexto_1 = __importDefault(require("./parsers/Contexto")); const ParserAlinea_1 = __importDefault(require("./parsers/ParserAlinea")); const ParserArtigo_1 = __importDefault(require("./parsers/ParserArtigo")); const ParserCapitulo_1 = __importDefault(require("./parsers/ParserCapitulo")); const ParserContinuacaoDivisao_1 = __importDefault(require("./parsers/ParserContinuacaoDivisao")); const ParserInciso_1 = __importDefault(require("./parsers/ParserInciso")); const ParserItem_1 = __importDefault(require("./parsers/ParserItem")); const ParserParagrafo_1 = __importDefault(require("./parsers/ParserParagrafo")); const ParserSecao_1 = __importDefault(require("./parsers/ParserSecao")); const ParserSubsecao_1 = __importDefault(require("./parsers/ParserSubsecao")); const ParserTitulo_1 = __importDefault(require("./parsers/ParserTitulo")); /** * Interpreta conteúdo de articulação. * * @param {String} textoOriginal Texto a ser interpretado. * @returns {IArticulacaoInterpretada} Resultado da interpretação. */ function interpretarArticulacao(textoOriginal, opcoes = {}) { var _a, _b; const contexto = new Contexto_1.default(); const regexpLinhas = [ ...((_a = opcoes.parsersExtras) !== null && _a !== void 0 ? _a : []), new ParserContinuacaoDivisao_1.default(), new ParserArtigo_1.default(), new ParserParagrafo_1.default(), new ParserInciso_1.default(), new ParserAlinea_1.default(), new ParserItem_1.default(), new ParserTitulo_1.default(), new ParserCapitulo_1.default(), new ParserSecao_1.default(), new ParserSubsecao_1.default() ]; /* Para cada citação, isto é, texto entre aspas, substitui-se o seu conteúdo * por \0 e o conteúdo substituído é inserido na pilha de aspas, para evitar * que o conteúdo seja também interpretado. */ const escapamento = new Escapamento_1.default(textoOriginal.replace(/\s*\n+\s*/g, '\n'), new EscapeAspas_1.EscapeAspas(), ...((_b = opcoes.escapesExtras) !== null && _b !== void 0 ? _b : [])); for (const linhaSemEscapes of escapamento.processar()) { if (regexpLinhas.find((regexp) => regexp.processar(contexto, linhaSemEscapes))) { const item = contexto.ultimoItem; // Desfaz os escapes. item.descricao = escapamento.desfazerEscapes(item.descricao); } else { const linha = escapamento.desfazerEscapes(); if (contexto.ultimoItem) { // Como não foi possível processar, inclui a linha inteira no dispositivo atual. if (/[.:;!?$][)]?$/.test(contexto.ultimoItem.descricao) || linha.startsWith('(')) { contexto.ultimoItem.descricao += '\n' + linha; } else { contexto.ultimoItem.descricao += ' ' + linha; } } else if (contexto.articulacao.length > 0 && contexto.articulacao[contexto.articulacao.length - 1] instanceof agrupadores_1.Divisao) { // TODO: Rever! Isto aqui ainda é alcansável? Se for, explicar! contexto.articulacao[contexto.articulacao.length - 1].descricao += '\n' + linha; } else if (contexto.textoAnterior.length === 0) { // Como não foi possível processar, registramos como texto anterior à articulação. contexto.textoAnterior = linha; } else { // Como não foi possível processar, acrescentamos no texto anterior à articulação. contexto.textoAnterior += '\n' + linha; } } } return { textoAnterior: contexto.textoAnterior, articulacao: contexto.articulacao }; } exports.default = interpretarArticulacao;