/** * */ var resetResult; $(document).ready(function() { 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",} const cantobadgeclass = 'badge badge-outline-info badge-pill' const sparqlGenerator = sparqljs.Generator; const myEngine = new Comunica.QueryEngine(); const sparqlEndpoint = "https://hdnlab1.isti.cnr.it/fuseki/commediaontosintgra/query"; var listaVersi = new Set() var currentMinimap = '' var listarisultati = []; var minimapScrolling = false; var displayId = 'displaycanto' var minimapTopPos; //used in minimap // let minimap = document.createElement('div'); let minimapSize = document.createElement('div'); let viewer = document.createElement('div'); let minimapContent = document.createElement('iframe'); let scale = 0.1; let realScale; let mappedElement = ''; resetResult=function(){ //console.log('clean result') cleanSearchResult() esprlogica = [] } hideMinimap(); createAllDivCanti() const start = performance.now(); showCantica('Inferno') showCantica('Purgatorio') showCantica('Paradiso') $("#InfernoCanto_1").attr('style', 'display:block') drawMinimap("InfernoCanto_1") const end = performance.now(); console.log(`Load cantiche time: ${end - start} ms`); $("[data-cg]").hover(function() { var details=getHoverContent($(this).data("cg")) var index = details.indexOf(","); var categoria = ""; if (index != -1){ categoria = details.substring(0,index); details = details.substring(index+1); }else{ categoria = details; details = ""; } $(this).popover({title: categoria, content: details, trigger: "click"}); }); var mmih = 0 var mmiw = 0 $("#" + displayId).scroll(function() { if (minimapScrolling) { minimapScrolling = false console.log('no scroll') } else { console.log('yes scrolling') console.log("viewer top pos before: " + $('#minimapviewer').offset().top) trackScrollCanto() console.log("viewer top pos after: " + $('#minimapviewer').offset().top) } }); jQuery(document).delegate('.navig-canto', 'click', function(e) { $('.canto').each(function() { $(this).attr("style", 'display:none'); }); // Crea id per la div che contiene il canto $("#" + $(this).attr('name').replace(" ", "_")).attr('style', 'display:block') manageMiniMap(this); }); function manageMiniMap(divElem) { mmiw = $("#" + displayId).innerWidth(); mmih = $("#" + displayId).innerHeight(); drawMinimap($(divElem).attr('name').replace(" ", "_")) } //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 getHoverContent(categ){ //console.log('Categoria '+categ) if(categ.includes('-')){ categs=categ.split('-') mycat=[] for (cat of categs){ mycat.push(cat[0]) } console.log(mycat.join('-')) return categoriegrammaticali[mycat.join('-')] } 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() } //console.log(categ[0]) return categoriegrammaticali[categ[0]] } function drawMinimap(name){ showMinimap(name) currentMinimap = name; //mmviewer diventa draggable var minimapTopPos = $('#minimapviewer').offset().top console.log("top viewer init " + minimapTopPos) $('#minimapviewer').draggable({ axis: "y", containment: $('#displayminimap'), scroll: false, start: function(event, ui) { minimapScrolling = true; }, stop: function(event, ui) { minimapScrolling = false; }, drag: function(event, ui) { minimapScrolling = true; trackScrollViewer(ui.offset.top - minimapTopPos); console.log(ui); } }); } function cleanSearchResult() { for (verso of listarisultati) { idverso = '#' + verso $(idverso).attr('class', 'f6 text-secondary text-nowrap font-weight-lighter') } $(".badge").remove(); listarisultati = [] if (currentMinimap != '') showMinimap(currentMinimap) } function manageQuery(){ cleanSearchResult() esprlogica = [] jsonQuery=getJsonQuery() console.log("got json query") if(jsonQuery['QueryAvanzata']==0 && jsonQuery['Clausola0']['queryText']==''){ alert('Digitare una stringa da cercare') return } jsonQuery = buildSQ(jsonQuery) myquery = new sparqlGenerator().stringify(jsonQuery) console.log(myquery) executeQuerySearch(myquery) } //minimap management function showMinimap(element) { mmplace = document.getElementById('displayminimap') minimap.className = 'minimap__container' minimapSize.className = 'minimap__size' viewer.className = 'minimap__viewer' viewer.id = 'minimapviewer' minimapContent.className = 'minimap__content' minimap.append(minimapSize, viewer, minimapContent); mmplace.appendChild(minimap) let html = document.getElementById(element).outerHTML//innerHTML if (html == null | html == '') return; let iFrameDoc = minimapContent.contentWindow.document; var cssLinkb = document.createElement("link"); cssLinkb.href = "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"; cssLinkb.rel = "stylesheet"; cssLinkb.type = "text/css"; var cssLinkscroll = document.createElement("link"); cssLinkscroll.href = "./css/browsingldc.css"; cssLinkscroll.rel = "stylesheet"; cssLinkscroll.type = "text/css"; iFrameDoc.open(); iFrameDoc.write(html); iFrameDoc.close(); iFrameDoc.head.appendChild(cssLinkb); iFrameDoc.head.appendChild(cssLinkscroll); mappedElement = element getDimensionsDiv() window.addEventListener('scroll', trackScroll) window.addEventListener('resize', getDimensionsDiv) } function getInnerHeight(elm) { var computed = getComputedStyle(elm), padding = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom); return elm.clientHeight - padding } function getDimensionsDiv() { var cantoplace = document.getElementById(displayId) var elementplace = document.getElementById(mappedElement) var bodyWidth = elementplace.clientWidth; var bodyRatio = elementplace.clientHeight / bodyWidth; let winRatio = getInnerHeight(cantoplace) / (cantoplace.clientWidth); //minimap.style.width='15%'; minimap.style.width = '100%'; realScale = minimap.clientWidth / bodyWidth; minimapSize.style.paddingTop = `${bodyRatio * 100}%` viewer.style.paddingTop = `${winRatio * 100}%`; minimapContent.style.transform = `scale(${realScale})`; minimapContent.style.width = `${(100 / realScale)}%`; minimapContent.style.height = `${(100 / realScale)}%`; //minimapContent.style.height=`100%`; minimapContent.style.float = 'right'; } function trackScroll() { //console.log(window.scrollY) viewer.style.transform = `translateY(${window.scrollY * realScale}px)` } function trackScrollCanto() { console.log('cantoscrollT*realscale ' + document.getElementById(displayId).scrollTop * realScale + ' top: ' + document.getElementById(displayId).scrollTop) viewer.style.transform = `translateY(${document.getElementById(displayId).scrollTop * realScale}px)` } function trackScrollViewer(toppos) { console.log('scrollMMView top*1/realScale: ' + toppos * (1 / realScale) + ' top pos: ' + toppos) did = document.getElementById(displayId) did.scrollTop = (toppos * (1 / realScale)) } function hideMinimap() { $('.canto').each(function() { $(this).attr("style", 'display:none'); }); $(".minimap__container").remove(); currentMinimap = '' } //Cantica management functions function showCantica(cantica) { //var listaCanti = new Set() var setVersi = new Set() //$("#loader").show(); var containerForme = formeprima if (cantica == 'Paradiso') containerForme = formeterza if (cantica == 'Purgatorio') containerForme = formeseconda const endlc = performance.now(); console.log(`Load `+cantica+` time: ${endlc - start} ms`); var elverso, formaItem for (var cmpItem of containerForme) { formaItem = cmpItem.split("_") //createDivVerso(cantica, num, canto, forma, catgram, pos) if (! setVersi.has(cantica + "_" + formaItem[3] + "_" + 'Canto_' + formaItem[1])){ elverso=createDivVerso(cantica, formaItem[3], 'Canto_' + formaItem[1], formaItem[0], formaItem[4], formaItem[2]) setVersi.add(cantica+ "_" + formaItem[3] + "_" + 'Canto_' + formaItem[1]) } else{ //setVersi = createDivVersi(setVersi, cantica, formaItem[3], 'Canto_' + formaItem[1]) createSpanFormeNew(cantica, 'Canto_' + formaItem[1], formaItem[3], formaItem[0], formaItem[4], formaItem[2], elverso) } /* forma.numverso = formaItem[3]; forma.canto = 'Canto ' + formaItem[1]; forma.pos = formaItem[2]; forma.form = formaItem[0]; forma.catgramm = formaItem[4]; forma.cantica = cantica; createSpanForme(forma) */ } //$("#loader").hide(); return } /* function createSpanForme(element) { var spanoccorrenza = $('') var pos = parseInt(element.pos) spanoccorrenza.attr('id', element.cantica + "_" + element.canto.replace(" ", "_") + "_" + element.numverso + "_" + pos) spanoccorrenza.attr('data-cg', element.catgramm) if (listarisultati.length > 0 && listarisultati.includes(spanoccorrenza.attr('id'))) spanoccorrenza.attr('class', "font-weight-bold mark ") spanoccorrenza.append(element.form.replaceAll("%20", " ")) elementoverso = $('#' + element.cantica + "_" + element.canto.replace(" ", "_") + "_" + element.numverso) spanoccorrenza.appendTo(elementoverso) elementoverso.append(' ') } */ function createSpanFormeNew(cantica, canto, numverso, forma, catgramm, pos, elementoverso) { var spanoccorrenza = $('') //var pos = parseInt(pos) spanoccorrenza.attr('id', cantica + "_" + canto+ "_" + numverso + "_" + pos) spanoccorrenza.attr('data-cg', catgramm) //if (listarisultati.length > 0 && listarisultati.includes(spanoccorrenza.attr('id'))) // spanoccorrenza.attr('class', "font-weight-bold mark ") spanoccorrenza.append(forma+" ") //elementoverso = $('#' + cantica + "_" + canto + "_" + numverso) spanoccorrenza.appendTo(elementoverso) //elementoverso.append(' ') } function createDivVersi(setVersi, cantica, num, canto) { if (setVersi.has(cantica + "_" + num + "_" + canto)) return setVersi else { var elementoverso = $('
') elementoverso.append(num + ". ") elementoverso.attr("style", "line-height: 0.5em") elementoverso.attr('class', 'f6 text-secondary text-nowrap font-weight-lighter') elementoverso.attr('id', cantica + "_" + canto + "_" + num) elementoverso.appendTo('#' + cantica + canto) setVersi.add(cantica + "_" + num + "_" + canto) return setVersi } } function createDivVerso(cantica, num, canto, forma, catgram, pos) { var elementoverso = $('') elementoverso.append(num + ". ") elementoverso.attr("style", "line-height: 0.5em") elementoverso.attr('class', 'f6 text-secondary text-nowrap font-weight-lighter') elementoverso.attr('id', cantica + "_" + canto + "_" + num) var spanoccorrenza = $('') //var pos = parseInt(pos) spanoccorrenza.attr('id', cantica + "_" + canto+ "_" + num + "_" + pos) spanoccorrenza.attr('data-cg', catgram) spanoccorrenza.append(forma+" ") spanoccorrenza.appendTo(elementoverso) elementoverso.appendTo('#' + cantica + canto) return elementoverso } /* function createDivCanti(orderedListaCanti, cantica, canto) { if (orderedListaCanti.has(canto)) { return orderedListaCanti } var divcanto = $('') var titolocanto = $('') titolocanto.append(cantica + ", " + canto) divcanto.attr('class', 'canto') divcanto.attr('style', 'display:none') divcanto.attr('id', (cantica + canto).replace(" ", "_")) titolocanto.appendTo(divcanto) divcanto.appendTo(' .blog-main') orderedListaCanti.add(canto) return orderedListaCanti } */ function createAllDivCanti() { cantiche=["Inferno", "Purgatorio","Paradiso"] for (cantica of cantiche){ for (var i=1; i<35; i++){ if(i==34 && cantica!=="Inferno"){ continue } canto= "Canto "+i var divcanto = $('') var titolocanto = $('') titolocanto.append(cantica + ", " + canto) divcanto.attr('class', 'canto') divcanto.attr('style', 'display:none') divcanto.attr('id', (cantica + canto).replace(" ", "_")) titolocanto.appendTo(divcanto) divcanto.appendTo(' .blog-main') } } } //execute query async function executeQuerySearch(query) { $("#loader").show(); seachbBindingsStream = await myEngine.queryBindings(query, { sources: [{ type: 'sparql', value: sparqlEndpoint },], }); //console.log(query) alert(query) try { var result = new Set() var resultsInCantica = [] var resultsInCanto = [] seachbBindingsStream.on('data', (binding) => { //cantica cantica = binding.get('Cantica').value; //canto canto = binding.get('Canto').value; //numero del verso numverso = binding.get('NumeroVerso').value; //posizione del frammento pos = binding.get('pos').value; if (!result.has(cantica + "_" + canto.replace(" ", "_") + "_" + numverso + "_" + pos)){ result.add(cantica + "_" + canto.replace(" ", "_") + "_" + numverso + "_" + pos) resultsInCantica.push(cantica); resultsInCanto.push(cantica + canto) } }); seachbBindingsStream.on('end', () => { listarisultati = Array.from(result) cantiche = ["Inferno", "Purgatorio", "Paradiso"] //evidenzia risultati for (ris of listarisultati) { idris = '#' + ris $(idris).attr('class', "font-weight-bold mark ") } //aggiunge badge con totale risultati accanto alle cantiche i = 0 for (cantica of cantiche) { i += 1 let count = resultsInCantica.reduce((n, x) => n + (x === cantica), 0); if (count>0){ var spanbadgecantica = $(''); spanbadgecantica.attr('class', 'badge badge-primary badge-pill ml-1'); spanbadgecantica.append(count) spanbadgecantica.appendTo($('#cantica' + i)) } } //aggiunge badge con totale risultati accanto ai canti 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 = $(''); spanbadge.attr('class', cantobadgeclass); spanbadge.append(count) //$("[name='nameofobject']") spanbadge.appendTo($('[name="' + cantica + 'Canto ' + k + '"]')) //spanbadge.insertAfter($('[name="'+cantica+'Canto '+k+'"]')) } } } //aggiorna minimap if (currentMinimap != '') { showMinimap(currentMinimap) } $("#loader").hide(); }); } catch (err) { console.log(err.message); }; }; /* * REGOLE DI PARSING PER VISUALIZZAZIONE PROPRIETÀ */ 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"= " "* ` //parser per categorie 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); });