translink 0.0.1

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.
Files changed (43) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +21 -0
  5. data/README.md +34 -0
  6. data/Rakefile +10 -0
  7. data/bin/translink +7 -0
  8. data/doc/schema.graffle +786 -0
  9. data/doc/schema.png +0 -0
  10. data/lib/translink.rb +18 -0
  11. data/lib/translink/cli.rb +53 -0
  12. data/lib/translink/code.rb +9 -0
  13. data/lib/translink/crawler.rb +21 -0
  14. data/lib/translink/db.rb +20 -0
  15. data/lib/translink/model/route.rb +28 -0
  16. data/lib/translink/model/service.rb +20 -0
  17. data/lib/translink/model/stop.rb +31 -0
  18. data/lib/translink/model/stop/extractor.rb +67 -0
  19. data/lib/translink/page.rb +22 -0
  20. data/lib/translink/page/route.rb +29 -0
  21. data/lib/translink/page/timetable.rb +31 -0
  22. data/lib/translink/page/trip.rb +35 -0
  23. data/lib/translink/version.rb +3 -0
  24. data/test/fixtures/sample/route.html +1288 -0
  25. data/test/fixtures/sample/timetable.html +568 -0
  26. data/test/fixtures/verbatim/route.html +8484 -0
  27. data/test/fixtures/verbatim/timetable.html +6962 -0
  28. data/test/fixtures/verbatim/trip.html +856 -0
  29. data/test/helper.rb +9 -0
  30. data/test/unit/cli_test.rb +78 -0
  31. data/test/unit/code_test.rb +12 -0
  32. data/test/unit/crawler_test.rb +42 -0
  33. data/test/unit/model/route_test.rb +35 -0
  34. data/test/unit/model/service_test.rb +23 -0
  35. data/test/unit/model/stop/extractor_test.rb +112 -0
  36. data/test/unit/model/stop_test.rb +37 -0
  37. data/test/unit/page/route_test.rb +41 -0
  38. data/test/unit/page/timetable_test.rb +26 -0
  39. data/test/unit/page/trip_test.rb +35 -0
  40. data/test/unit/page_test.rb +11 -0
  41. data/tmp/.gitkeep +0 -0
  42. data/translink.gemspec +30 -0
  43. metadata +175 -0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in conformist.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2011 Tate Johnson <tate@tatey.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # Translink
