Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Bibelstellen mit IndexFromList_withSubtopics.jsx

Bibelstellen mit IndexFromList_withSubtopics.jsx

JoPie
Beiträge gesamt: 75

3. Dez 2015, 15:52
Bewertung:

gelesen: 2688

Beitrag als Lesezeichen
Hallo Kollegen,

ich muss ein Bibelstellenregister erstellen.
Das sieht wie folgt aus:

Genesis 1
Genesis 1,1

Nun findet das Script natürlich bei Genesis 1,1 auch Genesis 1 und setzt die entsprechende Indemarke.
Siehe Beispiel
--------------------
Es ist so, als wenn du mit einem unsinnigen Menschen reden und ihm beweisen wolltest, dass Gott Himmel und Erde geschaffen hat ({xe "Genesis 1,1"}{xe "Genesis 1"}Genesis 1,1), und du ihm mit Fingern Himmel und Erde zeigst, er aber dennoch plaudert, dass dies nicht der Himmel noch die Erde sei, von denen {xe "Genesis 1"}Genesis 1 redet
-------------------

Gibt es eine Möglichkeit dass das Script nur 1,1 findet und nicht auch noch 1?

Gruß
JoPie


ID SC6 unter WIN 8.1

Bibelstellen mit IndexFromList_withSubtopics.jsx

Quarz
Beiträge gesamt: 3555

3. Dez 2015, 17:51
Bewertung:

gelesen: 2654

Beitrag als Lesezeichen
Hallo JoPie,

ich würde die Anführungszeichen
mitberücksichtigen.

(?<=»)Genesis 1(?=«)
(?<=»)Genesis 1,1(?=«)


Gruß
Quarz
---------------------------
Win7 | InDesign CS6 ver 8.1

Bibelstellen mit IndexFromList_withSubtopics.jsx

JoPie
Beiträge gesamt: 75

4. Dez 2015, 08:30
Bewertung:

gelesen: 2566

Beitrag als Lesezeichen
Ich glaube, ich muss meine Frage doch besser erläutern.

In ID lese ich einen Wordtext ohne Indexeinträge ein.

Mustertext:
"Es ist so, als wenn du mit einem unsinnigen Menschen reden und ihm beweisen wolltest, dass Gott Himmel und Erde geschaffen hat (Genesis 1,1), und du ihm mit Fingern Himmel und Erde zeigst, er aber dennoch plaudert, dass dies nicht der Himmel noch die Erde sei, von denen Genesis 1 redet"

Anschließend lasse ich das Script "IndexFromList_withSubtopics.jsx" laufen und lese eine ensprechend Konkordanztabelle ein.

Muster Konkordanztabelle:
Genesis 1
Genesis 1,1

Das Ergbnis nach Scriptlauf sieht als exportierte RTF-Datei wie folgt aus:
"Es ist so, als wenn du mit einem unsinnigen Menschen reden und ihm beweisen wolltest, dass Gott Himmel und Erde geschaffen hat ({xe "Genesis 1,1"}{xe "Genesis 1"}Genesis 1,1), und du ihm mit Fingern Himmel und Erde zeigst, er aber dennoch plaudert, dass dies nicht der Himmel noch die Erde sei, von denen {xe "Genesis 1"}Genesis 1 redet"

Hier kann man sehen, das bei "Genesis 1,1" auch "Genesis 1" indexiert wurde.
Um das zu vermeiden, suche ich eine Lösung.

PS: Die RTF-Datei habe ich nur erstellt um das Problem darstellen zu können. Die benötige ich natürlich nicht.
Das Problem müsste schon in ID gelöst werden.

Gruß JoPie

Bibelstellen mit IndexFromList_withSubtopics.jsx

Martin Fischer
  
Beiträge gesamt: 12783

4. Dez 2015, 09:32
Bewertung:

gelesen: 2547

Beitrag als Lesezeichen
Hallo JoPie,

zum Ersten müsste man im Skript die Suche nach den Ausdrücken auf GREP- statt TEXT-Suche umbauen.

Dann könnte man bei den Sucheinträgen GREP-Code integrieren.

In Deinem Fall etwa
Code
Genesis\s\d+(,\d+)? 


Damit könntest Du Dir die Wiederholung
Zitat Genesis 1
Genesis 1,1

sparen.


Möchtest Du mal versuchen, das Skript entsprechend umzubauen?

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 4. Dez 2015, 09:33 geändert)

Bibelstellen mit IndexFromList_withSubtopics.jsx

