
【失敗作・Applescript】zshの再帰処理で検索もどき
【Safari・FireFox用Script Editorで開く】 |
| ソース | |
|---|---|
| 001 | #!/usr/bin/env osascript |
| 002 | #coding: utf-8 |
| 003 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7-- |
| 004 | (* |
| 005 | 失敗作 |
| 006 | zshの再帰検索機能を使って拡張子検索 |
| 007 | 結果をHTML表示 |
| 008 | コマンドの戻り値を色々しないと |
| 009 | 意図した結果にならないから |
| 010 | 高速動作するのでポイント高いけど |
| 011 | 大人しくfindコマンド使った方が好いに決まっている |
| 012 | |
| 013 | 出力のHTMLは、起動時に削除される項目=テンポラリーアイテムに作成するので |
| 014 | 使い捨て(次回の起動時に自動削除) |
| 015 | |
| 016 | |
| 017 | |
| 018 | com.cocolog-nifty.quicktimer.icefloe *) |
| 019 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7-- |
| 020 | use AppleScript version "2.8" |
| 021 | use framework "Foundation" |
| 022 | use framework "AppKit" |
| 023 | use framework "UniformTypeIdentifiers" |
| 024 | use scripting additions |
| 025 | |
| 026 | property refMe : a reference to current application |
| 027 | |
| 028 | |
| 029 | ############################# |
| 030 | #ダイアログ |
| 031 | set strMsg to ("フォルダを選択してください") as text |
| 032 | set strPrompt to ("フォルダを選択してください" & return & "選択したフォルダを再回帰的に検索します") as text |
| 033 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 034 | set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask)) |
| 035 | set ocidDesktopDirPathURL to ocidURLsArray's firstObject() |
| 036 | set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias |
| 037 | try |
| 038 | tell application "Finder" |
| 039 | tell application "SystemUIServer" |
| 040 | activate |
| 041 | set aliasDirPath to (choose folder strMsg with prompt strPrompt default location aliasDefaultLocation with invisibles and showing package contents without multiple selections allowed) as alias |
| 042 | end tell |
| 043 | end tell |
| 044 | on error strErrMsg number numErrNo |
| 045 | log strErrMsg & numErrNo |
| 046 | return false |
| 047 | end try |
| 048 | set strDirPath to (POSIX path of aliasDirPath) as text |
| 049 | set ocidDirPathStr to refMe's NSString's stringWithString:(strDirPath) |
| 050 | set ocidDirPath to ocidDirPathStr's stringByStandardizingPath() |
| 051 | set ocidDirPath to ocidDirPath's stringByExpandingTildeInPath() |
| 052 | set ocidDirPathURL to refMe's NSURL's fileURLWithPath:(ocidDirPath) isDirectory:(true) |
| 053 | |
| 054 | |
| 055 | ############################## |
| 056 | # ダイアログ |
| 057 | set strIconFilePath to ("/System/Library/PrivateFrameworks/AOSUI.framework/Versions/A/Resources/pref_notes.icns") as text |
| 058 | set aliasIconFilePath to (POSIX file strIconFilePath) as alias |
| 059 | set strMsg to ("拡張子を入力してください" & return & "拡張子で検索します" & return & "『.』ドット不要") as text |
| 060 | set strTitle to ("入力してください") as text |
| 061 | set strOK to ("実行") as text |
| 062 | set strCancel to ("キャンセル") as text |
| 063 | set listBotton to {strOK, strCancel} as list |
| 064 | set strDefaultAnswer to ("文字入力X文字程度") as text |
| 065 | try |
| 066 | tell application "System Events" |
| 067 | activate |
| 068 | set recordResult to (display dialog strMsg with title strTitle default answer strDefaultAnswer buttons listBotton default button strOK cancel button strCancel with icon aliasIconFilePath giving up after 20 without hidden answer) as record |
| 069 | end tell |
| 070 | on error strErrMsg number numErrNo |
| 071 | log strErrMsg & numErrNo |
| 072 | return false |
| 073 | end try |
| 074 | set strResponseButton to (button returned of recordResult) as text |
| 075 | set boolGaveUp to (gave up of recordResult) as boolean |
| 076 | if boolGaveUp is true then |
| 077 | log "時間切れ" |
| 078 | return false |
| 079 | else if strResponseButton is strOK then |
| 080 | set strReturnedText to (text returned of recordResult) as text |
| 081 | end if |
| 082 | ############################## |
| 083 | #戻り値整形 |
| 084 | set ocidOrgStrings to (refMe's NSString's stringWithString:(strReturnedText)) |
| 085 | #NFC処理 |
| 086 | set ocidOrgStringsNFC to ocidOrgStrings's precomposedStringWithCanonicalMapping() |
| 087 | #改行をLFに強制 |
| 088 | set ocidReplacedStrings to (ocidOrgStringsNFC's stringByReplacingOccurrencesOfString:(return & linefeed) withString:(linefeed)) |
| 089 | set ocidReplacedStrings to (ocidReplacedStrings's stringByReplacingOccurrencesOfString:(return) withString:(linefeed)) |
| 090 | ####戻り値を半角にする |
| 091 | set ocidNSStringTransform to (refMe's NSStringTransformFullwidthToHalfwidth) |
| 092 | set ocidResponseHalfwidth to (ocidReplacedStrings's stringByApplyingTransform:ocidNSStringTransform |reverse|:false) |
| 093 | set ocidResponseHalfwidth to (ocidResponseHalfwidth's stringByReplacingOccurrencesOfString:(".") withString:("")) |
| 094 | |
| 095 | set ocidExtension to ocidResponseHalfwidth's lowercaseString() |
| 096 | |
| 097 | ############################# |
| 098 | # |
| 099 | set ocidDirPath to doPathEscape(ocidDirPath) |
| 100 | #相対パスの場合 |
| 101 | set strCmd to ("/bin/zsh -c \"pushd \\\"" & ocidDirPath & "/\\\";/bin/ls **/*." & ocidExtension & "\"") as text |
| 102 | |
| 103 | #絶対パスの場合 |
| 104 | set strCmd to ("/bin/zsh -c \"/bin/ls \\\"" & ocidDirPath & "/\\\"**/*." & ocidExtension & "\"") as text |
| 105 | |
| 106 | #Findの場合はこちら |
| 107 | # set strCmd to ("/bin/zsh -c \"/usr/bin/find \\\"" & ocidDirPath & "\\\" -type f -name \\\"*." & ocidExtension & "\\\"\"") as text |
| 108 | |
| 109 | set strStdOut to (do shell script strCmd) as text |
| 110 | |
| 111 | ############################# |
| 112 | # |
| 113 | set ocidStdOut to (refMe's NSString's stringWithString:(strStdOut)) |
| 114 | set ocidStdOut to (ocidStdOut's stringByReplacingOccurrencesOfString:(return & linefeed) withString:(linefeed)) |
| 115 | set ocidStdOut to (ocidStdOut's stringByReplacingOccurrencesOfString:(return) withString:(linefeed)) |
| 116 | set ocidPathStringArray to ocidStdOut's componentsSeparatedByString:(linefeed) |
| 117 | |
| 118 | ############################# |
| 119 | #保存先 |
| 120 | set appFileManager to refMe's NSFileManager's defaultManager() |
| 121 | set ocidTempDirURL to appFileManager's temporaryDirectory() |
| 122 | set ocidUUID to refMe's NSUUID's alloc()'s init() |
| 123 | set ocidUUIDString to ocidUUID's UUIDString |
| 124 | set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(true) |
| 125 | # |
| 126 | set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s init() |
| 127 | ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions) |
| 128 | set listDone to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error|:(reference) |
| 129 | #パス |
| 130 | set strFileName to "search_result.html" as text |
| 131 | set ocidSaveFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strFileName) isDirectory:false |
| 132 | ############################# |
| 133 | # |
| 134 | set strTitleText to ("【Zsh】: " & ocidExtension & " :検索結果一覧") as text |
| 135 | #headerに渡すエレメント |
| 136 | set ocidSetHeaderElement to (refMe's NSXMLElement's elementWithName:("div")) |
| 137 | set ocidH3Element to (refMe's NSXMLElement's elementWithName:("h3")) |
| 138 | (ocidH3Element's setStringValue:(strTitleText)) |
| 139 | (ocidSetHeaderElement's addChild:(ocidH3Element)) |
| 140 | #footerに渡すエレメント |
| 141 | set ocidSetFooterElement to (refMe's NSXMLElement's elementWithName:("div")) |
| 142 | set ocidAElement to (refMe's NSXMLElement's elementWithName:("a")) |
| 143 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:("https://note.com/search?context=note&q=from%3A%40quicktimer%20&sort=new")) |
| 144 | (ocidAElement's addAttribute:(ocidAddNode)) |
| 145 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank")) |
| 146 | (ocidAElement's addAttribute:(ocidAddNode)) |
| 147 | set strContents to ("AppleScriptで生成しました") as text |
| 148 | (ocidAElement's setStringValue:(strContents)) |
| 149 | (ocidSetFooterElement's addChild:(ocidAElement)) |
| 150 | #articleに渡すエレメント |
| 151 | set ocidSetArticleElement to (refMe's NSXMLElement's elementWithName:("div")) |
| 152 | set ocidH5Element to (refMe's NSXMLElement's elementWithName:("h5")) |
| 153 | (ocidH5Element's setStringValue:(ocidDirPathStr)) |
| 154 | (ocidSetArticleElement's addChild:(ocidH5Element)) |
| 155 | ######################## |
| 156 | #テーブル部生成開始 |
| 157 | set ocidTableElement to (refMe's NSXMLElement's elementWithName:("table")) |
| 158 | #【caption】 |
| 159 | set ocidCaptionElement to (refMe's NSXMLElement's elementWithName:("caption")) |
| 160 | set strCaptionText to ((ocidExtension as text) & " : 検索結果") as text |
| 161 | (ocidCaptionElement's setStringValue:(strCaptionText)) |
| 162 | (ocidTableElement's addChild:(ocidCaptionElement)) |
| 163 | #【thead】 |
| 164 | set ocidTheadElement to (refMe's NSXMLElement's elementWithName:("thead")) |
| 165 | set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr")) |
| 166 | #項目番号 |
| 167 | set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th")) |
| 168 | (ocidAddElement's setStringValue:("\")) |
| 169 | (ocidTrElement's addChild:(ocidAddElement)) |
| 170 | #キー |
| 171 | set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th")) |
| 172 | (ocidAddElement's setStringValue:("LINK")) |
| 173 | (ocidTrElement's addChild:(ocidAddElement)) |
| 174 | #キー |
| 175 | set ocidAddElement to (refMe's NSXMLElement's elementWithName:("th")) |
| 176 | (ocidAddElement's setStringValue:("PATH")) |
| 177 | (ocidTrElement's addChild:(ocidAddElement)) |
| 178 | #TRをTHEADにセット |
| 179 | (ocidTheadElement's addChild:(ocidTrElement)) |
| 180 | #THEADをテーブルにセット |
| 181 | (ocidTableElement's addChild:(ocidTheadElement)) |
| 182 | ######################## |
| 183 | set numTotalLine to 0 as integer |
| 184 | set numCntMachArray to ocidPathStringArray's |count|() |
| 185 | #【tbody】 |
| 186 | set ocidTbodyElement to (refMe's NSXMLElement's elementWithName:("tbody")) |
| 187 | #繰り返し |
| 188 | repeat with numItemNo from 1 to numCntMachArray by 1 |
| 189 | |
| 190 | #TRの開始 |
| 191 | set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr")) |
| 192 | #項番処理 |
| 193 | set ocidThElement to (refMe's NSXMLElement's elementWithName:("th")) |
| 194 | (ocidThElement's setStringValue:(numItemNo as text)) |
| 195 | (ocidTrElement's addChild:(ocidThElement)) |
| 196 | #リンク |
| 197 | set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td")) |
| 198 | set ocidItemPathString to (ocidPathStringArray's objectAtIndex:(numItemNo - 1)) |
| 199 | set strItemPathString to ocidItemPathString as text |
| 200 | set ocidAElement to (refMe's NSXMLElement's elementWithName:("a")) |
| 201 | set ocidCharSet to refMe's NSCharacterSet's URLPathAllowedCharacterSet() |
| 202 | set ocidEncString to (ocidItemPathString's stringByAddingPercentEncodingWithAllowedCharacters:(ocidCharSet)) |
| 203 | |
| 204 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("href") stringValue:(ocidEncString)) |
| 205 | (ocidAElement's addAttribute:(ocidAddNode)) |
| 206 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("target") stringValue:("_blank")) |
| 207 | (ocidAElement's addAttribute:(ocidAddNode)) |
| 208 | (ocidAElement's setStringValue:(strItemPathString)) |
| 209 | (ocidTdElement's addChild:(ocidAElement)) |
| 210 | (ocidTrElement's addChild:(ocidTdElement)) |
| 211 | #パス |
| 212 | set ocidTdElement to (refMe's NSXMLElement's elementWithName:("td")) |
| 213 | set ocidINPUTElement to (refMe's NSXMLElement's elementWithName:("input")) |
| 214 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("type") stringValue:("text")) |
| 215 | (ocidINPUTElement's addAttribute:(ocidAddNode)) |
| 216 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("readonly") stringValue:("true")) |
| 217 | (ocidINPUTElement's addAttribute:(ocidAddNode)) |
| 218 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("onclick") stringValue:("this.select();")) |
| 219 | (ocidINPUTElement's addAttribute:(ocidAddNode)) |
| 220 | |
| 221 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("value") stringValue:(strItemPathString)) |
| 222 | (ocidINPUTElement's addAttribute:(ocidAddNode)) |
| 223 | (ocidTdElement's addChild:(ocidINPUTElement)) |
| 224 | |
| 225 | (ocidTrElement's addChild:(ocidTdElement)) |
| 226 | (ocidTbodyElement's addChild:(ocidTrElement)) |
| 227 | end repeat |
| 228 | #TBODYをテーブルにセット |
| 229 | (ocidTableElement's addChild:(ocidTbodyElement)) |
| 230 | #【tfoot】 TRで |
| 231 | set ocidTfootElement to (refMe's NSXMLElement's elementWithName:("tfoot")) |
| 232 | set ocidTrElement to (refMe's NSXMLElement's elementWithName:("tr")) |
| 233 | #colspan指定して1行でセット |
| 234 | set ocidThElement to (refMe's NSXMLElement's elementWithName:("th")) |
| 235 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("colspan") stringValue:(3)) |
| 236 | (ocidThElement's addAttribute:(ocidAddNode)) |
| 237 | |
| 238 | # |
| 239 | set strContents to (" 項目数 : " & (numCntMachArray as text)) as text |
| 240 | (ocidThElement's setStringValue:(strContents)) |
| 241 | #THをTRにセットして |
| 242 | (ocidTrElement's addChild:(ocidThElement)) |
| 243 | #TRをTFOOTにセット |
| 244 | (ocidTfootElement's addChild:(ocidTrElement)) |
| 245 | #TFOOTをテーブルにセット |
| 246 | (ocidTableElement's addChild:(ocidTfootElement)) |
| 247 | #テーブルをアーティクルにセット |
| 248 | (ocidSetArticleElement's addChild:(ocidTableElement)) |
| 249 | #<HR> |
| 250 | set ocidHRElement to (refMe's NSXMLElement's elementWithName:("hr")) |
| 251 | (ocidSetArticleElement's addChild:(ocidHRElement)) |
| 252 | set ocidTextareaElement to (refMe's NSXMLElement's elementWithName:("textarea")) |
| 253 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("readonly") stringValue:("true")) |
| 254 | (ocidTextareaElement's addAttribute:(ocidAddNode)) |
| 255 | |
| 256 | set ocidAddNode to (refMe's NSXMLNode's attributeWithName:("style") stringValue:("width: 80%;height: 360px;resize: none;box-sizing: border-box;")) |
| 257 | (ocidTextareaElement's addAttribute:(ocidAddNode)) |
| 258 | |
| 259 | |
| 260 | (ocidTextareaElement's setStringValue:(ocidStdOut)) |
| 261 | (ocidSetArticleElement's addChild:(ocidTextareaElement)) |
| 262 | |
| 263 | |
| 264 | ############################## |
| 265 | #HTMLにする |
| 266 | set ocidHTML to doMakeRootElement({ocidSetHeaderElement, ocidSetArticleElement, ocidSetFooterElement, strTitleText}) |
| 267 | ############################## |
| 268 | #保存 |
| 269 | |
| 270 | #読み取りやすい表示 |
| 271 | set ocidXMLdata to (ocidHTML's XMLDataWithOptions:(refMe's NSXMLNodePrettyPrint)) |
| 272 | #保存 |
| 273 | set listDone to (ocidXMLdata's writeToURL:(ocidSaveFilePathURL) options:(refMe's NSDataWritingAtomic) |error|:(reference)) |
| 274 | set aliasFilePath to (ocidSaveFilePathURL's absoluteURL()) as alias |
| 275 | |
| 276 | ############################## |
| 277 | #【6】ブラウザで開く |
| 278 | |
| 279 | set strAppPath to ("/Applications/Safari.app") as text |
| 280 | set ocidAppPathStr to (refMe's NSString's stringWithString:(strAppPath)) |
| 281 | set ocidAppPath to ocidAppPathStr's stringByStandardizingPath() |
| 282 | set ocidAppPathURL to (refMe's NSURL's fileURLWithPath:(ocidAppPath) isDirectory:(false)) |
| 283 | set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace() |
| 284 | set ocidConfig to refMe's NSWorkspaceOpenConfiguration's configuration |
| 285 | (ocidConfig's setActivates:(refMe's NSNumber's numberWithBool:true)) |
| 286 | (ocidConfig's setHides:(refMe's NSNumber's numberWithBool:false)) |
| 287 | ## |
| 288 | set ocidOpenURLsArray to refMe's NSMutableArray's alloc()'s init() |
| 289 | (ocidOpenURLsArray's addObject:(ocidSaveFilePathURL)) |
| 290 | ## |
| 291 | (appSharedWorkspace's openURLs:(ocidOpenURLsArray) withApplicationAtURL:(ocidAppPathURL) configuration:(ocidConfig) completionHandler:(missing value)) |
| 292 | |
| 293 | ######################## |
| 294 | #【ZSH用】パスのエスケープ |
| 295 | to doPathEscape(strFilePath) |
| 296 | set strFilePath to strFilePath as text |
| 297 | set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath) |
| 298 | set ocidFilePath to ocidFilePathStr's stringByStandardizingPath() |
| 299 | set ocidFilePathURL to refMe's NSURL's fileURLWithPath:(ocidFilePath) isDirectory:(false) |
| 300 | set listEscChar to {"\\", "\"", "$", "`"} as list |
| 301 | repeat with itemEscChar in listEscChar |
| 302 | set ocidFilePath to (ocidFilePath's stringByReplacingOccurrencesOfString:(itemEscChar) withString:("\\\\\\" & itemEscChar & "")) |
| 303 | end repeat |
| 304 | set ocidFilePath to (ocidFilePath's stringByReplacingOccurrencesOfString:("!") withString:("\\\"'!'\\\"")) |
| 305 | return ocidFilePath |
| 306 | end doPathEscape |
| 307 | |
| 308 | ############################## |
| 309 | # クリップボードの中身取り出し |
| 310 | to doGetPastBoard() |
| 311 | set appPasteboard to refMe's NSPasteboard's generalPasteboard() |
| 312 | set ocidPastBoardTypeArray to appPasteboard's types() |
| 313 | set boolContain to ocidPastBoardTypeArray's containsObject:(refMe's NSStringPboardType) |
| 314 | if (boolContain as boolean) is true then |
| 315 | set ocidString to appPasteboard's stringForType:(refMe's NSStringPboardType) |
| 316 | set strDefaultAnswer to ocidString as text |
| 317 | else |
| 318 | set strDefaultAnswer to ("文字入力X文字程度") as text |
| 319 | end if |
| 320 | #ダイアログ保護のため50文字まで |
| 321 | set numCntChar to (count of every character of strDefaultAnswer) as integer |
| 322 | if numCntChar > 50 then |
| 323 | set strDefaultAnswer to (text 1 through 50 of strDefaultAnswer) as text |
| 324 | end if |
| 325 | end doGetPastBoard |
| 326 | |
| 327 | |
| 328 | |
| 329 | ############################################################ |
| 330 | # 基本的なHTMLの構造 |
| 331 | (* |
| 332 | doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents,argTitleText}) |
| 333 | HTMLのBODY部 |
| 334 | header |
| 335 | article |
| 336 | footerにそれぞれAddchildするデータをリストで渡す |
| 337 | 戻り値はRootエレメントにセットされた |
| 338 | NSXMLDocumentを戻すので 保存すればOK |
| 339 | *) |
| 340 | ############################################################ |
| 341 | to doMakeRootElement({argHeaderContents, argArticleContents, argFooterContents, argTitleText}) |
| 342 | #XML初期化 |
| 343 | set ocidXMLDoc to refMe's NSXMLDocument's alloc()'s init() |
| 344 | ocidXMLDoc's setDocumentContentKind:(refMe's NSXMLDocumentHTMLKind) |
| 345 | # DTD付与 |
| 346 | set ocidDTD to refMe's NSXMLDTD's alloc()'s init() |
| 347 | ocidDTD's setName:("html") |
| 348 | ocidXMLDoc's setDTD:(ocidDTD) |
| 349 | # |
| 350 | set ocidRootElement to refMe's NSXMLElement's elementWithName:("html") |
| 351 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("lang") stringValue:("ja") |
| 352 | ocidRootElement's addAttribute:(ocidAddNode) |
| 353 | # |
| 354 | set ocidHeadElement to refMe's NSXMLElement's elementWithName:("head") |
| 355 | # |
| 356 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("title") |
| 357 | ocidAddElement's setStringValue:(argTitleText) |
| 358 | ocidHeadElement's addChild:(ocidAddElement) |
| 359 | # http-equiv |
| 360 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta") |
| 361 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Type") |
| 362 | ocidAddElement's addAttribute:(ocidAddNode) |
| 363 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/html; charset=UTF-8") |
| 364 | ocidAddElement's addAttribute:(ocidAddNode) |
| 365 | ocidHeadElement's addChild:(ocidAddElement) |
| 366 | # |
| 367 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta") |
| 368 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Style-Type") |
| 369 | ocidAddElement's addAttribute:(ocidAddNode) |
| 370 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/css") |
| 371 | ocidAddElement's addAttribute:(ocidAddNode) |
| 372 | ocidHeadElement's addChild:(ocidAddElement) |
| 373 | # |
| 374 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta") |
| 375 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("http-equiv") stringValue:("Content-Script-Type") |
| 376 | ocidAddElement's addAttribute:(ocidAddNode) |
| 377 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("text/javascript") |
| 378 | ocidAddElement's addAttribute:(ocidAddNode) |
| 379 | ocidHeadElement's addChild:(ocidAddElement) |
| 380 | # |
| 381 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("meta") |
| 382 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("name") stringValue:("viewport") |
| 383 | ocidAddElement's addAttribute:(ocidAddNode) |
| 384 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("content") stringValue:("width=90%") |
| 385 | ocidAddElement's addAttribute:(ocidAddNode) |
| 386 | ocidHeadElement's addChild:(ocidAddElement) |
| 387 | # |
| 388 | set ocidAddElement to refMe's NSXMLElement's elementWithName:("style") |
| 389 | 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 input {max-width: 400px;} tbody td { word-wrap: break-word;max-width: 400px;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; } .tbody_th_title{text-align: left;} 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 } }") |
| 390 | ocidHeadElement's addChild:(ocidAddElement) |
| 391 | ocidRootElement's addChild:(ocidHeadElement) |
| 392 | # |
| 393 | #ボディエレメント |
| 394 | set ocidBodyElement to refMe's NSXMLElement's elementWithName:("body") |
| 395 | #ヘッダー |
| 396 | set ocidHeaderElement to refMe's NSXMLElement's elementWithName:("header") |
| 397 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("header") |
| 398 | ocidHeaderElement's addAttribute:(ocidAddNode) |
| 399 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_header") |
| 400 | ocidHeaderElement's addAttribute:(ocidAddNode) |
| 401 | ocidHeaderElement's addChild:(argHeaderContents) |
| 402 | ocidBodyElement's addChild:(ocidHeaderElement) |
| 403 | #アーティクル |
| 404 | set ocidArticleElement to refMe's NSXMLElement's elementWithName:("article") |
| 405 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("article") |
| 406 | ocidArticleElement's addAttribute:(ocidAddNode) |
| 407 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_article") |
| 408 | ocidArticleElement's addAttribute:(ocidAddNode) |
| 409 | ocidArticleElement's addChild:(argArticleContents) |
| 410 | ocidBodyElement's addChild:(ocidArticleElement) |
| 411 | #フッター |
| 412 | set ocidFooterElement to refMe's NSXMLElement's elementWithName:("footer") |
| 413 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("id") stringValue:("footer") |
| 414 | ocidFooterElement's addAttribute:(ocidAddNode) |
| 415 | set ocidAddNode to refMe's NSXMLNode's attributeWithName:("class") stringValue:("body_footer") |
| 416 | ocidFooterElement's addAttribute:(ocidAddNode) |
| 417 | ocidFooterElement's addChild:(argFooterContents) |
| 418 | ocidBodyElement's addChild:(ocidFooterElement) |
| 419 | #ボディをROOTエレメントにセット |
| 420 | ocidRootElement's addChild:(ocidBodyElement) |
| 421 | #ROOTをXMLにセット |
| 422 | ocidXMLDoc's setRootElement:(ocidRootElement) |
| 423 | #値を戻す |
| 424 | return ocidXMLDoc |
| 425 | end doMakeRootElement |
| 426 | |
| 427 | |
| AppleScriptで生成しました | |
