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.
@@ -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,9 @@
1
+ require "expandsync/atext"
2
+ require "expandsync/cli_message"
3
+ require "expandsync/constants"
4
+ require "expandsync/exceptions"
5
+ require "expandsync/textexpander"
6
+
7
+ module ExpandSync
8
+
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+
3
+ class TestSomething < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -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 &lt;en-todo/&gt; }</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>&lt;en-todo/&gt; </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
+ "