This repository was archived by the owner on Feb 4, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStandardHTMLFormatter.cpp
More file actions
123 lines (103 loc) · 4.82 KB
/
StandardHTMLFormatter.cpp
File metadata and controls
123 lines (103 loc) · 4.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//
// HTMLFormatter.m
// dat
//
// Created by mtakagi on 10/02/26.
// Copyright 2010 http://outofboundary.web.fc2.com/ All rights reserved.
//
//#include <iostream>
#include "StandardHTMLFormatter.h"
StandardHTMLFormatter::StandardHTMLFormatter() : HTMLFormatter()
{
// init();
updateSkin();
// std::cout << "Constructor" << header << std::endl;
}
StandardHTMLFormatter::StandardHTMLFormatter(const CFURLRef url) : HTMLFormatter(url)
{
// init();
setURL(url);
updateSkin();
}
StandardHTMLFormatter::~StandardHTMLFormatter()
{
// CFRelease(m_htmlString);
// CFRelease(header);
// CFRelease(title);
// CFRelease(m_attachmentDictionary);
// CFRelease(skinFolderModificationDate);
// CFRelease(resourceFolderModificationDate);
// CFRelease(bundle);
// CFRelease(resourceFolderURL);
// CFRelease(skinFolderURL);
// CFRelease(parsedDictionary);
// CFRelease(multiByteWhiteSpaceCharacterSet);
// CFRelease(aaCharacterSet);
// // asl_free(msg);
}
#pragma mark -
#pragma mark Member function
// sevenfour スキームを cid スキームに変換
void StandardHTMLFormatter::sevenfourTOCid(CFMutableStringRef& tmp)
{
CFArrayRef array; // CFRange を格納する配列
CFIndex i; //
CFIndex previousLength = 0; //
CFMutableStringRef script = CFStringCreateMutable(kCFAllocatorDefault, 0); //
// sevenfour scheme の末端を探知するための character set ", ), , ' を探す
CFCharacterSetRef characterSet = CFCharacterSetCreateWithCharactersInString(kCFAllocatorDefault, CFSTR("\") '"));
// asl_log(client, NULL, ASL_LEVEL_DEBUG, "Convert sevenfour scheme to cid scheme\n");
array = CFStringCreateArrayWithFindResults(kCFAllocatorDefault, tmp, CFSTR("sevenfour://skin"), CFRangeMake(0, CFStringGetLength(tmp)), 0);
if (array == NULL) return;
for (i = 0; i < CFArrayGetCount(array); i++) {
CFRange range = *(CFRange *)CFArrayGetValueAtIndex(array, i);
CFRange result;
CFStringFindCharacterFromSet(tmp, characterSet, CFRangeMake(range.location - previousLength, CFStringGetLength(tmp) - range.location + previousLength), 0, &result);
CFRange sevenfourRange = CFRangeMake(range.location - previousLength, result.location - range.location + previousLength);
CFStringRef sevenfourURLString = CFStringCreateWithSubstring(kCFAllocatorDefault, tmp, sevenfourRange);
CFURLRef sevenfourURL = CFURLCreateWithString(kCFAllocatorDefault, sevenfourURLString, NULL);
CFStringRef pathForResource = CFStringCreateWithSubstring(kCFAllocatorDefault, sevenfourURLString, CFRangeMake(CFStringGetLength(CFSTR("sevenfour://skin")), CFStringGetLength(sevenfourURLString) - CFStringGetLength(CFSTR("sevenfour://skin"))));
CFStringRef fileName = CFURLCopyLastPathComponent(sevenfourURL);
CFStringRef extension = CFURLCopyPathExtension(sevenfourURL);
CFURLRef url = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault, skinFolderURL, pathForResource, false);
if (url != NULL) {
CFURLRef absoluteURL = CFURLCopyAbsoluteURL(url);
CFStringRef path = CFURLGetString(absoluteURL);
CFStringFindAndReplace(tmp, sevenfourURLString, path, sevenfourRange, 0); // sevenfour スキームを cid スキームで置き換え
// CFShow(path);
previousLength += CFStringGetLength(sevenfourURLString) - CFStringGetLength(path);
// asl_log(client, NULL, ASL_LEVEL_DEBUG, "Load resource \nPATH:%s UTI:%s MIME:%s\nFILENAME:%s", [path UTF8String], [uti UTF8String], [mime UTF8String], [fileName UTF8String]);
if (extension == NULL) break;
if (CFEqual(extension, CFSTR("css")) || (CFEqual(extension, CFSTR("js")) && !m_isThumbnail)) {
CFDataRef data;
CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, url, &data, NULL, NULL, NULL);
CFStringRef string = CFStringCreateWithBytes(kCFAllocatorDefault, CFDataGetBytePtr(data), CFDataGetLength(data), kCFStringEncodingUTF8, false);
CFMutableStringRef recursiveTmp = CFStringCreateMutableCopy(kCFAllocatorDefault, 0, string);
sevenfourTOCid(recursiveTmp);
if (CFEqual(extension, CFSTR("css"))) {
CFStringAppendFormat(script, NULL, CFSTR("\n<style type=\"text/css\">\n%@\n</style>\n"), recursiveTmp);
} else if (CFEqual(extension, CFSTR("js"))) {
CFStringAppendFormat(script, NULL, CFSTR("\n<style type=\"text/javascript\">\n%@\n</style>\n"), recursiveTmp);
}
CFRelease(string);
CFRelease(recursiveTmp);
CFRelease(data);
}
// CFRelease(path);
// CFShow(m_attachmentDictionary);
}
CFRelease(sevenfourURLString);
CFRelease(sevenfourURL);
CFRelease(pathForResource);
CFRelease(fileName);
if (extension != NULL) CFRelease(extension);
CFRelease(url);
}
CFRange sevenfourSupportRange = CFStringFind(tmp, CFSTR("<SEVENFOUR_SUPPORT />"), 0);
if (sevenfourSupportRange.location != kCFNotFound) {
CFStringInsert(tmp, sevenfourSupportRange.location, script);
}
if (array != NULL) CFRelease(array);
CFRelease(characterSet);
CFRelease(script);
}