Martin Fischer
  
Beiträge gesamt: 12783

4. Dez 2015, 11:52
Bewertung:

gelesen: 2510

Beitrag als Lesezeichen
Hallo JoPie,

alternativ könnte ich Dir ein Skript anbieten, das Indexeinträge auf der Basis von bedingtem Text erstellt.

1. Erstelle eine (oder mehrere) Bedingung(en) mit dem Begriff "Register" im Namen;
2. weise den zu indizierenden Begriffen die entsprechende Bedingung zu (z.B. per GREP-Suche);
3. führe das folgende Skript aus.

Code
/* 
conditions2index.jsx

//DESCRIPTION:Indexeinträge aus bedingtem Text mit 'register' im Namen.
VERSION: 0.3
AUTHOR: Martin Fischer
EMAIL: InDesign@MartinFischer.de
DATE: 30.10.2014
© Martin Fischer 2014
*/

main();

function main()
{
var myErr = mySucc = 0,
i = 0, myList = "", ct = new Array,
pb_max = pb_width = 400,
myMax = 0,
doc = app.activeDocument,
_index = ( doc.indexes.length == 0 )
? doc.indexes.add()
: doc.indexes.firstItem();

app.findTextPreferences = NothingEnum.nothing;

for (i = 0; i < doc.conditions.length; i++)
{
if (doc.conditions[i].name.match(/register/gi) != null)
ct.push(doc.conditions[i]);
}

for (i = 0; i < ct.length; i++)
cond2index(ct[i]);

app.findTextPreferences = NothingEnum.nothing;

if (myErr.length > 0)
alert('Achtung!\n' + myErr.join('\n'));
else
alert('Fertig!');

function cond2index(cond)
{
var f = null, oneEntry = 0, _topic = null, _topic_base = null, entry_arr = new Array, str = '', sur_name = '';
if (cond.name == "Register")
_topic_base = _index;
else
_topic_base = (_index.topics.itemByName( cond.name ).isValid) ? _index.topics.itemByName( cond.name ) : _index.topics.add( {name: cond.name});

app.findTextPreferences.appliedConditions = [cond];
f = doc.findText();
if (f.length > 0)
{
create_progresspanel(pb_max,pb_width, cond.name);
progress_panel.show();

myMax = f.length;
var pb_increment = pb_width/(myMax+1);

for( oneEntry = f.length-1; oneEntry > -1; oneEntry-- )
{
progress_panel.progress_bar.value += pb_increment;
progress_panel.counter_text.text= (myMax - oneEntry) + '/' + myMax;
str = f[oneEntry].contents.replace(/\s+/g,' ').replace(/\s+$/g,'');
if (cond.name.match(/autor|name/gi) != null)
{
entry_arr = str.split(' ');
if (entry_arr.length > 1)
{
sur_name = entry_arr.pop();
if (sur_name.match(/^[IVXLCDM]+\.$/) == null)
str = sur_name + ', ' + entry_arr.join(' ');
}
}


_topic = (_topic_base.topics.itemByName( str ).isValid) ? _topic_base.topics.itemByName( str ) : _topic_base.topics.add( {name: str });

try
{
_topic.pageReferences.add( f[oneEntry], PageReferenceType.currentPage ) ;
mySucc++;
}
catch(e) {
myList += f[oneEntry].contents + "\r" ;
myErr++;
}
}
progress_panel.close();
}
}

function create_progresspanel(pb_max, pb_width, title)
{
progress_panel = new Window('window', title);
progress_panel.progress_bar = progress_panel.add('progressbar', [12, 12, pb_width, 24], 0, pb_max);
progress_panel.counter_text = progress_panel.add('statictext', [12, 0, pb_width, 24], '');
return progress_panel;
}
}


Besonderheit:
Steckt im Namen der Bedingung der Begriff "Name" oder "Autor", dann versucht das Skript bei Einträgen mit mehreren Worten das letzte Wort nach vorne zu stellen und durch Komma vom Rest zu trennen.
Beispiel: "Gustav Knut" -> "Knut, Gustav".

Viele Grüße
Martin


Bibelstellen mit IndexFromList_withSubtopics.jsx

JoPie
Beiträge gesamt: 75

4. Dez 2015, 12:28
Bewertung:

gelesen: 2495

Beitrag als Lesezeichen
Hallo Martin,

mit dem neuen Script könnte es funktionieren.
Ich werde es Morgen ausprobieren.

Gruß
JoPie