2
+
3
+ [![Build Status](https://secure.travis-ci.org/tatey/translink.png)](http://travis-ci.org/tatey/translink)
4
+
5
+ [Translink](http://translink.com.au/) (Organisation) coordinates public transport operations in
6
+ Brisbane. Their website has an abundance of data with no easy way for a developer
7
+ to query it.
8
+
9
+ Translink (Program) scrapes bus stops, routes and service times into a nicely structured
10
+ database. Data is sourced from the [Translink website](http://translink.com.au/). Only routes
11
+ with codes 100..499, GLIDER and LOOP are persisted. You should be aware their data is protected by [copyright](http://translink.com.au/site-information/legal/copyright).
12
+
13
+ ## Usage
14
+
15
+ First install.
16
+
17
+ $ [sudo] gem install translink
18
+
19
+ Then scrape all bus stops, routes and services for Thursday, 24 November 2011 saving
20
+ them into a SQLite database named "2011-11-24.sqlite3" in the current working directory.
21
+
22
+ $ translink scrape 2011-11-24
23
+
24
+ Change the path to the SQLite database.
25
+
26
+ $ translink scrape 2011-11-24 --uri="sqlite:///Users/Tate/Downloads/translink.sqlite3"
27
+
28
+ ## Schema
29
+
30
+ ![Class Analysis Diagram](https://github.com/tatey/translink/raw/master/doc/schema.png)
31
+
32
+ ## Copyright
33
+
34
+ Copyright © 2011 Tate Johnson. Released under the MIT license. See LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'bundler/setup'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new :test do |test|
6
+ test.libs << 'test'
7
+ test.pattern = 'test/**/*_test.rb'
8
+ end
9
+
10
+ task :default => :test
data/bin/translink ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ require 'translink'
6
+
7
+ Translink::CLI.new(Dir.pwd).run ARGV.join(' ')
@@ -0,0 +1,786 @@
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>ActiveLayerIndex</key>
6
+ <integer>0</integer>
7
+ <key>ApplicationVersion</key>
8
+ <array>
9
+ <string>com.omnigroup.OmniGraffle</string>
10
+ <string>138.33.0.157554</string>
11
+ </array>
12
+ <key>AutoAdjust</key>
13
+ <true/>
14
+ <key>BackgroundGraphic</key>
15
+ <dict>
16
+ <key>Bounds</key>
17
+ <string>{{0, 0}, {559, 783}}</string>
18
+ <key>Class</key>
19
+ <string>SolidGraphic</string>
20
+ <key>ID</key>
21
+ <integer>2</integer>
22
+ <key>Style</key>
23
+ <dict>
24
+ <key>shadow</key>
25
+ <dict>
26
+ <key>Draws</key>
27
+ <string>NO</string>
28
+ </dict>
29
+ <key>stroke</key>
30
+ <dict>
31
+ <key>Draws</key>
32
+ <string>NO</string>
33
+ </dict>
34
+ </dict>
35
+ </dict>
36
+ <key>CanvasOrigin</key>
37
+ <string>{0, 0}</string>
38
+ <key>ColumnAlign</key>
39
+ <integer>1</integer>
40
+ <key>ColumnSpacing</key>
41
+ <real>36</real>
42
+ <key>CreationDate</key>
43
+ <string>2011-12-03 07:12:33 +0000</string>
44
+ <key>Creator</key>
45
+ <string>Tate Johnson</string>
46
+ <key>DisplayScale</key>
47
+ <string>1 0/72 in = 1.0000 in</string>
48
+ <key>GraphDocumentVersion</key>
49
+ <integer>8</integer>
50
+ <key>GraphicsList</key>
51
+ <array>
52
+ <dict>
53
+ <key>Bounds</key>
54
+ <string>{{213.29623, 311.6265}, {15, 14}}</string>
55
+ <key>Class</key>
56
+ <string>ShapedGraphic</string>
57
+ <key>FitText</key>
58
+ <string>YES</string>
59
+ <key>Flow</key>
60
+ <string>Resize</string>
61
+ <key>ID</key>
62
+ <integer>55</integer>
63
+ <key>Line</key>
64
+ <dict>
65
+ <key>ID</key>
66
+ <integer>53</integer>
67
+ <key>Offset</key>
68
+ <real>8.3333330154418945</real>
69
+ <key>Position</key>
70
+ <real>0.76637172698974609</real>
71
+ <key>RotationType</key>
72
+ <integer>0</integer>
73
+ </dict>
74
+ <key>Shape</key>
75
+ <string>Rectangle</string>
76
+ <key>Style</key>
77
+ <dict>
78
+ <key>fill</key>
79
+ <dict>
80
+ <key>Draws</key>
81
+ <string>NO</string>
82
+ </dict>
83
+ <key>shadow</key>
84
+ <dict>
85
+ <key>Draws</key>
86
+ <string>NO</string>
87
+ </dict>
88
+ <key>stroke</key>
89
+ <dict>
90
+ <key>Draws</key>
91
+ <string>NO</string>
92
+ </dict>
93
+ </dict>
94
+ <key>Text</key>
95
+ <dict>
96
+ <key>Align</key>
97
+ <integer>0</integer>
98
+ <key>Text</key>
99
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
100
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
101
+ {\colortbl;\red255\green255\blue255;}
102
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
103
+
104
+ \f0\fs24 \cf0 *}</string>
105
+ <key>VerticalPad</key>
106
+ <integer>0</integer>
107
+ </dict>
108
+ <key>Wrap</key>
109
+ <string>NO</string>
110
+ </dict>
111
+ <dict>
112
+ <key>Bounds</key>
113
+ <string>{{185.63945, 308.30548}, {16, 14}}</string>
114
+ <key>Class</key>
115
+ <string>ShapedGraphic</string>
116
+ <key>FitText</key>
117
+ <string>Vertical</string>
118
+ <key>Flow</key>
119
+ <string>Resize</string>
120
+ <key>ID</key>
121
+ <integer>54</integer>
122
+ <key>Line</key>
123
+ <dict>
124
+ <key>ID</key>
125
+ <integer>53</integer>
126
+ <key>Offset</key>
127
+ <real>11.666666984558105</real>
128
+ <key>Position</key>
129
+ <real>0.28574752807617188</real>
130
+ <key>RotationType</key>
131
+ <integer>0</integer>
132
+ </dict>
133
+ <key>Shape</key>
134
+ <string>Rectangle</string>
135
+ <key>Style</key>
136
+ <dict>
137
+ <key>fill</key>
138
+ <dict>
139
+ <key>Draws</key>
140
+ <string>NO</string>
141
+ </dict>
142
+ <key>shadow</key>
143
+ <dict>
144
+ <key>Draws</key>
145
+ <string>NO</string>
146
+ </dict>
147
+ <key>stroke</key>
148
+ <dict>
149
+ <key>Draws</key>
150
+ <string>NO</string>
151
+ </dict>
152
+ </dict>
153
+ <key>Text</key>
154
+ <dict>
155
+ <key>Align</key>
156
+ <integer>0</integer>
157
+ <key>Text</key>
158
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
159
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
160
+ {\colortbl;\red255\green255\blue255;}
161
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
162
+
163
+ \f0\fs24 \cf0 1}</string>
164
+ <key>VerticalPad</key>
165
+ <integer>0</integer>
166
+ </dict>
167
+ </dict>
168
+ <dict>
169
+ <key>Class</key>
170
+ <string>LineGraphic</string>
171
+ <key>Head</key>
172
+ <dict>
173
+ <key>ID</key>
174
+ <integer>38</integer>
175
+ </dict>
176
+ <key>ID</key>
177
+ <integer>53</integer>
178
+ <key>Points</key>
179
+ <array>
180
+ <string>{177.5, 326.97943}</string>
181
+ <string>{234, 326.95386}</string>
182
+ </array>
183
+ <key>Style</key>
184
+ <dict>
185
+ <key>stroke</key>
186
+ <dict>
187
+ <key>HeadArrow</key>
188
+ <string>0</string>
189
+ <key>LineType</key>
190
+ <integer>1</integer>
191
+ <key>TailArrow</key>
192
+ <string>0</string>
193
+ </dict>
194
+ </dict>
195
+ <key>Tail</key>
196
+ <dict>
197
+ <key>ID</key>
198
+ <integer>41</integer>
199
+ </dict>
200
+ </dict>
201
+ <dict>
202
+ <key>Bounds</key>
203
+ <string>{{334.79999, 311.66666}, {15, 14}}</string>
204
+ <key>Class</key>
205
+ <string>ShapedGraphic</string>
206
+ <key>FitText</key>
207
+ <string>YES</string>
208
+ <key>Flow</key>
209
+ <string>Resize</string>
210
+ <key>ID</key>
211
+ <integer>46</integer>
212
+ <key>Line</key>
213
+ <dict>
214
+ <key>ID</key>
215
+ <integer>19</integer>
216
+ <key>Offset</key>
217
+ <real>8.3333330154418945</real>
218
+ <key>Position</key>
219
+ <real>0.3061947226524353</real>
220
+ <key>RotationType</key>
221
+ <integer>0</integer>
222
+ </dict>
223
+ <key>Shape</key>
224
+ <string>Rectangle</string>
225
+ <key>Style</key>
226
+ <dict>
227
+ <key>fill</key>
228
+ <dict>
229
+ <key>Draws</key>
230
+ <string>NO</string>
231
+ </dict>
232
+ <key>shadow</key>
233
+ <dict>
234
+ <key>Draws</key>
235
+ <string>NO</string>
236
+ </dict>
237
+ <key>stroke</key>
238
+ <dict>
239
+ <key>Draws</key>
240
+ <string>NO</string>
241
+ </dict>
242
+ </dict>
243
+ <key>Text</key>
244
+ <dict>
245
+ <key>Align</key>
246
+ <integer>0</integer>
247
+ <key>Text</key>
248
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
249
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
250
+ {\colortbl;\red255\green255\blue255;}
251
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
252
+
253
+ \f0\fs24 \cf0 *}</string>
254
+ <key>VerticalPad</key>
255
+ <integer>0</integer>
256
+ </dict>
257
+ <key>Wrap</key>
258
+ <string>NO</string>
259
+ </dict>
260
+ <dict>
261
+ <key>Bounds</key>
262
+ <string>{{360.14474, 308.33334}, {16, 14}}</string>
263
+ <key>Class</key>
264
+ <string>ShapedGraphic</string>
265
+ <key>FitText</key>
266
+ <string>Vertical</string>
267
+ <key>Flow</key>
268
+ <string>Resize</string>
269
+ <key>ID</key>
270
+ <integer>45</integer>
271
+ <key>Line</key>
272
+ <dict>
273
+ <key>ID</key>
274
+ <integer>19</integer>
275
+ <key>Offset</key>
276
+ <real>11.666666984558105</real>
277
+ <key>Position</key>
278
+ <real>0.76362365484237671</real>
279
+ <key>RotationType</key>
280
+ <integer>0</integer>
281
+ </dict>
282
+ <key>Shape</key>
283
+ <string>Rectangle</string>
284
+ <key>Style</key>
285
+ <dict>
286
+ <key>fill</key>
287
+ <dict>
288
+ <key>Draws</key>
289
+ <string>NO</string>
290
+ </dict>
291
+ <key>shadow</key>
292
+ <dict>
293
+ <key>Draws</key>
294
+ <string>NO</string>
295
+ </dict>
296
+ <key>stroke</key>
297
+ <dict>
298
+ <key>Draws</key>
299
+ <string>NO</string>
300
+ </dict>
301
+ </dict>
302
+ <key>Text</key>
303
+ <dict>
304
+ <key>Align</key>
305
+ <integer>0</integer>
306
+ <key>Text</key>
307
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
308
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
309
+ {\colortbl;\red255\green255\blue255;}
310
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
311
+
312
+ \f0\fs24 \cf0 1}</string>
313
+ <key>VerticalPad</key>
314
+ <integer>0</integer>
315
+ </dict>
316
+ </dict>
317
+ <dict>
318
+ <key>Class</key>
319
+ <string>LineGraphic</string>
320
+ <key>Head</key>
321
+ <dict>
322
+ <key>ID</key>
323
+ <integer>35</integer>
324
+ </dict>
325
+ <key>ID</key>
326
+ <integer>19</integer>
327
+ <key>Points</key>
328
+ <array>
329
+ <string>{325, 327}</string>
330
+ <string>{381.5, 327}</string>
331
+ </array>
332
+ <key>Style</key>
333
+ <dict>
334
+ <key>stroke</key>
335
+ <dict>
336
+ <key>HeadArrow</key>
337
+ <string>0</string>
338
+ <key>LineType</key>
339
+ <integer>1</integer>
340
+ <key>TailArrow</key>
341
+ <string>0</string>
342
+ </dict>
343
+ </dict>
344
+ <key>Tail</key>
345
+ <dict>
346
+ <key>ID</key>
347
+ <integer>38</integer>
348
+ </dict>
349
+ </dict>
350
+ <dict>
351
+ <key>Class</key>
352
+ <string>TableGroup</string>
353
+ <key>Graphics</key>
354
+ <array>
355
+ <dict>
356
+ <key>Bounds</key>
357
+ <string>{{87, 271}, {90, 14}}</string>
358
+ <key>Class</key>
359
+ <string>ShapedGraphic</string>
360
+ <key>FitText</key>
361
+ <string>Vertical</string>
362
+ <key>Flow</key>
363
+ <string>Resize</string>
364
+ <key>ID</key>
365
+ <integer>40</integer>
366
+ <key>Shape</key>
367
+ <string>Rectangle</string>
368
+ <key>Style</key>
369
+ <dict>
370
+ <key>fill</key>
371
+ <dict>
372
+ <key>GradientCenter</key>
373
+ <string>{-0.29411799, -0.26470599}</string>
374
+ </dict>
375
+ </dict>
376
+ <key>Text</key>
377
+ <dict>
378
+ <key>Text</key>
379
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
380
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
381
+ {\colortbl;\red255\green255\blue255;}
382
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
383
+
384
+ \f0\b\fs24 \cf0 Stop}</string>
385
+ <key>VerticalPad</key>
386
+ <integer>0</integer>
387
+ </dict>
388
+ <key>TextPlacement</key>
389
+ <integer>0</integer>
390
+ </dict>
391
+ <dict>
392
+ <key>Bounds</key>
393
+ <string>{{87, 285}, {90, 84}}</string>
394
+ <key>Class</key>
395
+ <string>ShapedGraphic</string>
396
+ <key>FitText</key>
397
+ <string>Vertical</string>
398
+ <key>Flow</key>
399
+ <string>Resize</string>
400
+ <key>ID</key>
401
+ <integer>41</integer>
402
+ <key>Shape</key>
403
+ <string>Rectangle</string>
404
+ <key>Style</key>
405
+ <dict>
406
+ <key>fill</key>
407
+ <dict>
408
+ <key>GradientCenter</key>
409
+ <string>{-0.29411799, -0.26470599}</string>
410
+ </dict>
411
+ </dict>
412
+ <key>Text</key>
413
+ <dict>
414
+ <key>Align</key>
415
+ <integer>0</integer>
416
+ <key>Text</key>
417
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
418
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
419
+ {\colortbl;\red255\green255\blue255;}
420
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
421
+
422
+ \f0\fs24 \cf0 id\
423
+ name\
424
+ summary\
425
+ street1\
426
+ street2\
427
+ locality}</string>
428
+ <key>VerticalPad</key>
429
+ <integer>0</integer>
430
+ </dict>
431
+ <key>TextPlacement</key>
432
+ <integer>0</integer>
433
+ </dict>
434
+ </array>
435
+ <key>GridH</key>
436
+ <array>
437
+ <integer>40</integer>
438
+ <integer>41</integer>
439
+ <array/>
440
+ </array>
441
+ <key>ID</key>
442
+ <integer>39</integer>
443
+ </dict>
444
+ <dict>
445
+ <key>Class</key>
446
+ <string>TableGroup</string>
447
+ <key>Graphics</key>
448
+ <array>
449
+ <dict>
450
+ <key>Bounds</key>
451
+ <string>{{234.5, 285}, {90, 14}}</string>
452
+ <key>Class</key>
453
+ <string>ShapedGraphic</string>
454
+ <key>FitText</key>
455
+ <string>Vertical</string>
456
+ <key>Flow</key>
457
+ <string>Resize</string>
458
+ <key>ID</key>
459
+ <integer>37</integer>
460
+ <key>Shape</key>
461
+ <string>Rectangle</string>
462
+ <key>Style</key>
463
+ <dict>
464
+ <key>fill</key>
465
+ <dict>
466
+ <key>GradientCenter</key>
467
+ <string>{-0.29411799, -0.26470599}</string>
468
+ </dict>
469
+ </dict>
470
+ <key>Text</key>
471
+ <dict>
472
+ <key>Text</key>
473
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
474
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
475
+ {\colortbl;\red255\green255\blue255;}
476
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
477
+
478
+ \f0\b\fs24 \cf0 Service}</string>
479
+ <key>VerticalPad</key>
480
+ <integer>0</integer>
481
+ </dict>
482
+ <key>TextPlacement</key>
483
+ <integer>0</integer>
484
+ </dict>
485
+ <dict>
486
+ <key>Bounds</key>
487
+ <string>{{234.5, 299}, {90, 56}}</string>
488
+ <key>Class</key>
489
+ <string>ShapedGraphic</string>
490
+ <key>FitText</key>
491
+ <string>Vertical</string>
492
+ <key>Flow</key>
493
+ <string>Resize</string>
494
+ <key>ID</key>
495
+ <integer>38</integer>
496
+ <key>Shape</key>
497
+ <string>Rectangle</string>
498
+ <key>Style</key>
499
+ <dict>
500
+ <key>fill</key>
501
+ <dict>
502
+ <key>GradientCenter</key>
503
+ <string>{-0.29411799, -0.26470599}</string>
504
+ </dict>
505
+ </dict>
506
+ <key>Text</key>
507
+ <dict>
508
+ <key>Align</key>
509
+ <integer>0</integer>
510
+ <key>Text</key>
511
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
512
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
513
+ {\colortbl;\red255\green255\blue255;}
514
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
515
+
516
+ \f0\fs24 \cf0 id\
517
+ time\
518
+ route_id\
519
+ stop_id}</string>
520
+ <key>VerticalPad</key>
521
+ <integer>0</integer>
522
+ </dict>
523
+ <key>TextPlacement</key>
524
+ <integer>0</integer>
525
+ </dict>
526
+ </array>
527
+ <key>GridH</key>
528
+ <array>
529
+ <integer>37</integer>
530
+ <integer>38</integer>
531
+ <array/>
532
+ </array>
533
+ <key>ID</key>
534
+ <integer>36</integer>
535
+ </dict>
536
+ <dict>
537
+ <key>Class</key>
538
+ <string>TableGroup</string>
539
+ <key>Graphics</key>
540
+ <array>
541
+ <dict>
542
+ <key>Bounds</key>
543
+ <string>{{382, 285}, {90, 14}}</string>
544
+ <key>Class</key>
545
+ <string>ShapedGraphic</string>
546
+ <key>FitText</key>
547
+ <string>Vertical</string>
548
+ <key>Flow</key>
549
+ <string>Resize</string>
550
+ <key>ID</key>
551
+ <integer>34</integer>
552
+ <key>Shape</key>
553
+ <string>Rectangle</string>
554
+ <key>Style</key>
555
+ <dict>
556
+ <key>fill</key>
557
+ <dict>
558
+ <key>GradientCenter</key>
559
+ <string>{-0.29411799, -0.26470599}</string>
560
+ </dict>
561
+ </dict>
562
+ <key>Text</key>
563
+ <dict>
564
+ <key>Text</key>
565
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
566
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
567
+ {\colortbl;\red255\green255\blue255;}
568
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
569
+
570
+ \f0\b\fs24 \cf0 Route}</string>
571
+ <key>VerticalPad</key>
572
+ <integer>0</integer>
573
+ </dict>
574
+ <key>TextPlacement</key>
575
+ <integer>0</integer>
576
+ </dict>
577
+ <dict>
578
+ <key>Bounds</key>
579
+ <string>{{382, 299}, {90, 56}}</string>
580
+ <key>Class</key>
581
+ <string>ShapedGraphic</string>
582
+ <key>FitText</key>
583
+ <string>Vertical</string>
584
+ <key>Flow</key>
585
+ <string>Resize</string>
586
+ <key>ID</key>
587
+ <integer>35</integer>
588
+ <key>Shape</key>
589
+ <string>Rectangle</string>
590
+ <key>Style</key>
591
+ <dict>
592
+ <key>fill</key>
593
+ <dict>
594
+ <key>GradientCenter</key>
595
+ <string>{-0.29411799, -0.26470599}</string>
596
+ </dict>
597
+ </dict>
598
+ <key>Text</key>
599
+ <dict>
600
+ <key>Align</key>
601
+ <integer>0</integer>
602
+ <key>Text</key>
603
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
604
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
605
+ {\colortbl;\red255\green255\blue255;}
606
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
607
+
608
+ \f0\fs24 \cf0 id\
609
+ code\
610
+ name\
611
+ translink_id}</string>
612
+ <key>VerticalPad</key>
613
+ <integer>0</integer>
614
+ </dict>
615
+ <key>TextPlacement</key>
616
+ <integer>0</integer>
617
+ </dict>
618
+ </array>
619
+ <key>GridH</key>
620
+ <array>
621
+ <integer>34</integer>
622
+ <integer>35</integer>
623
+ <array/>
624
+ </array>
625
+ <key>ID</key>
626
+ <integer>33</integer>
627
+ </dict>
628
+ </array>
629
+ <key>GridInfo</key>
630
+ <dict/>
631
+ <key>GuidesLocked</key>
632
+ <string>NO</string>
633
+ <key>GuidesVisible</key>
634
+ <string>YES</string>
635
+ <key>HPages</key>
636
+ <integer>1</integer>
637
+ <key>ImageCounter</key>
638
+ <integer>1</integer>
639
+ <key>KeepToScale</key>
640
+ <false/>
641
+ <key>Layers</key>
642
+ <array>
643
+ <dict>
644
+ <key>Lock</key>
645
+ <string>NO</string>
646
+ <key>Name</key>
647
+ <string>Layer 1</string>
648
+ <key>Print</key>
649
+ <string>YES</string>
650
+ <key>View</key>
651
+ <string>YES</string>
652
+ </dict>
653
+ </array>
654
+ <key>LayoutInfo</key>
655
+ <dict>
656
+ <key>Animate</key>
657
+ <string>NO</string>
658
+ <key>circoMinDist</key>
659
+ <real>18</real>
660
+ <key>circoSeparation</key>
661
+ <real>0.0</real>
662
+ <key>layoutEngine</key>
663
+ <string>dot</string>
664
+ <key>neatoSeparation</key>
665
+ <real>0.0</real>
666
+ <key>twopiSeparation</key>
667
+ <real>0.0</real>
668
+ </dict>
669
+ <key>LinksVisible</key>
670
+ <string>NO</string>
671
+ <key>MagnetsVisible</key>
672
+ <string>NO</string>
673
+ <key>MasterSheets</key>
674
+ <array/>
675
+ <key>ModificationDate</key>
676
+ <string>2012-03-13 11:33:14 +0000</string>
677
+ <key>Modifier</key>
678
+ <string>Tate Johnson</string>
679
+ <key>NotesVisible</key>
680
+ <string>NO</string>
681
+ <key>Orientation</key>
682
+ <integer>2</integer>
683
+ <key>OriginVisible</key>
684
+ <string>NO</string>
685
+ <key>PageBreaks</key>
686
+ <string>YES</string>
687
+ <key>PrintInfo</key>
688
+ <dict>
689
+ <key>NSBottomMargin</key>
690
+ <array>
691
+ <string>float</string>
692
+ <string>41</string>
693
+ </array>
694
+ <key>NSHorizonalPagination</key>
695
+ <array>
696
+ <string>int</string>
697
+ <string>0</string>
698
+ </array>
699
+ <key>NSLeftMargin</key>
700
+ <array>
701
+ <string>float</string>
702
+ <string>18</string>
703
+ </array>
704
+ <key>NSPaperSize</key>
705
+ <array>
706
+ <string>coded</string>
707
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgVMCgUoDhg==</string>
708
+ </array>
709
+ <key>NSPrintReverseOrientation</key>
710
+ <array>
711
+ <string>int</string>
712
+ <string>0</string>
713
+ </array>
714
+ <key>NSRightMargin</key>
715
+ <array>
716
+ <string>float</string>
717
+ <string>18</string>
718
+ </array>
719
+ <key>NSTopMargin</key>
720
+ <array>
721
+ <string>float</string>
722
+ <string>18</string>
723
+ </array>
724
+ </dict>
725
+ <key>PrintOnePage</key>
726
+ <false/>
727
+ <key>ReadOnly</key>
728
+ <string>NO</string>
729
+ <key>RowAlign</key>
730
+ <integer>1</integer>
731
+ <key>RowSpacing</key>
732
+ <real>36</real>
733
+ <key>SheetTitle</key>
734
+ <string>Canvas 1</string>
735
+ <key>SmartAlignmentGuidesActive</key>
736
+ <string>YES</string>
737
+ <key>SmartDistanceGuidesActive</key>
738
+ <string>YES</string>
739
+ <key>UniqueID</key>
740
+ <integer>1</integer>
741
+ <key>UseEntirePage</key>
742
+ <false/>
743
+ <key>VPages</key>
744
+ <integer>1</integer>
745
+ <key>WindowInfo</key>
746
+ <dict>
747
+ <key>CurrentSheet</key>
748
+ <integer>0</integer>
749
+ <key>ExpandedCanvases</key>
750
+ <array>
751
+ <dict>
752
+ <key>name</key>
753
+ <string>Canvas 1</string>
754
+ </dict>
755
+ </array>
756
+ <key>Frame</key>
757
+ <string>{{335, 4}, {693, 874}}</string>
758
+ <key>ListView</key>
759
+ <true/>
760
+ <key>OutlineWidth</key>
761
+ <integer>142</integer>
762
+ <key>RightSidebar</key>
763
+ <false/>
764
+ <key>ShowRuler</key>
765
+ <true/>
766
+ <key>Sidebar</key>
767
+ <true/>
768
+ <key>SidebarWidth</key>
769
+ <integer>120</integer>
770
+ <key>VisibleRegion</key>
771
+ <string>{{0, 0}, {558, 719}}</string>
772
+ <key>Zoom</key>
773
+ <real>1</real>
774
+ <key>ZoomValues</key>
775
+ <array>
776
+ <array>
777
+ <string>Canvas 1</string>
778
+ <real>1</real>
779
+ <real>1</real>
780
+ </array>
781
+ </array>
782
+ </dict>
783
+ <key>saveQuickLookFiles</key>
784
+ <string>YES</string>
785
+ </dict>
786
+ </plist>