/***************************************************/
/*              JumpPage.js                        */
/*  Script de transfo renvois codés -> nums pages  */
/*                 tourne sous CS & CS2 & CS3            */
/***************************************************/

//----------------------------------------------------------
// GLOBALS
//----------------------------------------------------------

// les ref. aux noms sont de la forme <<CHAINE>>
var PATTERN = "<<([^>]+)>>";
var APP_INT_VERSION = parseInt(app.version);

//----------------------------------------------------------
// OUTILS
//----------------------------------------------------------

// [InsertionPoint|Text].prototype.getParentTextFrame
//----------------------------------------------------------
// Extrait le bloc-texte parent d'un objet
// Text ou InsertionPoint selon la version d'InDi
if (APP_INT_VERSION >=4 )
{
/*obj*/  Object.prototype.getParentTextFrame = function()
   {return(this.parentTextFrames[0]);}
}
else
{
/*obj*/  Object.prototype.getParentTextFrame = function()
   {return(this.parentTextFrame);}
}


/*str*/ Document.prototype.getNamePage = function(/*str*/ nomPerson, /*str*/ eXclure)
//----------------------------------------------------------
// Renvoie la lise des nuémro de pages, séparés par des virgules, contenant nomPerson
// Ret. vide si cette chaine est introuvable
{
nbPages = "";
count = 0;

for(m=0 ; m<this.stories.length ; m++)
 for(n=0 ; n<this.stories[m].paragraphs.length ; n++){

REP = new RegExp("("+nomPerson+")", "gi" );
allText = DOC.stories[m].paragraphs[n].contents;

while ( (nResults = REP.exec(allText)) != null )
{
if( this.stories[m].paragraphs[n].characters.item(nResults.index).getParentTextFrame().parent.name != eXclure ) {
	if( count >= 1 ) nbPages += ", ";
	nbPages += this.stories[m].paragraphs[n].characters.item(nResults.index).getParentTextFrame().parent.name;
	count++;
	}
}
}
return(nbPages);
}


//----------------------------------------------------------
// ROUTINE PRINCIPALE
//----------------------------------------------------------

/*int*/ Paragraph.prototype.replaceJumpMarks = function()
//----------------------------------------------------------
// Recherche dans le paragraphe le motif <<CHAINE>> et
// le remplace par la page d'ancrage de la dite chaine si elle existe, sinon le motif reste
{
RE = new RegExp(PATTERN, "gi" );
pText = this.contents;
rgOffset = 0;
count = 0;

while ( (results = RE.exec(pText)) != null )
{
thisPage = this.characters.item(results.index).getParentTextFrame().parent.name;
pg = DOC.getNamePage(results[1],thisPage);

if ( pg != "" )
 {
 range = [results.index + rgOffset, rgOffset + RE.lastIndex-1];
 this.characters.itemByRange(range[0],range[1]).contents = pg;
 rgOffset = pg.length - results[0].length;
 count++;
 }
}
return(count);
}


//----------------------------------------------------------
// PROGRAMME
//----------------------------------------------------------
if ( app.documents.length > 0 )
{
var CPT = 0;
var DOC = app.activeDocument;
for(i=0 ; i<DOC.stories.length ; i++)
 for(j=0 ; j<DOC.stories[i].paragraphs.length ; j++)
  CPT += DOC.stories[i].paragraphs[j].replaceJumpMarks();
alert("Nombre de renvois résolus et remplacés: " + CPT);
}
else
alert("Aucun document ouvert!" );
