/** * */ var resetResult; var lsentid; var lisid; const formaClass = 'frm' var vistaPeriodi = false var vistaDialoghi = false var vistaRiferimenti = true var listaPeriodiRisultato; var listaClausoleRisultato; var numeroContesti; const hdnNamespace = 'http://dantenetwork.it/data/commedia/' const syntitNamespace = 'https://dantenetwork.it/ontology/syntit/current/' $(document).ready(function() { removeGraph = false; const dialogspeakers = { "Beatrice": "diaBeatrice", "Dante": "diaDante", "Virgilio": "diaVirgilio", "Cacciaguida": "diaCacciaguida", "san Bernardo": "diaSanBernardo" } const dialogaltri = 'diaAltri' var listaClausoleRisultatoContesti = [] const cantobadgeclass = 'badge badge-outline-warning badge-pill' const sparqlGenerator = sparqljs.Generator; const myEngine = new Comunica.QueryEngine(); //const sparqlEndpoint = "https://hdnlab1.isti.cnr.it/fuseki/commediaontosintgra/query"; const sparqlEndpoint = "https://hdnlab1.isti.cnr.it/fuseki/commedia/query"; var shownSentenceList = new Set() listarisultati = []; listaPeriodiRisultato = []; listaClausoleRisultato = [] var commentsArray = [] var commentsJson = {} var resultSentences = new Set() const cantiche = ["Inferno", "Purgatorio", "Paradiso"] var loadedCanti = new Set(); const openSTag = "{" const closeSTag = "}" var cantoDisplayed = "#InfernoCanto_1"; var prevCantoDisplayed = "#InfernoCanto_1"; var contextLength = 3; var showOffset = 30; var idCitazione = "citazioneFrase"; // console.log(getAutoriFontiCitazioni()) // console.log(getCommentatori()) initCitazioni(); resetResult = function() { //console.log('clean result') cleanSearchResult() esprlogica = [] } //hideMinimap(); createAllDivCanti() //const start = performance.now(); showCanto(formeprima, '1', '1') $("#InfernoCanto_1").attr('style', 'display: d-flex;') loadedCanti.add("InfernoCanto_1") drawMinimap("#InfernoCanto_1", false) const minim = $(" .minimap__content") $('#opzioniVista :checkbox').change(function() { changedOption = $(this)[0].id; switch (changedOption + "|" + this.checked) { case "visPeriodi|true": vistaPeriodi = true loadFrasi(); break; case "visPeriodi|false": $("#vistaFrasi").css("display", "none"); resetFrasi() vistaPeriodi = false break; case "visRiferimenti|true": vistaRiferimenti = true initCitazioni() $(cantoDisplayed).find(" .showcomments").each(function() { $(this).css("display", "inline-block"); }) //$(" .showcomments").css("display", "inline-block"); minim.contents().find(" .showcomments").each(function() { $(this).css('display', 'inline-block'); }) break; case "visRiferimenti|false": $(cantoDisplayed).find(" .showcomments").each(function() { $(this).css("display", "none"); }) //$(".showcomments").css("display", "none"); minim.contents().find(" .showcomments").each(function() { $(this).css('display', 'none'); }) const emptyNoteList = '<div class="card card-body well well-sm m-1 mt-2 p-0" id="noteCard0"><span class="p-3 text-muted bg-lida-vis small" style="opacity: 0.6;">Nessun commento visualizzato</span></div>'; $('#displaynote').empty() $('#displaynote').append($(emptyNoteList)) vistaRiferimenti = false break; case "visDialoghi|true": loadDialoghi(); vistaDialoghi = true break; case "visDialoghi|false": $("#vistaDialoghi").css("display", "none"); vistaDialoghi = false resetDialoghi() break; case "visMetafore|true": //loadMetafore(); break; case "visMetafore|false": $("#vistaMetafore").css("display", "none"); } }); $(" ." + formaClass).each(function(idx, element) { // We cycle through the elements using each() so that we can choose the element specifically that we wish to clean up afterward var ele = $(element); ele.tooltip({ content: (function() { return formatTTContent(ele.attr('title'), ele.attr('class').split(' ')[1], ele.attr('class').split(' ')[0]); }), classes: { "ui-tooltip": 'Nik_dropdown-content' }, close: function(event, ui) { $(".ui-helper-hidden-accessible").remove(); }, create: function(ev, ui) { $(this).data("ui-tooltip").liveRegion.remove(); }, hide: false, show: { delay: 800, duration: 0 } }); }); $(" ." + formaClass).dblclick(function() { var sentenceId = $(this).attr('class').split(' ')[0].replace('$', '') console.log('dblclick ' + lisid) if (shownSentenceList.has(sentenceId)) { resetSentenceStructure(sentenceId) shownSentenceList.delete(sentenceId) } else { //showSentenceStructure (sentenceId) shownSentenceList.add(sentenceId) } }); $(" ." + formaClass).hover(function(idx, element) { var sentenceId = $(this).attr('class').split(' ')[0].split('_') var tmplisid = sentenceId[0] + '_' + sentenceId[1] + '_' + sentenceId[3] lsentid = $(this).attr('class').split(' ')[0] lisid = tmplisid }); /* * Espansione del contesto */ jQuery(document).delegate(' .espandiFrase, .riduciFrase', 'click', function() { if ($(this).hasClass("disabled")) { return; }; var posizioniEspansione = [] var cid = $(this).attr('id'); var parcid = cid.split('_'); var posVerso reit = '#versiFrase' + parcid[4] var expcontextLength = $(reit + " > li").length if (cid.includes('_er_')) { expcontextLength = contextLength } else { posVerso = $(reit).attr('posVerso') if (posVerso == 1) { // caso inizio o fine canto expcontextLength += contextLength; } } //svuoto la lista di versi $(reit).empty() //genero la nuova lista di versi var versiContestoExp = getFormaContext(parseInt(parcid[3]), expcontextLength); var divVersoExp = '' var setVersicontestoExp = new Set() for (forma of versiContestoExp) { if (!setVersicontestoExp.has(forma.verso)) { divVersoExp = createDivVersoLI(forma.cantica+1, forma.verso, forma.canto) $(reit).append(divVersoExp) setVersicontestoExp.add(forma.verso) } createSpanFormeNew(forma.testo, forma.catg, 'e' + forma.posizione, forma.periodo, forma.funzperiodo, divVersoExp) posizioniEspansione.push('e' + forma.posizione) } if (cid.includes('_er_')) { ///$("#"+cid).css("display", "none"); $("#" + cid).removeClass("btn-outline-primary"); $("#" + cid).addClass("btn-outline-secondary"); $("#" + cid).addClass("disabled"); } else { cid = cid.replace("ex", "er"); ///$("#"+cid).attr('style', 'display: d-flex;'); $("#" + cid).removeClass("btn-outline-secondary"); $("#" + cid).removeClass("disabled"); $("#" + cid).addClass("btn-outline-primary"); } //evidenzio risultato for (ris of listarisultati) { idris = '#e' + ris $(idris).addClass("font-weight-bold mark ") } //gestisco risultati se unità di ricerca è periodo if (listaPeriodiRisultato.length) { for (msid of listaPeriodiRisultato) { loadPeriodo(msid) } } //gestisce risultati se unità di ricerca è frase if (listaClausoleRisultato.length) { for (clsid of listaClausoleRisultato) { let tmpid = clsid.split('-') loadClausola(tmpid[0], tmpid[1], tmpid[2], tmpid[3]) } } //aggiungo listeners //addFormaListenersInRisultato(posizioniEspansione) addFormaListenersInCanto() //disegno minimap, onlyContent = true drawMinimap('#vistaFrasi', true) //manageMM('#vistaFrasi') }) /* * Costruzione e visualizzazione del risultato in frasi. */ /* * Costruzione e visualizzazione del risultato in frasi. */ //$.manageResultList(start, offset) var prevstart = -1 var prevoffset = -1 jQuery.manageResultList = function manageResultList(start, offset = showOffset) { if (offset == prevoffset && start == prevstart && cantoDisplayed == '#vistaFrasi') return console.log('Paginazione...') prevstart = start prevoffset = offset if (cantoDisplayed != '#vistaFrasi') { prevCantoDisplayed = cantoDisplayed; $(cantoDisplayed).css("display", "none"); //visualizzo $("#vistaFrasi").attr('style', 'display: d-flex;'); cantoDisplayed = "#vistaFrasi"; } //listarisultati.sort(function(a, b){return a - b}); showFrasi(start, offset) if (vistaPeriodi) { loadFrasi(); } if (vistaDialoghi) { loadDialoghi(); } addFormaListenersInCanto() drawMinimap('#vistaFrasi', false) } function countResultContexts() { var numeroRisultati = 0; if (listarisultati.length) { var ultimaPosizione = -1; for (risultato of listarisultati) { if (risultato <= ultimaPosizione) { continue; } numeroRisultati = numeroRisultati + 1; ultimaPosizione = getContextLastPosition(risultato, contextLength); } numeroContesti = numeroRisultati return (numeroRisultati) } if (listaClausoleRisultato.length) { numeroContesti = listaClausoleRisultatoContesti.length return (listaClausoleRisultatoContesti.length) /*var tempr = new Set() for (singleres of listaClausoleRisultato) { tempr.add(singleres.split('-')[0]) } var myRis = [] tempr.forEach(y => myRis.push(listaClausoleRisultato.filter(x => (x.split('-')[0] == y) && x.split('-').length > 1))) numeroContesti = myRis.length return (myRis.length)*/ } numeroContesti = numeroRisultati return (numeroRisultati) } function getResInPage(startcont, endcont) { var res = []; var contaContesti = 0 //console.log(listaClausoleRisultato) if (listarisultati.length) { var ultimaPosizione = -1; for (risultato of listarisultati) { if (risultato <= ultimaPosizione) { continue; } contaContesti = contaContesti + 1; if (contaContesti >= startcont && contaContesti < endcont) { res.push(risultato) } if (contaContesti > endcont) break; ultimaPosizione = getContextLastPosition(risultato, contextLength); } //ordino la lista dei risultati res.sort(function(a, b) { return a - b }); return (res) } if (listaClausoleRisultatoContesti.length && !listarisultati.length ) { /*for (risultato of listaClausoleRisultatoContesti) { contaContesti = contaContesti + 1; if (contaContesti >= startcont && contaContesti < endcont) { res.push(risultato) } if (contaContesti > endcont) break; }*/ for (i=startcont; i<=endcont; i++){ res.push(listaClausoleRisultatoContesti[i]) } //res.sort(function(a, b) { puno = a[0].split('-')[3]; pdue = b[0].split('-')[3]; return parseInt(puno) - parseInt(pdue) }); return (res) } return (res) } function showFrasi(start, offset = showOffset) { var canto, numeroCantica; var divVerso; var elencoRisutati = $("#vistaFrasi"); elencoRisutati.empty(); var numeroRisultato = 0; var ultimaPosizione = 0; var numeroVersi; //const intsup = Math.min(start + offset, listarisultati.length) var resincontext = getResInPage(start, start + offset) for (let i = 0; i < resincontext.length; i++) { //risultato = listarisultati[i]; risultato = resincontext[i]; numeroRisultato++; if (!risultato.toString().includes('-') && risultato <= parseInt(ultimaPosizione)) { continue; } var versiContesto = '' var ctxpivot=0 if (!Array.isArray(risultato)) { risultato = parseInt(risultato) versiContesto = getFormaContext(risultato, contextLength); ctxpivot=risultato } else{ versiContesto = getFraseContext(risultato, contextLength); if(versiContesto.length){ var tmind=Math.floor(versiContesto.length/2); ctxpivot=versiContesto[tmind]['posizione'] } } var setVersicontesto = new Set() divVerso = '' numeroCantica = 0 canto = 0 //var titoloCanto = $('<h5 class="titolo-canto"/>') var versiIniziali = $('<div class="versiFrase mt-3" />') var listaVersi = $('<ol class="pt-3" />') listaVersi.attr('id', "Frase" + numeroRisultato); versiIniziali.attr('id', "versiFrase" + numeroRisultato); numeroVersi = 0; for (forma of versiContesto) { if (setVersicontesto.size == 0) { numeroCantica = forma.cantica canto = forma.canto } if (!setVersicontesto.has(forma.verso)) { divVerso = createDivVersoLI(forma.cantica + 1, forma.verso, forma.canto) versiIniziali.append(divVerso) listaVersi.append(versiIniziali) elencoRisutati.append(listaVersi) setVersicontesto.add(forma.verso) numeroVersi++; } createSpanFormeNew(forma.testo, forma.catg, 'e' + forma.posizione, forma.periodo, forma.funzperiodo, divVerso) } ultimaPosizione = forma.posizione; if (numeroVersi < contextLength + 1) { versiIniziali.attr('posVerso', 1); // inizio o fine canto } else { versiIniziali.attr('posVerso', 9999); } var comandi = $('<div class=" comandi col flex-nowrap d-inline justify-content-between pl-1 pb-2 ml-2 mb-2 border-bottom"/>') comandi.attr('id', "comandiFrase" + numeroRisultato) //comandi.attr('class', 'comandi col flex-nowrap d-inline justify-content-between pl-1 pb-2 ml-2 mb-2 border-bottom'); var comandiGrp = $('<div />') comandiGrp.attr('class', 'btn-group flex-nowrap d-inline pr-3 mt-1 mr-3 align-text-bottom'); comandiGrp.attr('role', "group") var spanBadgeExpand = $('<button class="btn btn-sm btn-outline-primary espandiFrase px-1 pt-1 pb-0"/>'); var expandIcon = '<ion-icon name="expand-outline"></ion-icon>'; //spanBadgeExpand.attr('class', 'btn btn-sm btn-outline-primary espandiFrase px-1 pt-1 pb-0'); var spanBadgeReduce = $('<button class="btn btn-sm btn-outline-secondary riduciFrase px-1 pt-1 pb-0 ml-1 disabled"/>'); var reduceIcon = '<ion-icon name="contract-outline"></ion-icon>'; //spanBadgeReduce.attr('class', 'btn btn-sm btn-outline-secondary riduciFrase px-1 pt-1 pb-0 ml-1 disabled'); //spanBadgeExpand.attr('id', getCantica(numeroCantica) + "Canto_ex_" + canto + "_" + risultato + "_" + numeroRisultato); spanBadgeExpand.attr('id', getCantica(numeroCantica) + "Canto_ex_" + canto + "_" + ctxpivot + "_" + numeroRisultato); spanBadgeExpand.append(expandIcon); spanBadgeReduce.attr('id', getCantica(numeroCantica) + "Canto_er_" + canto + "_" + ctxpivot + "_" + numeroRisultato); spanBadgeReduce.append(reduceIcon) spanBadgeExpand.appendTo(comandiGrp); spanBadgeReduce.appendTo(comandiGrp); comandiGrp.appendTo(comandi); var citazioneDiv = $('<div class=" text-right flex-nowrap d-inline ml-3 px-3 py-0"/>') //citazioneDiv.attr('class', ' text-right flex-nowrap d-inline ml-3 px-3 py-0'); var citazione = $('<span class= " pl-3 citazioneFrase align-text-top"/>') citazione.append("[" + getCantica(numeroCantica) + ", Canto " + getRoman(canto) + "]") //citazione.attr('class', ' pl-3 citazioneFrase align-text-top'); citazione.attr('name', getCantica(numeroCantica) + "Canto " + canto); citazione.attr('id', idCitazione + '_' + numeroRisultato + '_' + risultato); citazione.appendTo(citazioneDiv); citazioneDiv.appendTo(comandi); comandi.appendTo(elencoRisutati); } //evidenzio resultati for (ris of listarisultati) { idris = '#e' + ris $(idris).addClass("font-weight-bold mark ") } //evidenzio i periodi se unità di ricerca è impostato come periodo if (listaPeriodiRisultato.length) { for (msid of listaPeriodiRisultato) { loadPeriodo(msid) } } //evidenzio le frasi se unità di ricerca è frase if (listaClausoleRisultato.length) { for (clsid of listaClausoleRisultato) { let tmpid = clsid.split('-') //loadFrase(tmpid[0], tmpid[1]) loadClausola(tmpid[0], tmpid[1], tmpid[2], tmpid[3]) } } } jQuery(document).delegate('.navig-canto, .citazioneFrase', 'click', function(e) { resetFrasi() //nasconde vista risultati $("#vistaFrasi").css("display", "none"); //rimuove il grafo sintattico se c'è' resetGraphStruct() emptyStructCard() $(cantoDisplayed).css("display", "none"); const cid = $(this).attr('name').replace(" ", "_"); cantoDisplayed = "#" + cid; if (vistaRiferimenti) initCitazioni() var parcid = cid.split('_') if (!(loadedCanti.has(cid))) { if (parcid[0].includes('Inferno')) showCanto(formeprima, '1', parcid[1]) if (parcid[0].includes('Purgatorio')) showCanto(formeseconda, '2', parcid[1]) if (parcid[0].includes('Paradiso')) showCanto(formeterza, '3', parcid[1]) loadedCanti.add(cid) } //$("#" + $(this).attr('name').replace(" ", "_")).css("display", "block"); $("#" + $(this).attr('name').replace(" ", "_")).attr('style', 'display: d-flex;') drawMinimap("#" + $(this).attr('name').replace(" ", "_"), false) console.log(vistaPeriodi) if (vistaPeriodi) { loadFrasi(); } if (vistaDialoghi) { loadDialoghi(); } addFormaListenersInCanto(); //se si sta arrivando al canto da un link della lista risultati const callerid = $(this).attr('id'); if (callerid != null && callerid.startsWith(idCitazione)) { const mypos = callerid.split('_')[2] latestPhraseId = callerid.split('_')[0].replace("citazione", "") + callerid.split('_')[1]; $("#collapse" + parcid[0].replace("Canto", "")).collapse('show'); document.getElementById(mypos).scrollIntoView({ behavior: "smooth", }); } }); //Query jQuery(document).delegate('#searchcomm, #searchcomm2', 'click', function(e) { e.preventDefault(); manageQuery() }); //Reset jQuery(document).delegate('#cleanresult', 'click', function(e) { console.log('clean') cleanSearchResult() esprlogica = [] $('#queryText').val("") }); //Utility functions function addFormaListenersInCanto() { let idn = 0 $(cantoDisplayed).find(" ." + formaClass).each(function(idx, element) { idn = idn + 1 var ele = $(element); $(element).tooltip({ content: (function() { return formatTTContent(ele.attr('title'), ele.attr('class').split(' ')[1], ele.attr('class').split(' ')[0]); }), classes: { "ui-tooltip": 'Nik_dropdown-content' }, //close: function(event, ui) { $(".ui-helper-hidden-accessible").remove(); }, //create: function(ev, ui) { $(this).data("ui-tooltip").liveRegion.remove(); }, hide: false, show: { delay: 800, duration: 0 } }); $(element).hover(function(idx, element) { var sentenceId = $(this).attr('class').split(' ')[0].split('_') var tmplisid = sentenceId[0] + '_' + sentenceId[1] + '_' + sentenceId[3] lsentid = $(this).attr('class').split(' ')[0] lisid = tmplisid }); }); //console.log('nr forme '+idn) } function getRoman(numero) { var romani = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX", "XXX", "XXXI", "XXXII", "XXXIII", "XXXIV"]; return (romani[numero - 1]); } function getNumCurrentCantica() { var mcanto = cantoDisplayed.replace("#", '') var cantica = '' if (mcanto.startsWith('Inf')) cantica = '1' if (mcanto.startsWith('Pur')) cantica = '2' if (mcanto.startsWith('Par')) cantica = '3' return (cantica + '_' + mcanto.split('_')[1]) } function loadPeriodo(idperiodo) { if (!isPeriodoInCanto(idperiodo, cantoDisplayed) && !(cantoDisplayed.includes('#vistaFrasi'))) { return } $(cantoDisplayed).find(' .' + idperiodo).each(function() { var pstp = $(this).attr('class').split(" ")[1] if (pstp == 'sentencetag') $(this).attr('style', 'display: d-flex;'); //$(this).css('color', colorssp(mapsynttypestopalette[pstp])); }) minim.contents().find(' .' + idperiodo).each(function() { var mpstp = $(this).attr('class').split(" ")[1] if (mpstp == 'sentencetag') $(this).attr('style', 'display: d-flex;'); //$(this).css('color', colorssp(mapsynttypestopalette[mpstp])); }) } function isPeriodoInCanto(idperiodo, canto) { datiperiodo = idperiodo.split('_') daticanto = canto.split('_') canticaprd = datiperiodo[0] cantoprd = datiperiodo[1] if (canticaprd == '1' && daticanto[0].includes('Inferno')) return (cantoprd == daticanto[1]) if (canticaprd == '2' && daticanto[0].includes('Purgatorio')) return (cantoprd == daticanto[1]) if (canticaprd == '3' && daticanto[0].includes('Paradiso')) return (cantoprd == daticanto[1]) return false } /*function loadFrase(idperiodo, funzionefrase) { if (!isPeriodoInCanto(idperiodo, cantoDisplayed)) return $(cantoDisplayed).find(' .' + idperiodo).each(function() { var pstp = $(this).attr('class').split(" ")[1] if (pstp.trim() == funzionefrase) $(this).css('color', colorssp(mapsynttypestopalette[pstp])); }) minim.contents().find(' .' + idperiodo).each(function() { var mpstp = $(this).attr('class').split(" ")[1] if (mpstp.trim() == funzionefrase) $(this).css('color', colorssp(mapsynttypestopalette[mpstp])); }) }*/ function loadClausola(idperiodo, funzionefrase, fromn, ton) { if (!isPeriodoInCanto(idperiodo, cantoDisplayed) && !(cantoDisplayed.includes('#vistaFrasi'))) return $(cantoDisplayed).find(' .' + idperiodo).each(function() { var vid = parseInt($(this).attr('id').replace('e', '')) if (vid >= parseInt(fromn) && vid <= parseInt(ton)) { var pstp = $(this).attr('class').split(" ")[1] if (pstp.trim() == funzionefrase) $(this).css('color', colorssp(mapsynttypestopalette[pstp])); } }) minim.contents().find(' .' + idperiodo).each(function() { var vid = parseInt($(this).attr('id').replace('e', '')) if (vid >= parseInt(fromn) && vid <= parseInt(ton)) { var mpstp = $(this).attr('class').split(" ")[1] if (mpstp.trim() == funzionefrase) $(this).css('color', colorssp(mapsynttypestopalette[mpstp])); } }) } function loadDialoghi() { var aca = '3' if (cantoDisplayed.includes('Inferno')) aca = '1' if (cantoDisplayed.includes('Purgatorio')) aca = '2' for (const india in dialoghi) { //console.log(dialoghi[india]['Cnt'].replace('_so','')) var diaclass = dialoghi[india]['Cnt'].replace('_so', '') var authclass = dialoghi[india]['Cnt']; if (diaclass.split('_')[1] != cantoDisplayed.split('_')[1]) continue; if (diaclass.split('_')[0] != aca) continue; var csscl = dialogaltri if (dialoghi[india]['Spna'] in dialogspeakers) { csscl = dialogspeakers[dialoghi[india]['Spna']] } $(cantoDisplayed).find(' .' + diaclass).each(function() { $(this).addClass(csscl) }) $(cantoDisplayed).find(' .' + authclass).each(function() { //$(this).addClass(csscl) $(this).attr('style', 'display: d-flex;'); }) minim.contents().find(' .' + diaclass).each(function() { $(this).addClass(csscl) }) } emphResults() } function loadFrasi() { $(cantoDisplayed).find(' .sentencetag').each(function() { $(this).attr('style', 'display: d-flex;'); }) $(cantoDisplayed).find(' .' + formaClass).each(function() { stp = $(this).attr('class').split(" ")[1] $(this).css('color', colorssp(mapsynttypestopalette[stp])); }) //let minim=$(" .minimap__content") minim.contents().find(" .sentencetag").each(function() { $(this).attr('style', 'display: d-flex;'); }) minim.contents().find(' .' + formaClass).each(function() { stp = $(this).attr('class').split(" ")[1] $(this).css('color', colorssp(mapsynttypestopalette[stp])); }) } function resetDialoghi() { for (mk in dialogspeakers) { //console.log (mk+' '+dialogspeakers[mk]) $(cantoDisplayed).find(' .' + dialogspeakers[mk]).each(function() { $(this).removeClass(dialogspeakers[mk]); }) minim.contents().find(' .' + dialogspeakers[mk]).each(function() { $(this).removeClass(dialogspeakers[mk]); }) } $(cantoDisplayed).find(' .' + dialogaltri).each(function() { $(this).removeClass(dialogaltri); }) minim.contents().find(' .' + dialogaltri).each(function() { $(this).removeClass(dialogaltri); }) emphResults() } function resetFrasi() { $(cantoDisplayed).find(' .sentencetag').each(function() { $(this).css('display', 'none'); }) $(cantoDisplayed).find(' .' + formaClass).each(function() { //console.log(colorssp(mapsynttypestopalette[stp])) $(this).css('color', ''); $(this).removeClass('font-weight-bold') }) minim.contents().find(" .sentencetag").each(function() { $(this).css('display', 'none'); }) minim.contents().find(' .' + formaClass).each(function() { $(this).css('color', ''); $(this).removeClass('font-weight-bold') }) //cancello il grafo sintattico resetGraphStruct() emptyStructCard() emphResults() } //visualizzazione risultati function emphResults() { //evidenzio i periodi se unità di ricerca è impostato come periodo if (listaPeriodiRisultato.length) { for (msid of listaPeriodiRisultato) { //if (isPeriodoInCanto(msid, cantoDisplayed)) loadPeriodo(msid) } } //evidenzio le frasi se unità di ricerca è frase if (listaClausoleRisultato.length) { for (clsid of listaClausoleRisultato) { if (isPeriodoInCanto(clsid, cantoDisplayed)) { let tmpid = clsid.split('-') //loadFrase(tmpid[0], tmpid[1]) loadClausola(tmpid[0], tmpid[1], tmpid[2], tmpid[3]) } } } } /*INIZIO GESTIONE CITAZIONI*/ function initCitazioni() { //"#InfernoCanto_1" //console.log('VISTA CITAZIONI!') var mcanto = cantoDisplayed.replace("#", '') cantica = '' if (mcanto.startsWith('Inf')) cantica = 'Inferno' if (mcanto.startsWith('Pur')) cantica = 'Purgatorio' if (mcanto.startsWith('Par')) cantica = 'Paradiso' canto = mcanto.split('_')[1] if (canto.length == 1) canto = '0' + canto // commentsArray = getVersiConCitazioni(cantica, canto) commentsJson = getVersiConCitazioniJson(cantica, canto) } function removeHtmlTags(value) { var text = value; if (text != null) { text = text.replace(/<(.|\n)*?>/g, ''); text = text.replace("«", ""); text = text.replace("»", ""); text = text.replace(/\ /g, ' '); text = text.replace(/[\r\n]+/gm, ' '); return text; } } jQuery(document).delegate(' .showcomments', 'click', function() { var cid = $(this).attr('id'); if (!hasCommentsJson(cid)) { return } var parcid = cid.split('_') var cantica; switch (parcid[1]) { case "1": cantica = "Inferno"; break; case "2": cantica = "Purgatorio"; break; case "3": cantica = "Paradiso"; } var commentArea = $('#displaynote'); commentArea.empty() if ($('#noteCard0').length) { $("#noteCard0")[0].remove(); } var id = cid.substr(9); var collapseNote; var gruppoVersi; var versText = ""; //var saveVersoCitazione = ""; var allGrouplKeys = Object.keys(commentsJson); var currentGroup; allGrouplKeys.sort().some(function(k) { if (k == id || ~k.indexOf(id + '-')) { //console.log('gruppo commenti '+k) console.log(commentsJson[k].length) gruppoVersi = k.split("_").slice(-1)[0] if (gruppoVersi.includes("-")) { versText = ", Versi " + gruppoVersi; } else { versText = ", Verso " + gruppoVersi; } currentGroup = createNoteGroup(cantica, getRoman(parcid[2]), versText, k, commentsJson[k].length) commentsJson[k].forEach(function(value, i) { currentGroup.append(createNoteEntry(value, k, i)) }); commentArea.append(currentGroup); } $('#tab-list #vis0-tab').tab('show') }) }) function createNoteGroup(cantica, canto, versi, id, len) { var noteGroupCard = $('<div class="card card-body noteCardGroup well well-sm mx-1 my-2 p-0" id="noteGroupCard' + id + '">'); var commentHeader = $('<div class="d-flex align-content-start flex-nowrap text-muted" id="commentoGruppoVersi' + id + '">') var rigaNota = $('<div class="p-0 m-0">'); var buttons = $('<div class="d-flex flex-wrap-reverse ml-auto align-items-center justify-content-end px-1 pt-1 pb-0">') var closeButton = $('<button id="closeNote' + id + '"' + 'class="btn btn-sm btn-outline-warning btn-outline-warning-mod closeNote rounded text-warning align-self-end px-1 pb-0 ml-1 mb-1">' + '<ion-icon name="close-circle"></ion-icon>'); closeButton.appendTo(buttons); if (len > 1) { var commentiSP = " commenti su " } else { var commentiSP = " commento su " } //noteGroupCard.append('<h6 class="card-title m-2 text-warning">' + cantica + ", Canto " + canto + versi + "</h6>"); rigaNota.append('<h6 class="card-title m-2 text-warning"><span class="badge badge-warning badge-pill mx-1">' + len + "</span>" + commentiSP + cantica + ", Canto " + canto + versi + "</h6>"); rigaNota.appendTo(commentHeader); buttons.appendTo(commentHeader); commentHeader.appendTo(noteGroupCard); return noteGroupCard; } function createNoteEntry(comments, id, pos) { var noteCard = $('<div class="card card-body well well-sm mx-1 mb-1 mt-0 p-0 border-lida08" id="noteCard' + id + '_' + pos + '">'); //var noteCard = $('<div class="card card-body well well-sm m-1 mt-2 p-0" id="noteCard' + id + '">'); //var collapseCardBody = $('<div class="card-body px-0 py-2 mx-1 mb-1 mt-0 border-top rounded" >'); var collapseCardBody = $('<div class="card-body px-0 py-1 mx-3 my-0 border-top rounded" >'); var divCampiSingoli = $('<div class="d-flex align-content-start flex-wrap text-muted">'); //createNoteHeader(noteCard, comments, id, pos, cantica, parcid, saveVersoCitazione); createNoteHeader(noteCard, comments, id, pos); collapseNote = $('<div class="collapse show">'); collapseNote.attr('id', "collapseNote" + id + '_' + pos) if (comments.TestoFonteCitazione != null && comments.TestoFonteCitazione != "nan") { createModule(collapseCardBody, "Testo della fonte: ", removeHtmlTags(comments.TestoFonteCitazione), "1", id, pos) } if (comments.NaturaRiferimento != null) { createDivSingola(divCampiSingoli, "Tipo di riferimento: ", comments.NaturaRiferimento, false) divCampiSingoli.appendTo(collapseCardBody); if (comments.NaturaRiferimento == "CITAZIONE" || comments.NaturaRiferimento == "LOCI PARALLELI") { if (comments.TipoCitazione != null && comments.TipoCitazione != "") { createDivSingola(divCampiSingoli, "Tipo citazione: ", comments.TipoCitazione, false) divCampiSingoli.appendTo(collapseCardBody); } appendSpecifica(comments, divCampiSingoli, collapseCardBody) } } if (comments.RapportoSoggettoOggetto != null) { createDivSingola(divCampiSingoli, "Rapporto testo/fonte: ", comments.RapportoSoggettoOggetto, false) divCampiSingoli.appendTo(collapseCardBody); } if (comments.RapportoCommentoCommentatoreText != null && comments.RapportoCommentoCommentatoreText != "nan") { createModuleCommentatore(collapseCardBody, comments.RapportoCommentoCommentatoreText, "5", id, pos) } if (comments.frammentoNota != null && comments.frammentoNota != "nan" && comments.annotazione != null && comments.annotazione != "nan") { createModuleFrammAnnot(collapseCardBody, removeHtmlTags(comments.frammentoNota), removeHtmlTags(comments.annotazione), "6", id, pos) } else { if (comments.frammentoNota != null && comments.frammentoNota != "nan") { createModule(collapseCardBody, "Nota: ", removeHtmlTags(comments.frammentoNota), "6", id, pos) } if (comments.annotazione != null && comments.annotazione != "nan") { createModule(collapseCardBody, "Nota completa: ", removeHtmlTags(comments.annotazione), "7", id, pos) } } if (comments.NotaFonteCitazione != null && comments.NotaFonteCitazione != "nan" && comments.NotaFonteCitazione != "") { createModule(collapseCardBody, "Nota dell'annotatore: ", comments.NotaFonteCitazione, "8", id, pos) } collapseCardBody.appendTo(collapseNote); collapseNote.appendTo(noteCard); return noteCard; } function appendSpecifica(commenti, cardBody, collapseCard) { var specifica = ""; if (commenti.CitEpisodi != null && commenti.CitEpisodi != "") { specifica = commenti.CitEpisodi; createDivSingola(cardBody, "Contenuto del riferimento: ", "Episodio (" + specifica, true) cardBody.appendTo(collapseCard); } if (commenti.CitImmagini != null && commenti.CitImmagini != "") { specifica = commenti.CitImmagini; createDivSingola(cardBody, "Contenuto del riferimento: ", "Immagine (" + specifica, true) cardBody.appendTo(collapseCard); } if (commenti.CitTeorie != null && commenti.CitTeorie != "") { specifica = commenti.CitTeorie; createDivSingola(cardBody, "Contenuto del riferimento: ", "Teoria (" + specifica, true) cardBody.appendTo(collapseCard); } if (commenti.CitMotivi != null && commenti.CitMotivi != "") { specifica = commenti.CitMotivi; createDivSingola(cardBody, "Contenuto del riferimento: ", "Motivo (" + specifica, true) cardBody.appendTo(collapseCard); } if (commenti.CitStilemi != null && commenti.CitStilemi != "") { specifica = commenti.CitStilemi; createDivSingola(cardBody, "Contenuto del riferimento: ", "Stilema (" + specifica, true) cardBody.appendTo(collapseCard); } if (commenti.CitTopografie != null && commenti.CitTopografie != "") { specifica = commenti.CitTopografie; createDivSingola(cardBody, "Contenuto del riferimento: ", "Topografia (" + specifica, true) cardBody.appendTo(collapseCard); } } function createNoteHeader(noteCardX, comments, id, pos) { //, cantica, parcid, versoCitazionePrecedente){ var nomeAutore = ""; var titoloFonte = ""; var luogoFonte = ""; var commentHeader = $('<div class="d-flex align-content-start flex-nowrap text-muted" id="commentoVerso' + id + '_' + pos + '">') var rigaNota = $('<div class="px-3 py-1 m-0">'); var buttons = $('<div class="d-flex flex-wrap-reverse ml-auto align-items-center justify-content-end p-1">') var collapseButton = $('<button id="collapseBtnNote' + id + '_' + pos + '"' + 'class="btn btn-sm btn-outline-primary bg-light collapseNote border rounded text-primary align-self-end px-1 pb-0"' + 'data-toggle="collapse" data-target="#collapseNote' + id + '_' + pos + '"' + 'aria-expanded="true" aria-controls="collapseNote' + id + '_' + pos + '">' + '<ion-icon name="archive"></ion-icon>'); //var closeButton = $('<button id="closeNote'+id+ '_' + pos +'"'+ // 'class="btn btn-sm btn-outline-primary bg-light closeNote border rounded text-primary align-self-end px-1 pb-0 ml-1 mb-1">'+ // '<ion-icon name="close-circle"></ion-icon>'); collapseButton.appendTo(buttons); //closeButton.appendTo(buttons); if (comments.commentario != null) { rigaNota.append('<b>Commentatore:</b> <i>' + comments.commentario + '</i><br>'); } if (comments.NomeAutoreCitazione == null) { nomeAutore = 'riferimento'; } else { nomeAutore = comments.NomeAutoreCitazione; } if (comments.AutoreCitazione != null) { rigaNota.append('<b>Autore della fonte:</b><a href="' + comments.AutoreCitazione + '" target="_blank"> <i>' + nomeAutore + '</i> </a>'); } else { rigaNota.append('<b>Autore della fonte:</b> <i>' + nomeAutore + '</i>'); } if (comments.TitoloFonteCitazione == null) { titoloFonte = "riferimento"; } else { titoloFonte = comments.TitoloFonteCitazione; } if (comments.FonteCitazione != null) { rigaNota.append(' <b>Fonte:</b> <a href="' + comments.FonteCitazione + '" target="_blank"><i> ' + titoloFonte + '</i> </a>'); } else { rigaNota.append(' <b>Fonte:</b><i> ' + titoloFonte + '</i>'); } if (comments.LuogoFonteCitazione == null) { luogoFonte = "riferimento"; } else { luogoFonte = comments.LuogoFonteCitazione; } if (comments.URLFonteCitazione != null) { rigaNota.append(' <b>Coordinate della fonte:</b><a href="' + comments.URLFonteCitazione + '"target="_blank"><i> ' + luogoFonte + '</i></a><br>'); } else { rigaNota.append(' <b>Coordinate della fonte:</b><i> ' + luogoFonte + '</i><br>'); } rigaNota.appendTo(commentHeader); buttons.appendTo(commentHeader); commentHeader.appendTo(noteCardX); } function createDivSingola(divCampi, campo, valore, specifica) { //var divSingola = $('<div class="px-3 py-1">'); var divSingola = $('<div class="pl-0 pr-3 py-1">'); if (specifica) { valore = valore.trim(); divSingola.append('<b>' + campo + '</b><i>' + valore + ')</i>'); } else { divSingola.append('<b>' + campo + '</b><i> ' + valore + '</i>'); } divSingola.appendTo(divCampi); } function createModule(collapse, label, testo, num, id, pos) { var minLength = (($('#displaynote').width() / ($('#Test').width() / 32)) * 2 * 1.63); var divContent = $('<div class="text-muted p-0">'); //var divContent = $('<div class="d-flex align-content-start flex-wrap text-muted">'); //var divTesto = $('<div class="px-3 py-1">') var nota = '<b>' + label + '</b><span class="blog-main-16">' + testo + '</span>'; //divTesto.append(nota); //divContent.append(divTesto); divContent.append(nota); if (($('<textarea />').html(testo).text().length + label.length + 2) > minLength) { //console.log((testo.length + label.length +2) +" "+($('#displaynote').width() / $('#Test').width() * 2 * 32)) var divModule = $('<div class="module pb-0">'); var divNote = $('<div class="collapse" id="collapse' + num + 'Note' + id + '_' + pos + '" aria-expanded="false">') divModule.append('<a class="read-more collapsed" data-toggle="collapse" href="#collapse' + num + 'Note' + id + '_' + pos + '" role="button"></a>') divNote.append(divContent) divModule.append(divNote); } else { var divModule = $('<div class="py-1">'); divModule.append(divContent); } divModule.appendTo(collapse); } function createModuleCommentatore(collapse, commento, num, id, pos) { let tmpcomm = '[' + commento + ']' let jsonCommento = JSON.parse(tmpcomm.replaceAll("'", '"').replaceAll("+", '"')); var minLength = (($('#displaynote').width() / ($('#Test').width() / 32)) * 2 * 1.63); var divContent = $('<div class="d-flex align-content-start flex-wrap text-muted">'); var divTesto = $('<div class="pl-0 pr-3 py-1">') var nota = ''; var lenmod = 0 for (el in jsonCommento) { var urlCommento = jsonCommento[el].Commento; var esitoCommento = jsonCommento[el].Rapporto; var autoreCommento = jsonCommento[el].Autore if (autoreCommento == "") { autoreCommento = "Commento" } if (esitoCommento == "") { esitoCommento = "Rapporto nullo" } if (nota.length > 0) { nota = nota + ' - ' } if (urlCommento == "") { //nota = '<b>Rapporto commento/commentatore: </b>'+esitoCommento+' Commento nullo, '+'</b><br>'; nota = nota + '<i>' + esitoCommento + ' Commento nullo' + '</i>'//+'<br>'; } else { //nota = '<b>Rapporto commento/commentatore: </b><i>'+esitoCommento +' <a href="'+urlCommento+'"target="_blank">' + autoreCommento+ '</i></a> ' + '</b><br>'; nota = nota + '<i>' + esitoCommento + ' <a href="' + urlCommento + '"target="_blank">' + autoreCommento + '</i></a>' //+ '</b><br>'; } lenmod = lenmod + esitoCommento.length + autoreCommento.length //divTesto.append(nota); } nota = '<b>Rapporto commento/commentatore:</b> ' + nota divTesto.append(nota); divContent.append(divTesto); var divModule = $('<div class="module py-1">'); divModule.append(divContent); divModule.appendTo(collapse); } function createModuleFrammAnnot(collapse, testo1, testo2, num, id, pos) { var minLength = (($('#displaynote').width() / ($('#Test').width() / 32)) * 2 * 1.63); var divFrammAnnot = $('<div class="py-1">'); var divContent1 = $('<div class="text-muted p-0">'); var divContent2 = $('<div class="text-muted p-0">'); var uniqueIdMulti1 = 'coll' + num + 'SN' + id + '_' + pos; var uniqueIdMulti2 = 'coll' + num + 'CN' + id + '_' + pos; var divMultiCollapse1 = $('<div class="collapse multi-collapse' + id + '_' + pos + ' show text-muted p-0" id="' + uniqueIdMulti1 + '">'); var divMultiCollapse2 = $('<div class="collapse multi-collapse' + id + '_' + pos + ' text-muted p-0" id="' + uniqueIdMulti2 + '">'); var label1 = '<b>Nota / <a href="" data-toggle="collapse" data-target=".multi-collapse' + id + '_' + pos + '" aria-controls="' + uniqueIdMulti1 + ' ' + uniqueIdMulti2 + '">Nota completa</a>: </b>' var label2 = '<b><a href="" data-toggle="collapse" data-target=".multi-collapse' + id + '_' + pos + '" aria-controls="' + uniqueIdMulti1 + ' ' + uniqueIdMulti2 + '">Nota</a> / Nota completa: </b>' var nota1 = '<span class="blog-main-16">' + testo1 + '</span>'; var nota2 = '<span class="blog-main-16">' + testo2 + '</span>'; divFrammAnnot.append(divMultiCollapse1); divFrammAnnot.append(divMultiCollapse2); divContent1.append(label1 + nota1); divContent2.append(label2 + nota2); if (($('<textarea />').html(testo1).text().length + 23) > minLength) { var divModule1 = $('<div class="module pb-0">'); var divNote1 = $('<div class="collapse" id="collapse' + num + 'Note' + id + '_' + pos + '" aria-expanded="false">') divModule1.append('<a class="read-more collapsed" data-toggle="collapse" href="#collapse' + num + 'Note' + id + '_' + pos + '" role="button"></a>') divNote1.append(divContent1) divModule1.append(divNote1); divMultiCollapse1.append(divModule1); } else { divMultiCollapse1.append(divContent1); } if (($('<textarea />').html(testo2).text().length + 23) > minLength) { var divModule2 = $('<div class="module pb-0">'); var divNote2 = $('<div class="collapse" id="collapse' + num + 'Note' + (id + 1) + '_' + pos + '" aria-expanded="false">') divModule2.append('<a class="read-more collapsed" data-toggle="collapse" href="#collapse' + num + 'Note' + (id + 1) + '_' + pos + '" role="button"></a>') divNote2.append(divContent2); divModule2.append(divNote2); divMultiCollapse2.append(divModule2); } else { divMultiCollapse2.append(divContent2); } divFrammAnnot.appendTo(collapse); } /* function hasComments(cid) { var id = cid.substr(9); for (var pos in commentsArray) { var comments = commentsArray[pos] if (comments.verso == id) { //console.log(comments) return (true) } } return false; }*/ function hasCommentsJson(cid) { //return commentsJson.hasOwnProperty(cid.substr(9)); var id = cid.substr(9); for (const [key, value] of Object.entries(commentsJson)) { if (key == id || key.startsWith(id + '-')) return true } return false } /* function numberOfComments(cid) { var id = cid.substr(9); return commentsArray.filter(x => x.verso == id).length } */ function numberOfCommentsJson(cid) { var cntc = 0 var id = cid.substr(9); for (const [key, value] of Object.entries(commentsJson)) { if (key == id || key.startsWith(id + '-')) cntc += commentsJson[key].length } return cntc } /*FINE GESTIONE CITAZIONI*/ function getCantica(numeroCantica) { return (cantiche[numeroCantica]) } //Calcola lemma e categoria grammaticale oppure categoria sintattica per tooltip function formatTTContent(categ, syntType, sentId) { var details = []; var lemma = categ.split('#')[1].replace("^", " ") //il lemma var categoria = categ.split('#')[0] // la categoria var details = getHoverContent(categoria); var myitems; var catgramm; var subcatgramm = ''; var popoverText = ''; var discorsost = ''; var funcFrase = ''; var TipiDiscorso = { "ThoughtDiscourse": "Pensato", "DirectDiscourse": "Diretto", "SpeakableDiscourse": "Parlato" } for (detail of details) { myitems = detail.split(','); catgramm = '<div class="ttContent">'; subcatgramm = '<p> <b> ' + lemma + ' - </b><i>' + myitems[0] + ',' + myitems.slice(1) + '</i></p></div>'; popoverText = popoverText + catgramm + subcatgramm; } if (vistaDialoghi) { for (const india in dialoghi) { if (dialoghi[india]['Cnt'].replace('_so', '') == sentId) { discorsost = "<div class='ttContentPers'><b>Personaggio:</b> <i>" + dialoghi[india]['Spna'].replace(hdnNamespace, '') + '</i>' + '<br><b>Discorso:</b> <i>' + TipiDiscorso[dialoghi[india]['Dty']] + '</i></div>' break; } } } if (vistaPeriodi) { funcFrase = '<div class="ttContent"><b>' + maptypes[syntType] + '</b></div>' } popoverText = popoverText + discorsost + funcFrase return (popoverText); } function getHoverContent(categ) { //console.log('Categoria '+categ) var mycat = []; categ = categ.replace('%2A', '*') categ = categ.replace('%2B', '+') categ = categ.replace('%2C', ',') categ = categ.replace('%2D', '-') if (categ.includes('^')) { categs = categ.split('^') for (cat of categs) { mycat.push(proprietaForma(cat)) } //console.log(mycat.join('-')) } else { mycat.push(proprietaForma(categ)); } return (mycat); } function proprietaForma(categ) { if (categ[0] == 'v') { return parserVerbi.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 's') { return parserSostantivi.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'e') { return parserPreposizioni.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'b') { return parserAvverbi.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'p') { return parserPronomi.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'a') { return parserAggettivi.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'r') { return parserArticolo.parse(categ).split(',').filter(prop => prop.length > 0).join() } if (categ[0] == 'f') { return parserCitazione.parse(categ).split(',').filter(prop => prop.length > 0).join(); } if (categ[0] == 'n') { return parserOnomastica.parse(categ).split(',').filter(prop => prop.length > 0).join(); } if (categ[0] == 'c') { return parserCongiunzione.parse(categ).split(',').filter(prop => prop.length > 0).join(); } return categoriegrammaticali[categ[0]] } function cleanSearchResult() { $("#headingZero").closest('.card').css("display", "none"); $("#collapseZero").collapse('hide'); $("#vistaFrasi").empty() $("#vistaFrasi").css("display", "none"); for (msid of listaPeriodiRisultato) { $('.' + msid).each(function() { $(this).css('color', ''); if (!vistaPeriodi) { var pstp = $(this).attr('class').split(" ")[1] if (pstp == 'sentencetag') $(this).attr('style', 'display: none;'); } }); } for (clsid of listaClausoleRisultato) { var tmpcl = clsid.split('-'); $('.' + tmpcl[0]).each(function() { $(this).css('color', ''); }); } //let minim=$(" .minimap__content") for (forma of listarisultati) { idforma = '#' + forma $(idforma).removeClass("font-weight-bold mark ") minim.contents().find(idforma).removeClass("font-weight-bold mark ") } $("#accordionNav .badge").remove(); //$("#headingZero").css("display", "none"); listarisultati = [] listaPeriodiRisultato = [] listaClausoleRisultato = [] listaClausoleRisultatoContesti = [] resultSentences = new Set() if (cantoDisplayed == '#vistaFrasi') cantoDisplayed = prevCantoDisplayed $(cantoDisplayed).attr('style', 'display: d-flex;'); //manageMM (cantoDisplayed) currPage = 0; latestPhraseId = ""; drawMinimap(cantoDisplayed, true) } /*function manageMM(name) { currentMinimap = name; let testhtml = $(currentMinimap)[0].outerHTML; //let minim=$(" .minimap__content") let bm = minim.contents().find(' .blog-main') bm.empty() bm.append(testhtml) getDimensionsDiv(true, true); } */ var unitaRicerca = 'forma' function manageQuery() { cleanSearchResult() esprlogica = [] jsonQuery = getJsonQuery() if (jsonQuery['QueryAvanzata'] == 0) unitaRicerca = 'forma' else unitaRicerca = jsonQuery['unitaRicerca'] console.log("got json query, unita ricerca: " + unitaRicerca) if (jsonQuery['QueryAvanzata'] == 0 && jsonQuery['Clausola0']['queryText'] == '') { alert('Digitare una stringa da cercare') return } if (jsonQuery['QueryAvanzata'] == 1 && (jsonQuery['EsprLogica'] == null || jsonQuery['EsprLogica'] == '')) { alert('Definire almeno una clausola del filtro di ricerca') return } if (jsonQuery['Clausola0']['lemma_forma'] == 'testo' && jsonQuery['Clausola0']['Attiva'] == 1 && jsonQuery['QueryAvanzata'] == 0) { searchwords = jsonQuery['Clausola0']['queryText'].trim().split(' ') var contesto = JSON.parse(jsonQuery['Clausola0']['contesto']) var inf = [] var pur = [] var par = [] var noContext = true if (!(contesto[0].every(item => item === 0) && contesto[1].every(item => item === 0) && contesto[2].every(item => item === 0))) { //inf=contesto[0].some(item => item !== 0) noContext = false inf = contesto[0].reduce((a, e, i) => { if (e === 1) a.push(i + 1); return a; }, []); pur = contesto[1].reduce((a, e, i) => { if (e === 1) a.push(i + 1); return a; }, []); par = contesto[2].reduce((a, e, i) => { if (e === 1) a.push(i + 1); return a; }, []); } var resultsInCantica = [] var resultsInCanto = [] console.log('frase, l. ' + searchwords.length) if (noContext || inf.length) executeLocalSearch(searchwords, formeprima, (formeprima.length - searchwords.length), cantiche[0], inf, resultsInCantica, resultsInCanto) if (noContext || pur.length) executeLocalSearch(searchwords, formeseconda, (formeseconda.length - searchwords.length), cantiche[1], pur, resultsInCantica, resultsInCanto) if (noContext || par.length) executeLocalSearch(searchwords, formeterza, (formeterza.length - searchwords.length), cantiche[2], par, resultsInCantica, resultsInCanto) if (listarisultati.length) { //evidenzia risultati for (ris of listarisultati) { idris = '#' + ris $(idris).addClass("font-weight-bold mark ") } } var totResultN = showBadgeInCantica(resultsInCantica) showBadgeInCanto(resultsInCanto) return } jsonQuery = buildSQ(jsonQuery) myquery = new sparqlGenerator().stringify(jsonQuery) console.log(myquery) executeQuerySearch(myquery) } function executeLocalSearch(testo, forme, limit, cantica, cont, resultsInCantica, resultsInCanto) { for (var ip = 0; ip <= limit; ip++) { if (cont.length && !cont.includes(parseInt(forme[ip].split('_')[1]))) { continue } var fnd = true var strlen = 0; var tmpa = [] for (var frind = 0; frind < testo.length; frind++) { var itm = forme[ip + frind].split('_')[0].toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "") tmpa.push(itm) } fnd = (testo.join(' ').toLowerCase() === tmpa.join(' ') || tmpa.join(' ').startsWith(testo.join(' ').toLowerCase())) if (fnd) { //console.log('ipfound: '+forme[ip].split('_')[2]+' - '+forme[(ip+testo.length-1)].split('_')[2]) resultsInCantica.push(cantica) resultsInCanto.push(cantica + 'Canto ' + forme[ip].split('_')[1]) var tstar = parseInt(forme[ip].split('_')[2]) var tstop = parseInt(forme[(ip + testo.length - 1)].split('_')[2]) for (var mpo = tstar; mpo < tstop + 1; mpo++) { listarisultati.push(mpo) } } } } //manage sentence and clauses /* function showSentenceStructure(sentence) { sid = '.' + sentence.toString() //console.log(sid) $(sid).addClass('text-info font-italic') } */ function resetSentenceStructure(sentence) { $(" ." + sentence).removeClass('text-info font-italic') } //Cantica management functions function showCanto(formecantica, idcantica, canto) { var setVersiCanto = new Set() var periodinum = {}; var cantica = cantiche[parseInt(idcantica) - 1]; var elverso, formaItem, currSentenceId; var ultimaFormaCanto; let numeroPeriodo = 1; formecantica.map(function(item) { formaItem = item.split("_"); var sentenceid = idcantica + "_" + formaItem[1] + "_s_" + formaItem[5] if (formaItem[1] == canto) { if (!setVersiCanto.has(cantica + "_" + formaItem[3] + "_" + 'Canto_' + formaItem[1])) { var verso = parseInt(formaItem[3]) - 1; var idCommento = "Commento_" + idcantica + "_" + canto + "_" + verso; //var commNumber = numberOfComments(idCommento); var commNumber = numberOfCommentsJson(idCommento) if (currSentenceId != null && currSentenceId != sentenceid) { createSpanPeriodiTag(closeSTag, 'c', formaItem[2] - 1, currSentenceId, elverso, periodinum[currSentenceId]) currSentenceId = null } if (commNumber > 0) { createCommentSpan(idCommento, elverso, commNumber) //console.log("Numero commenti: "+commNumber) } //elverso=createDivVersoNew(cantica, formaItem[3], 'Canto_' + formaItem[1]) elverso = createDivVersoLI(cantica, formaItem[3], 'Canto_' + formaItem[1]) setVersiCanto.add(cantica + "_" + formaItem[3] + "_" + 'Canto_' + formaItem[1]) } if (currSentenceId == null || currSentenceId != sentenceid) { if (currSentenceId != null) { createSpanPeriodiTag(closeSTag, 'c', formaItem[2] - 1, currSentenceId, elverso, periodinum[currSentenceId]) } currSentenceId = sentenceid; if (periodinum[currSentenceId] == null) { periodinum[currSentenceId] = numeroPeriodo numeroPeriodo = numeroPeriodo + 1; } //periodinum[currSentenceId]=numeroPeriodo //numeroPeriodo=numeroPeriodo+1; createSpanPeriodiTag(openSTag, 'o', formaItem[2], sentenceid, elverso, periodinum[currSentenceId]) } createSpanFormeNew(formaItem[0], formaItem[4], formaItem[2], sentenceid, formaItem[6], elverso) ultimaFormaCanto = formaItem; } }) //crea tag di chiusura per l'ultimo periodo del canto createSpanPeriodiTag(closeSTag, 'c', ultimaFormaCanto[2] - 1, currSentenceId, elverso, periodinum[currSentenceId]) //gestione risultati if (listaPeriodiRisultato.length) { for (msid of listaPeriodiRisultato) { loadPeriodo(msid) } } if (listaClausoleRisultato.length) { for (clsid of listaClausoleRisultato) { let tmpid = clsid.split('-') //loadFrase(tmpid[0], tmpid[1]) loadClausola(tmpid[0], tmpid[1], tmpid[2], tmpid[3]) } } if (listarisultati.length) { //evidenzia risultati for (ris of listarisultati) { idris = '#' + ris $(idris).addClass("font-weight-bold mark ") } } } function createCommentSpan(idVerso, elementoverso, numberOfComments) { var spanoccorrenza = $('<button />') spanoccorrenza.attr('id', idVerso) //btn-sm btn-outline-secondary spanoccorrenza.attr('class', 'btn btn-sm btn-outline-primary showcomments bg-light border-0 rounded text-primary px-1 pt-1 pb-0 ml-1'); if (numberOfComments > 1) { var commentIcon = '<ion-icon name="document-attach"></ion-icon><ion-icon name="add-circle-outline"></ion-icon>'; } else { var commentIcon = '<ion-icon name="document-attach"></ion-icon>'; } spanoccorrenza.append(commentIcon) //spanoccorrenza.append(number) spanoccorrenza.appendTo(elementoverso) } function createSpanPeriodiTag(separator, catgramm, pos, sentenceid, elementoverso, pnum) { var spanoccorrenza = $('<span />') spanoccorrenza.attr('id', 'sep_' + pos) spanoccorrenza.attr('title', catgramm) spanoccorrenza.attr('class', sentenceid + ' sentencetag font-weight-bold') spanoccorrenza.append(separator + " ") if (separator == closeSTag) { //aggiunge simbolo di chiusura dialogo for (const india in dialoghi) { if (dialoghi[india]['Cnt'].replace('_so', '') == sentenceid) { //PER GESTIONE PUNTEGGIATURA IN DIALOGHI, DA FARE //console.log(elementoverso.children().slice(-2).text()) if (elementoverso.children().slice(-2).text().includes(',')) { //console.log(' virgola ' +elementoverso.children().slice(-1).html()) //let paro=elementoverso.children().slice(-2).text().replace(',', '') //elementoverso.children().slice(-2).text(paro) //console.log(' virgola dopo' +elementoverso.children().slice(-1).html()) } elementoverso.children().slice(-1).html('» ') break; } } varsupel = $('<sup />') //varsupel.append(sentenceid.split('_')[3]+' ') varsupel.append(pnum + ' ') varsupel.appendTo(spanoccorrenza) } spanoccorrenza.css("display", "none") spanoccorrenza.appendTo(elementoverso) if (separator == openSTag) { //aggiunge simbolo di apertura dialogo for (const india in dialoghi) { if (dialoghi[india]['Cnt'].replace('_so', '') == sentenceid) { var enddiscorso = $('<span />') enddiscorso.append('«') enddiscorso.appendTo(elementoverso) break; } } } } function createSpanFormeNew(forma, catgramm, pos, sentenceid, clausefunct, elementoverso) { var spanoccorrenza = $('<span />') var nbsp = $('<span> </span>') spanoccorrenza.attr('id', pos) //spanoccorrenza.attr('data-cg', catgramm) spanoccorrenza.attr('title', catgramm) spanoccorrenza.attr('class', sentenceid + " " + clausefunct + ' ' + formaClass) spanoccorrenza.append(forma) spanoccorrenza.appendTo(elementoverso) nbsp.appendTo(elementoverso) } /* function createDivVersoNew(cantica, num, canto) { var elementoverso = createDivVersoGeneric(cantica, num, canto) elementoverso.appendTo('#' + cantica + canto) return elementoverso }*/ function createDivVersoLI(cantica, num, canto) { var elementoverso = createDivVersoGenericLi(cantica, num, canto) let cantoContainer = $('#' + cantica + canto); elementoverso.appendTo(cantoContainer.find('ol')) return elementoverso } function createDivVersoGenericLi(cantica, num, canto) { let digits = num.length var spannum = $('<span />') if (digits == 1) spannum.append('\xa0\xa0') if (digits == 2) spannum.append('\xa0') spannum.append(num + '. ') var elementoverso = $('<li />') //var elementoverso=$('<p />') //elementoverso.append(spannum) elementoverso.attr("value", num) //elementoverso.attr("style", "line-height: 1.0em") elementoverso.attr('class', 'f6 mb-0 text-muted text-nowrap font-weight-lighter ')//+cantica+' '+canto) //elementoverso.attr('class', 'text-nowrap ')//+cantica+' '+canto) elementoverso.attr('id', cantica + "_" + canto + "_" + num) elementoverso.append('\xa0') return elementoverso } function createAllDivCanti() { var divFrasi = $('<div />') var divDialoghi = $('<div />') var divMetafore = $('<div />') //var titoloFrasi = $('<h4 class="titolo-canto pb-2" />') var titoloDialoghi = $('<h4 class="titolo-canto pb-2" />') var titoloMetafore = $('<h4 class="titolo-canto pb-2" />') //titoloFrasi.append("Frasi:"); titoloDialoghi.append("Dialoghi:"); titoloMetafore.append("Metafore:"); divFrasi.attr('id', "vistaFrasi") divFrasi.attr('class', 'pb-4') divDialoghi.attr('id', "vistaDialoghi") divDialoghi.attr('class', 'pb-4') divMetafore.attr('id', "vistaMetafore") divMetafore.attr('class', 'pb-4') divFrasi.appendTo('#displaycanto') divDialoghi.appendTo('#displaycanto') divMetafore.appendTo('#displaycanto') divFrasi.css("display", "none") divDialoghi.css("display", "none") divMetafore.css("display", "none") //titoloFrasi.appendTo(divFrasi) titoloDialoghi.appendTo(divDialoghi) titoloMetafore.appendTo(divMetafore) for (cantica of cantiche) { for (var i = 1; i < 35; i++) { if (i == 34 && cantica !== "Inferno") { continue } canto = "Canto " + i cantoRomano = "Canto " + getRoman(i) var divcanto = $('<div />') var titolocanto = $('<h4 class="titolo-canto pb-2" />') titolocanto.append(cantica + ", " + cantoRomano) divcanto.attr('class', 'canto pt-3') divcanto.css("display", "none") divcanto.attr('id', (cantica + canto).replace(" ", "_")) titolocanto.appendTo(divcanto) //nuovo var olversi = $('<ol />') olversi.attr('class', 'pb-4') olversi.appendTo(divcanto) //fine nuovo divcanto.appendTo('#displaycanto') } } } //execute query async function executeQuerySearch(query) { //alert(query) $("#loader").fadeIn(300); //$("#searchcomm2").prop("disabled", true); //$("#searchcomm2").html('<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span> Searching...'); try { seachbBindingsStream = await myEngine.queryBindings(query, { sources: [{ type: 'sparql', value: sparqlEndpoint },], }); } catch (err) { $("#loader").fadeOut(300); //$("#searchcomm2").prop("disabled", false); //$("#searchcomm2").html('<span class="" role="status" aria-hidden="true"></span> Search'); console.log(err.message); }; try { var result = new Set() var resultClauses = new Set() var resultsInCantica = [] var resultsInCanto = [] seachbBindingsStream.on('data', (binding) => { //cantica if (binding.has('Cantica')) cantica = binding.get('Cantica').value; else cantica = 'Nessuna' //canto if (binding.has('Canto')) canto = binding.get('Canto').value; else canto = 'Canto 0' //numero del verso if (binding.has('NumeroVerso')) numverso = binding.get('NumeroVerso').value; else numverso = 0 //posizione del frammento if (binding.has('pos')) pos = binding.get('pos').value; else { pos = 0; } //regione della clausola var clfrom = binding.get('clfr').value; var clto = binding.get('clto').value; var clfunction = '' if (binding.has('clafunction')) clfunction = binding.get('clafunction').value.replaceAll(syntitNamespace, '') var clocc = '' if (binding.has('clocc')) clocc = binding.get('clocc').value.replaceAll(hdnNamespace, '') //var clfunction=binding.get('clf').value.replace(syntitNamespace,'') //id del periodo var sentenceid = '' if (binding.has('sentence')) sentenceid = binding.get('sentence').value.replace(hdnNamespace, '') if (pos && !result.has(pos)) { if (pos.includes(';')) { var posses = pos.slice(0, -1).split(';') for (po in posses) result.add(posses[po]) } else result.add(pos) resultsInCantica.push(cantica); resultsInCanto.push(cantica + canto) } if (unitaRicerca != 'frase' && pos == -1) { unitaRicerca = 'frase' } if (clfunction.includes(';')) { var funcs = clfunction.slice(0, -1).split(';') var occs = clocc.slice(0, -1).split(';') for (var mi = 0; mi < funcs.length; mi++) resultClauses.add(sentenceid + "-" + clfrom + '-' + clto + "-" + funcs[mi].trim().replace('ordinateClause', '').replace('MainClause', 'Ma') + '-' + cantica + '-' + canto + '-' + occs[mi]) } else resultClauses.add(sentenceid + "-" + clfrom + '-' + clto + "-" + clfunction.trim().replace('ordinateClause', '').replace('MainClause', 'Ma') + '-' + cantica + '-' + canto + '-' + clocc) //resultSentences.add(sentenceid)//NON USATO???? }); seachbBindingsStream.on('end', () => { var resSent = new Set() var resSentence = new Set() var resClauses = [] //let minim=$(" .minimap__content") console.log('start rendering...') listarisultati = Array.from(result) var listaclausole = Array.from(resultClauses) listaPeriodiRisultato = [] listaClausoleRisultato = [] listaClausoleRisultatoContesti = [] //Unità di ricerca è 'frase' if ((!listarisultati.length && unitaRicerca == 'forme') || unitaRicerca == 'frase') { //if (unitaRicerca == 'frase') { unitaRicerca = 'frase' resultsInCantica = [] resultsInCanto = [] //listaPeriodiRisultato = [] if (listaclausole.length) { for (var frase of listaclausole) { var fraseItems = frase.split('-'); //loadFrase(fraseItems[0].toString(), fraseItems[3].toString()) loadClausola(fraseItems[0].toString(), fraseItems[3].toString(), fraseItems[1], fraseItems[2]) resSent.add(fraseItems[0] + '-' + fraseItems[3] + '-' + fraseItems[1] + '-' + fraseItems[2]); //if (!resSent.has(fraseItems[0] + '-' + fraseItems[3])) { let tmpocc = fraseItems.slice(-1) if (resClauses.filter(clocc => clocc == tmpocc[0]).length == 0 || tmpocc[0]=='') { resClauses.push(tmpocc[0]); //resSent.add(fraseItems[0] + '-' + fraseItems[3]+'-'+fraseItems[1] + '-' + fraseItems[2]); resSentence.add(fraseItems[1] + '-' + fraseItems[2]); //resSent.add(fraseItems.slice(-1)) resultsInCantica.push(fraseItems[4]); resultsInCanto.push(fraseItems[4] + fraseItems[5]); } } listaClausoleRisultato = Array.from(resSent); } } //Unità di ricerca è 'periodo' if (unitaRicerca == 'periodo' && listaclausole.length) { resultsInCantica = [] resultsInCanto = [] //listaPeriodiRisultato=[] for (var frase of listaclausole) { var fraseItems = frase.split('-'); //var mysid = '.' + fraseItems[0].toString() listaPeriodiRisultato.push(fraseItems[0].toString()) loadPeriodo(fraseItems[0].toString()) loadClausola(fraseItems[0].toString(), fraseItems[3].toString(), fraseItems[1], fraseItems[2]) resSent.add(fraseItems[0] + '-' + fraseItems[3] + '-' + fraseItems[1] + '-' + fraseItems[2]); if (!resSent.has(fraseItems[0])) { resSent.add(fraseItems[0]); resultsInCantica.push(fraseItems[4]); resultsInCanto.push(fraseItems[4] + fraseItems[5]); } } listaClausoleRisultato = Array.from(resSent); } //Unità di ricerca è 'Discorso' if (unitaRicerca == 'discorso' && listaclausole.length) { console.log('Dialoghi') resultsInCantica = [] resultsInCanto = [] var tmplr = [] for (ris of listarisultati) { for (const india in dialoghi) { var tfr = parseInt(dialoghi[india]['Clfr']) var tto = parseInt(dialoghi[india]['Clto']) if (ris >= tfr && ris <= tto) { tmplr.push(ris) } } } listarisultati = tmplr for (var frase of listaclausole) { var fraseItems = frase.split('-'); var testf = fraseItems[0].toString(); for (const india in dialoghi) { var diaclass = dialoghi[india]['Cnt'].replace('_so', '') if (testf == diaclass) { listaPeriodiRisultato.push(fraseItems[0].toString()) loadPeriodo(fraseItems[0].toString()) loadClausola(fraseItems[0].toString(), fraseItems[3].toString(), fraseItems[1], fraseItems[2]) //resSent.add(fraseItems[0] + '-' + fraseItems[3] + '-' + fraseItems[1] + '-' + fraseItems[2]); if (!resSent.has(fraseItems[0])) { resSent.add(fraseItems[0]); resultsInCantica.push(fraseItems[4]); resultsInCanto.push(fraseItems[4] + fraseItems[5]); } continue } } } listaClausoleRisultato = Array.from(resSent); } if (listarisultati.length) { //evidenzia risultati for (ris of listarisultati) { idris = '#' + ris $(idris).addClass("mark ") minim.contents().find(idris).addClass("font-weight-bold mark ") } } //ordino la lista dei risultati listarisultati.sort(function(a, b) { return a - b }); // ordino la lista delle clausole del risultato listaClausoleRisultato.sort(function(a, b) { var valA = a.split('-')[2] var valB = b.split('-')[2] return valA - valB }); //crea la lista dei risultati per i contesti if (listaClausoleRisultato.length) { var tempr = new Set() for (singleres of listaClausoleRisultato) { tempr.add(singleres.split('-')[0]) } tempr.forEach(y => listaClausoleRisultatoContesti.push(listaClausoleRisultato.filter(x => (x.split('-')[0] == y) && x.split('-').length > 1))) } //aggiunge badge con totale risultati accanto alle cantiche var totResultN = showBadgeInCantica(resultsInCantica) //aggiunge badge con totale risultati nel bottone lista risultati var listIcon = ' <ion-icon name="list-outline"></ion-icon>'; if (totResultN > 0) { $("#headingZero").closest('.card').attr('style', 'display: d-flex;') var spanbadgelista = $('<span />'); spanbadgelista.attr('class', 'badge badge-warning badge-pill mx-2 '); spanbadgelista.append(totResultN + listIcon) spanbadgelista.appendTo($('#cantica0-badge')) } //aggiunge badge con totale risultati accanto ai canti showBadgeInCanto(resultsInCanto) console.log('badge end...') //calcolo numero dei contesti / countResultContexts() $("#loader").fadeOut(300); // mostra lista risultati $.manageResultList(0, showOffset); }); queryExecuted = true; //$(cantoDisplayed).attr('style', 'display: d-flex;'); $("#cantica0").trigger("click"); $("#vistaFrasi").css("display", "none"); } catch (err) { $("#loader").fadeOut(300); $("#searchcomm2").prop("disabled", false); $("#searchcomm2").html('<span class="" role="status" aria-hidden="true"></span> Search'); console.log(err.message); }; }; //VISUALIZZAZIONE BADGE RISULTATI IN CANTICA function showBadgeInCantica(resultsInCantica) { var i = 0, totResultN = 0 //var listIcon = '<ion-icon name="list-outline"></ion-icon>'; for (cantica of cantiche) { i += 1 let count = resultsInCantica.reduce((n, x) => n + (x === cantica), 0); if (count > 0) { totResultN += count var spanbadgecantica = $('<span />'); spanbadgecantica.attr('class', 'badge badge-warning badge-pill mx-2'); spanbadgecantica.append(count) spanbadgecantica.appendTo($('#cantica' + i + '-badge')) //$('#cantica' + i).after(spanbadgecantica) } } return (totResultN) } //VISUALIZZAZIONE BADGE RISULTATI IN CANTO function showBadgeInCanto(resultsInCanto) { var $nctags = $(' .navig-canto') for (cantica of cantiche) { for (k of Array(35).keys()) { if (k == 0) continue let count = resultsInCanto.reduce((n, x) => n + (x === cantica + 'Canto ' + k), 0); if (count > 0) { var spanbadge = $('<span />'); spanbadge.attr('class', cantobadgeclass); spanbadge.append(count) //spanbadge.appendTo($('[name="' + cantica + 'Canto ' + k + '"]')) spanbadge.appendTo($nctags.filter('[name="' + cantica + 'Canto ' + k + '"]')) //spanbadge.insertAfter($('[name="'+cantica+'Canto '+k+'"]')) } } } } /* * REGOLE DI PARSING PER VISUALIZZAZIONE CATEGORIE GRAMMATICALI */ const categoriegrammaticali = { "v": "Verbo", "s": "Sostantivo", "a": "Aggettivo", "p": "Pronome", "r": "Articolo", "b": "Avverbio", "e": "Preposizione", "c": "Congiunzione", "i": "Interiezione", "n": "Onomastica", "f": "Citazione", "l": "Locuzione", "r-e": "Articolo, Preposizione", "b-v": "Avverbio, Verbo", "p-v": "Pronome, Verbo", "b-p-v": "Avverbio, Pronome, Verbo", "b-p": "Avverbio, Pronome", "e-p": "Preposizione, Pronome", "a-s": "Aggettivo, Sostantivo", "e-r": "Preposizione, Articolo", "v-b": "Verbo, Avverbio", "v-p": "Verbo, Pronome", "v-p-b": "Verbo, Pronome, Avverbio", "p-b": "Pronome, Avverbio", "p-e": "Pronome, Preposizione", "s-a": "Sostantivo, Aggettivo", } var categoriegrammaticaliGrammar = `Expression = head:(Filtro){return 'Verbo,'+head.join()} Filtro= fhead:("v")? tail:( transitivita? diatesi? impersonalita? coniugazione? modotempo? persona? funzione? declinazione? genere? numero? grado?){return tail} diatesi= [a|p] {if (text()=='a') return ' Attivo'; else return ' Passivo';} transitivita=[i|t]? {if (text()=='t') return ' Transitivo'; else if (text()=='i') return ' Intransitivo';} impersonalita=([*|+])? {if (text()=='*') return ' Impersonale'; else if (text()=='+')return ' Riflessivo';} coniugazione=[1|2|3|4|5]? {switch(parseInt(text())){ case(1): return ' Prima coniugazione'; case(2): return ' Seconda coniugazione'; case(3): return ' Terza coniugazione'; case(4): return ' Ausiliare essere' case(5): return ' Ausiliare avere'}} modotempo=modo:"ip" {return(' Presente indicativo')}/ "ib" {return(" Passato Prossimo Indicativo")}/ "ii" {return(" Imperfetto Indicativo")}/ "ir" {return(" Passato Remoto Indicativo")}/ "is" {return( " Trapassato Prossimo Indicativo")}/ "it" {return( " Trapassato Remoto Indicativo")}/ "if" {return(" Futuro Semplice Indicativo")}/ "ia" {return(" Futuro Anteriore Indicativo")}/ "cp" {return( " Presente Congiuntivo")}/ "ci" {return( " Imperfetto Congiuntivo")}/ "cr" {return( " Passato Congiuntivo")}/ "ct" {return( " Trapassato Congiuntivo")}/ "dp" {return( " Presente Condizionale")}/ "dr" {return( " Passato Condizionale")}/ "mp" {return( " Presente Imperativo")}/ "fp" {return( " Presente Infinito")}/ "fr" {return( " Passato Infinito")}/ "pp" {return( " Presente Participio")}/ "pr" {return( " Passato Participio")}/ "gp" {return( " Presente Gerundio")}/ "gr" {return( " Passato Gerundio")}/ "pf" {return( " Participio Futuro")} persona="s1" {return(' Prima persona singolare')}/ "s2" {return(' Seconda persona singolare')}/ "s3" {return(' Terza persona singolare')}/ "p1" {return(' Prima persona plurale')}/ "p2" {return(' Seconda persona plurale')}/ "p3" {return(' Terza persona plurale')} funzione="a" {return(' Verbo Funzione Aggettivo')}/ "sm" {return(' Verbo Funzione Sostantivo maschile')}/ "sf" {return(' Verbo Funzione Sostantivo femminile')}/ "b" {return(' Verbo Funzione Avverbio')}/ "l" {return(' Verbo Funzione Locuzione')} declinazione=[1|2|3|4|5] {switch(parseInt(text())){ case(1): return ' Prima declinazione'; case(2): return ' Seconda declinazione'; case(3): return ' Terza declinazione'; case(4): return ' nd' case(5): return ' nd'}} genere=[f|m] {if (text()=='f') return ' Femminile'; else if (text()=='m') return ' Maschile';} numero=[s|p] {if (text()=='s') return ' Singolare'; else if (text()=='p') return ' Plurale';} grado="c+" {return(' Grado c+ singolare')}/ "c-" {return(' Grado c-')}/ "c=" {return(' Grado c=')} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var categoriaGrammaticaleSostantivo = ` Expression = head:(Filtro){return 'Sostantivo,'+head.join()} Filtro= fhead:("s")? tail:( genereforma? declinazionesostantivo? generelemma? numersingolareplurale? locuzione?){return tail} declinazionesostantivo= [1|2|3]? {switch(parseInt(text())){ case(1): return ' Prima declinazione'; case(2): return ' Seconda declinazione'; case(3): return ' Terza declinazione'}} genereforma=[m|f]? {if (text()=='m') return ' forma maschile'; else if (text()=='f') return ' forma femminile';} generelemma=[m|f]? {if (text()=='m') return ' lemma maschile'; else if (text()=='f') return ' lemma femminile';} numersingolareplurale=[s|p]? {if (text()=='s') return ' numero singolare'; else if (text()=='p') return ' numero plurale';} locuzione="Iv" {return('In Locuzione verbo');} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var categoriaGrammaticalePreposizione = ` Expression = head:(Filtro){return 'Preposizione,'+head.join()} Filtro= fhead:("e")? tail:( tipo1? tipo2? sintassi? complemento1? complemento2?){return tail} tipo1=[p|i] {if (text()=='i') return ' Impropria'; else if (text()=='p') return ' Impropria';} tipo2=modo:"a" {return(' Articolata')}/ "lx" {return(" In locuzione separata")}/ "l" {return(" In locuzione")} / "s" {return(" Semplice")} sintassi=[sodbfcnutmezlpa] {if (text()=='s') return ' Soggettiva'; if (text()=='o') return ' Oggettiva'; if (text()=='d') return ' Dichiarativa'; if (text()=='b') return ' Completiva obliqua'; if (text()=='f') return ' Finale'; if (text()=='c') return ' Causale'; if (text()=='n') return ' Concessiva'; if (text()=='u') return ' Consecutiva'; if (text()=='t') return ' Temporale'; if (text()=='m') return ' Modale'; if (text()=='e') return ' Eccettuativa'; if (text()=='z') return ' Esclusiva'; if (text()=='l') return ' Limitativa'; if (text()=='p') return ' Comparativa'; if (text()=='a') return ' Avversativa';} complemento1="ktd" {return(" Di tempo determinato")} / "ktc" {return(" Di tempo continuato")} / "kt" {return(' Di tempo')}/ "kdl" {return(" Di moto da luogo")} / "kd" {return(" Di termine")}/ "kv" {return(" Di vantaggio")} / "ksl" {return(" Di stato in luogo")} / "ks" {return(" Di svantaggio")} / "kg" {return(" Di specificazione")} / "kml" {return(" Di moto a luogo")} / "km" {return(" Di modo")} / "kw" {return(" Di mezzo")} / "kc" {return(" Di compagnia")} / "ku" {return(" Di unione")} / "ka" {return(" Di allontanamento/separazione")} / "kz" {return(" Di materia")} / "kl" {return(" Di luogo")} / "ko" {return(" Di sostanza")} / "kpl" {return(" Di moto per luogo")} / "kps" {return(" Predicativa del soggetto")} / "kpo" {return(" Predicativa dell'oggetto")} complemento2= "kp" {return(" Di Limitazione")} / "kq" {return(" Di Qualità")} / "kr" {return(" Di Causa")} / "ki" {return(" Di Agente")} / "ke" {return(" Di Causa Efficiente")} / "kf" {return(" Di Fine Scopo")} / "ky" {return(" Di Paragone")} / "kx" {return(" Di Argomento")} / "kb" {return(" Distributivo")} / "kj" {return(" Di Sostituzione")} / "kn" {return(" Di Estensione")} / "k1b" {return(" Indiretta Benefattiva")} / "k1p" {return(" Indiretta Possessore")} / "k1o" {return(" Indiretta Oggetto")} / "k1d" {return(" Indiretta Dativo")} / "k1e" {return(" Indiretta Esperiente")} / "k2" {return(" Simmetrica")} / "k3" {return(" Di Pena")} / "k4" {return(" Di Effetto")} / "k5" {return(" Concessiv")} / "k6" {return(" Di Origine Provenienza")} / "k7" {return(" Di Abbondanza/Privazione")} / "k8" {return(" Partitiva")} / "k9" {return(" Di Denominazione")} / "k10" {return(" Di Colpa")} / "k11" {return(" Di Quantità")} / "k12" {return(" Di Peso")} / "k13" {return(" Di Esclusione")} / "k14" {return(" Di Rapporto")} ` var avverbio = ` Expression = head:(Filtro){return 'Avverbio,'+head.join()} Filtro= fhead:("b")? tail:( fake? tipo?){return tail} fake= "" tipo="c+" {return(' Avverbio al Comparativo di Maggioranza')}/ "c-" {return(' Avverbio al Comparativo di Minoranza')}/ "sa" {return(' Avverbio al Superlativo Assoluto')}/ "sr" {return(' Avverbio al Superlativo Relativo')}/ "lz" {return(' Avverbio in Locuzione Separato')}/ "l" {return(' Avverbio in Locuzione')}/ "y" {return(' Avverbio Proclitico')}/ "x" {return(' Avverbio Enclitico')}/ "c" {return(' Avverbio al Comparativo di Uguaglianza')} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var pronome = ` Expression = head:(Filtro){return 'Pronome,'+head.join()} Filtro= fhead:("p")? tail:( tipo_pronome? classe_pronome? genere_pronome? numero_pronome? forma_pronome? funzione_pronome? tiporiflessivi?){return tail} tipo_pronome= "p" {return(' Pronome Personale')}/ "f" {return(" Pronome Riflessivo")}/ "s" {return(" Pronome Possessivo")}/ "d" {return(" Pronome Dimostrativo")}/ "i" {return(" Pronome Indefinito")}/ "r" {return(" Pronome Relativo")}/ "t" {return(" Pronome Interrogativo")}/ "e" {return(" Pronome Esclamativo")}/ "n" {return(" Pronome Numerale")} classe_pronome= "1" {return(" Prima Classe Persona")}/ "2" {return(" Seconda Classe Persona")}/ "3" {return(" Terza Classe Persona")} genere_pronome= "m" {return(" Maschile")}/ "f" {return(" Femminile")}/ "n" {return(" Neutro")} numero_pronome= "s" {return(" Singolare")}/ "p" {return(" Plurale")} forma_pronome= "l" {return(" Pronome Libero")}/ "i" {return(" Pronome Libero In Composizione")}/ "y" {return(" Pronome Proclitico")}/ "x" {return(" Pronome Enclitico")} funzione_pronome="so" {return(' Libero Soggetto')}/ "soi" {return(' Libero Soggetto Impersonale')}/ "co" {return(' Libero Complemento')}/ "ra" {return(' Libero Rafforzativo')}/ "ac" {return(' Clitico Accusativo')}/ "da" {return(' Clitico Dativo')}/ "pt" {return(' Clitico Partitivo')} tiporiflessivi="pr" {return(' Proprio')}/ "le" {return(' Lessicalizzato')}/ "im" {return(' Impersonale')}/ "pa" {return(' Passivo')}/ "re" {return(' Reciproco')} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var categoriaGrammaticaleAggettivo = ` Expression = head:(Filtro){return 'Aggettivo,'+head.join()} Filtro= fhead:("a")? tail:( tipo_aggettivo classe_aggettivo? genere_aggettivo? numero_aggettivo? grado_aggettivo? tipo_complemento? tipo_frase? oggetto_indiretto?){return tail} tipo_aggettivo = "i" {return(" Indefinito")}/ "t" {return(" Interrogativo")}/ "e" {return(" Esclamativo")}/ "n" {return(" Numerale")}/ "d" {return(" Dimostrativo")}/ "r" {return(" Relativo")}/ "s" {return(" Possessivo")}/ "l" {return(" In locuzione")}/ "" {return(" Qualificativo")} classe_aggettivo = "1" {return(" Prima Classe")}/ "2" {return(" Seconda Classe")} genere_aggettivo= "m" {return(" Maschile")}/ "f" {return(" Femminile")}/ "n" {return(" Neutro")} numero_aggettivo= "s" {return(" Singolare")}/ "p" {return(" Plurale")} grado_aggettivo = "c+" {return(" Comparativo Di Maggioranza")}/ "c-" {return(" Comparativo Di Minoranza")}/ "c=" {return(" Comparativo Di Uguaglianza")}/ "sr" {return(" Superlativo Relativo")}/ "sa" {return(" Superlativo Assoluto")} tipo_complemento ="xc10" {return(" Introdotto Da VERSO")}/ "xc11" {return(" Introdotto Da SOPRA")}/ "xc12" {return(" Introdotto Da SOTTO")}/ "xc13" {return(" Introdotto Da DINANZI")}/ "xc1" {return(" Introdotto Da A")}/ "xc2" {return(" Introdotto Da CON")}/ "xc3" {return(" Introdotto Da CONTRO")}/ "xc4" {return(" Introdotto Da DA")}/ "xc5" {return(" Introdotto Da DI")}/ "xc6" {return(" Introdotto Da IN")}/ "xc7" {return(" Introdotto Da PER")}/ "xc8" {return(" Introdotto Da SU")}/ "xc9" {return(" Introdotto Da TRA")}/ "xc" {return(" Introdotto Da Preposizione")}/ "xo1" {return(" Oggetto Ind")}/ "xo5" {return(" Oggetto Ind Compl Con DI")}/ "xo" {return(" Oggetto Ind Pronom")} tipo_frase = "xf1" {return("Con Infinito Retto Da A")}/ "xf2" {return("Con Infinito Retto Da DA")}/ "xf3" {return("Con Infinito Retto Da DI")}/ "xf4" {return("Con Infinito Retto Da PER")}/ "xf5" {return("Con Infinito Retto Da SE")}/ "xh1" {return("Con Subordinata All Indicativo")}/ "xh2" {return("Con Subordinata Al Congiuntivo")}/ "xz1" {return("In Locuzione Imp Infinito")}/ "xz2" {return("In LocuzioneImp Che Indicativo")}/ "xz3" {return("In Locuzione Imp Che Congiuntivo")}/ "xz4" {return("In Locuzione Imp Se Indicativo")}/ "xz5" {return("In Locuzione Imp Se Congiuntivo")}/ "xz6" {return("In Locuzione Imp Come Indicativo")}/ "xz7" {return("In Locuzione Imp Quando Indicativo")}/ "xz8" {return("In Locuzione Imp Perché Congiuntivo")}/ "xz9" {return("In Locuzione Imp A Infinito")} oggetto_indiretto = ",o" {return(" Con Oggetto Indiretto")} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var categoriaGrammaticaleArticolo = ` Expression = head:(Filtro){return 'Articolo,'+head.join()} Filtro= fhead:("r")? tail:( tipo? genere? numero?){return tail} tipo = "d" {return(" Determinativo")}/ "i" {return(" Indeterminativo")} genere = "m" {return(" Maschile")}/ "f" {return(" Femminile")} numero = "s" {return(" Singolare")}/ "p" {return(" Plurale")} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var citazione = ` Expression = head:(Filtro){return 'Citazione,'+head.join()} Filtro= fhead:("f") tail:( fake? tipo?){return tail} fake = "" tipo="l" {return(' Citazione Latina')}/ "p" {return(' Citazione Provenzale')}/ "r" {return(' Citazione Francese')}/ "s" {return(' Citazione Spagnola')}/ "e" {return(' Citazione Ebraica')}/ "g" {return(' Citazione Greca')} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var onomastica = `Expression = head:(Filtro){return 'Onomastica,'+head.join()} Filtro= fhead:("n") tail:( proprio tipo?){return tail} tipo="x" {return(' Separato')}/ "t" {return(' Titolo')} proprio = "p" {return("Nome Proprio")} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` var congiunzione = ` Expression = head:(Filtro){return 'Congiunzione,'+head.join()} Filtro= fhead:("c") tail:( tipo? cordinativasubordinativa? tipocoordinativa? tiposubordinativa* complementodue?){return tail} tipo = "lx" {return(' LocuzioneSeparata')}/ "c" {return(" Composta")}/ "l" {return(" Locuzione")}/ "s" {return(" Semplice")} cordinativasubordinativa = "c" {return(" Coordinativa")}/ "s" {return(" Subordinativa")} tipocoordinativa = "c" {return(" Copulativa")}/ "d" {return(" Disgiuntiva")}/ "a" {return(" Avversativa")}/ "n" {return(" Conclusiva")}/ "e" {return(" Esplicativa")}/ "r" {return(" Correlativa")} tiposubordinativa = "s" {return(" Soggettiva")}/ "o" {return(" Oggettiva")}/ "d" {return(" Dichiarativa")}/ "b" {return(" Completiva Obliqua")}/ "i" {return(" Interrogativa")}/ "f" {return(" Finali")}/ "c" {return(" Causali")}/ "n" {return(" Concessiva")}/ "u" {return(" Consecutiva")}/ "t" {return(" Temporale")}/ "m" {return(" Modale")}/ "e" {return(" Eccettuativa")}/ "p" {return(" Comparativa")}/ "v" {return(" Condizionale")}/ "z" {return(" Esclusiva")}/ "l" {return(" Limitativa")} complementodue = "x" {return(" Locuzione Separata")} Integer "integer" = _ [0-9]+ { return parseInt(text(), 10); } _ "whitespace"= " "* ` //parser per categorie grammaticali var parserVerbi = peg.generate(categoriegrammaticaliGrammar); var parserSostantivi = peg.generate(categoriaGrammaticaleSostantivo); var parserPreposizioni = peg.generate(categoriaGrammaticalePreposizione); var parserAvverbi = peg.generate(avverbio); var parserPronomi = peg.generate(pronome); var parserAggettivi = peg.generate(categoriaGrammaticaleAggettivo); var parserArticolo = peg.generate(categoriaGrammaticaleArticolo); var parserCitazione = peg.generate(citazione); var parserOnomastica = peg.generate(onomastica); var parserCongiunzione = peg.generate(congiunzione); });