MAJ (prise en compte des paragraphes long sur deux pages avec des sauts

automatiques)
This commit is contained in:
pablo rodriguez 2022-11-19 10:30:49 +01:00
parent 350ed329b1
commit ca54648e16
8 changed files with 131 additions and 52 deletions

Binary file not shown.

1
bin/.gitignore vendored
View File

@ -1 +1,2 @@
/MEPTL/ /MEPTL/
/fenetres/

Binary file not shown.

Binary file not shown.

View File

@ -677,13 +677,13 @@ public class meptl {
page = nodpage.get(nodpage.size()-1); // dernière page enregistrer pour insérer des enfants en bas de la boucle page = nodpage.get(nodpage.size()-1); // dernière page enregistrer pour insérer des enfants en bas de la boucle
//******************************************************************************
// les sauts automatiques de page dans les paragraphes (text:soft-page-break) //** les sauts automatiques de page dans les paragraphes (text:soft-page-break)
//******************************************************************************
if(nodstructure.getNodes().get(j).retourneEnfantsByNameExist("text:soft-page-break")) { if(nodstructure.getNodes().get(j).retourneEnfantsByNameExist("text:soft-page-break")) {
boolean insertionFait=false;
ArrayList<node> nods1 = a.retourneNames(nodstructure.getNodes().get(j), "text:soft-page-break"); ArrayList<node> nods1 = a.retourneNames(nodstructure.getNodes().get(j), "text:soft-page-break");
if(nods1.size()>1) { if(nods1.size()>1) {
for(int k = 0 ; k < nods1.size();k++) {
node p = new node(); node p = new node();
p.setNomElt("page"); p.setNomElt("page");
p.getAttributs().put("numero", String.valueOf(compteurpage)); p.getAttributs().put("numero", String.valueOf(compteurpage));
@ -691,13 +691,13 @@ public class meptl {
p.getAttributs().put("index",String.valueOf(j)); p.getAttributs().put("index",String.valueOf(j));
// recherche de l'index parmis les enfants du node text:soft-page-break. // recherche de l'index parmis les enfants du node text:soft-page-break.
int[] indexBreak = new int[nods1.size()+1]; int[] indexBreak = new int[nods1.size()];
indexBreak[0]=0; indexBreak[0]=0;
for(int v = 1 ; v < nods1.size()+1 ; v++) { for(int v = 0 ; v < nods1.size() ; v++) {
indexBreak[v]=-1; indexBreak[v]=-1;
} }
int i2 = 1; int i2 = 0;
for(int v = 0 ; v < nodstructure.getNodes().get(j).getNodes().size(); v++) { for(int v = 0 ; v < nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getNodes().get(v).getNomElt().equals("text:soft-page-break")) { if(nodstructure.getNodes().get(j).getNodes().get(v).getNomElt().equals("text:soft-page-break")) {
indexBreak[i2]=v; indexBreak[i2]=v;
@ -708,54 +708,106 @@ public class meptl {
//Détermine s'il y a que du texte vide avant le saut automatique //Détermine s'il y a que du texte vide avant le saut automatique
boolean[] ContenusVidesAvantBreak = new boolean[nods1.size()]; boolean[] ContenusVidesAvantBreak = new boolean[nods1.size()];
boolean[] insertionRealiser = new boolean[nods1.size()];
for(int v = 0 ; v < nods1.size() ; v++) { for(int v = 0 ; v < nods1.size() ; v++) {
ContenusVidesAvantBreak[v]=true; ContenusVidesAvantBreak[v]=true;
insertionRealiser[v]=false;
} }
for(int u = 0; u < nods1.size() ; u++) {
for(int v = 0 ; v <= indexBreak[u]; v++) {
if(nodstructure.getNodes().get(j).getContenu().get(v)!=null) {
if(ContenusVidesAvantBreak[u]) {
if(!nodstructure.getNodes().get(j).getContenu().get(v).isEmpty()) {
ContenusVidesAvantBreak[u]=false;
}
}
if(v==indexBreak[u] && !ContenusVidesAvantBreak[u]) {
nodstructure.getNodes().get(j).getContenu().set(
v,nodstructure.getNodes().get(j).getContenu().get(v) + "** TEXT:SOFT-PAGE-BREAK **");
}
}
}
}
// Contenu & node après le text:soft-page-break
node[] textSoftPageBreak = new node[nods1.size()];
for(int u = 0; u < nods1.size() ; u++) { for(int u = 0; u < nods1.size() ; u++) {
textSoftPageBreak[u] = new node();
textSoftPageBreak[u].setNomElt("saut:automatique");
for(int v = indexBreak[u] ; v <= indexBreak[u+1]; v++) { if(!ContenusVidesAvantBreak[u]) {
System.out.println("De " + indexBreak[u] + " à "+ indexBreak[u+1] ); // Ajoute dans le node textSoftPageBreak
if(nodstructure.getNodes().get(j).getContenu().get(v)!=null) { for(int v = indexBreak[u]+1 ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(!nodstructure.getNodes().get(j).getContenu().get(v).isEmpty()) { if(nodstructure.getNodes().get(j).getContenu().size()>v) {
ContenusVidesAvantBreak[u]=false; textSoftPageBreak[u].getContenu().add(nodstructure.getNodes().get(j).getContenu().get(v));
} }
if(v==indexBreak[u+1]) { if(nodstructure.getNodes().get(j).getNodes().size()>v) {
nodstructure.getNodes().get(j).getContenu().set( textSoftPageBreak[u].getNodes().add(nodstructure.getNodes().get(j).getNodes().get(v));
v,nodstructure.getNodes().get(j).getContenu().get(v) + "** TEXT:SOFT-PAGE-BREAK **");
} }
} }
// suprresion des contenus et des nodes enfants dans le paragraphe dans le paragraphe
for(int v = indexBreak[u]+1 ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getContenu().size()>indexBreak[u]+1) nodstructure.getNodes().get(j).getContenu().remove(indexBreak[u]+1);
}
for(int v = indexBreak[u] ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getNodes().size()>indexBreak[u]) nodstructure.getNodes().get(j).getNodes().remove(indexBreak[u]);
}
} }
} }
if(!insertionFait) { for(int u = 0; u < nods1.size() ; u++) {
if(ContenusVidesAvantBreak[0]) { if(ContenusVidesAvantBreak[0]) {
// place le node dans la même page du node p. if(!insertionRealiser[0]) {
p.getNodes().add(nodstructure.getNodes().get(j)); p.getNodes().add(nodstructure.getNodes().get(j));
}else { insertionRealiser[0]=true;
// place le node de la page précédente nodpage.add(p);
nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j)); compteurpage++;
node p1 = new node();
p1.setNomElt("page");
p1.getAttributs().put("numero", String.valueOf(compteurpage));
p1.getAttributs().put("type","automatique");
p1.getAttributs().put("index",String.valueOf(j));
p1.getNodes().add(textSoftPageBreak[u+1]);
insertionRealiser[1]=true;
if(nods1.size()<3) {
nodpage.add(p1);
compteurpage++;
}
}
if(!insertionRealiser[0]&&!ContenusVidesAvantBreak[0]) {
// place le node de la page précédente
nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j)); //ok
// place le textSoftPageBreak sur la page du node p.
p.getNodes().add(textSoftPageBreak[u]);
}
} }
insertionFait=true;
} }
if(!insertionRealiser[0]&&!insertionRealiser[1]) {
nodpage.add(p);
if(!insertionFait) { compteurpage++;
nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j));
// p.getNodes().add(nodstructure.getNodes().get(j)); //insertion du paragraphe (text:p) qui contient le saut automatique
insertionFait=true;
} }
nodpage.add(p);
compteurpage++;
}
page = nodpage.get(nodpage.size()-1); page = nodpage.get(nodpage.size()-1);
continue; continue;
}else { }else {
node p = new node(); node p = new node();
p.setNomElt("page"); p.setNomElt("page");
@ -770,19 +822,41 @@ public class meptl {
} }
//Détermine s'il y a que du texte vide avant le saut automatique //Détermine s'il y a que du texte vide avant le saut automatique
boolean ContenusVidesAvantBreak = true; boolean ContenusVidesAvantBreak = true;
// Contenu & node après le text:soft-page-break
node textSoftPageBreak = new node();
textSoftPageBreak.setNomElt("saut:automatique");
for(int v = 0 ; v <= indexBreak; v++) { for(int v = 0 ; v <= indexBreak; v++) {
if(nodstructure.getNodes().get(j).getContenu().get(v)!=null) { if(nodstructure.getNodes().get(j).getContenu().get(v)!=null) {
if(!nodstructure.getNodes().get(j).getContenu().get(v).isEmpty()) { if(!nodstructure.getNodes().get(j).getContenu().get(v).isEmpty()) {
ContenusVidesAvantBreak=false; ContenusVidesAvantBreak=false;
} }
if(v==indexBreak) {
nodstructure.getNodes().get(j).getContenu().set(
v,nodstructure.getNodes().get(j).getContenu().get(v) + "** TEXT:SOFT-PAGE-BREAK **");
}
} }
} }
if(!ContenusVidesAvantBreak) {
// Ajoute dans le node textSoftPageBreak
for(int v = indexBreak+1 ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getContenu().size()>v) {
textSoftPageBreak.getContenu().add(nodstructure.getNodes().get(j).getContenu().get(v));
}
if(nodstructure.getNodes().get(j).getNodes().size()>v) {
textSoftPageBreak.getNodes().add(nodstructure.getNodes().get(j).getNodes().get(v));
}
}
for(int v = indexBreak+1 ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getContenu().size()>indexBreak+1) nodstructure.getNodes().get(j).getContenu().remove(indexBreak+1);
}
for(int v = indexBreak ; v <= nodstructure.getNodes().get(j).getNodes().size(); v++) {
if(nodstructure.getNodes().get(j).getNodes().size()>indexBreak) nodstructure.getNodes().get(j).getNodes().remove(indexBreak);
}
}
// S'il y a que du texte vide. // S'il y a que du texte vide.
if(ContenusVidesAvantBreak) { if(ContenusVidesAvantBreak) {
// place le node dans la même page du node p. // place le node dans la même page du node p.
@ -790,6 +864,8 @@ public class meptl {
}else { }else {
// place le node de la page précédente // place le node de la page précédente
nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j)); nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j));
// place le textSoftPageBreak sur la page du node p.
p.getNodes().add(textSoftPageBreak);
} }
nodpage.add(p); nodpage.add(p);
@ -799,7 +875,9 @@ public class meptl {
} }
} }
//**************************************************************************
// les sauts manuels de page dans les paragraphes <text:p> et <text:list> // les sauts manuels de page dans les paragraphes <text:p> et <text:list>
//**************************************************************************
if(nodstructure.getNodes().get(j).getAttributs().get("text:style-name")!=null) { if(nodstructure.getNodes().get(j).getAttributs().get("text:style-name")!=null) {
node nod2 = a.retourneFirstNodeByNameAttributValue(nodstyle.getNodes(), "style:style", "style:name", nodstructure.getNodes().get(j).getAttributs().get("text:style-name")); node nod2 = a.retourneFirstNodeByNameAttributValue(nodstyle.getNodes(), "style:style", "style:name", nodstructure.getNodes().get(j).getAttributs().get("text:style-name"));
if(nod2!=null) { if(nod2!=null) {
@ -811,6 +889,7 @@ public class meptl {
p.getAttributs().put("index",String.valueOf(j)); p.getAttributs().put("index",String.valueOf(j));
p.getAttributs().put("style:master-page-name",nod2.getAttributs().get("style:master-page-name")); p.getAttributs().put("style:master-page-name",nod2.getAttributs().get("style:master-page-name"));
p.getAttributs().put("style:name",nod2.getAttributs().get("style:name")); p.getAttributs().put("style:name",nod2.getAttributs().get("style:name"));
node nod3 = a.retourneName(nod2.getNodes(), "style:paragraph-properties","fo:break-before"); node nod3 = a.retourneName(nod2.getNodes(), "style:paragraph-properties","fo:break-before");
if(nod3!=null) { if(nod3!=null) {
if(nod3.getAttributs().get("style:page-number")!=null) p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number")); if(nod3.getAttributs().get("style:page-number")!=null) p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number"));
@ -820,7 +899,7 @@ public class meptl {
p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number")); p.getAttributs().put("style:page_number", nod3.getAttributs().get("style:page-number"));
} }
} }
// nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j));
p.getNodes().add(nodstructure.getNodes().get(j)); p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p); nodpage.add(p);
compteurpage++; compteurpage++;
@ -833,7 +912,7 @@ public class meptl {
p.getAttributs().put("numero", String.valueOf(compteurpage)); p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique"); p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j)); p.getAttributs().put("index",String.valueOf(j));
// nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j));
p.getNodes().add(nodstructure.getNodes().get(j)); p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p); nodpage.add(p);
compteurpage++; compteurpage++;
@ -843,7 +922,9 @@ public class meptl {
} }
} }
//*************************************************
// les sauts manuels hors paragraphe et titre // les sauts manuels hors paragraphe et titre
//*************************************************
if(!nodstructure.getNodes().get(j).getNomElt().equals("text:p") && !nodstructure.getNodes().get(j).getNomElt().equals("text:h") ) { if(!nodstructure.getNodes().get(j).getNomElt().equals("text:p") && !nodstructure.getNodes().get(j).getNomElt().equals("text:h") ) {
ArrayList<node> lesparagraphes = a.retourneNames(nodstructure.getNodes().get(j).getNodes(), "text:p"); ArrayList<node> lesparagraphes = a.retourneNames(nodstructure.getNodes().get(j).getNodes(), "text:p");
node nod2 = a.retourneName(lesparagraphes, "text:p", "text:style-name"); node nod2 = a.retourneName(lesparagraphes, "text:p", "text:style-name");
@ -878,7 +959,7 @@ public class meptl {
p.getAttributs().put("numero", String.valueOf(compteurpage)); p.getAttributs().put("numero", String.valueOf(compteurpage));
p.getAttributs().put("type","automatique"); p.getAttributs().put("type","automatique");
p.getAttributs().put("index",String.valueOf(j)); p.getAttributs().put("index",String.valueOf(j));
// nodpage.get(nodpage.size()-1).getNodes().add(nodstructure.getNodes().get(j));
p.getNodes().add(nodstructure.getNodes().get(j)); p.getNodes().add(nodstructure.getNodes().get(j));
nodpage.add(p); nodpage.add(p);
compteurpage++; compteurpage++;

View File

@ -1,17 +1,12 @@
package fenetres; package fenetres;
import java.awt.Component; import java.awt.Component;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.AbstractCellEditor; import javax.swing.AbstractCellEditor;
import javax.swing.JPanel;
import javax.swing.JTree; import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor; import javax.swing.tree.TreeCellEditor;
import cXML.node;
@ -19,10 +14,13 @@ import cXML.node;
public class MyTreeCellEditor extends AbstractCellEditor implements TreeCellEditor{ public class MyTreeCellEditor extends AbstractCellEditor implements TreeCellEditor{
private final JTree theTree; // private final JTree theTree;
private static final long serialVersionUID = 1L;
public MyTreeCellEditor(final JTree tree) { public MyTreeCellEditor(final JTree tree) {
theTree = tree; // theTree = tree;
} }
@Override @Override

View File

@ -1,7 +1,6 @@
package fenetres.create_act; package fenetres.create_act;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.util.ArrayList;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.Action; import javax.swing.Action;