tiddlywiki_cp 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.2.0 2007-07-22
2
+
3
+ * 1 major bug fix:
4
+ * escaping problem
5
+
1
6
  == 0.0.1 2007-07-18
2
7
 
3
8
  * 1 major enhancement:
data/Rakefile CHANGED
@@ -83,6 +83,7 @@ desc 'Generate website files'
83
83
  task :website_generate do
84
84
  Dir['website/**/*.txt'].each do |txt|
85
85
  sh %{ ( echo '{{{' ; RUBYLIB=lib ruby bin/tiddlywiki_cp --help ; echo '}}}' ) > website/files/Usage }
86
+ sh %{ ( echo '{{{' ; hg log ; echo '}}}' ) > website/files/Usage }
86
87
  end
87
88
  end
88
89
 
@@ -20,12 +20,22 @@ module TiddlywikiCp
20
20
 
21
21
  def file2tiddler(from, to)
22
22
  content = read_uri(from)
23
- div_from = "#{from}.div"
24
- div = File.read(div_from).to_s
25
- content = "<div #{div}>\n<pre>#{content}</pre>\n</div>"
26
23
 
27
24
  tiddlywiki = uri2tiddlywiki(to)
28
- tiddler = Tiddler.new.from_div(content, true)
25
+ tiddler = Tiddler.new
26
+ #
27
+ # set tiddler meta data
28
+ #
29
+ div_from = "#{from}.div"
30
+ div = File.read(div_from).to_s
31
+ Tiddler.parse_attributes(div, tiddler.fields)
32
+ #
33
+ # set tiddler content
34
+ #
35
+ tiddler.fields['text'] = content
36
+ #
37
+ # set tiddler times
38
+ #
29
39
  if @options.times
30
40
  tiddler.fields['modified'] = File.mtime(from).convertToYYYYMMDDHHMM
31
41
  end
@@ -231,17 +231,21 @@ class Tiddler
231
231
  self
232
232
  end
233
233
 
234
- def from_div(div_str,use_pre=false) #:nodoc:
235
- match_data = div_str.match(/<div([^>]+)>(.*?)<\/div>/m)
236
- field_str = match_data[1]
237
- text_str = match_data[2]
238
-
239
- field_str.scan(/ ([\w\.]+)="([^"]+)"/) do |field_name,field_value|
234
+ def self.parse_attributes(attributes, map) #:nodoc:
235
+ attributes.scan(/([\w\.]+)="([^"]+)"/) do |field_name,field_value|
240
236
  if field_name == "title"
241
237
  field_name = "tiddler"
242
238
  end
243
- @fields[field_name] = field_value
239
+ map[field_name] = field_value
244
240
  end
241
+ end
242
+
243
+ def from_div(div_str,use_pre=false, decodeHTML=true) #:nodoc:
244
+ match_data = div_str.match(/<div([^>]+)>(.*?)<\/div>/m)
245
+ field_str = match_data[1]
246
+ text_str = match_data[2]
247
+
248
+ Tiddler.parse_attributes(field_str, @fields)
245
249
 
246
250
  text_str.sub!(/\n<pre>/,'')
247
251
  text_str.sub!(/<\/pre>\n/,'')
@@ -467,6 +471,7 @@ class TiddlyWiki
467
471
  def initialize(use_pre=false)
468
472
  @use_pre = use_pre
469
473
  @tiddlers = []
474
+ @core_hacks = []
470
475
  end
471
476
 
472
477
  # this should replace all the add_tiddler_from_blah methods
@@ -479,6 +484,12 @@ class TiddlyWiki
479
484
  end
480
485
  end
481
486
 
