| 001 | #!/usr/bin/env osascript |
| 002 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
| 003 | # |
| 004 | (* |
| 005 | 自炊用 |
| 006 | 画像ファイル=各ページ で |
| 007 | EPUBのコンテンツを生成します |
| 008 | 出来上がったフォルダを |
| 009 | EPUB圧縮.applescript |
| 010 | で |
| 011 | 圧縮してEPUBの出来上がりになります |
| 012 |
|
| 013 | v1 初回作成 |
| 014 | v1.0.1 ID coverをcover-pageに変更 プロパティを一部追加した |
| 015 | v1.1 ドキュメント名をフォルダ名にすることにした |
| 016 | v1.1.1 viewportのinitial-scaleを廃止 |
| 017 | v1.1.2 media-typeをcalibre互換に修正した |
| 018 |
|
| 019 | #com.cocolog-nifty.quicktimer.icefloe *) |
| 020 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
| 021 | use AppleScript version "2.8" |
| 022 | use framework "Foundation" |
| 023 | use framework "AppKit" |
| 024 | use scripting additions |
| 025 | property refMe : a reference to current application |
| 026 |
|
| 027 |
|
| 028 | ############################# |
| 029 | ### 設定項目 |
| 030 | #タイトル |
| 031 | # -->フォルダ名を採用することにしたので使用しない |
| 032 | # set strDocumentTitle to ("ドキュメントのタイトル") as text |
| 033 |
|
| 034 | #一般的には著者 または 作成者 |
| 035 | property strAuthor : ("com.cocolog-nifty.quicktimer") as text |
| 036 |
|
| 037 | #表紙のラベル (この設定は表紙なしなので設定しなくてもOK) |
| 038 | property strLabelTitle : ("表紙") as text |
| 039 |
|
| 040 | #表紙ページを付与するか |
| 041 | # trueで表紙ページあり |
| 042 | # falseで表紙ページなし |
| 043 | property boolCoverPage : true as boolean |
| 044 |
|
| 045 | # 左開き? ltr (left-to-right) |
| 046 | # 右開き? rtl (right-to-left) |
| 047 | property strPageProgression : ("rtl") as text |
| 048 |
|
| 049 | #見開き調整 trueで表紙をコンテンツから抜いて1ページずらします |
| 050 | #見開きページがズレる場合に true を入れてください |
| 051 | property boolProgression : false as boolean |
| 052 |
|
| 053 |
|
| 054 | ############################# |
| 055 | ### ここから本処理 |
| 056 | (* |
| 057 | 大まかな手順 |
| 058 | 【1】ROOT フォルダ:META-INF OPS ファイル:mimetype |
| 059 | 【1-2】mimetype |
| 060 |
|
| 061 | 【2】META-INF ファイル: container.xml com.apple.ibooks.display-options.xml |
| 062 | 【2-1】container.xml |
| 063 | 【2-2】com.apple.ibooks.display-options.xml |
| 064 |
|
| 065 | 【3】OPS |
| 066 | 【3-1】css book.css |
| 067 | 【3-2】js book.js |
| 068 | 【3-3】images |
| 069 | 【3-4】toc.ncx |
| 070 | 【3-5】content.opf |
| 071 | 【3-6】toc.xhtml |
| 072 | 【3-7】page-XXXX.xhtml |
| 073 | 【3-8】cover.xhtml |
| 074 | *) |
| 075 |
|
| 076 | ############################# |
| 077 | # |
| 078 | on run {listAliasDirPath} |
| 079 | |
| 080 | (* |
| 081 |
|
| 082 |
|
| 083 | on run |
| 084 | |
| 085 | ############################# |
| 086 | #ダイアログ |
| 087 | tell current application |
| 088 | set strName to name as text |
| 089 | end tell |
| 090 | if strName is "osascript" then |
| 091 | tell application "Finder" to activate |
| 092 | else |
| 093 | tell current application to activate |
| 094 | end if |
| 095 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 096 | set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask)) |
| 097 | set ocidDesktopDirPathURL to ocidURLsArray's firstObject() |
| 098 | set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias |
| 099 | set listUTI to {"public.image"} as list |
| 100 | set strMes to ("画像フォルダを選んでください") as text |
| 101 | set strPrompt to ("画像フォルダを選んでください") as text |
| 102 | try |
| 103 | tell application "SystemUIServer" |
| 104 | activate |
| 105 | set listAliasDirPath to (choose folder strMes with prompt strPrompt default location aliasDefaultLocation with invisibles, multiple selections allowed and showing package contents) as list |
| 106 | end tell |
| 107 | on error strErrMsg number numErrNo |
| 108 | log "No: " & numErrNo & linefeed & "Error:" & strErrMsg |
| 109 | return false |
| 110 | end try |
| 111 | if listAliasDirPath is {} then |
| 112 | log "選んでください" |
| 113 | return false |
| 114 | end if |
| 115 | *) |
| 116 | |
| 117 | set boolDone to (open listAliasDirPath) as boolean |
| 118 | return boolDone |
| 119 | end run |
| 120 |
|
| 121 | ############################# |
| 122 | # |
| 123 | on open listAliasDirPath |
| 124 | #NSFileManagerを初期化しておく |
| 125 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 126 | #処理が可能なUTI=画像全般 |
| 127 | set ocidImageUTType to (refMe's UTType's typeWithIdentifier:("public.image")) |
| 128 | |
| 129 | #フォルダ以外が来たら中止 |
| 130 | repeat with itemDirPath in listAliasDirPath |
| 131 | set aliasDirPath to itemDirPath as alias |
| 132 | set recordInfoFor to (info for aliasDirPath) as record |
| 133 | set boolIsDir to (folder of recordInfoFor) as boolean |
| 134 | if boolIsDir is false then |
| 135 | return false |
| 136 | end if |
| 137 | end repeat |
| 138 | #この時点でエリアスリストの中身はフォルダ |
| 139 | #ファイル名順にソートするのでOBJCにする |
| 140 | repeat with itemDirPath in listAliasDirPath |
| 141 | #次工程に回すArray |
| 142 | set ocidImageFilePathURLArrayM to refMe's NSMutableArray's alloc()'s init() |
| 143 | #パス |
| 144 | set aliasDirPath to itemDirPath as alias |
| 145 | set strDirPath to (POSIX path of aliasDirPath) as text |
| 146 | set ocidDirPathStr to (refMe's NSString's stringWithString:(strDirPath)) |
| 147 | set ocidDirPath to ocidDirPathStr's stringByStandardizingPath() |
| 148 | set ocidDirPathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidDirPath) isDirectory:(true)) |
| 149 | #コンテンツの収集 |
| 150 | set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles) |
| 151 | set ocidKeyArray to refMe's NSMutableArray's alloc()'s init() |
| 152 | (ocidKeyArray's addObject:(refMe's NSURLPathKey)) |
| 153 | (ocidKeyArray's addObject:(refMe's NSURLNameKey)) |
| 154 | (ocidKeyArray's addObject:(refMe's NSURLContentTypeKey)) |
| 155 | set listResponse to (appFileManager's contentsOfDirectoryAtURL:(ocidDirPathURL) includingPropertiesForKeys:(ocidKeyArray) options:(ocidOption) |error|:(reference)) |
| 156 | set ocidFileURLArray to (first item of listResponse) |
| 157 | #収集したURLを順番に |
| 158 | repeat with itemFilePathURL in ocidFileURLArray |
| 159 | set listResponse to (itemFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLContentTypeKey) |error|:(reference)) |
| 160 | if (first item of listResponse) is true then |
| 161 | set ocidUTI to (second item of listResponse) |
| 162 | set boolConform to (ocidUTI's conformsToType:(ocidImageUTType)) as boolean |
| 163 | if boolConform is true then |
| 164 | (ocidImageFilePathURLArrayM's addObject:(itemFilePathURL)) |
| 165 | end if |
| 166 | end if |
| 167 | end repeat |
| 168 | #ソート |
| 169 | set ocidDescriptor to (refMe's NSSortDescriptor's sortDescriptorWithKey:("lastPathComponent") ascending:(yes) selector:("localizedStandardCompare:")) |
| 170 | set ocidDescriptorArray to (refMe's NSArray's arrayWithObject:(ocidDescriptor)) |
| 171 | set ocidSortedArray to (ocidImageFilePathURLArrayM's sortedArrayUsingDescriptors:(ocidDescriptorArray)) |
| 172 | # |
| 173 | set {boolDone, ocidContainerFilePathURL} to doMakeEpub(ocidSortedArray) |
| 174 | if boolDone is true then |
| 175 | set aliasDirPath to (ocidContainerFilePathURL's absoluteURL()) as alias |
| 176 | set boolDone to doMakeZip(aliasDirPath) |
| 177 | end if |
| 178 | end repeat |
| 179 | return boolDone |
| 180 | end open |
| 181 |
|
| 182 | ############################# |
| 183 | # |
| 184 | on doMakeEpub(ocidSortedArray) |
| 185 | |
| 186 | ###### |
| 187 | ##設定項目(詳細) |
| 188 | ##XMLファイル名の接頭語 |
| 189 | set strBaseFileName to ("page-") as text |
| 190 | ##コピー後のファイル名の接頭名 コピー後のファイル名を固定にする事で後処理を少し簡素化 |
| 191 | set strBaseImageFileName to ("Image_") as text |
| 192 | ############################# |
| 193 | ###ドキュメントのUUID |
| 194 | set ocidUUID to refMe's NSUUID's alloc()'s init() |
| 195 | set strUUID to ocidUUID's UUIDString as text |
| 196 | ##パス 保存先パス |
| 197 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 198 | set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask)) |
| 199 | set ocidDesktopDirPathURL to ocidURLsArray's firstObject() |
| 200 | ##選んだ画像の最初のファイル |
| 201 | set ocidFirstFilePathURL to ocidSortedArray's firstObject() |
| 202 | set ocidContainerDirPathURL to ocidFirstFilePathURL's URLByDeletingLastPathComponent() |
| 203 | set ocidContainerDirName to ocidContainerDirPathURL's lastPathComponent() |
| 204 | ###フォルダ名 |
| 205 | set strContainerDirName to (ocidContainerDirName) as text |
| 206 | set strMakeDirName to (strContainerDirName & "_EPUB") as text |
| 207 | set strDocumentTitle to (strContainerDirName) as text |
| 208 | ###設定項目の名称がフォルダ名 |
| 209 | set ocidEpubDirPathURL to ocidDesktopDirPathURL's URLByAppendingPathComponent:(strMakeDirName) |
| 210 | set ocidEpubDirPath to ocidEpubDirPathURL's |path|() |
| 211 | ############################## |
| 212 | ##必要なフォルダを作る |
| 213 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 214 | set ocidAttrDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0) |
| 215 | ##アクセス権755この値は後でも使う |
| 216 | (ocidAttrDict's setValue:(493) forKey:(refMe's NSFilePosixPermissions)) |
| 217 | ##フォルダのパスのリスト |
| 218 | set listDirName to {"OPS", "OPS/css", "OPS/images", "OPS/js", "META-INF"} as list |
| 219 | ##stringsByAppendingPathsでARRAYにする |
| 220 | set ocidSubPathArray to ocidEpubDirPath's stringsByAppendingPaths:(listDirName) |
| 221 | ##ARRAYの分だけ |
| 222 | repeat with itemSubPathArray in ocidSubPathArray |
| 223 | ##フォルダを作る |
| 224 | set listBoolMakeDir to (appFileManager's createDirectoryAtPath:(itemSubPathArray) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)) |
| 225 | end repeat |
| 226 | ################################################################################# |
| 227 | ### 【1】ROOT フォルダ:META-INF OPS ファイル:mimetype |
| 228 | set ocidEpubDirPathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidEpubDirPath) isDirectory:true) |
| 229 | ### 【1-2】mimetype |
| 230 | ##保存先パス |
| 231 | set ocidMimetypeFilePathURL to ocidEpubDirPathURL's URLByAppendingPathComponent:("mimetype") isDirectory:false |
| 232 | ##内容 |
| 233 | set strMimetype to ("application/epub+zip") as text |
| 234 | set ocidMimetype to refMe's NSString's stringWithString:(strMimetype) |
| 235 | ##ファイルに保存して |
| 236 | set listDone to ocidMimetype's writeToURL:(ocidMimetypeFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 237 | ##アクセス権755を指定する |
| 238 | set listDone to appFileManager's setAttributes:(ocidAttrDict) ofItemAtPath:(ocidMimetypeFilePathURL's |path|) |error|:(reference) |
| 239 | ################################################################################# |
| 240 | ### 【3】OPS |
| 241 | set ocidOPSDirPathURL to ocidEpubDirPathURL's URLByAppendingPathComponent:("OPS") isDirectory:true |
| 242 | ######◆ 【3-1】css book.css |
| 243 | ##フォルダのパス |
| 244 | set ocidCssDirPathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("css") isDirectory:true |
| 245 | ###ファイルのパス |
| 246 | set ocidCssFilePathURL to ocidCssDirPathURL's URLByAppendingPathComponent:("book.css") isDirectory:false |
| 247 | ##ファイルの中身 |
| 248 | set strCssContents to ("body { margin: 0; padding: 0; border: 0;}a:link { color: inherit;}a:visited { color: inherit;}a:hover { color: inherit;}a:active { color: inherit;}a{text-decoration: none;}p{margin: 0px;}sub{vertical-align: -10%;font-size: 67%;}sup{vertical-align: 33%;font-size: 67%;}.s1{background: transparent;}.p1{padding-left: 0;margin-top: 0;padding-top: 0;padding-right: 0;margin-bottom: 0;padding-bottom: 0;font-style: normal;font-weight: 400;font-stretch: normal;font-size: 100.000%;color: #000000;letter-spacing: 0.000em;font-variant: normal;text-transform: none;text-align: left;text-indent: 0;line-height: 1.545em;hyphens: none;-webkit-hyphens: none;-webkit-text-stroke-color: initial;-webkit-text-stroke-width: initial;text-shadow: none;}.c1{background: transparent;}.body {width: 100%;}.underline {text-decoration: underline;}.orientation-opposed .underline {text-decoration: overline;}.strikethrough {text-decoration: line-through;}.underline-strikethrough {text-decoration: underline line-through;}.orientation-opposed .underline-strikethrough {text-decoration: overline line-through;}") as text |
| 249 | set ocidCssContents to refMe's NSString's stringWithString:(strCssContents) |
| 250 | ##保存 |
| 251 | set listDone to ocidCssContents's writeToURL:(ocidCssFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 252 | ##アクセス権 |
| 253 | set listDone to appFileManager's setAttributes:(ocidAttrDict) ofItemAtPath:(ocidCssFilePathURL's |path|) |error|:(reference) |
| 254 | ######◆ 【3-2】js book.js |
| 255 | ##フォルダのパス |
| 256 | set ocidJsDirPathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("js") isDirectory:true |
| 257 | ###ファイルのパス |
| 258 | set ocidJsFilePathURL to ocidJsDirPathURL's URLByAppendingPathComponent:("book.js") isDirectory:false |
| 259 | ##ファイルの中身 |
| 260 | set strJsContents to ("function Body_onLoad() {}") as text |
| 261 | set ocidJsContents to refMe's NSString's stringWithString:(strJsContents) |
| 262 | ##保存 |
| 263 | set listDone to ocidJsContents's writeToURL:(ocidJsFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 264 | ##アクセス権 |
| 265 | set listDone to appFileManager's setAttributes:(ocidAttrDict) ofItemAtPath:(ocidJsFilePathURL's |path|) |error|:(reference) |
| 266 | ######◆ 【3-3】images イメージファイルをコピーします |
| 267 | set ocidImagesDirPathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("images") isDirectory:true |
| 268 | |
| 269 | set numCntPage to 1 as integer |
| 270 | set numCntAllImage to ocidSortedArray's |count|() as integer |
| 271 | set listImageFileName to {} as list |
| 272 | |
| 273 | ##画像ファイルの数だけ繰り返し |
| 274 | repeat with ocidFilePathURL in ocidSortedArray |
| 275 | ##拡張子 |
| 276 | set ocidExtensionName to ocidFilePathURL's pathExtension() |
| 277 | ###コピー後の画像ファイルは連番処理 四桁のゼロサプレス |
| 278 | set strZeroSup to "0000" as text |
| 279 | set strSeroSup to (strZeroSup & (numCntPage as text)) as text |
| 280 | set strSeroSup to (text -4 through -1 of strSeroSup) as text |
| 281 | set strFileName to (strBaseImageFileName & strSeroSup) as text |
| 282 | ##コピー先URL |
| 283 | set ocidBaseFilePathURL to (ocidImagesDirPathURL's URLByAppendingPathComponent:(strFileName)) |
| 284 | set ocidSaveFilePathURL to (ocidBaseFilePathURL's URLByAppendingPathExtension:(ocidExtensionName)) |
| 285 | ##ファイル名のリストを作っておく |
| 286 | set ocidImageFileName to ocidSaveFilePathURL's lastPathComponent() |
| 287 | set strImageFileName to ocidImageFileName as text |
| 288 | set end of listImageFileName to strImageFileName |
| 289 | ###コピー |
| 290 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 291 | set listDone to (appFileManager's copyItemAtURL:(ocidFilePathURL) toURL:(ocidSaveFilePathURL) |error|:(reference)) |
| 292 | ##カウントアップ |
| 293 | set numCntPage to numCntPage + 1 as integer |
| 294 | end repeat |
| 295 | |
| 296 | |
| 297 | ################################# |
| 298 | ###◆ 【3-7】page-XXXX.xhtml |
| 299 | ##配置オブジェクトが画像1つ限定なのでシンプルな構造 |
| 300 | ##【3-7-A】 root エレメント 【3-7-B】 head エレメント 【3-7-C】 body エレメント |
| 301 | ##カウンター |
| 302 | set numCntPage to 1 as integer |
| 303 | ##総画像ファイルする右=ページ数 |
| 304 | set numCntAllImage to ocidSortedArray's |count|() as integer |
| 305 | ##画像の数だけ繰り返し |
| 306 | repeat numCntAllImage times |
| 307 | ###ファイルは連番処理 四桁のゼロサプレス |
| 308 | set strZeroSup to "0000" as text |
| 309 | set strSeroSup to (strZeroSup & (numCntPage as text)) as text |
| 310 | set strSeroSup to (text -4 through -1 of strSeroSup) as text |
| 311 | set strFileName to (strBaseFileName & strSeroSup & ".xhtml") as text |
| 312 | ##XHTMLのパス |
| 313 | set ocidXHTMLFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:(strFileName) isDirectory:false |
| 314 | ##配置画像 |
| 315 | ##不具合の元かもしれないが拡張子判定する方法が見つからなかった |
| 316 | set strImageName to (item numCntPage of listImageFileName) |
| 317 | set ocidImagesFilePathURL to ocidImagesDirPathURL's URLByAppendingPathComponent:(strImageName) isDirectory:false |
| 318 | set ocidReadImage to (refMe's NSImage's alloc()'s initWithContentsOfURL:(ocidFilePathURL)) |
| 319 | ##BitMapRepに変換 |
| 320 | set ocidReadImageRepArray to ocidReadImage's representations() |
| 321 | set ocidReadImageRep to (ocidReadImageRepArray's objectAtIndex:0) |
| 322 | ##ピクセルサイズ取得 |
| 323 | set strPixelsWidth to (ocidReadImageRep's pixelsWide()) as text |
| 324 | set strPixelsHeight to (ocidReadImageRep's pixelsHigh()) as text |
| 325 | ######## |
| 326 | ##◆【3-7-A】 root エレメント |
| 327 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"html" |
| 328 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("xml:lang") stringValue:("ja")) |
| 329 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("http://www.w3.org/1999/xhtml")) |
| 330 | ######## |
| 331 | ##◆【3-7-B】 head エレメント |
| 332 | set ocidHeadElement to refMe's NSXMLElement's alloc()'s initWithName:("head") |
| 333 | #CSS |
| 334 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("link") |
| 335 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("rel") stringValue:("stylesheet")) |
| 336 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("css/book.css")) |
| 337 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("text/css")) |
| 338 | ocidHeadElement's addChild:(ocidMetaElement) |
| 339 | #JS |
| 340 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("script") |
| 341 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:("js/book.js")) |
| 342 | ocidHeadElement's addChild:(ocidMetaElement) |
| 343 | #文字コード |
| 344 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 345 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("charset") stringValue:("UTF-8")) |
| 346 | ocidHeadElement's addChild:(ocidMetaElement) |
| 347 | #タイトル |
| 348 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("title") |
| 349 | set strPageTitle to ("Page : " & strSeroSup) as text |
| 350 | ocidMetaElement's setStringValue:(strPageTitle) |
| 351 | ocidHeadElement's addChild:(ocidMetaElement) |
| 352 | #EPUBドキュメントのUUID |
| 353 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 354 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("EPB-UUID")) |
| 355 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strUUID)) |
| 356 | ocidHeadElement's addChild:(ocidMetaElement) |
| 357 | #ビューポイント ここで画像のサイズ指定=全画面 |
| 358 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 359 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport")) |
| 360 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=" & strPixelsWidth & ",height=" & strPixelsHeight & ", initial-scale=1.0")) |
| 361 | ocidHeadElement's addChild:(ocidMetaElement) |
| 362 | ######## |
| 363 | ##◆【3-7-C】 body エレメント |
| 364 | set ocidBodyElement to refMe's NSXMLElement's alloc()'s initWithName:("body") |
| 365 | ocidBodyElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("onload") stringValue:("Body_onLoad()")) |
| 366 | #開き方向指定 |
| 367 | ocidBodyElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("dir") stringValue:(strPageProgression)) |
| 368 | #一番外側のDIV要素 |
| 369 | set ocidOutDiivElement to refMe's NSXMLElement's alloc()'s initWithName:("div") |
| 370 | # ocidOutDiivElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("style") stringValue:("position:absolute;left:0;top:0;width: " & strPixelsWidth & "px;height:" & strPixelsHeight & "px;")) |
| 371 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("main") |
| 372 | ocidOutDiivElement's addAttribute:(ocidAddNode) |
| 373 | # |
| 374 | set ocidSVGElement to refMe's NSXMLElement's alloc()'s initWithName:("svg") |
| 375 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("xmlns") stringValue:("http://www.w3.org/2000/svg") |
| 376 | ocidSVGElement's addAttribute:(ocidAddNode) |
| 377 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("xmlns:xlink") stringValue:("http://www.w3.org/1999/xlink") |
| 378 | ocidSVGElement's addAttribute:(ocidAddNode) |
| 379 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("width") stringValue:("100%") |
| 380 | ocidSVGElement's addAttribute:(ocidAddNode) |
| 381 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("height") stringValue:("100%") |
| 382 | ocidSVGElement's addAttribute:(ocidAddNode) |
| 383 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("viewBox") stringValue:("0 0 " & strPixelsWidth & " " & strPixelsHeight & "") |
| 384 | ocidSVGElement's addAttribute:(ocidAddNode) |
| 385 | |
| 386 | #imgタグ image |
| 387 | # set ocidImgElement to refMe's NSXMLElement's alloc()'s initWithName:("img") |
| 388 | set ocidImgElement to refMe's NSXMLElement's alloc()'s initWithName:("image") |
| 389 | set strPath to ("images/" & strImageName) as text |
| 390 | # ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:(strPath)) |
| 391 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("xlink:href") stringValue:(strPath)) |
| 392 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("alt") stringValue:(strFileName)) |
| 393 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("width") stringValue:(strPixelsWidth)) |
| 394 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("height") stringValue:(strPixelsHeight)) |
| 395 | # ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("style") stringValue:("object-fit: cover;width: " & strPixelsWidth & "px;height:" & strPixelsHeight & "px;")) |
| 396 | |
| 397 | #imgタグをSVGにセット |
| 398 | ocidSVGElement's addChild:(ocidImgElement) |
| 399 | |
| 400 | |
| 401 | #SVGタグをDIVにセット |
| 402 | ocidOutDiivElement's addChild:(ocidSVGElement) |
| 403 | #DIVをbodyにセット |
| 404 | ocidBodyElement's addChild:(ocidOutDiivElement) |
| 405 | ######## |
| 406 | ##【3-7-B】のheadエレメントをAのROOTにセット |
| 407 | ocidRootElement's addChild:(ocidHeadElement) |
| 408 | ##【3-7-C】 bodyエレメントをAのROOTにセット |
| 409 | ocidRootElement's addChild:(ocidBodyElement) |
| 410 | ## ↑からのROOTエレメントをセットしてXMLとする |
| 411 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 412 | ocidOutPutXML's setVersion:"1.0" |
| 413 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 414 | #XMLをテキストにして |
| 415 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 416 | ###改行コードを指定して |
| 417 | ocidSaveStrings's appendString:(linefeed) |
| 418 | ##保存 |
| 419 | set listWritetoUrlArray to ocidSaveStrings's writeToURL:(ocidXHTMLFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 420 | ## |
| 421 | set numCntPage to numCntPage + 1 as integer |
| 422 | end repeat |
| 423 | |
| 424 | ################################# |
| 425 | ###◆【3-8】cover.xhtml いわゆる表紙ページ |
| 426 | # cover-page と cover-imageがあるがここではcover-pageを生成する |
| 427 | #保存パス |
| 428 | set ocidXHTMLFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("cover.xhtml") isDirectory:false |
| 429 | # 表紙イメージ=1ページ目の画像 |
| 430 | |
| 431 | set ocidCoverImageFilePathURL to ocidSortedArray's firstObject() |
| 432 | set strExtensionName to (ocidCoverImageFilePathURL's pathExtension()) as text |
| 433 | ### |
| 434 | set ocidReadImage to (refMe's NSImage's alloc()'s initWithContentsOfURL:(ocidCoverImageFilePathURL)) |
| 435 | ##BitMapRepに変換 |
| 436 | set ocidReadImageRepArray to ocidReadImage's representations() |
| 437 | set ocidReadImageRep to (ocidReadImageRepArray's objectAtIndex:0) |
| 438 | ##ピクセルサイズ取得 |
| 439 | set strPixelsWidth to (ocidReadImageRep's pixelsWide()) as text |
| 440 | set strPixelsHeight to (ocidReadImageRep's pixelsHigh()) as text |
| 441 | #######【3-8-A】ルートエレメント XHTMLのルートエレメント |
| 442 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"html" |
| 443 | #ネームスペースの追加 |
| 444 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("http://www.w3.org/1999/xhtml")) |
| 445 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("epub") stringValue:("http://www.idpf.org/2007/ops")) |
| 446 | #アトリビュートの追加 |
| 447 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("xml:lang") stringValue:("ja")) |
| 448 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("epub:prefix") stringValue:("ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/")) |
| 449 | #####【3-6-B】 headエレメント |
| 450 | set ocidHeadElement to refMe's NSXMLElement's alloc()'s initWithName:("head") |
| 451 | #タイトル |
| 452 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("title") |
| 453 | ocidMetaElement's setStringValue:("表紙:Cover Page") |
| 454 | ocidHeadElement's addChild:(ocidMetaElement) |
| 455 | #スタイルシートへのリンク |
| 456 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("link") |
| 457 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("rel") stringValue:("stylesheet")) |
| 458 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("css/book.css")) |
| 459 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("text/css")) |
| 460 | ocidHeadElement's addChild:(ocidMetaElement) |
| 461 | #Jsへのリンク |
| 462 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("script") |
| 463 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:("js/book.js")) |
| 464 | ocidHeadElement's addChild:(ocidMetaElement) |
| 465 | #文字コード宣言 |
| 466 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 467 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("charset") stringValue:("UTF-8")) |
| 468 | ocidHeadElement's addChild:(ocidMetaElement) |
| 469 | #UUID設定 |
| 470 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 471 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("EPB-UUID")) |
| 472 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strUUID)) |
| 473 | ocidHeadElement's addChild:(ocidMetaElement) |
| 474 | #ビューポイント |
| 475 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 476 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport")) |
| 477 | #ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=" & strPixelsWidth & ",height=" & strPixelsHeight & ", initial-scale=1.0")) |
| 478 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=" & strPixelsWidth & ",height=" & strPixelsHeight & "")) |
| 479 | ocidHeadElement's addChild:(ocidMetaElement) |
| 480 | ######【3-8-C】ボディエレメント |
| 481 | set ocidBodyElement to refMe's NSXMLElement's alloc()'s initWithName:("body") |
| 482 | ocidBodyElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("onload") stringValue:("Body_onLoad()")) |
| 483 | #開き方向 |
| 484 | ocidBodyElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("dir") stringValue:(strPageProgression)) |
| 485 | # |
| 486 | set ocidOutDiivElement to refMe's NSXMLElement's alloc()'s initWithName:("div") |
| 487 | ocidOutDiivElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("style") stringValue:("position:absolute;left:0;top:0;width: " & strPixelsWidth & "px;height:" & strPixelsHeight & "px;")) |
| 488 | ## |
| 489 | set ocidImgElement to refMe's NSXMLElement's alloc()'s initWithName:("img") |
| 490 | set strImageName to (strBaseImageFileName & "0001." & strExtensionName) as text |
| 491 | set strPath to ("images/" & strImageName) as text |
| 492 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:(strPath)) |
| 493 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("alt") stringValue:(strFileName)) |
| 494 | ocidImgElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("style") stringValue:("object-fit: cover;width: " & strPixelsWidth & "px;height:" & strPixelsHeight & "px;")) |
| 495 | ocidOutDiivElement's addChild:(ocidImgElement) |
| 496 | ocidBodyElement's addChild:(ocidOutDiivElement) |
| 497 | #### |
| 498 | #【3-8-B】 head を【3-8-A】 ルートエレメントに追加 |
| 499 | ocidRootElement's addChild:(ocidHeadElement) |
| 500 | #【3-8-C】 body を【3-8-A】ルートエレメントに追加 |
| 501 | ocidRootElement's addChild:(ocidBodyElement) |
| 502 | ## ↑からのROOTエレメントをセットしてXMLとする |
| 503 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 504 | ocidOutPutXML's setVersion:"1.0" |
| 505 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 506 | ###テキストにして |
| 507 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 508 | ###改行コードを指定して |
| 509 | ocidSaveStrings's appendString:(linefeed) |
| 510 | ##保存 |
| 511 | set listDone to ocidSaveStrings's writeToURL:(ocidXHTMLFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 512 | ################################# |
| 513 | ###◆ 【3-6】toc.xhtml いわゆる目次 |
| 514 | #【3-6-B】 head 【3-6-C】 body |
| 515 | #保存パス |
| 516 | set ocidXHTMLFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("toc.xhtml") isDirectory:false |
| 517 | #【3-6-A】ルートエレメント XHTMLのルートエレメント |
| 518 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"html" |
| 519 | #ネームスペースの追加 |
| 520 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("http://www.w3.org/1999/xhtml")) |
| 521 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("epub") stringValue:("http://www.idpf.org/2007/ops")) |
| 522 | #アトリビュートの追加 |
| 523 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("xml:lang") stringValue:("ja")) |
| 524 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("epub:prefix") stringValue:("ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/")) |
| 525 | #####【3-6-B】 headエレメント |
| 526 | set ocidHeadElement to refMe's NSXMLElement's alloc()'s initWithName:("head") |
| 527 | #タイトル |
| 528 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("title") |
| 529 | ocidMetaElement's setStringValue:("目次:Table of Contents") |
| 530 | ocidHeadElement's addChild:(ocidMetaElement) |
| 531 | #スタイルシートへのリンク |
| 532 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("link") |
| 533 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("rel") stringValue:("stylesheet")) |
| 534 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("css/book.css")) |
| 535 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("text/css")) |
| 536 | ocidHeadElement's addChild:(ocidMetaElement) |
| 537 | #文字コード宣言 |
| 538 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 539 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("charset") stringValue:("UTF-8")) |
| 540 | ocidHeadElement's addChild:(ocidMetaElement) |
| 541 | #UUID設定 |
| 542 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 543 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("EPB-UUID")) |
| 544 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strUUID)) |
| 545 | ocidHeadElement's addChild:(ocidMetaElement) |
| 546 | #ビューポイント |
| 547 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 548 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport")) |
| 549 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=device-width, initial-scale=1.0")) |
| 550 | ocidHeadElement's addChild:(ocidMetaElement) |
| 551 | ####【3-6-C】 body |
| 552 | set ocidBodyElement to refMe's NSXMLElement's alloc()'s initWithName:("body") |
| 553 | #bodyエレメントに開き方向のアトリビュート |
| 554 | ocidBodyElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("dir") stringValue:(strPageProgression)) |
| 555 | #タイトルをH1で入れて |
| 556 | set ocidBodyItem to refMe's NSXMLElement's alloc()'s initWithName:("h1") |
| 557 | ocidBodyItem's setStringValue:(strDocumentTitle) |
| 558 | ocidBodyElement's addChild:(ocidBodyItem) |
| 559 | #区切り線 |
| 560 | set ocidBodyItem to refMe's NSXMLElement's alloc()'s initWithName:("hr") |
| 561 | ocidBodyElement's addChild:(ocidBodyItem) |
| 562 | #メインの要素 |
| 563 | set ocidBodyItem to refMe's NSXMLElement's alloc()'s initWithName:("div") |
| 564 | ocidBodyItem's addAttribute:(refMe's NSXMLNode's attributeWithName:("class") stringValue:("nav-body")) |
| 565 | ocidBodyItem's addAttribute:(refMe's NSXMLNode's attributeWithName:("style") stringValue:("white-space:pre-wrap; line-break:strict;")) |
| 566 | |
| 567 | ocidBodyElement's addChild:(ocidBodyItem) |
| 568 | #ナビ |
| 569 | set ocidNavItem to refMe's NSXMLElement's alloc()'s initWithName:("nav") |
| 570 | ocidNavItem's addAttribute:(refMe's NSXMLNode's attributeWithName:("epub:type") stringValue:("toc")) |
| 571 | ocidNavItem's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("toc")) |
| 572 | #リスト |
| 573 | set ocidNavOL to refMe's NSXMLElement's alloc()'s initWithName:("ol") |
| 574 | #番号初期化 |
| 575 | set numCntPage to 1 as integer |
| 576 | #総ページ数の数だけ繰り返し |
| 577 | repeat numCntAllImage times |
| 578 | ###画像ファイルは連番処理 四桁のゼロサプレス |
| 579 | set strZeroSup to "0000" as text |
| 580 | set strSeroSup to (strZeroSup & (numCntPage as text)) as text |
| 581 | set strSeroSup to (text -4 through -1 of strSeroSup) as text |
| 582 | set strLinkFileName to (strBaseFileName & strSeroSup) as text |
| 583 | set strFileName to (strBaseFileName & strSeroSup & ".xhtml") as text |
| 584 | #### |
| 585 | set ocidNavLI to refMe's NSXMLElement's alloc()'s initWithName:("li") |
| 586 | set ocidNavA to refMe's NSXMLElement's alloc()'s initWithName:("a") |
| 587 | ocidNavA's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strFileName)) |
| 588 | ocidNavA's setStringValue:(strLinkFileName) |
| 589 | ocidNavLI's addChild:(ocidNavA) |
| 590 | ocidNavOL's addChild:(ocidNavLI) |
| 591 | set numCntPage to numCntPage + 1 as integer |
| 592 | end repeat |
| 593 | ##リストに表紙ページを追加 |
| 594 | set ocidNavLI to refMe's NSXMLElement's alloc()'s initWithName:("li") |
| 595 | set ocidNavA to refMe's NSXMLElement's alloc()'s initWithName:("a") |
| 596 | ocidNavA's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("cover.xhtml")) |
| 597 | ocidNavA's addAttribute:(refMe's NSXMLNode's attributeWithName:("epub:type") stringValue:("ibooks:reader-start-page")) |
| 598 | ocidNavA's setStringValue:("Cover Page") |
| 599 | ocidNavLI's addChild:(ocidNavA) |
| 600 | ocidNavOL's addChild:(ocidNavLI) |
| 601 | #リストに目次を追加 |
| 602 | set ocidNavLI to refMe's NSXMLElement's alloc()'s initWithName:("li") |
| 603 | set ocidNavA to refMe's NSXMLElement's alloc()'s initWithName:("a") |
| 604 | ocidNavA's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("toc.xhtml")) |
| 605 | ocidNavA's addAttribute:(refMe's NSXMLNode's attributeWithName:("epub:type") stringValue:("toc")) |
| 606 | ocidNavA's setStringValue:("Table of Contents") |
| 607 | ocidNavLI's addChild:(ocidNavA) |
| 608 | ocidNavOL's addChild:(ocidNavLI) |
| 609 | #出来上がったリストをbodyに追加 |
| 610 | ocidNavItem's addChild:(ocidNavOL) |
| 611 | ocidBodyItem's addChild:(ocidNavItem) |
| 612 | #### |
| 613 | #【3-6-B】 head を【3-6-A】 ルートエレメントに追加 |
| 614 | ocidRootElement's addChild:(ocidHeadElement) |
| 615 | #【3-6-C】 body を【3-6-A】ルートエレメントに追加 |
| 616 | ocidRootElement's addChild:(ocidBodyElement) |
| 617 | ## ↑からのROOTエレメントをセットしてXMLとする |
| 618 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 619 | ocidOutPutXML's setVersion:"1.0" |
| 620 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 621 | ###テキストにして |
| 622 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 623 | ###改行コードを指定して |
| 624 | ocidSaveStrings's appendString:(linefeed) |
| 625 | ##保存 |
| 626 | set listDone to ocidSaveStrings's writeToURL:(ocidXHTMLFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 627 | |
| 628 | ############################################# |
| 629 | ###◆【3-5】content.opf |
| 630 | ##【B】メタ情報のheadからなる 【C】各種コンテンツへのパス manifest と 【D】コンテンツの配置 spine 【E】ガイドguide |
| 631 | ##Pageの場合 |
| 632 | ## set ocidOptFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("epb.opf") isDirectory:false |
| 633 | ##一般的な命名 |
| 634 | set ocidOptFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("content.opf") isDirectory:false |
| 635 | ##【A】ルートエレメント |
| 636 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"package" |
| 637 | #アトリビュートを追加 |
| 638 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("version") stringValue:("3.0")) |
| 639 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("unique-identifier") stringValue:("BookId")) |
| 640 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("prefix") stringValue:("ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/ rendition: http://www.idpf.org/vocab/rendition/#")) |
| 641 | #ネームスペースを追加 |
| 642 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("http://www.idpf.org/2007/opf")) |
| 643 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("ibooks") stringValue:("http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/")) |
| 644 | ################## |
| 645 | #【B】メタ情報のhead |
| 646 | set ocidMetaDataElement to refMe's NSXMLElement's alloc()'s initWithName:("metadata") |
| 647 | ocidMetaDataElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("dc") stringValue:("http://purl.org/dc/elements/1.1/")) |
| 648 | ocidMetaDataElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("opf") stringValue:("http://www.idpf.org/2007/opf")) |
| 649 | #◆【B-1】タイトル |
| 650 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:title") |
| 651 | ocidMetaElement's setStringValue:(strDocumentTitle) |
| 652 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 653 | #◆【B-2】作成者 著者 |
| 654 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:creator") |
| 655 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("creator")) |
| 656 | ocidMetaElement's setStringValue:(strAuthor) |
| 657 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 658 | #◆【B-3】UUID |
| 659 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:identifier") |
| 660 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("BookId")) |
| 661 | ocidMetaElement's setStringValue:(strUUID) |
| 662 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 663 | #◆【B-4】言語 |
| 664 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:language") |
| 665 | ocidMetaElement's setStringValue:("ja") |
| 666 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 667 | #◆【B-5】作成日 |
| 668 | set strSetDate to doGetDateNo("yyyy-MM-dd") as text |
| 669 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:date") |
| 670 | ocidMetaElement's setStringValue:(strSetDate) |
| 671 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 672 | #◆【B-6】修正日 |
| 673 | set strSetDate to doGetDateNo("yyyy-MM-dd'T'HH:mm:ss'Z'") as text |
| 674 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("dc:modified") |
| 675 | ocidMetaElement's setStringValue:(strSetDate) |
| 676 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 677 | #◆【B-7】コンテンツのプロパティ レイアウト |
| 678 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 679 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("property") stringValue:("rendition:layout")) |
| 680 | ##リフロータイプのレイアウト 柔軟な表示形式 文字中心なものに最適 |
| 681 | # ocidMetaElement's setStringValue:("reflowable") |
| 682 | ##固定型のレイアウト 画面サイズに依存しない表示 画面のレイアウトを優先したい場合 |
| 683 | # ocidMetaElement's setStringValue:("fixed") |
| 684 | ##事前にページ化されたレイアウト ページベースの表示形式 画像コンテンツに最適 |
| 685 | ocidMetaElement's setStringValue:("pre-paginated") |
| 686 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 687 | #◆【B-8】コンテンツのプロパティ スプレッド 開き方 |
| 688 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 689 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("property") stringValue:("rendition:spread")) |
| 690 | ##デバイスの向きに依存しない |
| 691 | ocidMetaElement's setStringValue:("both") |
| 692 | ##横 |
| 693 | #ocidMetaElement's setStringValue:("landscape") |
| 694 | ##縦 非推奨 |
| 695 | #ocidMetaElement's setStringValue:("portrait") |
| 696 | ##単ページ |
| 697 | ##ocidMetaElement's setStringValue:("none") |
| 698 | ##自動 |
| 699 | ##ocidMetaElement's setStringValue:("auto") |
| 700 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 701 | #◆【B-9】向き |
| 702 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 703 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("property") stringValue:("rendition:orientation")) |
| 704 | #自動 |
| 705 | ocidMetaElement's setStringValue:("auto") |
| 706 | ##横 |
| 707 | #ocidMetaElement's setStringValue:("landscape") |
| 708 | ##縦 |
| 709 | #ocidMetaElement's setStringValue:("portrait") |
| 710 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 711 | ##表紙の有無での分岐 |
| 712 | if boolCoverPage is true then |
| 713 | set ocidMetaElement to refMe's NSXMLElement's alloc()'s initWithName:("meta") |
| 714 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("cover")) |
| 715 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("cover-image")) |
| 716 | ocidMetaDataElement's addChild:(ocidMetaElement) |
| 717 | end if |
| 718 | |
| 719 | ################## |
| 720 | ### 【C】各種コンテンツへのパス manifest |
| 721 | ##manifestのROOTエレメント |
| 722 | set ocidManifestElement to refMe's NSXMLElement's alloc()'s initWithName:("manifest") |
| 723 | #CSS追加 |
| 724 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 725 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("stylesheet")) |
| 726 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("css/book.css")) |
| 727 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("text/css")) |
| 728 | ocidManifestElement's addChild:(ocidItemElement) |
| 729 | #JS追加 |
| 730 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 731 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("javascript")) |
| 732 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("js/book.js")) |
| 733 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("text/javascript")) |
| 734 | ocidManifestElement's addChild:(ocidItemElement) |
| 735 | #NCX追加 |
| 736 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 737 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("ncx")) |
| 738 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("toc.ncx")) |
| 739 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/x-dtbncx+xml")) |
| 740 | ocidManifestElement's addChild:(ocidItemElement) |
| 741 | #目次追加 |
| 742 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 743 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("toc")) |
| 744 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("toc.xhtml")) |
| 745 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/xhtml+xml")) |
| 746 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("properties") stringValue:("nav")) |
| 747 | ocidManifestElement's addChild:(ocidItemElement) |
| 748 | ##表紙 表示画像 |
| 749 | if boolCoverPage is true then |
| 750 | ##表紙ページ設定 |
| 751 | |
| 752 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 753 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("cover")) |
| 754 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("cover.xhtml")) |
| 755 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/x-dtbncx+xml")) |
| 756 | |
| 757 | |
| 758 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 759 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("cover-page")) |
| 760 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("cover.xhtml")) |
| 761 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/x-dtbncx+xml")) |
| 762 | |
| 763 | |
| 764 | ocidManifestElement's addChild:(ocidItemElement) |
| 765 | ##表紙画像 |
| 766 | set ocidExtensionName to ocidCoverImageFilePathURL's pathExtension() |
| 767 | ####拡張子からUTI取得 |
| 768 | set ocidUTType to (refMe's UTType's typeWithFilenameExtension:(ocidExtensionName)) |
| 769 | set ocidFileMimeType to ocidUTType's preferredMIMEType() |
| 770 | ##MimeTypeを取得してから |
| 771 | set strFileMimeType to ocidFileMimeType as text |
| 772 | #設定 |
| 773 | set strCoverImageFileName to (strBaseImageFileName & "0001." & (ocidExtensionName as text)) as text |
| 774 | set strHref to ("images/" & strCoverImageFileName) as text |
| 775 | set ocidItemElement to refMe's NSXMLElement's alloc()'s initWithName:("item") |
| 776 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("cover-image")) |
| 777 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strHref)) |
| 778 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:(strFileMimeType)) |
| 779 | ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("properties") stringValue:("cover-image")) |
| 780 | ocidManifestElement's addChild:(ocidItemElement) |
| 781 | end if |
| 782 | |
| 783 | set numCntPage to 1 as integer |
| 784 | repeat with ocidFilePathURL in ocidSortedArray |
| 785 | set ocidExtensionName to ocidFilePathURL's pathExtension() |
| 786 | ####拡張子からUTI取得 |
| 787 | set ocidUTType to (refMe's UTType's typeWithFilenameExtension:(ocidExtensionName)) |
| 788 | set ocidFileMimeType to ocidUTType's preferredMIMEType() |
| 789 | set strFileMimeType to ocidFileMimeType as text |
| 790 | ###画像ファイルは連番処理 四桁のゼロサプレス |
| 791 | set strZeroSup to "0000" as text |
| 792 | set strSeroSup to (strZeroSup & (numCntPage as text)) as text |
| 793 | set strSeroSup to (text -4 through -1 of strSeroSup) as text |
| 794 | #IDを定義 |
| 795 | set strBaseImageFileName to ("dataItem") as text |
| 796 | set strFileName to (strBaseImageFileName & strSeroSup) as text |
| 797 | ##メディア要素(イメージファイル) |
| 798 | #itemエレメント |
| 799 | set ocidItemElement to (refMe's NSXMLElement's alloc()'s initWithName:("item")) |
| 800 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:(strFileName))) |
| 801 | #パス |
| 802 | set strSetValue to ("images/Image_" & strSeroSup & "." & (ocidExtensionName as text)) as text |
| 803 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strSetValue))) |
| 804 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:(strFileMimeType))) |
| 805 | (ocidManifestElement's addChild:(ocidItemElement)) |
| 806 | ##ページ要素(XHTMLファイル) |
| 807 | set strBaseFileName to ("page-") as text |
| 808 | set strFileName to (strBaseFileName & strSeroSup) as text |
| 809 | #itemエレメント |
| 810 | set ocidItemElement to (refMe's NSXMLElement's alloc()'s initWithName:("item")) |
| 811 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:(strFileName))) |
| 812 | #パス |
| 813 | set strSetValue to (strBaseFileName & strSeroSup & ".xhtml") as text |
| 814 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strSetValue))) |
| 815 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/xhtml+xml"))) |
| 816 | (ocidItemElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("properties") stringValue:("scripted"))) |
| 817 | (ocidManifestElement's addChild:(ocidItemElement)) |
| 818 | ##カウントアップ |
| 819 | set numCntPage to numCntPage + 1 as integer |
| 820 | end repeat |
| 821 | |
| 822 | ######################## |
| 823 | #【D】コンテンツの配置 spine |
| 824 | set ocidSpineElement to refMe's NSXMLElement's alloc()'s initWithName:("spine") |
| 825 | ##アトリビュート |
| 826 | ocidSpineElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("toc") stringValue:("ncx")) |
| 827 | ##開き方向指定 |
| 828 | ocidSpineElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("page-progression-direction") stringValue:(strPageProgression)) |
| 829 | ##【D-1】表紙ページの有無 |
| 830 | if boolCoverPage is true then |
| 831 | #表紙ページ ID: cover-page |
| 832 | set ocidItemRef to refMe's NSXMLElement's alloc()'s initWithName:("itemref") |
| 833 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("idref") stringValue:("cover")) |
| 834 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("linear") stringValue:("yes")) |
| 835 | ocidSpineElement's addChild:(ocidItemRef) |
| 836 | (* |
| 837 | #表紙画像 ID: cover-image |
| 838 | set ocidItemRef to refMe's NSXMLElement's alloc()'s initWithName:("itemref") |
| 839 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("idref") stringValue:("cover-image")) |
| 840 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("linear") stringValue:("yes")) |
| 841 | ocidSpineElement's addChild:(ocidItemRef) |
| 842 | #表紙ページ ID: cover-page |
| 843 | set ocidItemRef to refMe's NSXMLElement's alloc()'s initWithName:("itemref") |
| 844 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("idref") stringValue:("cover-page")) |
| 845 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("linear") stringValue:("yes")) |
| 846 | ocidSpineElement's addChild:(ocidItemRef) |
| 847 | *) |
| 848 | ##【D-2】目次ページ |
| 849 | set ocidItemRef to refMe's NSXMLElement's alloc()'s initWithName:("itemref") |
| 850 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("idref") stringValue:("toc")) |
| 851 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("linear") stringValue:("yes")) |
| 852 | ocidSpineElement's addChild:(ocidItemRef) |
| 853 | end if |
| 854 | |
| 855 | #カウンタ初期化 |
| 856 | set numCntPage to 1 as integer |
| 857 | #事前に取得している総ページ数回繰り返す |
| 858 | repeat numCntAllImage times |
| 859 | ###画像ファイルは連番処理 四桁のゼロサプレス |
| 860 | set strZeroSup to "0000" as text |
| 861 | set strSeroSup to (strZeroSup & (numCntPage as text)) as text |
| 862 | set strSeroSup to (text -4 through -1 of strSeroSup) as text |
| 863 | set strSetFileID to (strBaseFileName & strSeroSup) as text |
| 864 | ##ファイル名をitemrefとして登録 |
| 865 | set ocidItemRef to refMe's NSXMLElement's alloc()'s initWithName:("itemref") |
| 866 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("idref") stringValue:(strSetFileID)) |
| 867 | ocidItemRef's addAttribute:(refMe's NSXMLNode's attributeWithName:("linear") stringValue:("yes")) |
| 868 | if boolProgression is true then |
| 869 | if numCntPage = 1 then |
| 870 | log "spineから1ページ目を抜きます" |
| 871 | else |
| 872 | ##ページ要素itemrefをspineの子要素に追加 |
| 873 | ocidSpineElement's addChild:(ocidItemRef) |
| 874 | end if |
| 875 | else |
| 876 | ##ページ要素itemrefをspineの子要素に追加 |
| 877 | ocidSpineElement's addChild:(ocidItemRef) |
| 878 | end if |
| 879 | set numCntPage to numCntPage + 1 as integer |
| 880 | end repeat |
| 881 | ################## |
| 882 | #【E】ガイドguide |
| 883 | (* referenceのtypeの要素 |
| 884 | toc(Table of Contents): 目次へのリンク。 |
| 885 | cover: 書籍の表紙ページへのリンク。 |
| 886 | title-page: 書籍のタイトルページへのリンク。 |
| 887 | colophon: 制作者や印刷情報を含むページへのリンク。 |
| 888 | acknowledgements: 著者への謝辞が含まれるページへのリンク。 |
| 889 | dedication: 書籍の献辞が含まれるページへのリンク。 |
| 890 | *) |
| 891 | set ocidGuideElement to refMe's NSXMLElement's alloc()'s initWithName:("guide") |
| 892 | #【E-1】目次追加 |
| 893 | set ocidReferenceElement to (refMe's NSXMLElement's alloc()'s initWithName:("reference")) |
| 894 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("toc")) |
| 895 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("toc.xhtml")) |
| 896 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("title") stringValue:("目次")) |
| 897 | ocidGuideElement's addChild:(ocidReferenceElement) |
| 898 | ##【E-2】表紙ページの有無 設定依存 |
| 899 | if boolCoverPage is true then |
| 900 | set ocidReferenceElement to (refMe's NSXMLElement's alloc()'s initWithName:("reference")) |
| 901 | # ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("cover")) |
| 902 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("cover-page")) |
| 903 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:("cover.xhtml")) |
| 904 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("title") stringValue:("表紙")) |
| 905 | ocidGuideElement's addChild:(ocidReferenceElement) |
| 906 | ##1ページ目指定 |
| 907 | set strStartFileName to (strBaseFileName & "0001.xhtml") as text |
| 908 | set ocidReferenceElement to (refMe's NSXMLElement's alloc()'s initWithName:("reference")) |
| 909 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("other.reader-start-page")) |
| 910 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strStartFileName)) |
| 911 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("title") stringValue:("最初のページ")) |
| 912 | ocidGuideElement's addChild:(ocidReferenceElement) |
| 913 | ##1ページ目指定 |
| 914 | set ocidReferenceElement to (refMe's NSXMLElement's alloc()'s initWithName:("reference")) |
| 915 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("type") stringValue:("text")) |
| 916 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("href") stringValue:(strStartFileName)) |
| 917 | ocidReferenceElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("title") stringValue:("最初のコンテンツ")) |
| 918 | ocidGuideElement's addChild:(ocidReferenceElement) |
| 919 | end if |
| 920 | |
| 921 | ################## |
| 922 | #↑からの各子要素をセット |
| 923 | ## 【B】メタ部を【A】のROOTエレメントに追加 |
| 924 | ocidRootElement's addChild:(ocidMetaDataElement) |
| 925 | ## 【C】manifest部を【A】のROOTエレメントに追加 |
| 926 | ocidRootElement's addChild:(ocidManifestElement) |
| 927 | ## 【D】spine部を【A】のROOTエレメントに追加 |
| 928 | ocidRootElement's addChild:(ocidSpineElement) |
| 929 | ## 【E】ガイド部を【A】のROOTエレメントに追加 |
| 930 | ocidRootElement's addChild:(ocidGuideElement) |
| 931 | ## 【A】をROOTエレメントをセットしてXMLとする |
| 932 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 933 | ocidOutPutXML's setVersion:"1.0" |
| 934 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 935 | ### 【A】をテキストにして |
| 936 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 937 | ###改行コードを指定して |
| 938 | ocidSaveStrings's appendString:(linefeed) |
| 939 | ##保存 |
| 940 | set listWritetoUrlArray to ocidSaveStrings's writeToURL:(ocidOptFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 941 | #################################### |
| 942 | ###◆ 【3-4】toc.ncx 主に閲覧者が必要な情報や |
| 943 | ##ページや項目の順番等を指定する |
| 944 | ##マルチメディア系やアクセシビリティ要素もここで指定する |
| 945 | ###ファイルパス |
| 946 | ##Pageの場合 |
| 947 | ## set ocidNcxFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("epb.ncx") isDirectory:false |
| 948 | ##一般的な命名 |
| 949 | set ocidNcxFilePathURL to ocidOPSDirPathURL's URLByAppendingPathComponent:("toc.ncx") isDirectory:false |
| 950 | ######【A】ROOTのエレメント 4つの子要素がある |
| 951 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"ncx" |
| 952 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("version") stringValue:("2005-1")) |
| 953 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("http://www.daisy.org/z3986/2005/ncx/")) |
| 954 | ######【B】head メタ情報部分 |
| 955 | set ocidHeadElement to refMe's NSXMLElement's alloc()'s initWithName:("head") |
| 956 | ##【B-1】uid |
| 957 | ###エレメント名meta |
| 958 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 959 | ##アトリビュートを設定して |
| 960 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dtb:uid")) |
| 961 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strUUID)) |
| 962 | ##親要素の【B】head に追加する |
| 963 | ocidHeadElement's addChild:(ocidMetaElement) |
| 964 | ##◆【B-2】depth |
| 965 | ###エレメント名meta |
| 966 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 967 | ##アトリビュートを設定して |
| 968 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dtb:depth")) |
| 969 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:("1")) |
| 970 | ##親要素の【B】head に追加する |
| 971 | ocidHeadElement's addChild:(ocidMetaElement) |
| 972 | ##◆【B-3】totalPageCount |
| 973 | set strCntAllImage to numCntAllImage as text |
| 974 | ###エレメント名meta |
| 975 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 976 | ##アトリビュートを設定して |
| 977 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dtb:totalPageCount")) |
| 978 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strCntAllImage)) |
| 979 | ##親要素の【B】head に追加する |
| 980 | ocidHeadElement's addChild:(ocidMetaElement) |
| 981 | ##◆【B-4】maxPageNumber |
| 982 | ###エレメント名meta |
| 983 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 984 | ##アトリビュートを設定して |
| 985 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dtb:maxPageNumber")) |
| 986 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strCntAllImage)) |
| 987 | ##親要素の【B】head に追加する |
| 988 | ocidHeadElement's addChild:(ocidMetaElement) |
| 989 | ##◆【B-5】作成日 |
| 990 | set strSetDate to doGetDateNo("yyyy-MM-dd") as text |
| 991 | ###エレメント名meta |
| 992 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 993 | ##アトリビュートを設定して |
| 994 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dc:date")) |
| 995 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strSetDate)) |
| 996 | ##親要素の【B】head に追加する |
| 997 | ocidHeadElement's addChild:(ocidMetaElement) |
| 998 | ##◆【B-6】修正日 |
| 999 | set strSetDate to doGetDateNo("yyyy-MM-dd'T'HH:mm:ss'Z'") as text |
| 1000 | ###エレメント名meta |
| 1001 | set ocidMetaElement to refMe's NSXMLElement's elementWithName:("meta") |
| 1002 | ##アトリビュートを設定して |
| 1003 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("dc:modified")) |
| 1004 | ocidMetaElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("content") stringValue:(strSetDate)) |
| 1005 | ##親要素の【B】head に追加する |
| 1006 | ocidHeadElement's addChild:(ocidMetaElement) |
| 1007 | ######【C】docTitle タイトル |
| 1008 | ##エレメント名docTitle |
| 1009 | set ocidTitleElement to refMe's NSXMLElement's alloc()'s initWithName:("docTitle") |
| 1010 | ##子要素のtext |
| 1011 | set ocidTextElement to refMe's NSXMLElement's elementWithName:("text") |
| 1012 | ##子要素textにドキュメント名を値として設定して |
| 1013 | ocidTextElement's setStringValue:(strDocumentTitle) |
| 1014 | ##CのdocTitleエレメントに子要素として追加する |
| 1015 | ocidTitleElement's addChild:(ocidTextElement) |
| 1016 | ######【D】docAuthor 作者 著者 |
| 1017 | ##エレメント名 docAuthor |
| 1018 | set ocidAuthorElement to refMe's NSXMLElement's alloc()'s initWithName:("docAuthor") |
| 1019 | ##子要素のtext |
| 1020 | set ocidTextElement to refMe's NSXMLElement's elementWithName:("text") |
| 1021 | ##子要素textに作者情報を値として設定して |
| 1022 | ocidTextElement's setStringValue:(strAuthor) |
| 1023 | ##DのdocAuthorエレメントに子要素として追加する |
| 1024 | ocidAuthorElement's addChild:(ocidTextElement) |
| 1025 | ######【E】navMap navMapは閲覧時の順番を指定するので表紙イメージの設定とは異なる |
| 1026 | set ocidMapElement to refMe's NSXMLElement's alloc()'s initWithName:("navMap") |
| 1027 | #navMapの子要素navPoint |
| 1028 | set ocidNavPointElement to refMe's NSXMLElement's elementWithName:("navPoint") |
| 1029 | ##navPointのアトリビュート カバー表紙を最初のページとして読み順指定する |
| 1030 | ocidNavPointElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("id") stringValue:("navpoint-1")) |
| 1031 | ocidNavPointElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("playOrder") stringValue:("1")) |
| 1032 | ##【E-1】 navLabel ↑このnavPointの意図するラベル名 |
| 1033 | set ocidNavLabelElement to refMe's NSXMLElement's elementWithName:("navLabel") |
| 1034 | set ocidTextElement to refMe's NSXMLElement's elementWithName:("text") |
| 1035 | ocidTextElement's setStringValue:(strLabelTitle) |
| 1036 | ##ラベルテキストをnavLabelに子要素として追加 |
| 1037 | ocidNavLabelElement's addChild:(ocidTextElement) |
| 1038 | ##↑追加したラベルをnavPointに子要素として追加 |
| 1039 | ocidNavPointElement's addChild:(ocidNavLabelElement) |
| 1040 | ##【E-2】contentはnavPointとして指定するファイルのリソースパス |
| 1041 | set ocidNavContentElement to refMe's NSXMLElement's elementWithName:("content") |
| 1042 | ###表紙設定ありの場合は |
| 1043 | if boolCoverPage is true then |
| 1044 | ##アトリビュートでパス指定する =表紙ページ |
| 1045 | ocidNavContentElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:("cover.xhtml")) |
| 1046 | else |
| 1047 | ##見開き調整ありの場合は |
| 1048 | if boolProgression is true then |
| 1049 | set strStartFileName to (strBaseFileName & "0002.xhtml") as text |
| 1050 | ocidNavContentElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:(strStartFileName)) |
| 1051 | else |
| 1052 | set strStartFileName to (strBaseFileName & "0001.xhtml") as text |
| 1053 | ocidNavContentElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("src") stringValue:(strStartFileName)) |
| 1054 | end if |
| 1055 | end if |
| 1056 | ##contentをnavPointに子要素として追加 |
| 1057 | ocidNavPointElement's addChild:(ocidNavContentElement) |
| 1058 | ##複数のnavPointを指定する場合はこの下に追加していく |
| 1059 | ###navPointをnavMapに子要素として追加 |
| 1060 | ocidMapElement's addChild:(ocidNavPointElement) |
| 1061 | ## ↑からの子要素をセット |
| 1062 | ##【A】に【B】を追加 |
| 1063 | ocidRootElement's addChild:(ocidHeadElement) |
| 1064 | ##【A】に【C】を追加 |
| 1065 | ocidRootElement's addChild:(ocidTitleElement) |
| 1066 | ##【A】に【D】を追加 |
| 1067 | ocidRootElement's addChild:(ocidAuthorElement) |
| 1068 | ##【A】に【E】を追加 |
| 1069 | ocidRootElement's addChild:(ocidMapElement) |
| 1070 | ## ↑からのROOTエレメントをセットしてXMLとする |
| 1071 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 1072 | ocidOutPutXML's setVersion:"1.0" |
| 1073 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 1074 | ###XML形式のテキストに出力 |
| 1075 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 1076 | ###改行コードを指定して |
| 1077 | ocidSaveStrings's appendString:(linefeed) |
| 1078 | ##保存 これでCNXファイルの出来上がり |
| 1079 | set listWritetoUrlArray to ocidSaveStrings's writeToURL:(ocidNcxFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 1080 | |
| 1081 | ################################################################# |
| 1082 | ### 【2】META-INF ファイル: container.xml com.apple.ibooks.display-options.xml |
| 1083 | set ocidMetaDirPathURL to ocidEpubDirPathURL's URLByAppendingPathComponent:("META-INF") isDirectory:true |
| 1084 | ################## |
| 1085 | ###◆【2-1】container.xml |
| 1086 | ###ファイルのパス |
| 1087 | set ocidContainerFilePathURL to ocidMetaDirPathURL's URLByAppendingPathComponent:("container.xml") isDirectory:false |
| 1088 | ###【A】ROOT エレメント |
| 1089 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"container" |
| 1090 | ##【A】にアトリビュートを追加 |
| 1091 | ocidRootElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("version") stringValue:("1.0")) |
| 1092 | ##【A】にネームスペースを追加 |
| 1093 | ocidRootElement's addNamespace:(refMe's NSXMLNode's namespaceWithName:("") stringValue:("urn:oasis:names:tc:opendocument:xmlns:container")) |
| 1094 | ###【B】子要素 rootfiles エレメント |
| 1095 | set ocidRootFilesElement to refMe's NSXMLElement's alloc()'s initWithName:"rootfiles" |
| 1096 | ###【C】Bの子要素 rootfileノード |
| 1097 | set ocidRootFilesNode to refMe's NSXMLElement's alloc()'s initWithName:"rootfile" |
| 1098 | ##【C】にアトリビュートを追加 |
| 1099 | ocidRootFilesNode's addAttribute:(refMe's NSXMLNode's attributeWithName:("full-path") stringValue:("OPS/content.opf")) |
| 1100 | ocidRootFilesNode's addAttribute:(refMe's NSXMLNode's attributeWithName:("media-type") stringValue:("application/oebps-package+xml")) |
| 1101 | ## ↑からの子要素をセット(【B】に【C】を追加) |
| 1102 | ocidRootFilesElement's addChild:(ocidRootFilesNode) |
| 1103 | ## ↑からの子要素をセット(【A】に【B】を追加) |
| 1104 | ocidRootElement's addChild:(ocidRootFilesElement) |
| 1105 | ## ↑からのROOTエレメントをセットしてXMLとする 【A】をXMLドキュメントに |
| 1106 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 1107 | ocidOutPutXML's setVersion:"1.0" |
| 1108 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 1109 | ###XML形式のテキストに出力 |
| 1110 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 1111 | ###改行コードを指定して |
| 1112 | ocidSaveStrings's appendString:(linefeed) |
| 1113 | ##保存 |
| 1114 | set listDone to ocidSaveStrings's writeToURL:(ocidContainerFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 1115 | |
| 1116 | ################## |
| 1117 | ###◆ 【2-2】com.apple.ibooks.display-options.xml |
| 1118 | ##ファイルパス |
| 1119 | set ocidContainerFilePathURL to ocidMetaDirPathURL's URLByAppendingPathComponent:("com.apple.ibooks.display-options.xml") isDirectory:false |
| 1120 | ###【A】ROOT エレメント |
| 1121 | set ocidRootElement to refMe's NSXMLElement's alloc()'s initWithName:"display_options" |
| 1122 | ###【B】子要素 platform エレメント |
| 1123 | set ocidPlatformElement to refMe's NSXMLElement's alloc()'s initWithName:("platform") |
| 1124 | ###【B】にアトリビュートを追加 |
| 1125 | ocidPlatformElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("*")) |
| 1126 | ###【C】Bの子要素としてのoption エレメント |
| 1127 | set ocidOptionElement to refMe's NSXMLElement's elementWithName:("option") |
| 1128 | ###【C】にアトリビュートを追加 |
| 1129 | ocidOptionElement's addAttribute:(refMe's NSXMLNode's attributeWithName:("name") stringValue:("specified-fonts")) |
| 1130 | ###【C】にテキストの値を設定 |
| 1131 | ocidOptionElement's setStringValue:("false") |
| 1132 | ## 子要素をセット 【C】を【B】に追加 |
| 1133 | ocidPlatformElement's addChild:(ocidOptionElement) |
| 1134 | ## ↑からの子要素をセット 【B】を【A】に追加 |
| 1135 | ocidRootElement's addChild:(ocidPlatformElement) |
| 1136 | ## ↑からのROOTエレメントをセットしてXMLとする 【A】をXMLドキュメントにする |
| 1137 | set ocidOutPutXML to refMe's NSXMLDocument's alloc()'s initWithRootElement:(ocidRootElement) |
| 1138 | ocidOutPutXML's setVersion:"1.0" |
| 1139 | ocidOutPutXML's setCharacterEncoding:"UTF-8" |
| 1140 | ###XML形式のテキストに出力 |
| 1141 | set ocidSaveStrings to ocidOutPutXML's XMLString() |
| 1142 | ###改行コードを指定して |
| 1143 | ocidSaveStrings's appendString:(linefeed) |
| 1144 | ##保存 |
| 1145 | set listDone to ocidSaveStrings's writeToURL:(ocidContainerFilePathURL) atomically:true encoding:(refMe's NSUTF8StringEncoding) |error|:(reference) |
| 1146 | |
| 1147 | return {(first item of listDone), ocidEpubDirPathURL} |
| 1148 | end doMakeEpub |
| 1149 |
|
| 1150 | ############################## |
| 1151 | # 今の日付日間 テキスト |
| 1152 | on doGetDateNo(argDateFormat) |
| 1153 | set ocidDate to current application's NSDate's |date|() |
| 1154 | set ocidNSDateFormatter to current application's NSDateFormatter's alloc()'s init() |
| 1155 | ocidNSDateFormatter's setLocale:(current application's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX") |
| 1156 | set ocidTimeZone to refMe's NSTimeZone's alloc()'s initWithName:"Asia/Tokyo" |
| 1157 | ocidNSDateFormatter's setTimeZone:(ocidTimeZone) |
| 1158 | ocidNSDateFormatter's setDateFormat:(argDateFormat) |
| 1159 | set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:ocidDate |
| 1160 | set strDateAndTime to ocidDateAndTime as text |
| 1161 | return strDateAndTime |
| 1162 | end doGetDateNo |
| 1163 |
|
| 1164 |
|
| 1165 | ############################## |
| 1166 | # 無圧縮ZIP |
| 1167 | on doMakeZip(aliasDirPath) |
| 1168 | |
| 1169 | ####構造ファイルの名称を取得する |
| 1170 | set aliasFolderPath to aliasDirPath as alias |
| 1171 | tell application "Finder" |
| 1172 | tell folder aliasFolderPath |
| 1173 | set listContentsAlias to name of every item as list |
| 1174 | set strDirName to name as text |
| 1175 | end tell |
| 1176 | end tell |
| 1177 | ####コマンドライン用に第一階層の項目をテキストにする |
| 1178 | set strDirList to ("") as text |
| 1179 | set strExtension to (missing value) |
| 1180 | repeat with itemName in listContentsAlias |
| 1181 | set strItemName to itemName as text |
| 1182 | set strDirList to (strDirList & "\"" & strItemName & "\" ") as text |
| 1183 | #拡張子判定 |
| 1184 | if strItemName is "xl" then |
| 1185 | set strExtension to "xlsx" as text |
| 1186 | else if strItemName is "ppt" then |
| 1187 | set strExtension to "pptx" as text |
| 1188 | else if strItemName is "word" then |
| 1189 | set strExtension to "docx" as text |
| 1190 | else if strItemName is "OPS" then |
| 1191 | set strExtension to "epub" as text |
| 1192 | end if |
| 1193 | end repeat |
| 1194 | if strExtension = (missing value) then |
| 1195 | return "フォルダの構造に誤りがあります" |
| 1196 | end if |
| 1197 | ### |
| 1198 | set strCR to ("" & return & "") as text |
| 1199 | #パス |
| 1200 | tell application "Finder" |
| 1201 | set aliasContainerDirPath to (container of aliasFolderPath) as alias |
| 1202 | end tell |
| 1203 | set strContainerDirPath to (POSIX path of aliasContainerDirPath) as text |
| 1204 | set strDirPath to (POSIX path of aliasFolderPath) as text |
| 1205 | #dot_clean実行 |
| 1206 | set theComandText to ("/usr/sbin/dot_clean -n -m -v \"" & strDirPath & "\"") as text |
| 1207 | do shell script theComandText |
| 1208 | #FindeでDS_Storeを除去 |
| 1209 | set theCmdCom to ("/usr/bin/find \"" & strDirPath & "\" -name \".DS_Store\" -depth -exec rm {} \\;") as text |
| 1210 | do shell script theCmdCom |
| 1211 | #移動 |
| 1212 | set strCommandText to ("/usr/bin/cd \"" & strDirPath & "\"") as text |
| 1213 | log strCommandText |
| 1214 | do shell script strCommandText |
| 1215 | #移動 |
| 1216 | set strCommandText to ("pushd \"" & strDirPath & "\"") as text |
| 1217 | log strCommandText |
| 1218 | do shell script strCommandText |
| 1219 | #圧縮実行 |
| 1220 | set strCommandText to ("pushd \"" & strDirPath & "\" && '/usr/bin/zip' -rX \"../" & strDirName & "." & strExtension & "\" " & strDirList & "") as text |
| 1221 | log strCR & strCommandText & strCR |
| 1222 | do shell script strCommandText |
| 1223 | |
| 1224 | |
| 1225 | |
| 1226 | |
| 1227 | return true |
| 1228 | |
| 1229 | end doMakeZip |