'* is a VB Script program. The program will generate a toc.ncx file '* from the generated by Mobipocket Creator (MPC) *.opf and mbp_toc.html files. The '* Script will do appropriate modifications in the *.opf file as well for further work '* with the MPC. '* Copyright (C) 2010 name of author: Nemeséri, Lajos (eNeL), Hungary '* 06 January 2011: Version 1.1 - created a log file for tracking the work of the '* script '* '* This program is free software: you can redistribute it and/or modify '* it under the terms of the GNU General Public License as published by '* the Free Software Foundation, either version 3 of the License, or '* (at your option) any later version. '* '* This program is distributed in the hope that it will be useful, '* but WITHOUT ANY WARRANTY; without even the implied warranty of '* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the '* GNU General Public License for more details. '* '* You should have received a copy of the GNU General Public License '* along with this program. If not, see . '* * * * '* Ez a program szabad szoftver: terjesztheti és/vagy módosíthatja azt a '* Szabad Szoftver Alapítvány által kiadott GNU Általános Nyilvános Licenc '* (GNU GPL) "version 3", vagy annak bármely később kiadott változata '* szabályai alapján. '* '* A program abban a reményben került terjesztésre, hogy hasznos lesz, '* de az MINDEN GARANCIA NÉLKÜL történt; ami még az ELADHATÓSÁGRA, vagy '* BIZONYOS CÉLOK MEGFELELÉSÉRE ráutaló garanciára is vonatkozik. '* Részletekért tekintse meg a GNU Általános Nyilvános Licencet. '* '* A programmal együtt meg kellett kapnia a GNU Általános Nyilvános Licenc '* másolatát. Ha mégsem, itt megtalálhatja: . '* A licencnek nincs hivatalos magyar fordítása Option Explicit '//Felhasználói beállítások :) ' ********************************************************* ' * A beállítás "False" értéke esetén a végén az eredeti * ' * .opf fájl egy Regi_ előtaggal kerül mentésre. Ha az * ' * eredeti fájlra nincs szükséged, akkor állítsd az * ' * opf_felulir értékét "True"-ra. * ' ********************************************************* Const opf_felulir = False ' //Felhasználói beállítások vége :) ' //Ne írj át semmit a következő részben, csak ha pontosan tudod mit csinálsz! '//Változók meghatározása, beállítások Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const OpenAsUnicode = -1 Dim FS : Set FS = CreateObject("Scripting.FilesystemObject") Dim Path : Path = FS.GetParentFolderName(WScript.ScriptFullName) Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell") Dim Mtoc : Mtoc = Path & "\mbp_toc.html" Dim utvonal : utvonal = Path & "\toc.ncx" Dim NCXFile Dim FBe, FBe2, FBe3, FKi Dim OPF, OPF_nev Dim Atmeneti1 : Atmeneti1 = Path & "\Atmeneti1.tmp" Dim Atmeneti2 : Atmeneti2 = Path & "\Atmeneti2.tmp" Dim Temp : Temp = Path & "\Temp.tmp" Dim Href : Href = Path & "\Href.tmp" Dim MetaName : MetaName = "" Dim minta : minta = "" Dim Adat1 Dim KiegSzov : KiegSzov = "" Dim KiegSzov2 : KiegSzov2 = "" Dim np_id2 Dim nevhossz, hossz Dim strText, strNewText, strTorlendo Dim CelFajl : CelFajl = "" Dim strKeresettString : strKeresettString = "" Dim file, contents, newFile Dim szv, intStart, intVeg, strSzoveg, i Dim po_num, np_id, cimke, tart_src, s, nsz, npnum Dim Uzenet : Uzenet = "A toc.ncx fájl elkészült, az" & chr(13) & ".opf fájl módosítása megtörtént!" Dim strLog : strLog = Path & "\mobitoc2ncx.log" '//Fájl meglétének ellenőrzése If (FS.FileExists(Mtoc)) Then Call Logfajl("Az mbp_toc fájl megléte...OK" & Chr(10) & Chr(13)) Else WshShell.PopUp "Az mbp_toc.html fájl nincs meg, kilépek!" WScript.Quit() End If '//és ilyenkor jó eséllyel nincs ott az opf fájl sem, hiszen együtt készülnek '//Az opf fájl nevének meghatározása (mindig változó) hossz = Len(Path) nevhossz = InStrRev(Path, "\") OPF_nev = Right(Path, hossz-nevhossz) & ".opf" OPF = Path & "\" & OPF_nev Call Logfajl("Az opf fájl helye és neve: " & OPF & Chr(10) & Chr(13)) '//Az eredeti opf fájl átnevezése és másolása, ha meg akarjuk őrizni az eredeti fájlt If opf_felulir = False Then CelFajl = Path & "\Regi_" & OPF_nev FS.CopyFile OPF, CelFajl, True CelFajl = "" Call Logfajl("Az opf átnevezése és másolása...OK" & Chr(10) & Chr(13)) End If '//A MP Creator opf fájl kiegészítése az ncx fájl használatához FS.CopyFile OPF, Atmeneti1, True Set FKi = FS.OpenTextFile(Atmeneti1, ForReading) strText = FKi.ReadAll FKi.Close Call Logfajl("Az átmeneti opf fájl létrehozva." & Chr(10) & Chr(13)) strNewText = Replace(strText, "", KiegSzov) Set FKi = FS.OpenTextFile(Atmeneti1, ForWriting) FKi.Write strNewText FKi.Close Call Logfajl("Az átmeneti opf manifest kiegészítése megtörtént." & Chr(10) & Chr(13)) Set FKi = FS.OpenTextFile(Atmeneti1, ForReading) strText = FKi.ReadAll FKi.Close strNewText = Replace(strText, "", KiegSzov2) Call Logfajl("Az átmeneti opf spine kiegészítése megtörtént." & Chr(10) & Chr(13)) Set FKi = FS.OpenTextFile(Atmeneti1, ForWriting) FKi.Write strNewText FKi.Close Call Logfajl("Az opf fájl kiegészítése...OK" & Chr(10) & Chr(13)) '//Az opf fájl felülírása az átmenetivel, majd az átmeneti fájl törlése FS.CopyFile Atmeneti1, OPF, True FS.DeleteFile Atmeneti1, True Call Logfajl("Az átmeneti opf fájl törlése...OK" & Chr(10) & Chr(13)) ' //Az ncx fájl elejének írása Set NCXFile = FS.CreateTextFile(utvonal, True) NCXFile.WriteLine "" NCXFile.WriteLine "" Call Adatkinyeres(OPF, "", "", Adat1) NCXFile.WriteLine "" 'Call Logfajl("A Language változó kinyerése és beírása...OK") 'NCXFile.WriteLine "" NCXFile.WriteLine "" Call Adatkinyeres(OPF, "", Adat1) NCXFile.WriteLine "" NCXFile.WriteLine "" NCXFile.WriteLine "" NCXFile.WriteLine "" NCXFile.WriteLine "" Call Adatkinyeres(OPF, "", "", Adat1) NCXFile.WriteLine "" & Adat1 & "" Call Adatkinyeres(OPF, "", "", Adat1) NCXFile.WriteLine "" & Adat1 & "" NCXFile.WriteLine "" NCXFile.Close '//Adatok kinyerése az mbp_toc fájlból '//Fájl másolás/átkódolás további munkához, ettől kezdve az eredeti mpb_toc.html fájlt nem bántjuk Set file = FS.OpenTextFile(Mtoc, ForReading, False, OpenAsUnicode) contents = file.ReadAll() file.Close Set newFile = FS.OpenTextFile(Atmeneti1, ForWriting, True) newFile.WriteLine (contents) newFile.Close '//Az elején és végén levő sallangok levágása Call Adatkinyeres(Atmeneti1, "", "", Adat1) Set newFile = FS.OpenTextFile(Atmeneti2, ForWriting, True) newFile.WriteLine (Adat1) newFile.Close FS.DeleteFile Atmeneti1, True Call Adatkinyeres(Atmeneti2, "
  • ", "
  • ", Adat1) 'szűréshez Set newFile = FS.OpenTextFile(Href, ForWriting, True) newFile.WriteLine (Adat1) newFile.Close '//A href sor takarítása Set FBe = FS.OpenTextFile(Href, ForReading) strKeresettString = FBe.ReadLine FBe.Close intStart = InStrRev(strKeresettString, " 0 Then intStart = intStart + 9 intVeg = intVeg + 3 szv = intVeg - intStart strSzoveg = Mid(strKeresettString, intStart, szv) End If If strSzoveg <> "" Then Set FBe = FS.OpenTextFile(Href, ForWriting, True) Fbe.Write strSzoveg End If Call Tisztitas(Atmeneti2, Atmeneti1, Href) FS.CopyFile Atmeneti1, Atmeneti2, True FS.DeleteFile Atmeneti1, True '//A h1 sor takarítása Set FBe = FS.OpenTextFile(Atmeneti2, ForReading) strKeresettString = FBe.ReadAll FBe.Close intStart = InStr(strKeresettString, "") If intStart <> 0 Then intStart = intStart + 3 intVeg = intVeg szv = intVeg - intStart strSzoveg = Mid(strKeresettString, intStart, szv) End If If strSzoveg <> "" Then Set newFile = FS.OpenTextFile(Temp, ForWriting, True) newFile.Write (strSzoveg) newFile.Close Call Tisztitas(Atmeneti2, Atmeneti1, Temp) FS.DeleteFile Temp, True End If FS.CopyFile Atmeneti1, Atmeneti2, True FS.DeleteFile Atmeneti1, True '//Az ncx fájl írásának folytatása s = 1 nsz = 1 po_num = CStr(s) npnum = Cstr(nsz) np_id = "toc" tart_src = "mbp_toc.html" Call Adatkinyeres(Atmeneti2, "

    ", "

    ", Adat1) cimke = Adat1 Call Logfajl("Az mbp_toc h1 címke tartalma: " & cimke & Chr(10) & Chr(13)) minta = "" Call NCXFileKieg(utvonal, np_id, po_num, cimke, tart_src) Call Torles(Atmeneti2, Atmeneti1, "") Set FBe = FS.OpenTextFile(Atmeneti2, ForReading) strKeresettString = FBe.ReadAll FBe.Close hossz = Len(strKeresettString) s = s + 1 np_id = "navpoint-" Do While hossz > 40 Call Adatkinyeres(Atmeneti2, "
    ", Adat1) tart_src = Adat1 Call Logfajl("Törlés: " & Adat1 & Chr(10) & Chr(13)) Call Torles(Atmeneti2, Atmeneti1, Adat1) Call Adatkinyeres(Atmeneti2, chr(34)&">", "", Adat1) cimke = Adat1 Call Logfajl("Törlés: " & cimke & Chr(10) & Chr(13)) Call Torles(Atmeneti2, Atmeneti1, Adat1) np_id2 = np_id &CStr(nsz) po_num = CStr(s) Call NCXFileKieg(utvonal, np_id2, po_num, cimke, tart_src) Call Logfajl("NCX beírás: " & np_id2 & Chr(10) & Chr(13)) Set FBe = FS.OpenTextFile(Atmeneti2, ForReading) strKeresettString = FBe.ReadAll FBe.Close hossz = Len(strKeresettString) nsz = nsz + 1 s = s + 1 Loop '//Az ncx fájl lezárása Set NCXFile = FS.OpenTextFile(utvonal, ForAppending, True) NCXFile.WriteLine "
    " NCXFile.WriteLine "
    " NCXFile.Close Call Logfajl("Az ncx fájl navMap és ncx lezárása megtörtént." & Chr(10) & Chr(13)) '//A maradék átmeneti fájlok törlése FS.DeleteFile Atmeneti2, True FS.DeleteFile Href, True Call Logfajl("Az átmeneti fájlok végső törlése." & Chr(10) & Chr(13)) '//Az ncx fájl karaktereinek esetleges cseréje Call Betucsere(utvonal, Atmeneti1) FS.CopyFile Atmeneti1, utvonal, True FS.DeleteFile Atmeneti1, True Call Logfajl("Az ncx fájl karaktereinek esetleges cseréje." & Chr(10) & Chr(13)) '//Az ncx fájl MP Creator számára futtathatóvá konvertálása Set file = FS.OpenTextFile(utvonal, ForReading, False) contents = file.ReadAll() file.Close Set newFile = FS.OpenTextFile(Atmeneti1, ForWriting, True, OpenAsUnicode) newFile.WriteLine (contents) newFile.Close FS.CopyFile Atmeneti1, utvonal, True FS.DeleteFile Atmeneti1, True Call Logfajl("Az ncx fájl futtathatóvá tétele a MPC részére." & Chr(10) & Chr(13)) '//Szubrutinok Sub Torles(bemenet, kimenet, minta) Set FBe = FS.OpenTextFile(bemenet, ForReading) strKeresettString = FBe.ReadAll FBe.Close intStart = InStr(strKeresettString, minta) If intStart <> 0 Then intStart = intStart + Len(minta) - 1 szv = Len(strKeresettString) - intStart strSzoveg = Right(strKeresettString, szv) End If If strSzoveg <> "" Then ' Call Logfajl("Törlés: " & strSzoveg & Chr(10) & Chr(13)) Set newFile = FS.OpenTextFile(kimenet, ForWriting, True) newFile.Write (strSzoveg) newFile.Close FS.CopyFile kimenet, bemenet, True FS.DeleteFile kimenet, True End If End Sub '//Egy nem túl elegáns karaktercsere szubrutin (viszont bővíthető) '//Ebben csak a magyar ékezetes karakterek szerepelnek Sub Betucsere(bemenet, kimenet) Set FBe = FS.OpenTextFile(bemenet, ForReading) strText = FBe.ReadAll FBe.Close strNewText = Replace(strText,"ĂŠ","é") strText = strNewText strNewText = Replace(strText,"Ăś","ö") strText = strNewText strNewText = Replace(strText,"ĂĄ","á") strText = strNewText strNewText = Replace(strText,"Ă­","í") strText = strNewText strNewText = Replace(strText,"Ĺą","ű") strText = strNewText strNewText = Replace(strText,"ő","ő") strText = strNewText strNewText = Replace(strText,"Ăź","ü") strText = strNewText strNewText = Replace(strText,"Ăş","ú") strText = strNewText strNewText = Replace(strText,"Ăł","ó") strText = strNewText strNewText = Replace(strText,"Á","Á") strText = strNewText strNewText = Replace(strText,"Í","Í") strText = strNewText strNewText = Replace(strText,"Ĺ°","Ű") strText = strNewText strNewText = Replace(strText,"Ő","Ő") strText = strNewText strNewText = Replace(strText,"Ü","Ü") strText = strNewText strNewText = Replace(strText,"Ö","Ö") strText = strNewText strNewText = Replace(strText,"Ú","Ú") strText = strNewText strNewText = Replace(strText,"Ó","Ó") strText = strNewText strNewText = Replace(strText,"É","É") Set FKi = FS.OpenTextFile(kimenet, ForWriting, True) FKi.Write strNewText FKi.Close End Sub Sub Adatkinyeres(fajl, minta, mintaVeg, MetaName) Set FBe = FS.OpenTextFile(fajl, ForReading) Do Until FBe.AtEndOfStream strKeresettString = FBe.ReadLine intStart = InStr(strKeresettString, minta) intVeg = InStr(strKeresettString, mintaVeg) If intStart <> 0 Then intStart = intStart + Len(minta) szv = intVeg - intStart Call Logfajl("Adatkinyerés: " & fajl & " ; Minta: " & minta & Chr(10) & Chr(13)) strSzoveg = Mid(strKeresettString, intStart, szv) End If If strSzoveg <> "" Then MetaName = strSzoveg End If Loop strSzoveg = "" minta = "" mintaVeg = "" FBe.Close End Sub Sub NCXFileKieg(utvonal, np_id, n, cimke, tart_src) Set NCXFile = FS.OpenTextFile(utvonal, ForAppending, True) NCXFile.WriteLine "" NCXFile.WriteLine " " & cimke & "" NCXFile.WriteLine " " NCXFile.WriteLine "" NCXFile.Close End Sub Sub Tisztitas(bemenet, kimenet, minta) Set FBe = FS.OpenTextFile(bemenet, ForReading) Set FBe2 = FS.OpenTextFile(minta, ForReading) strText = FBe.ReadAll strTorlendo = FBe2.ReadAll FBe.Close FBe2.Close Call Logfajl("Tisztítás: " & strTorlendo & Chr(10) & Chr(13)) strNewText = Replace(strText, strTorlendo, "") Set FKi = FS.OpenTextFile(kimenet, ForWriting, True) FKi.Write strNewText FKi.Close End Sub Sub Logfajl(uzenetsor) Set FBe3 = FS.OpenTextFile(strLog, ForAppending ,True) FBe3.WriteLine uzenetsor FBe3.Close End Sub Call Logfajl("Az összes művelet befejezése, program vége.") WshShell.PopUp Uzenet Set FS = Nothing WScript.Quit()