487
+ def use_pre_from_raw()
488
+ if @raw =~ /var version = \{title: "TiddlyWiki", major: 2, minor: 2/
489
+ @use_pre = true
490
+ end
491
+ end
492
+
482
493
  # initialise a TiddlyWiki from a source file
483
494
  # will treat empty_file as a url if it looks like one
484
495
  # note that it doesn't have to be literally empty
@@ -493,9 +504,7 @@ class TiddlyWiki
493
504
  # stupid ctrl (\r) char
494
505
  #@raw.eat_ctrl_m!
495
506
 
496
- if @raw =~ /var version = \{title: "TiddlyWiki", major: 2, minor: 2/
497
- @use_pre = true
498
- end
507
+ use_pre_from_raw
499
508
 
500
509
  @core_hacks = []
501
510
  @orig_tiddlers = get_orig_tiddlers
@@ -25,7 +25,7 @@ module TiddlywikiCp
25
25
  end
26
26
 
27
27
  def js2directory(from, to)
28
- tiddler2file(from, TiddlyWikiCp.tiddler2filename(to, from) + ".js")
28
+ js2file(from, TiddlyWikiCp.tiddler2filename(to, from) + ".js")
29
29
  end
30
30
 
31
31
  alias js2file tiddler2file
@@ -16,8 +16,8 @@
16
16
  module TiddlywikiCp #:nodoc:
17
17
  module VERSION #:nodoc:
18
18
  MAJOR = 0
19
- MINOR = 0
20
- TINY = 1
19
+ MINOR = 2
20
+ TINY = 0
21
21
 
22
22
  STRING = [MAJOR, MINOR, TINY].join('.')
23
23
  end
data/lib/tiddlywiki_cp.rb CHANGED
@@ -52,7 +52,7 @@ module TiddlywikiCp
52
52
  @options.dry_run = false
53
53
  @options.includes = []
54
54
  @options.excludes = []
55
- @options.ignores = ['^\.(hg|svn)$', '(#|~|.div)$']
55
+ @options.ignores = ['(CVS|\.hg|\.svn)$', '(#|~|.div)$']
56
56
  end
57
57
 
58
58
  def main(argv) #:nodoc:
@@ -267,8 +267,7 @@ module TiddlywikiCp
267
267
  type = uri2container(uri)
268
268
  if type == CONTAINER_TIDDLER
269
269
  print "uri2type '#{uri}' " if @options.verbose
270
- fragment = uri.split('#')[1]
271
- tiddler = uri2tiddlywiki(uri).get_tiddler(fragment)
270
+ tiddler = uri2tiddler(uri)
272
271
  predicates = methods.select{ |m| m =~ /^tiddler_.*?/ }.sort
273
272
  predicates.each do |p|
274
273
  got_type = self.send(p.intern, tiddler)
@@ -332,11 +331,27 @@ module TiddlywikiCp
332
331
  end
333
332
  return Pathname.new(directory).join(fragment.gsub('/', '%2F')).to_s
334
333
  end
335
-
334
+
335
+ def uri2tiddler(uri) #:nodoc:
336
+ fragment = uri.split('#')[1]
337
+ return uri2tiddlywiki(uri).get_tiddler(fragment)
338
+ end
339
+
336
340
  def uri2tiddlywiki(uri) #:nodoc:
337
341
  uri = TiddlyWikiCp.without_fragment(uri)
338
342
  if ! @tiddlywiki_cache.has_key?(uri)
339
- @tiddlywiki_cache[uri] = TiddlyWiki.new.source_empty(uri)
343
+ tiddlywiki = TiddlyWiki.new
344
+ #
345
+ # read all tiddlers verbatim (do not decode content)
346
+ #
347
+ tiddlywiki.raw = read_uri(uri)
348
+ tiddlywiki.instance_eval do
349
+ use_pre_from_raw
350
+ @tiddlers = tiddlywiki.tiddler_divs.map do |tiddler_div|
351
+ Tiddler.new.from_div(tiddler_div, @use_pre)
352
+ end
353
+ end
354
+ @tiddlywiki_cache[uri] = tiddlywiki
340
355
  end
341
356
  return @tiddlywiki_cache[uri]
342
357
  end
@@ -1039,7 +1039,7 @@ See http://tiddlylab.bidix.info/#PasswordOptionPlugin</pre>
1039
1039
  </pre>
1040
1040
  </div>
1041
1041
  <div title="Rationale" modifier="loic" modified="200705082004" created="200703051559" tags="toRSS">
1042
- <pre>When running a networked service there is a need to experiment with a clone while the original is still available to the public. Virtual machines are easy to setup based on a backup of an existing virtual server. Switches, cables and firewalls are less intuitives to replicate.</pre>
1042
+ <pre>When running a &lt; &gt; &quot; &amp; networked service there is a need to experiment with a clone while the original is still available to the public. Virtual machines are easy to setup based on a backup of an existing virtual server. Switches, cables and firewalls are less intuitives to replicate.</pre>
1043
1043
  </div>
1044
1044
  <div title="SVN based development using emacs" modifier="YourName" modified="200705091558" created="200705081952" tags="[[Use Cases]] toRSS">
1045
1045
  <pre>** Proppy wants to use his ssh private key from withing the vserver to gain write access to a SVN repository
@@ -152,6 +152,7 @@ class TestTiddlywikiCp < Test::Unit::TestCase
152
152
  b = "#{this_dir(__FILE__)}/content/b" # existing file without .div
153
153
  c = "#{this_dir(__FILE__)}/content/c" # no existent file
154
154
  d = "#{this_dir(__FILE__)}/content/d" # directory
155
+ i = "#{this_dir(__FILE__)}/content/ignored#" # ignored
155
156
  tiddlywiki = "#{this_dir(__FILE__)}/content/universe.html" # regular tiddlywiki
156
157
  tiddler = "#{this_dir(__FILE__)}/content/universe.html#Implementation" # regular tiddler
157
158
 
@@ -186,6 +187,8 @@ class TestTiddlywikiCp < Test::Unit::TestCase
186
187
  t.options.excludes.push('a$')
187
188
  assert_equal([], t.args2from([a], true))
188
189
 
190
+ assert_equal([], t.args2from([i], true))
191
+
189
192
  assert_raises Errno::ENOENT do
190
193
  t.args2from([b], true)
191
194
  end
@@ -219,6 +222,17 @@ class TestTiddlywikiCp < Test::Unit::TestCase
219
222
  assert_equal(TiddlyWikiCp::CONTAINER_FILE, t.uri2container("#{this_dir(__FILE__)}/content/html_entities.html"))
220
223
  end
221
224
 
225
+ def test_ignore?
226
+ t = TiddlyWikiCp.new
227
+ assert(t.ignore?('a/b/#'))
228
+ assert(t.ignore?('a/b/~'))
229
+ assert(t.ignore?('a/b/foo.div'))
230
+ assert(t.ignore?('a/b/foo.div'))
231
+ assert(t.ignore?('a/b/.svn'))
232
+ assert(t.ignore?('a/b/CVS'))
233
+ assert(t.ignore?('a/b/.hg'))
234
+ end
235
+
222
236
  def test_accept?
223
237
  t = TiddlyWikiCp.new
224
238
  assert(t.accept?('a'))
@@ -240,12 +254,27 @@ class TestTiddlywikiCp < Test::Unit::TestCase
240
254
  end
241
255
  end
242
256
 
257
+ def test_uri2tiddler
258
+ t = TiddlyWikiCp.new
259
+ assert('Rationale', t.uri2tiddler("#{this_dir(__FILE__)}/content/universe.html#Rationale").name)
260
+ end
261
+
243
262
  def test_uri2tiddlywiki
244
263
  t = TiddlyWikiCp.new
245
264
  uri = "#{this_dir(__FILE__)}/content/universe.html"
265
+ #
266
+ # read
267
+ #
246
268
  tw = t.uri2tiddlywiki("#{uri}#f")
247
269
  assert_equal('Implementation', tw.get_tiddler('Implementation').name)
248
270
  assert_equal(t.tiddlywiki_cache[uri], tw)
271
+ #
272
+ # check that content is verbatim (not decodeHTML)
273
+ #
274
+ assert_match(/< > \" &/, tw.get_tiddler('Rationale').text)
275
+ #
276
+ # check cache is reused
277
+ #
249
278
  tw.get_tiddler('Implementation').rename('Other Implementation')
250
279
  tw = t.uri2tiddlywiki("#{uri}#f")
251
280
  assert_equal(nil, tw.get_tiddler('Implementation'))
@@ -298,17 +327,37 @@ class TestTiddlywikiCp < Test::Unit::TestCase
298
327
  end
299
328
 
300
329
  def test_file2tiddler
330
+ #
331
+ # Write to file
332
+ #
301
333
  t = TiddlyWikiCp.new
302
334
  a = "#{this_dir(__FILE__)}/content/universe.html#Implementation"
303
- tiddler = t.uri2tiddlywiki(a).get_tiddler('Implementation')
335
+ tiddler = t.uri2tiddler(a)
304
336
  original_modified = tiddler.modified
305
337
  t.tiddler2file(a, "spit/a")
338
+ #
339
+ # Read back
340
+ #
306
341
  t = TiddlyWikiCp.new
307
342
  t.options.times = true
308
343
  t.file2tiddler("spit/a", a)
309
- tiddler = t.uri2tiddlywiki(a).get_tiddler('Implementation')
344
+ tiddler = t.uri2tiddler(a)
310
345
  assert(original_modified != tiddler.modified)
311
346
  assert(Time.convertFromYYYYMMDDHHMM(tiddler.modified), File.mtime("spit/a"))
347
+ #
348
+ # Write and read a JS file
349
+ #
350
+ j = "#{this_dir(__FILE__)}/content/universe.html#TiddlyLightBoxPlugin"
351
+ original = t.uri2tiddler(j).text
352
+ t.tiddler2file(j, "spit/b")
353
+ t.file2tiddler("spit/b", j)
354
+ t.tiddler2file(j, "spit/c")
355
+ t.uri2tiddler(j).fields['text'] = 'NONE'
356
+ t.file2tiddler("spit/c", j)
357
+ assert_match(/lightBoxTitle {padding:0px/, original)
358
+ transformed = t.uri2tiddler(j).text
359
+ assert_match(/TiddlyLightBoxStyles=\"/, original)
360
+ assert_equal(original, transformed)
312
361
  end
313
362
 
314
363
  def test_tiddler2directory
@@ -1 +1,3 @@
1
- [[Usage]]
1
+ [[Introduction]]
2
+ [[Usage]]
3
+ [[ChangeLog]]
data/website/index.html CHANGED
@@ -496,6 +496,151 @@ Also see AdvancedOptions</pre>
496
496
  </div>
497
497
  <!--POST-SHADOWAREA-->
498
498
  <div id="storeArea">
499
+ <div title="ChangeLog" modifier="loic" modified="200707221919" created="200707211630" changecount="1">
500
+ <pre>{{{
501
+ changeset: 27:4fe4a301fdfb
502
+ tag: tip
503
+ user: root@dachary.org
504
+ date: Sun Jul 22 21:18:22 2007 +0200
505
+ summary: fix major HTML escaping logic problem
506
+
507
+ changeset: 26:fdcd8116f513
508
+ user: root@dachary.org
509
+ date: Sat Jul 21 19:31:23 2007 +0200
510
+ summary: first package published
511
+
512
+ changeset: 25:6225c5fb1bf2
513
+ user: root@dachary.org
514
+ date: Sat Jul 21 18:39:21 2007 +0200
515
+ summary: Introduction
516
+
517
+ changeset: 24:ae6e7e676ca3
518
+ user: root@dachary.org
519
+ date: Sat Jul 21 18:33:02 2007 +0200
520
+ summary: stub site
521
+
522
+ changeset: 23:c20e9a96ebaa
523
+ user: root@dachary.org
524
+ date: Sat Jul 21 18:32:46 2007 +0200
525
+ summary: implement ignore backupfiles and SCM files
526
+
527
+ changeset: 22:f97c46f9b77a
528
+ user: root@dachary.org
529
+ date: Sat Jul 21 18:13:53 2007 +0200
530
+ summary: tiddler2tiddlywiki implementation and tests
531
+
532
+ changeset: 21:409f079da1eb
533
+ user: root@dachary.org
534
+ date: Sat Jul 21 18:13:37 2007 +0200
535
+ summary: tiddlywiki website
536
+
537
+ changeset: 20:a23a9405c616
538
+ user: root@dachary.org
539
+ date: Sat Jul 21 17:21:19 2007 +0200
540
+ summary: complete usage and aliases for tiddler type to file
541
+
542
+ changeset: 19:293b94b6c938
543
+ user: root@dachary.org
544
+ date: Sat Jul 21 16:22:01 2007 +0200
545
+ summary: implement --all
546
+
547
+ changeset: 18:f6063aa4247c
548
+ user: root@dachary.org
549
+ date: Sat Jul 21 16:17:38 2007 +0200
550
+ summary: implement time preservation
551
+
552
+ changeset: 17:1a95e161bde8
553
+ user: root@dachary.org
554
+ date: Sat Jul 21 15:43:46 2007 +0200
555
+ summary: do not clear the cache each time read_uri is called
556
+
557
+ changeset: 16:78cbb71abc07
558
+ user: root@dachary.org
559
+ date: Sat Jul 21 15:31:47 2007 +0200
560
+ summary: test against argv &gt; 2 is done after expansion
561
+
562
+ changeset: 15:c4a68e334122
563
+ user: root@dachary.org
564
+ date: Sat Jul 21 15:07:23 2007 +0200
565
+ summary: use string functions to split url fragments
566
+
567
+ changeset: 14:4a67be41486a
568
+ user: root@dachary.org
569
+ date: Sat Jul 21 14:06:11 2007 +0200
570
+ summary: first implementation 100% tested
571
+
572
+ changeset: 13:36dfc330051c
573
+ user: root@dachary.org
574
+ date: Sat Jul 21 12:25:18 2007 +0200
575
+ summary: implement args2from with tests
576
+
577
+ changeset: 12:9fdd8158d09e
578
+ user: root@dachary.org
579
+ date: Sat Jul 21 11:00:14 2007 +0200
580
+ summary: test helpers are included instead of inherited
581
+
582
+ changeset: 11:3e6d6b581c56
583
+ user: root@dachary.org
584
+ date: Sat Jul 21 10:36:41 2007 +0200
585
+ summary: test helpers are included instead of inherited
586
+
587
+ changeset: 10:c34230f8508b
588
+ user: root@dachary.org
589
+ date: Sat Jul 21 02:56:45 2007 +0200
590
+ summary: 75% tests
591
+
592
+ changeset: 9:671418aee5c3
593
+ user: root@dachary.org
594
+ date: Fri Jul 20 22:59:00 2007 +0200
595
+ summary: fix to compile and run test stubs
596
+
597
+ changeset: 8:e7130c15d293
598
+ user: root@dachary.org
599
+ date: Thu Jul 19 23:06:01 2007 +0200
600
+ summary: draft implementation
601
+
602
+ changeset: 7:76bfb609451a
603
+ user: root@dachary.org
604
+ date: Thu Jul 19 11:54:58 2007 +0200
605
+ summary: test puts action
606
+
607
+ changeset: 6:7ba8ec638385
608
+ user: root@dachary.org
609
+ date: Thu Jul 19 11:35:29 2007 +0200
610
+ summary: test puts action
611
+
612
+ changeset: 5:6b2ca1329232
613
+ user: root@dachary.org
614
+ date: Thu Jul 19 10:37:28 2007 +0200
615
+ summary: upgrade to GPLv3
616
+
617
+ changeset: 4:508ab2e4b392
618
+ user: root@dachary.org
619
+ date: Thu Jul 19 01:31:17 2007 +0200
620
+ summary: options parsing and tiddlywiki predicate
621
+
622
+ changeset: 3:68dd181ffa42
623
+ user: root@dachary.org
624
+ date: Wed Jul 18 21:27:52 2007 +0200
625
+ summary: import http://simonbaird.com/r4tw/
626
+
627
+ changeset: 2:3171d10560d3
628
+ user: root@dachary.org
629
+ date: Wed Jul 18 21:27:23 2007 +0200
630
+ summary: define project tiddlywiki_cp
631
+
632
+ changeset: 1:f7bb93667109
633
+ user: root@dachary.org
634
+ date: Wed Jul 18 19:28:02 2007 +0200
635
+ summary: import http://simonbaird.com/r4tw/
636
+
637
+ changeset: 0:5bc877af0761
638
+ user: root@dachary.org
639
+ date: Wed Jul 18 18:21:06 2007 +0200
640
+ summary: ruby /var/lib/gems/1.8/gems/newgem-0.11.0/bin/newgem -t test::unit tiddlywiki_cp
641
+
642
+ }}}</pre>
643
+ </div>
499
644
  <div title="DefaultTiddlers" modifier="loic" modified="200707211643" created="200707211620" changecount="2">
500
645
  <pre>Introduction
501
646
  Usage</pre>
@@ -515,8 +660,11 @@ tiddlywiki_cp -a website/files website/index.html
515
660
  Loic Dachary &lt;mailto:loic@dachary.org&gt;
516
661
  </pre>
517
662
  </div>
518
- <div title="MainMenu" modifier="loic" modified="200707211621" created="200707211619" changecount="2">
519
- <pre>[[Usage]]</pre>
663
+ <div title="MainMenu" modifier="loic" modified="200707221924" created="200707211619" changecount="2">
664
+ <pre>[[Introduction]]
665
+ [[Usage]]
666
+ [[ChangeLog]]
667
+ </pre>
520
668
  </div>
521
669
  <div title="SiteSubtitle" modifier="loic" modified="200707211623" created="200707211618" changecount="1">
522
670
  <pre>copy tiddlers to files and vice versa</pre>
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: tiddlywiki_cp
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-07-21 00:00:00 +02:00
6
+ version: 0.2.0
7
+ date: 2007-07-22 00:00:00 +02:00
8
8
  summary: copy tiddlers to files and vice versa
9
9
  require_paths:
10
10
  - lib