expandsync 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +52 -0
- data/HISTORY.md +3 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/README.rdoc +19 -0
- data/Rakefile +61 -0
- data/bin/expandsync +56 -0
- data/expandsync.gemspec +33 -0
- data/features/1.ui.feature +18 -0
- data/features/2.run.feature +10 -0
- data/features/step_definitions/expandsync_steps.rb +20 -0
- data/features/support/env.rb +23 -0
- data/lib/expandsync/atext.rb +35 -0
- data/lib/expandsync/cli_message.rb +215 -0
- data/lib/expandsync/constants.rb +9 -0
- data/lib/expandsync/exceptions.rb +5 -0
- data/lib/expandsync/textexpander.rb +150 -0
- data/lib/expandsync.rb +9 -0
- data/test/tc_something.rb +7 -0
- data/tmp/Settings.textexpander +429 -0
- data/tmp/atext.csv +37 -0
- data/tmp/expected-new-atext.csv +30 -0
- data/tmp/expected-new-textexpander.xml +968 -0
- metadata +193 -0
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
# ======================================================
|
5
|
+
# TextExpander Class
|
6
|
+
# ======================================================
|
7
|
+
class TextExpander
|
8
|
+
attr_accessor :base_xml, :filepath, :snippets
|
9
|
+
|
10
|
+
# ====================================================
|
11
|
+
# Methods
|
12
|
+
# ====================================================
|
13
|
+
# ----------------------------------------------------
|
14
|
+
# initialize method
|
15
|
+
#
|
16
|
+
# @param csv_filepath The filepath to the aText CSV
|
17
|
+
# @return Void
|
18
|
+
# ----------------------------------------------------
|
19
|
+
def initialize(xml_filepath)
|
20
|
+
begin
|
21
|
+
xpath = "/*/*/array[preceding-sibling::key[1] = 'snippetsTE2']/*"
|
22
|
+
@filepath = xml_filepath
|
23
|
+
@base_xml = Nokogiri::XML(File.open(filepath))
|
24
|
+
|
25
|
+
arr = []
|
26
|
+
@base_xml.xpath(xpath).each do |snippet|
|
27
|
+
abbreviation = snippet.xpath("string[preceding-sibling::key[1] = 'abbreviation']").text
|
28
|
+
value = snippet.xpath("string[preceding-sibling::key[1] = 'plainText']").text
|
29
|
+
arr << [abbreviation, value]
|
30
|
+
end
|
31
|
+
@snippets = arr
|
32
|
+
rescue
|
33
|
+
fail "Invalid TextExpander XML file: #{ xml_filepath }"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# ----------------------------------------------------
|
38
|
+
# add_groups_to_base_xml method
|
39
|
+
#
|
40
|
+
# Creates correct group information for the provided
|
41
|
+
# snippets.
|
42
|
+
# @param snippets An array of snippets to add
|
43
|
+
# @return Void
|
44
|
+
# ----------------------------------------------------
|
45
|
+
def add_group_to_base_xml(snippet_uuids)
|
46
|
+
groups_xpath = "/*/*/array[preceding-sibling::key[1] = 'groupsTE2']"
|
47
|
+
at_group_xpath = groups_xpath + "/*[string[preceding-sibling::key[1] = 'name'] = 'aText']"
|
48
|
+
|
49
|
+
if @base_xml.xpath(at_group_xpath).empty?
|
50
|
+
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
51
|
+
xml.dict {
|
52
|
+
xml.key 'expandAfterMode'
|
53
|
+
xml.integer '0'
|
54
|
+
xml.key 'expanderExceptionsMode'
|
55
|
+
xml.integer '4'
|
56
|
+
xml.key 'name'
|
57
|
+
xml.string 'aText'
|
58
|
+
xml.key 'snippetUUIDs'
|
59
|
+
xml.array {
|
60
|
+
snippet_uuids.each do |u|
|
61
|
+
xml.string u
|
62
|
+
end
|
63
|
+
}
|
64
|
+
xml.key 'suggestAbbreviations'
|
65
|
+
xml.integer '1'
|
66
|
+
xml.key 'updateFrequency'
|
67
|
+
xml.integer '0'
|
68
|
+
xml.key 'uuidString'
|
69
|
+
xml.string SecureRandom.uuid.upcase
|
70
|
+
xml.key 'writable'
|
71
|
+
xml.integer '1'
|
72
|
+
}
|
73
|
+
end
|
74
|
+
@base_xml.xpath(groups_xpath)[0].add_child(xml_builder.doc.root.to_xml)
|
75
|
+
# File.open(File.join(ENV['HOME'], 'Downloads/test.xml'), 'w') { |f| @base_xml.write_xml_to f }
|
76
|
+
else
|
77
|
+
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
78
|
+
xml.array {
|
79
|
+
snippet_uuids.each do |u|
|
80
|
+
xml.string u
|
81
|
+
end
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
@base_xml.xpath(at_group_xpath + "/array[preceding-sibling::key[1] = 'snippetUUIDs']")[0].add_child(xml_builder.doc.root.children.to_xml)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# ----------------------------------------------------
|
90
|
+
# add_snippets_to_base_xml method
|
91
|
+
#
|
92
|
+
# Inserts XML for the provided snippets to the base XML
|
93
|
+
# @param snippets An array of snippets to add and returns
|
94
|
+
# an array of snippet UUIDs
|
95
|
+
# @return Void
|
96
|
+
# ----------------------------------------------------
|
97
|
+
def add_snippets_to_base_xml(snippets)
|
98
|
+
uuids = []
|
99
|
+
|
100
|
+
xml_builder = Nokogiri::XML::Builder.new do |xml|
|
101
|
+
xml.snippets {
|
102
|
+
snippets.each do |s|
|
103
|
+
uuid = SecureRandom.uuid.upcase
|
104
|
+
uuids << uuid
|
105
|
+
|
106
|
+
xml.dict {
|
107
|
+
xml.key 'abbreviation'
|
108
|
+
xml.string s[0]
|
109
|
+
xml.key 'abbreviationMode'
|
110
|
+
xml.integer '0'
|
111
|
+
xml.key 'creationDate'
|
112
|
+
xml.date Time.now.utc.iso8601
|
113
|
+
xml.key 'flags'
|
114
|
+
xml.integer '0'
|
115
|
+
xml.key 'label'
|
116
|
+
xml.string
|
117
|
+
xml.key 'modificationDate'
|
118
|
+
xml.date Time.now.utc.iso8601
|
119
|
+
xml.key 'plainText'
|
120
|
+
xml.string s[1]
|
121
|
+
xml.key 'snippetType'
|
122
|
+
xml.integer '0'
|
123
|
+
xml.key 'useCount'
|
124
|
+
xml.integer '0'
|
125
|
+
xml.key 'uuidString'
|
126
|
+
xml.string uuid
|
127
|
+
}
|
128
|
+
end
|
129
|
+
}
|
130
|
+
end
|
131
|
+
|
132
|
+
@base_xml.xpath("/*/*/array[preceding-sibling::key[1] = 'snippetsTE2']")[0].add_child(xml_builder.doc.root.children.to_xml)
|
133
|
+
uuids
|
134
|
+
end
|
135
|
+
|
136
|
+
# ----------------------------------------------------
|
137
|
+
# construct_data method
|
138
|
+
#
|
139
|
+
# Outputs an XML file with the new snippets added.
|
140
|
+
# @param new_snippets The snippet array to use
|
141
|
+
# @return String
|
142
|
+
# ----------------------------------------------------
|
143
|
+
def construct_data(new_snippets)
|
144
|
+
snippet_uuids = add_snippets_to_base_xml(new_snippets)
|
145
|
+
add_group_to_base_xml(snippet_uuids)
|
146
|
+
@base_xml
|
147
|
+
end
|
148
|
+
|
149
|
+
private :add_group_to_base_xml, :add_snippets_to_base_xml
|
150
|
+
end
|
data/lib/expandsync.rb
ADDED
@@ -0,0 +1,429 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>Auditory Feedback</key>
|
6
|
+
<true/>
|
7
|
+
<key>AutoCaps</key>
|
8
|
+
<false/>
|
9
|
+
<key>AutoCorrection</key>
|
10
|
+
<true/>
|
11
|
+
<key>Client Mode</key>
|
12
|
+
<integer>0</integer>
|
13
|
+
<key>Cross Platform Images</key>
|
14
|
+
<true/>
|
15
|
+
<key>ExpandImmediately</key>
|
16
|
+
<true/>
|
17
|
+
<key>IgnoreCase</key>
|
18
|
+
<false/>
|
19
|
+
<key>Remote Snippets</key>
|
20
|
+
<array/>
|
21
|
+
<key>Restore Pasteboard</key>
|
22
|
+
<true/>
|
23
|
+
<key>Snippet Menu Item Width</key>
|
24
|
+
<integer>370</integer>
|
25
|
+
<key>Snippets Imported</key>
|
26
|
+
<date>2009-06-27T14:43:07Z</date>
|
27
|
+
<key>Status Item</key>
|
28
|
+
<true/>
|
29
|
+
<key>SyncSnippetsViaDropbox</key>
|
30
|
+
<true/>
|
31
|
+
<key>applaststatus</key>
|
32
|
+
<integer>0</integer>
|
33
|
+
<key>checkforupdates</key>
|
34
|
+
<true/>
|
35
|
+
<key>checkfrequency</key>
|
36
|
+
<integer>7</integer>
|
37
|
+
<key>groupsTE2</key>
|
38
|
+
<array>
|
39
|
+
<dict>
|
40
|
+
<key>expandAfterMode</key>
|
41
|
+
<integer>0</integer>
|
42
|
+
<key>expanderExceptionsMode</key>
|
43
|
+
<integer>0</integer>
|
44
|
+
<key>name</key>
|
45
|
+
<string>Sample Snippets</string>
|
46
|
+
<key>snippetUUIDs</key>
|
47
|
+
<array>
|
48
|
+
<string>4F975E93-D03E-4DD4-BDCB-9EAFA7304E45</string>
|
49
|
+
<string>92869B46-1AEA-4BA8-8FC7-95E603D81383</string>
|
50
|
+
<string>EDDE1604-CE77-4DFD-A63E-582395C522F4</string>
|
51
|
+
<string>CE3BF525-9B48-4B61-B6E8-A4F0A00C7482</string>
|
52
|
+
<string>DB59EAA8-3C18-4274-8756-035509D0CD81</string>
|
53
|
+
<string>426FAE02-A700-47A1-8129-98438B53EC26</string>
|
54
|
+
<string>BC5508E9-1D45-4E54-9C2D-8CCF26578024</string>
|
55
|
+
<string>89950CA5-2230-4E83-B08E-DC307ED09AF7</string>
|
56
|
+
<string>8FAA3969-18B9-45F4-89F2-B3F53F29869F</string>
|
57
|
+
<string>2F84D7B4-C2BE-40A1-B4FB-917AED05EB06</string>
|
58
|
+
<string>D7E9A852-FD76-4E8B-8620-A6D089F24314</string>
|
59
|
+
</array>
|
60
|
+
<key>suggestAbbreviations</key>
|
61
|
+
<integer>1</integer>
|
62
|
+
<key>updateFrequency</key>
|
63
|
+
<integer>0</integer>
|
64
|
+
<key>uuidString</key>
|
65
|
+
<string>AD1FE37D-4C30-4026-8E30-83E3394A551C</string>
|
66
|
+
<key>writable</key>
|
67
|
+
<integer>1</integer>
|
68
|
+
</dict>
|
69
|
+
<dict>
|
70
|
+
<key>expandAfterMode</key>
|
71
|
+
<integer>0</integer>
|
72
|
+
<key>expanderExceptionsMode</key>
|
73
|
+
<integer>4</integer>
|
74
|
+
<key>name</key>
|
75
|
+
<string>Evernote</string>
|
76
|
+
<key>snippetUUIDs</key>
|
77
|
+
<array>
|
78
|
+
<string>9B811B80-D541-44F2-9FE3-B7E28926E231</string>
|
79
|
+
</array>
|
80
|
+
<key>suggestAbbreviations</key>
|
81
|
+
<integer>1</integer>
|
82
|
+
<key>updateFrequency</key>
|
83
|
+
<integer>0</integer>
|
84
|
+
<key>uuidString</key>
|
85
|
+
<string>F89B2A4B-48E4-48D9-AF20-EA995A5DF15B</string>
|
86
|
+
<key>writable</key>
|
87
|
+
<integer>1</integer>
|
88
|
+
</dict>
|
89
|
+
</array>
|
90
|
+
<key>groupsToDeleteDuringSync</key>
|
91
|
+
<array/>
|
92
|
+
<key>outlineState</key>
|
93
|
+
<array>
|
94
|
+
<string>AD1FE37D-4C30-4026-8E30-83E3394A551C</string>
|
95
|
+
</array>
|
96
|
+
<key>snippetsTE2</key>
|
97
|
+
<array>
|
98
|
+
<dict>
|
99
|
+
<key>abbreviation</key>
|
100
|
+
<string>tyvm</string>
|
101
|
+
<key>abbreviationMode</key>
|
102
|
+
<integer>0</integer>
|
103
|
+
<key>creationDate</key>
|
104
|
+
<date>2009-06-19T14:40:41Z</date>
|
105
|
+
<key>flags</key>
|
106
|
+
<integer>0</integer>
|
107
|
+
<key>label</key>
|
108
|
+
<string/>
|
109
|
+
<key>modificationDate</key>
|
110
|
+
<date>2009-06-19T14:41:06Z</date>
|
111
|
+
<key>plainText</key>
|
112
|
+
<string>Thank you very much!</string>
|
113
|
+
<key>snippetType</key>
|
114
|
+
<integer>0</integer>
|
115
|
+
<key>useCount</key>
|
116
|
+
<integer>0</integer>
|
117
|
+
<key>uuidString</key>
|
118
|
+
<string>4F975E93-D03E-4DD4-BDCB-9EAFA7304E45</string>
|
119
|
+
</dict>
|
120
|
+
<dict>
|
121
|
+
<key>abbreviation</key>
|
122
|
+
<string>sig1</string>
|
123
|
+
<key>abbreviationMode</key>
|
124
|
+
<integer>0</integer>
|
125
|
+
<key>creationDate</key>
|
126
|
+
<date>2009-06-19T14:42:31Z</date>
|
127
|
+
<key>flags</key>
|
128
|
+
<integer>0</integer>
|
129
|
+
<key>label</key>
|
130
|
+
<string/>
|
131
|
+
<key>modificationDate</key>
|
132
|
+
<date>2009-06-19T14:46:05Z</date>
|
133
|
+
<key>plainText</key>
|
134
|
+
<string>Cheers,
|
135
|
+
|
136
|
+
Jane Smith
|
137
|
+
Senior Vice President
|
138
|
+
Acme, Inc.</string>
|
139
|
+
<key>snippetType</key>
|
140
|
+
<integer>0</integer>
|
141
|
+
<key>useCount</key>
|
142
|
+
<integer>0</integer>
|
143
|
+
<key>uuidString</key>
|
144
|
+
<string>92869B46-1AEA-4BA8-8FC7-95E603D81383</string>
|
145
|
+
</dict>
|
146
|
+
<dict>
|
147
|
+
<key>abbreviation</key>
|
148
|
+
<string>sig2</string>
|
149
|
+
<key>abbreviationMode</key>
|
150
|
+
<integer>0</integer>
|
151
|
+
<key>creationDate</key>
|
152
|
+
<date>2009-06-19T14:47:23Z</date>
|
153
|
+
<key>flags</key>
|
154
|
+
<integer>0</integer>
|
155
|
+
<key>label</key>
|
156
|
+
<string/>
|
157
|
+
<key>modificationDate</key>
|
158
|
+
<date>2009-06-19T14:48:42Z</date>
|
159
|
+
<key>plainText</key>
|
160
|
+
<string>Yours sincerely,
|
161
|
+
|
162
|
+
Jane Smith
|
163
|
+
PTA President
|
164
|
+
Cupertino Elementary School</string>
|
165
|
+
<key>snippetType</key>
|
166
|
+
<integer>0</integer>
|
167
|
+
<key>useCount</key>
|
168
|
+
<integer>0</integer>
|
169
|
+
<key>uuidString</key>
|
170
|
+
<string>EDDE1604-CE77-4DFD-A63E-582395C522F4</string>
|
171
|
+
</dict>
|
172
|
+
<dict>
|
173
|
+
<key>abbreviation</key>
|
174
|
+
<string>sig3</string>
|
175
|
+
<key>abbreviationMode</key>
|
176
|
+
<integer>0</integer>
|
177
|
+
<key>creationDate</key>
|
178
|
+
<date>2013-04-29T22:22:32Z</date>
|
179
|
+
<key>extraInfo</key>
|
180
|
+
<dict>
|
181
|
+
<key>RTF</key>
|
182
|
+
<string>{\rtf1\ansi
|
183
|
+
{\fonttbl\f0\fnil\fcharset0 Baskerville;\f1\fnil\fcharset0 SnellRoundhand;\f2\fnil\fcharset0 Baskerville-Bold;}
|
184
|
+
{\colortbl;}
|
185
|
+
\f0\fs34 \cf0 \ri8640
|
186
|
+
Best regards,\
|
187
|
+
\f1\fs40\i Jane Smith\
|
188
|
+
\f0\fs34\i0 Senior Vice President\
|
189
|
+
\f2\b Acme, Inc.}</string>
|
190
|
+
</dict>
|
191
|
+
<key>flags</key>
|
192
|
+
<integer>0</integer>
|
193
|
+
<key>label</key>
|
194
|
+
<string/>
|
195
|
+
<key>modificationDate</key>
|
196
|
+
<date>2013-04-29T22:25:53Z</date>
|
197
|
+
<key>plainText</key>
|
198
|
+
<string>Best regards,
|
199
|
+
Jane Smith
|
200
|
+
Senior Vice President
|
201
|
+
Acme, Inc.</string>
|
202
|
+
<key>snippetType</key>
|
203
|
+
<integer>1</integer>
|
204
|
+
<key>useCount</key>
|
205
|
+
<integer>0</integer>
|
206
|
+
<key>uuidString</key>
|
207
|
+
<string>CE3BF525-9B48-4B61-B6E8-A4F0A00C7482</string>
|
208
|
+
</dict>
|
209
|
+
<dict>
|
210
|
+
<key>abbreviation</key>
|
211
|
+
<string>ttel</string>
|
212
|
+
<key>abbreviationMode</key>
|
213
|
+
<integer>0</integer>
|
214
|
+
<key>creationDate</key>
|
215
|
+
<date>2009-06-19T14:48:54Z</date>
|
216
|
+
<key>flags</key>
|
217
|
+
<integer>0</integer>
|
218
|
+
<key>label</key>
|
219
|
+
<string/>
|
220
|
+
<key>modificationDate</key>
|
221
|
+
<date>2009-06-19T14:49:10Z</date>
|
222
|
+
<key>plainText</key>
|
223
|
+
<string>415-555-1212</string>
|
224
|
+
<key>snippetType</key>
|
225
|
+
<integer>0</integer>
|
226
|
+
<key>useCount</key>
|
227
|
+
<integer>0</integer>
|
228
|
+
<key>uuidString</key>
|
229
|
+
<string>DB59EAA8-3C18-4274-8756-035509D0CD81</string>
|
230
|
+
</dict>
|
231
|
+
<dict>
|
232
|
+
<key>abbreviation</key>
|
233
|
+
<string>aaddr</string>
|
234
|
+
<key>abbreviationMode</key>
|
235
|
+
<integer>0</integer>
|
236
|
+
<key>creationDate</key>
|
237
|
+
<date>2009-06-19T14:49:15Z</date>
|
238
|
+
<key>flags</key>
|
239
|
+
<integer>0</integer>
|
240
|
+
<key>label</key>
|
241
|
+
<string/>
|
242
|
+
<key>modificationDate</key>
|
243
|
+
<date>2009-06-19T14:49:51Z</date>
|
244
|
+
<key>plainText</key>
|
245
|
+
<string>123 Market Street
|
246
|
+
San Francisco, CA</string>
|
247
|
+
<key>snippetType</key>
|
248
|
+
<integer>0</integer>
|
249
|
+
<key>useCount</key>
|
250
|
+
<integer>0</integer>
|
251
|
+
<key>uuidString</key>
|
252
|
+
<string>426FAE02-A700-47A1-8129-98438B53EC26</string>
|
253
|
+
</dict>
|
254
|
+
<dict>
|
255
|
+
<key>abbreviation</key>
|
256
|
+
<string>ddate</string>
|
257
|
+
<key>abbreviationMode</key>
|
258
|
+
<integer>0</integer>
|
259
|
+
<key>creationDate</key>
|
260
|
+
<date>2009-06-19T14:50:01Z</date>
|
261
|
+
<key>flags</key>
|
262
|
+
<integer>0</integer>
|
263
|
+
<key>label</key>
|
264
|
+
<string/>
|
265
|
+
<key>modificationDate</key>
|
266
|
+
<date>2009-06-19T14:51:11Z</date>
|
267
|
+
<key>plainText</key>
|
268
|
+
<string>%e %B %Y</string>
|
269
|
+
<key>snippetType</key>
|
270
|
+
<integer>0</integer>
|
271
|
+
<key>useCount</key>
|
272
|
+
<integer>0</integer>
|
273
|
+
<key>uuidString</key>
|
274
|
+
<string>BC5508E9-1D45-4E54-9C2D-8CCF26578024</string>
|
275
|
+
</dict>
|
276
|
+
<dict>
|
277
|
+
<key>abbreviation</key>
|
278
|
+
<string>sms1</string>
|
279
|
+
<key>abbreviationMode</key>
|
280
|
+
<integer>0</integer>
|
281
|
+
<key>creationDate</key>
|
282
|
+
<date>2009-06-19T16:13:40Z</date>
|
283
|
+
<key>flags</key>
|
284
|
+
<integer>0</integer>
|
285
|
+
<key>label</key>
|
286
|
+
<string/>
|
287
|
+
<key>modificationDate</key>
|
288
|
+
<date>2009-06-19T16:31:23Z</date>
|
289
|
+
<key>plainText</key>
|
290
|
+
<string>I'm running late. Be there soon.</string>
|
291
|
+
<key>snippetType</key>
|
292
|
+
<integer>0</integer>
|
293
|
+
<key>useCount</key>
|
294
|
+
<integer>0</integer>
|
295
|
+
<key>uuidString</key>
|
296
|
+
<string>89950CA5-2230-4E83-B08E-DC307ED09AF7</string>
|
297
|
+
</dict>
|
298
|
+
<dict>
|
299
|
+
<key>abbreviation</key>
|
300
|
+
<string>sms2</string>
|
301
|
+
<key>abbreviationMode</key>
|
302
|
+
<integer>0</integer>
|
303
|
+
<key>creationDate</key>
|
304
|
+
<date>2009-06-19T16:30:15Z</date>
|
305
|
+
<key>flags</key>
|
306
|
+
<integer>0</integer>
|
307
|
+
<key>label</key>
|
308
|
+
<string/>
|
309
|
+
<key>modificationDate</key>
|
310
|
+
<date>2009-06-19T16:31:19Z</date>
|
311
|
+
<key>plainText</key>
|
312
|
+
<string>Traffic is terrible. I'll be late. Sorry.</string>
|
313
|
+
<key>snippetType</key>
|
314
|
+
<integer>0</integer>
|
315
|
+
<key>useCount</key>
|
316
|
+
<integer>0</integer>
|
317
|
+
<key>uuidString</key>
|
318
|
+
<string>8FAA3969-18B9-45F4-89F2-B3F53F29869F</string>
|
319
|
+
</dict>
|
320
|
+
<dict>
|
321
|
+
<key>abbreviation</key>
|
322
|
+
<string>sms3</string>
|
323
|
+
<key>abbreviationMode</key>
|
324
|
+
<integer>0</integer>
|
325
|
+
<key>creationDate</key>
|
326
|
+
<date>2009-06-19T16:30:52Z</date>
|
327
|
+
<key>flags</key>
|
328
|
+
<integer>0</integer>
|
329
|
+
<key>label</key>
|
330
|
+
<string/>
|
331
|
+
<key>modificationDate</key>
|
332
|
+
<date>2013-04-29T21:57:48Z</date>
|
333
|
+
<key>plainText</key>
|
334
|
+
<string>I forgot all about our appointment. Can we reschedule?</string>
|
335
|
+
<key>snippetType</key>
|
336
|
+
<integer>0</integer>
|
337
|
+
<key>useCount</key>
|
338
|
+
<integer>0</integer>
|
339
|
+
<key>uuidString</key>
|
340
|
+
<string>2F84D7B4-C2BE-40A1-B4FB-917AED05EB06</string>
|
341
|
+
</dict>
|
342
|
+
<dict>
|
343
|
+
<key>abbreviation</key>
|
344
|
+
<string>,pho</string>
|
345
|
+
<key>abbreviationMode</key>
|
346
|
+
<integer>0</integer>
|
347
|
+
<key>creationDate</key>
|
348
|
+
<date>2009-06-19T16:30:52Z</date>
|
349
|
+
<key>flags</key>
|
350
|
+
<integer>0</integer>
|
351
|
+
<key>label</key>
|
352
|
+
<string/>
|
353
|
+
<key>modificationDate</key>
|
354
|
+
<date>2013-04-29T21:57:48Z</date>
|
355
|
+
<key>plainText</key>
|
356
|
+
<string>720-854-5753</string>
|
357
|
+
<key>snippetType</key>
|
358
|
+
<integer>0</integer>
|
359
|
+
<key>useCount</key>
|
360
|
+
<integer>0</integer>
|
361
|
+
<key>uuidString</key>
|
362
|
+
<string>691F30DD-474D-43F7-AB61-CEBA4F164C12</string>
|
363
|
+
</dict>
|
364
|
+
<dict>
|
365
|
+
<key>abbreviation</key>
|
366
|
+
<string>dnthx</string>
|
367
|
+
<key>abbreviationMode</key>
|
368
|
+
<integer>1</integer>
|
369
|
+
<key>creationDate</key>
|
370
|
+
<date>2012-01-13T23:46:02Z</date>
|
371
|
+
<key>flags</key>
|
372
|
+
<integer>0</integer>
|
373
|
+
<key>label</key>
|
374
|
+
<string/>
|
375
|
+
<key>modificationDate</key>
|
376
|
+
<date>2013-04-29T21:58:50Z</date>
|
377
|
+
<key>plainText</key>
|
378
|
+
<string>Dear %filltext:name=person name:width:25%,
|
379
|
+
|
380
|
+
Thank you for your generous donation of $%filltext:name=amount:width:4%. We greatly appreciate your help, and will use the funds for %fillpopup:name=popup 4:default=our educational program:our health clinic:general purposes%.
|
381
|
+
|
382
|
+
Since we are a non-profit organization, your donation of $%filltext:name=amount:width:4% should be tax-deductible.
|
383
|
+
|
384
|
+
Thank you,
|
385
|
+
</string>
|
386
|
+
<key>snippetType</key>
|
387
|
+
<integer>0</integer>
|
388
|
+
<key>useCount</key>
|
389
|
+
<integer>12</integer>
|
390
|
+
<key>uuidString</key>
|
391
|
+
<string>D7E9A852-FD76-4E8B-8620-A6D089F24314</string>
|
392
|
+
</dict>
|
393
|
+
<dict>
|
394
|
+
<key>abbreviation</key>
|
395
|
+
<string>,enc</string>
|
396
|
+
<key>abbreviationMode</key>
|
397
|
+
<integer>0</integer>
|
398
|
+
<key>creationDate</key>
|
399
|
+
<date>2014-02-22T04:57:09Z</date>
|
400
|
+
<key>extraInfo</key>
|
401
|
+
<dict>
|
402
|
+
<key>RTF</key>
|
403
|
+
<string>{\rtf1\ansi
|
404
|
+
{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;}
|
405
|
+
{\colortbl;}
|
406
|
+
\f0\fs28 \cf0 <en-todo/> }</string>
|
407
|
+
</dict>
|
408
|
+
<key>flags</key>
|
409
|
+
<integer>0</integer>
|
410
|
+
<key>label</key>
|
411
|
+
<string/>
|
412
|
+
<key>modificationDate</key>
|
413
|
+
<date>2014-02-22T04:57:09Z</date>
|
414
|
+
<key>plainText</key>
|
415
|
+
<string><en-todo/> </string>
|
416
|
+
<key>snippetType</key>
|
417
|
+
<integer>1</integer>
|
418
|
+
<key>useCount</key>
|
419
|
+
<integer>0</integer>
|
420
|
+
<key>uuidString</key>
|
421
|
+
<string>9B811B80-D541-44F2-9FE3-B7E28926E231</string>
|
422
|
+
</dict>
|
423
|
+
</array>
|
424
|
+
<key>snippetsToDeleteDuringSync</key>
|
425
|
+
<array/>
|
426
|
+
<key>wantsDaemonEnabled</key>
|
427
|
+
<true/>
|
428
|
+
</dict>
|
429
|
+
</plist>
|
data/tmp/atext.csv
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
",1977j","1977 South Josephine Street
|
2
|
+
Unit 303
|
3
|
+
Denver, CO 80210"
|
4
|
+
",755d","755 South Dexter Street
|
5
|
+
Apartment 128
|
6
|
+
Denver, CO 80246"
|
7
|
+
",ema1",bachya1208@gmail.com
|
8
|
+
",ema2",bachya1208@googlemail.com
|
9
|
+
",ema3",aaron.m.bach@gmail.com
|
10
|
+
",fn",Aaron
|
11
|
+
",ikp",I'll keep you posted.
|
12
|
+
",lmk",Let me know if you have any questions.
|
13
|
+
",ln",Bach
|
14
|
+
",name",Aaron Bach
|
15
|
+
",pho",720-854-5753
|
16
|
+
",tkvm",Thank you very much!
|
17
|
+
",twimc","To Whom It May Concern,
|
18
|
+
|
19
|
+
"
|
20
|
+
",tood","【field:Subject】 *【field:Folder type:2 width:0 value:""1. Ticklers
|
21
|
+
2. Actions
|
22
|
+
3. Projects
|
23
|
+
4. Waiting For
|
24
|
+
5. Someday/Maybe""】 @【field:Context type:2 width:0 value:Home
|
25
|
+
Personal
|
26
|
+
Work】"
|
27
|
+
",end",【date:yyyy-MM-dd】 -
|
28
|
+
",enc",<en-todo/>
|
29
|
+
",jour",- 【date:long】 at 【time:short】 - 【field:Entry type:1】 @done
|
30
|
+
",waddr","3012 Huron Street
|
31
|
+
Denver, CO 80202"
|
32
|
+
",wema",abach@fourwindsinteractive.com
|
33
|
+
",wftp",ftp.fourwindsinteractive.com
|
34
|
+
",wfwi",Four Winds Interactive
|
35
|
+
",wpho",720-389-3606
|
36
|
+
",wweb",http://www.fourwindsinteractive.com
|
37
|
+
",text","data:text/html, <html contenteditable> "
|
@@ -0,0 +1,30 @@
|
|
1
|
+
tyvm,Thank you very much!
|
2
|
+
sig1,"Cheers,
|
3
|
+
|
4
|
+
Jane Smith
|
5
|
+
Senior Vice President
|
6
|
+
Acme, Inc."
|
7
|
+
sig2,"Yours sincerely,
|
8
|
+
|
9
|
+
Jane Smith
|
10
|
+
PTA President
|
11
|
+
Cupertino Elementary School"
|
12
|
+
sig3,"Best regards,
|
13
|
+
Jane Smith
|
14
|
+
Senior Vice President
|
15
|
+
Acme, Inc."
|
16
|
+
ttel,415-555-1212
|
17
|
+
aaddr,"123 Market Street
|
18
|
+
San Francisco, CA"
|
19
|
+
ddate,%e %B %Y
|
20
|
+
sms1,I'm running late. Be there soon.
|
21
|
+
sms2,Traffic is terrible. I'll be late. Sorry.
|
22
|
+
sms3,I forgot all about our appointment. Can we reschedule?
|
23
|
+
dnthx,"Dear %filltext:name=person name:width:25%,
|
24
|
+
|
25
|
+
Thank you for your generous donation of $%filltext:name=amount:width:4%. We greatly appreciate your help, and will use the funds for %fillpopup:name=popup 4:default=our educational program:our health clinic:general purposes%.
|
26
|
+
|
27
|
+
Since we are a non-profit organization, your donation of $%filltext:name=amount:width:4% should be tax-deductible.
|
28
|
+
|
29
|
+
Thank you,
|
30
|
+
"
|