20260326

【ローカルドメイン】ATS (Apple Font Registration System)の内容のHTML出力 


【ローカルドメイン】ATS (Apple Font Registration System)の内容のHTML出力 

ダウンロードはこちらから
NOTE記事一覧ですnote.com

【スクリプトエディタで開く】 |

ATS_FONT_LIST_HTML_Lib.scpt
ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003(*
004ATS (Apple Font Registration System)の内容のTSV出力
005基本フォントで3000件程度あると思います
006デザイナーだと1万件超える人も多いかな
007PS名 フルネーム ファイルパスを出力します
008テキストファイルでだいたい1mb超ええるサイズになります
009fontregistry.userのDBから値を取得しています
010ATSNoの飛び番について
011ATSNoの番号が飛んでいる部分は
012未ダウンロード・未使用・廃番のassetフォントの予約分と思われます
013TSVをエクセルで読み込む場合は
014文字コードをUTF8指定で読み込んでください
015
016com.cocolog-nifty.quicktimer.icefloe *)
017----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
018use AppleScript version "2.8"
019use framework "Foundation"
020use framework "AppKit"
021use scripting additions
022property refMe : a reference to current application
023######################
024#DBファイルの複製
025set appFileManager to refMe's NSFileManager's defaultManager()
026set ocidTempDirURL to appFileManager's temporaryDirectory()
027set ocidUUID to refMe's NSUUID's alloc()'s init()
028set ocidUUIDString to ocidUUID's UUIDString
029set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(true)
030#テンポラリ(起動時に削除される項目に作業用ディレクトリ)
031set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s init()
032ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
033set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
034#DB元ファイル
035set ocidContainerDirPathURL to ocidTempDirURL's URLByDeletingLastPathComponent()
036set ocidDBFilePathURL to ocidContainerDirPathURL's URLByAppendingPathComponent:("C/com.apple.FontRegistry/fontregistry.user") isDirectory:(false)
037#DBコピー先パス
038set strSaveDBFileName to "fontregistry.user.sqlite" as text
039set ocidSaveDBFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveDBFileName) isDirectory:false
040set strDBFilePath to ocidSaveDBFilePathURL's |path|() as text
041#DBコピー
042set listDone to (appFileManager's copyItemAtURL:(ocidDBFilePathURL) toURL:(ocidSaveDBFilePathURL) |error|:(reference))
043
044#出力ファイルパス
045set strOutputFileName to "output.tsv" as text
046set ocidOutputFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strOutputFileName) isDirectory:false
047set strOutputFilePath to ocidOutputFilePathURL's |path|() as text
048
049#HTML保存先
050set ocidHomeDirURL to appFileManager's homeDirectoryForCurrentUser()
051set ocidSitesDirPathURL to ocidHomeDirURL's URLByAppendingPathComponent:("Sites") isDirectory:(true)
052set ocidHTMLSaveDirPathURL to ocidSitesDirPathURL's URLByAppendingPathComponent:("FontList") isDirectory:(true)
053set ocidHTMLSaveDirPath to ocidHTMLSaveDirPathURL's |path|()
054set boolDirExists to appFileManager's fileExistsAtPath:(ocidHTMLSaveDirPath) isDirectory:(true)
055if boolDirExists is false then
056   set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s init()
057   ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
058   set listDone to appFileManager's createDirectoryAtURL:(ocidHTMLSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error|:(reference)
059   if (item 1 of listDone) is false then
060      set strErrorNO to (item 2 of listDone)'s code() as text
061      set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
062      refMe's NSLog("■:" & strErrorNO & strErrorMes)
063      log "createDirectoryAtURL エラーしました" & strErrorNO & strErrorMes
064      return false
065   end if
066end if
067#出力ファイル HTML
068set strTime to doGetDateNo("yyyyMMdd_HHmmss") as text
069set strHTMLFileName to ("ATSFontsList." & strTime & ".html") as text
070set ocidSaveHTMLPathURL to ocidHTMLSaveDirPathURL's URLByAppendingPathComponent:(strHTMLFileName) isDirectory:(false)
071
072######################
073#コマンド実行
074#v2
075set strCommandText to ("/usr/bin/sqlite3 \"" & strDBFilePath & "\" \".headers off\" \".headers off\" \".mode tabs\" \"SELECT DISTINCT  ft.font_column || '" & tab & "' || nt.name_column || '" & tab & "' ||  fnt.full_name_column || '" & tab & "' ||  COALESCE(loc.family_name_column, '') || '" & tab & "' ||  COALESCE(loc.subfamily_name_column, '') || '" & tab & "' ||  ft.path_column FROM font_table AS ft JOIN fullname_table AS fnt ON ft.font_column = fnt.font_column JOIN name_table AS nt ON ft.font_column = nt.font_column LEFT JOIN loc_names_table AS loc ON ft.font_column = loc.font_column GROUP BY ft.font_column;\"   > \"" & strOutputFilePath & "\"") as text
076log "" & linefeed & strCommandText & linefeed & "" as text
077try
078   do shell script strCommandText
079end try
080######################
081#戻り値整形
082set strTab to ("" & tab & "") as text
083set strLF to ("" & linefeed & "") as text
084set strCR to ("" & return & "") as text
085#NSSTRING
086set listResponse to refMe's NSString's alloc()'s initWithContentsOfURL:(ocidOutputFilePathURL) encoding:(refMe's NSUTF8StringEncoding) |error|:(reference)
087set ocidReadStrings to (first item of listResponse)
088#改行をUNIXに強制
089set ocidReadStrings to (ocidReadStrings's stringByReplacingOccurrencesOfString:(strCR & strLF) withString:(strLF))
090set ocidReadStrings to (ocidReadStrings's stringByReplacingOccurrencesOfString:(strCR) withString:(strLF))
091set ocidReadStrings to (ocidReadStrings's stringByReplacingOccurrencesOfString:(strLF & strLF) withString:(strLF))
092#行末の改行を削除
093set boolHas to (ocidReadStrings's hasSuffix:(strLF)) as boolean
094if boolHas is true then
095   set ocidLength to ((ocidReadStrings's |length|()) - 1) as integer
096   set ocidReadStrings to ocidReadStrings's substringToIndex:(ocidLength)
097end if
098set ocidCharSet to refMe's NSCharacterSet's newlineCharacterSet()
099set ocidReadArray to ocidReadStrings's componentsSeparatedByCharactersInSet:(ocidCharSet)
100set ocidReadStrings to (missing value)
101set ocidSortedArray to refMe's NSMutableArray's alloc()'s init()
102
103
104repeat with itemLineString in ocidReadArray
105   set ocidItemLineArray to (itemLineString's componentsSeparatedByString:(strTab))
106   set ocidLastItem to ocidItemLineArray's lastObject()
107   
108   set boonPrefix to (ocidLastItem's hasPrefix:("/Library/Fonts"))
109   if boonPrefix is true then
110      ##ここで順番入れ替え
111      (ocidItemLineArray's exchangeObjectAtIndex:(0) withObjectAtIndex:(1))
112      set ocidJoinText to (ocidItemLineArray's componentsJoinedByString:(strTab))
113      (ocidSortedArray's addObject:(ocidJoinText))
114   end if
115   set ocidItemLineArray to (missing value)
116   set itemLineString to (missing value)
117end repeat
118set ocidReadArray to (missing value)
119
120
121#ソート
122set ocidSortedArray to ocidSortedArray's sortedArrayUsingSelector:("localizedStandardCompare:")
123
124######################
125#本処理 HTML生成
126set ocidHomeDirURL to appFileManager's homeDirectoryForCurrentUser()
127set ocidSitesDirPathURL to ocidHomeDirURL's URLByAppendingPathComponent:("Sites") isDirectory:(true)
128set ocidHTMLSaveDirPathURL to ocidSitesDirPathURL's URLByAppendingPathComponent:("Apple/FontList") isDirectory:(true)
129set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s init()
130ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
131set listDone to appFileManager's createDirectoryAtURL:(ocidHTMLSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error|:(reference)
132#出力ファイル HTML
133set strTime to doGetDateNo("yyyyMMdd_HHmmss") as text
134set strHTMLFileName to ("ATSFontsList." & strTime & ".html") as text
135set ocidSaveHTMLPathURL to ocidHTMLSaveDirPathURL's URLByAppendingPathComponent:(strHTMLFileName) isDirectory:(false)
136#headerに渡すエレメント
137set ocidSetHeaderElement to (refMe's NSXMLElement's elementWithName:("div"))
138set ocidH3Element to refMe's NSXMLElement's elementWithName:("h3")
139(ocidH3Element's setStringValue:("ATS(Apple Type Services)一覧"))
140(ocidSetHeaderElement's addChild:(ocidH3Element))
141###################
142#footerに渡すエレメント
143set ocidSetFooterElement to (refMe's NSXMLElement's elementWithName:("div"))
144set ocidAElement to refMe's NSXMLElement's elementWithName:("a")
145set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:("https://developer.apple.com/fonts/"))
146(ocidAElement's addAttribute:(ocidAddNode))
147set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank"))
148(ocidAElement's addAttribute:(ocidAddNode))
149set strContents to ("Fonts for Apple platforms") as text
150(ocidAElement's setStringValue:(strContents))
151(ocidSetFooterElement's addChild:(ocidAElement))
152###################
153#articleに渡すエレメント
154set ocidSetArticleElement to (refMe's NSXMLElement's elementWithName:("div"))
155set ocidH3Element to (refMe's NSXMLElement's elementWithName:("h3"))
156set strTime to doGetDateNo("yyyyMMdd") as text
157set strSetValue to (strTime & "時点のリスト") as text
158(ocidH3Element's setStringValue:(strSetValue))
159(ocidSetArticleElement's addChild:(ocidH3Element))
160###################
161#テーブル部生成開始
162set ocidTableElement to refMe's NSXMLElement's elementWithName:("table")
163###################
164#【caption】
165set ocidCaptionElement to refMe's NSXMLElement's elementWithName:("caption")
166ocidCaptionElement's setStringValue:("ATS(Apple Type Services)が認識しているフォントリスト")
167ocidTableElement's addChild:(ocidCaptionElement)
168###################
169#【colgroup】
170set ocidColgroupElement to refMe's NSXMLElement's elementWithName:("colgroup")
171###################
172#【col】col生成
173set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
174set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("No"))
175(ocidAddElement's addAttribute:(ocidAddNode))
176(ocidColgroupElement's addChild:(ocidAddElement))
177set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
178set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("ATSNo"))
179(ocidAddElement's addAttribute:(ocidAddNode))
180(ocidColgroupElement's addChild:(ocidAddElement))
181set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
182set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Postscript"))
183(ocidAddElement's addAttribute:(ocidAddNode))
184(ocidColgroupElement's addChild:(ocidAddElement))
185set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
186set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Full Name"))
187(ocidAddElement's addAttribute:(ocidAddNode))
188(ocidColgroupElement's addChild:(ocidAddElement))
189set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
190set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Family"))
191(ocidAddElement's addAttribute:(ocidAddNode))
192(ocidColgroupElement's addChild:(ocidAddElement))
193set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
194set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("SubFamily"))
195(ocidAddElement's addAttribute:(ocidAddNode))
196(ocidColgroupElement's addChild:(ocidAddElement))
197set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
198set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("File Path"))
199(ocidAddElement's addAttribute:(ocidAddNode))
200(ocidColgroupElement's addChild:(ocidAddElement))
201set ocidAddElement to (refMe's NSXMLElement's elementWithName:("col"))
202set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("LINK"))
203(ocidAddElement's addAttribute:(ocidAddNode))
204(ocidColgroupElement's addChild:(ocidAddElement))
205#テーブルエレメントに追加
206ocidTableElement's addChild:(ocidColgroupElement)
207###################
208#【thead】
209set ocidTheadElement to refMe's NSXMLElement's elementWithName:("thead")
210#TR
211set ocidTrElement to refMe's NSXMLElement's elementWithName:("tr")
212#TH
213set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
214set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("No"))
215(ocidAddElement's addAttribute:(ocidAddNode))
216set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("No"))
217(ocidAddElement's addAttribute:(ocidAddNode))
218set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
219(ocidAddElement's addAttribute:(ocidAddNode))
220(ocidAddElement's setStringValue:("\"))
221(ocidTrElement's addChild:(ocidAddElement))
222set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
223set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("ATSNo"))
224(ocidAddElement's addAttribute:(ocidAddNode))
225set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("ATSNo"))
226(ocidAddElement's addAttribute:(ocidAddNode))
227set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
228(ocidAddElement's addAttribute:(ocidAddNode))
229(ocidAddElement's setStringValue:("ATSNo"))
230(ocidTrElement's addChild:(ocidAddElement))
231set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
232set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Postscript"))
233(ocidAddElement's addAttribute:(ocidAddNode))
234set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("Postscript"))
235(ocidAddElement's addAttribute:(ocidAddNode))
236set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
237(ocidAddElement's addAttribute:(ocidAddNode))
238(ocidAddElement's setStringValue:("Postscript"))
239(ocidTrElement's addChild:(ocidAddElement))
240set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
241set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Full Name"))
242(ocidAddElement's addAttribute:(ocidAddNode))
243set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("Full Name"))
244(ocidAddElement's addAttribute:(ocidAddNode))
245set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
246(ocidAddElement's addAttribute:(ocidAddNode))
247(ocidAddElement's setStringValue:("Full Name"))
248(ocidTrElement's addChild:(ocidAddElement))
249set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
250set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Family"))
251(ocidAddElement's addAttribute:(ocidAddNode))
252set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("Family"))
253(ocidAddElement's addAttribute:(ocidAddNode))
254set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
255(ocidAddElement's addAttribute:(ocidAddNode))
256(ocidAddElement's setStringValue:("Family"))
257(ocidTrElement's addChild:(ocidAddElement))
258set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
259set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("SubFamily"))
260(ocidAddElement's addAttribute:(ocidAddNode))
261set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("SubFamily"))
262(ocidAddElement's addAttribute:(ocidAddNode))
263set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
264(ocidAddElement's addAttribute:(ocidAddNode))
265(ocidAddElement's setStringValue:("SubFamily"))
266(ocidTrElement's addChild:(ocidAddElement))
267set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
268set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("File Path"))
269(ocidAddElement's addAttribute:(ocidAddNode))
270set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("File Path"))
271(ocidAddElement's addAttribute:(ocidAddNode))
272set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
273(ocidAddElement's addAttribute:(ocidAddNode))
274(ocidAddElement's setStringValue:("File Path"))
275(ocidTrElement's addChild:(ocidAddElement))
276set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th"))
277set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("LINK"))
278(ocidAddElement's addAttribute:(ocidAddNode))
279set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("id") stringValue:("LINK"))
280(ocidAddElement's addAttribute:(ocidAddNode))
281set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("col"))
282(ocidAddElement's addAttribute:(ocidAddNode))
283(ocidAddElement's setStringValue:("LINK"))
284(ocidTrElement's addChild:(ocidAddElement))
285#TRをTHEADにセット
286ocidTheadElement's addChild:(ocidTrElement)
287#THEADをテーブルにセット
288ocidTableElement's addChild:(ocidTheadElement)
289########################################
290#【tbody】
291set ocidTbodyElement to refMe's NSXMLElement's elementWithName:("tbody")
292#ITEM
293set numCntArray to ocidSortedArray's |count|()
294#データ数繰り返し
295repeat with itemNo from 0 to (numCntArray - 1) by 1
296   #データ取り出し
297   set ocidLineString to (ocidSortedArray's objectAtIndex:(itemNo))
298   set ocidLineItemArray to (ocidLineString's componentsSeparatedByString:(strTab))
299   set strItemNo to (itemNo + 1) as text
300   ##############
301   #TRの開始
302   set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr"))
303   ####項番処理
304   set ocidThElement to (refMe's NSXMLElement's elementWithName:("th"))
305   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("項目番号:" & strItemNo))
306   (ocidThElement's addAttribute:(ocidAddNode))
307   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("NO"))
308   (ocidThElement's addAttribute:(ocidAddNode))
309   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("row"))
310   (ocidThElement's addAttribute:(ocidAddNode))
311   (ocidThElement's setStringValue:(strItemNo))
312   (ocidTrElement's addChild:(ocidThElement))
313   
314   
315   #ATSNo
316   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
317   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("ATSNo"))
318   (ocidTdElement's addAttribute:(ocidAddNode))
319   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("style") stringValue:("max-width:120px;"))
320   (ocidTdElement's addAttribute:(ocidAddNode))
321   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("ATSNo"))
322   (ocidTdElement's addAttribute:(ocidAddNode))
323   set strSetValue to (ocidLineItemArray's objectAtIndex:(1))
324   (ocidTdElement's setStringValue:(strSetValue))
325   (ocidTrElement's addChild:(ocidTdElement))
326   #
327   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
328   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Postscript"))
329   (ocidTdElement's addAttribute:(ocidAddNode))
330   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("Postscript"))
331   (ocidTdElement's addAttribute:(ocidAddNode))
332   set strSetValue to (ocidLineItemArray's objectAtIndex:(0))
333   (ocidTdElement's setStringValue:(strSetValue))
334   (ocidTrElement's addChild:(ocidTdElement))
335   #
336   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
337   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Full Name"))
338   (ocidTdElement's addAttribute:(ocidAddNode))
339   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("Full Name"))
340   (ocidTdElement's addAttribute:(ocidAddNode))
341   set strSetValue to (ocidLineItemArray's objectAtIndex:(2))
342   (ocidTdElement's setStringValue:(strSetValue))
343   (ocidTrElement's addChild:(ocidTdElement))
344   #
345   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
346   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("Family"))
347   (ocidTdElement's addAttribute:(ocidAddNode))
348   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("Family"))
349   (ocidTdElement's addAttribute:(ocidAddNode))
350   set strSetValue to (ocidLineItemArray's objectAtIndex:(3))
351   (ocidTdElement's setStringValue:(strSetValue))
352   (ocidTrElement's addChild:(ocidTdElement))
353   #
354   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
355   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("SubFamily"))
356   (ocidTdElement's addAttribute:(ocidAddNode))
357   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("SubFamily"))
358   (ocidTdElement's addAttribute:(ocidAddNode))
359   set strSetValue to (ocidLineItemArray's objectAtIndex:(4))
360   (ocidTdElement's setStringValue:(strSetValue))
361   (ocidTrElement's addChild:(ocidTdElement))
362   #
363   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
364   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("File Path"))
365   (ocidTdElement's addAttribute:(ocidAddNode))
366   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("File Path"))
367   (ocidTdElement's addAttribute:(ocidAddNode))
368   set strSetValue to (ocidLineItemArray's objectAtIndex:(5))
369   (ocidTdElement's setStringValue:(strSetValue))
370   (ocidTrElement's addChild:(ocidTdElement))
371   
372   #リンクはAdobeのURL
373   set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td"))
374   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("LINK"))
375   (ocidTdElement's addAttribute:(ocidAddNode))
376   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("headers") stringValue:("LINK"))
377   (ocidTdElement's addAttribute:(ocidAddNode))
378   
379   set ocidAElement to (refMe's NSXMLElement's elementWithName:("a"))
380   set strSetValue to (ocidLineItemArray's objectAtIndex:(5))
381   set strURLValue to ("file://" & strSetValue & "")
382   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:(strURLValue))
383   (ocidAElement's addAttribute:(ocidAddNode))
384   set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank"))
385   (ocidAElement's addAttribute:(ocidAddNode))
386   set strContents to ("LINK") as text
387   (ocidAElement's setStringValue:(strContents))
388   (ocidTdElement's addChild:(ocidAElement))
389   
390   (ocidTrElement's addChild:(ocidTdElement))
391   #
392   (ocidTbodyElement's addChild:(ocidTrElement))
393end repeat
394#TBODYをテーブルにセット
395ocidTableElement's addChild:(ocidTbodyElement)
396##############################
397#【tfoot】
398set ocidTfootElement to refMe's NSXMLElement's elementWithName:("tfoot")
399#TR
400set ocidTrElement to refMe's NSXMLElement's elementWithName:("tr")
401#colspan指定して1行でセット
402set ocidThElement to (refMe's NSXMLElement's elementWithName:("th"))
403set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("title") stringValue:("テーブルの終わり"))
404(ocidThElement's addAttribute:(ocidAddNode))
405set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("colspan") stringValue:("8"))
406(ocidThElement's addAttribute:(ocidAddNode))
407set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("scope") stringValue:("row"))
408(ocidThElement's addAttribute:(ocidAddNode))
409#
410set strContents to ("項目数 : " & (numCntArray as text) & "") as text
411(ocidThElement's setStringValue:(strContents))
412#THをTRにセットして
413ocidTrElement's addChild:(ocidThElement)
414#TRをTFOOTにセット
415ocidTfootElement's addChild:(ocidTrElement)
416#TFOOTをテーブルにセット
417ocidTableElement's addChild:(ocidTfootElement)
418#テーブルをアーティクルにセット
419ocidSetArticleElement's addChild:(ocidTableElement)
420##############################
421#HTMLにする
422##############################
423set ocidHTML to doMakeRootElement({ocidSetHeaderElement, ocidSetArticleElement, ocidSetFooterElement})
424#####保存
425#読み取りやすい表示
426set ocidXMLdata to ocidHTML's XMLDataWithOptions:(refMe's NSXMLNodePrettyPrint)
427set listDone to ocidXMLdata's writeToURL:(ocidSaveHTMLPathURL) options:(refMe's NSDataWritingAtomic) |error|:(reference)
428####ブラウザで開く(エラーしなければSafariで開く)
429set strAppPath to ("/Applications/Safari.app") as text
430set ocidAppPathStr to refMe's NSString's stringWithString:(strAppPath)
431set ocidAppPath to ocidAppPathStr's stringByStandardizingPath()
432set ocidAppPathURL to refMe's NSURL's fileURLWithPath:(ocidAppPath) isDirectory:(false)
433try
434   set aliasFilePath to (ocidSaveHTMLPathURL's absoluteURL()) as alias
435   tell application "Safari"
436      open location aliasFilePath
437   end tell
438on error strErrMsg number numErrNo
439   
440   set ocidURLsArray to refMe's NSMutableArray's alloc()'s init()
441   ocidURLsArray's addObject:(ocidSaveHTMLPathURL)
442   #
443   set appWorkspace to refMe's NSWorkspace's sharedWorkspace()
444   set ocidConfig to (refMe's NSWorkspaceOpenConfiguration's configuration())
445   appWorkspace's openURLs:(ocidURLsArray) withApplicationAtURL:(ocidAppPathURL) configuration:(ocidConfig) completionHandler:(missing value)
446   
447end try
448######################
449#開く
450set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
451set boolDone to appSharedWorkspace's openURL:(ocidHTMLSaveDirPathURL)
452######################
453#コピーしたDBをゴミ箱に
454set appFileManager to refMe's NSFileManager's defaultManager()
455set listDone to (appFileManager's trashItemAtURL:(ocidSaveDBFilePathURL) resultingItemURL:(ocidSaveDirPathURL) |error|:(reference))
456if (item 2 of listDone) ≠ (missing value) then
457   set strErrorNO to (item 2 of listDone)'s code() as text
458   set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
459   refMe's NSLog("■:" & strErrorNO & strErrorMes)
460   return "エラーしました" & strErrorNO & strErrorMes
461end if
462return true
463######################
464#日付番号
465to doGetDateNo(argFormatStrings)
466   ####日付情報の取得
467   set ocidDate to refMe's NSDate's |date|()
468   ###日付のフォーマットを定義
469   set ocidNSDateFormatter to refMe's NSDateFormatter's alloc()'s init()
470   ocidNSDateFormatter's setLocale:(refMe's NSLocale's localeWithLocaleIdentifier:"ja_JP_POSIX")
471   ocidNSDateFormatter's setDateFormat:(argFormatStrings)
472   set ocidDateAndTime to ocidNSDateFormatter's stringFromDate:(ocidDate)
473   set strDateAndTime to ocidDateAndTime as text
474   return strDateAndTime
475end doGetDateNo
476
477############################################################
478# 基本的なHTMLの構造
479(*
480doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents})
481HTMLのBODY部
482header
483article
484footerにそれぞれAddchildするデータをリストで渡す
485戻り値はRootエレメントにセットされた
486NSXMLDocumentを戻すので 保存すればOK
487*)
488############################################################
489to doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents})
490   #XML初期化
491   set ocidXMLDoc to refMe's NSXMLDocument's alloc()'s init()
492   ocidXMLDoc's setDocumentContentKind:(refMe's NSXMLDocumentHTMLKind)
493   # DTD付与
494   set ocidDTD to refMe's NSXMLDTD's alloc()'s init()
495   ocidDTD's setName:("html")
496   ocidXMLDoc's setDTD:(ocidDTD)
497   #
498   set ocidRootElement to refMe's NSXMLElement's elementWithName:("html")
499   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("lang") stringValue:("ja")
500   ocidRootElement's addAttribute:(ocidAddNode)
501   #
502   set ocidHeadElement to refMe's NSXMLElement's elementWithName:("head")
503   #
504   set ocidAddElement to refMe's NSXMLElement's elementWithName:("title")
505   ocidAddElement's setStringValue:("ATS(Apple Type Services)フォントリスト")
506   ocidHeadElement's addChild:(ocidAddElement)
507   # http-equiv
508   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
509   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Type")
510   ocidAddElement's addAttribute:(ocidAddNode)
511   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/html; charset=UTF-8")
512   ocidAddElement's addAttribute:(ocidAddNode)
513   ocidHeadElement's addChild:(ocidAddElement)
514   #
515   set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta")
516   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport")
517   ocidAddElement's addAttribute:(ocidAddNode)
518   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=720")
519   ocidAddElement's addAttribute:(ocidAddNode)
520   ocidHeadElement's addChild:(ocidAddElement)
521   #
522   set ocidAddElement to refMe's NSXMLElement's elementWithName:("style")
523   ocidAddElement's setStringValue:("body { margin: 10px; background-color: #FFFFFF; } table { border-spacing: 0; caption-side: top; font-family: system-ui; } thead th { border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; &:first-of-type { border-start-start-radius: .5em } &:last-of-type { border-start-end-radius: .5em; border-inline-end-width: 1px } } tbody th { word-wrap: break-all;overflow-x: hidden;} tbody td { word-wrap: break-all;overflow-wrap: anywhere;text-overflow: ellipsis;border-spacing: 0; border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; &:last-of-type { border-inline-end-width: 1px } } tbody th { border-spacing: 0; border: solid 1px #666666; padding: .5ch 1ch; border-block-width: 1px 0; border-inline-width: 1px 0; } tbody tr:nth-of-type(odd) { background: #F2F2F2; } .kind_string { font-size: 0.75em; } .date_string { font-size: 0.5em; } tfoot th { border: solid 1px #666666; padding: .5ch 1ch; &:first-of-type { border-end-start-radius: .5em } &:last-of-type { border-end-end-radius: .5em; border-inline-end-width: 1px } }")
524   ocidHeadElement's addChild:(ocidAddElement)
525   ocidRootElement's addChild:(ocidHeadElement)
526   #
527   #ボディエレメント
528   set ocidBodyElement to refMe's NSXMLElement's elementWithName:("body")
529   #ヘッダー
530   set ocidHeaderElement to refMe's NSXMLElement's elementWithName:("header")
531   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("header")
532   ocidHeaderElement's addAttribute:(ocidAddNode)
533   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_header")
534   ocidHeaderElement's addAttribute:(ocidAddNode)
535   ocidHeaderElement's addChild:(argHeaderContents)
536   ocidBodyElement's addChild:(ocidHeaderElement)
537   #アーティクル
538   set ocidArticleElement to refMe's NSXMLElement's elementWithName:("article")
539   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("article")
540   ocidArticleElement's addAttribute:(ocidAddNode)
541   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_article")
542   ocidArticleElement's addAttribute:(ocidAddNode)
543   ocidArticleElement's addChild:(argArticleContents)
544   ocidBodyElement's addChild:(ocidArticleElement)
545   #フッター
546   set ocidFooterElement to refMe's NSXMLElement's elementWithName:("footer")
547   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("footer")
548   ocidFooterElement's addAttribute:(ocidAddNode)
549   set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_footer")
550   ocidFooterElement's addAttribute:(ocidAddNode)
551   ocidFooterElement's addChild:(argFooterContents)
552   ocidBodyElement's addChild:(ocidFooterElement)
553   #ボディをROOTエレメントにセット
554   ocidRootElement's addChild:(ocidBodyElement)
555   #ROOTをXMLにセット
556   ocidXMLDoc's setRootElement:(ocidRootElement)
557   #値を戻す
558   return ocidXMLDoc
559end doMakeRootElement
AppleScriptで生成しました