tiddlywiki_cp 0.4.1 → 0.5.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.
- data/History.txt +6 -0
- data/Manifest.txt +3 -2
- data/README.txt +4 -0
- data/Rakefile +1 -0
- data/lib/tiddlywiki_cp/r4tw.rb +68 -3
- data/lib/tiddlywiki_cp/version.rb +1 -1
- data/lib/tiddlywiki_cp.rb +15 -0
- data/test/content/tiddly_version_2_3.txt +1 -0
- data/test/test_tiddlywiki_cp.rb +68 -2
- data/website/files/ChangeLog.tiddler +86 -1
- data/website/files/DefaultTiddlers.tiddler +2 -2
- data/website/files/Introduction.tiddler +21 -3
- data/website/files/Usage.tiddler +14 -0
- data/website/files/WebDavPlugin.js +310 -0
- data/website/files/WebDavPlugin.js.div +1 -0
- data/website/index.html +1891 -1395
- metadata +6 -4
- data/website/files/WebDAVSavingPlugin.js +0 -234
- data/website/files/WebDAVSavingPlugin.js.div +0 -1
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -30,6 +30,7 @@ test/content/ignored#
|
|
30
30
|
test/content/test_fetch.html
|
31
31
|
test/content/tiddly_version_2_1.txt
|
32
32
|
test/content/tiddly_version_2_2.txt
|
33
|
+
test/content/tiddly_version_2_3.txt
|
33
34
|
test/content/universe.html
|
34
35
|
test/r4tw/addtag.rb
|
35
36
|
test/r4tw/all.rb
|
@@ -68,7 +69,7 @@ website/files/SiteTitle.tiddler
|
|
68
69
|
website/files/SiteTitle.tiddler.div
|
69
70
|
website/files/Usage.tiddler
|
70
71
|
website/files/Usage.tiddler.div
|
71
|
-
website/files/
|
72
|
-
website/files/
|
72
|
+
website/files/WebDavPlugin.js
|
73
|
+
website/files/WebDavPlugin.js.div
|
73
74
|
website/index.html
|
74
75
|
website/index.xml
|
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -83,6 +83,7 @@ desc 'Generate website files'
|
|
83
83
|
task :website_generate do
|
84
84
|
sh %{ ( echo '{{{' ; RUBYLIB=lib ruby bin/tiddlywiki_cp --help ; echo '}}}' ) > website/files/Usage.tiddler }
|
85
85
|
sh %{ ( echo '{{{' ; hg log ; echo '}}}' ) > website/files/ChangeLog.tiddler }
|
86
|
+
sh %{ cd website ; RUBYLIB=../lib ruby ../bin/tiddlywiki_cp -a files index.html }
|
86
87
|
end
|
87
88
|
|
88
89
|
desc 'Upload website files to rubyforge'
|
data/lib/tiddlywiki_cp/r4tw.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# =r4tw
|
3
3
|
# Author:: Simon Baird
|
4
|
+
# Copyright (C) 2008 Loic Dachary <loic@dachary.org>
|
4
5
|
# URL:: http://simonbaird.com/r4tw
|
5
6
|
# License:: http://en.wikipedia.org/wiki/MIT_license
|
6
7
|
# r4tw is some ruby classes for manipuating TiddlyWikis and tiddlers.
|
@@ -129,7 +130,7 @@ class Tiddler
|
|
129
130
|
'.js' => %[systemConfig],
|
130
131
|
'.html' => %[html],
|
131
132
|
'.css' => %[css],
|
132
|
-
'.pub' => %[
|
133
|
+
'.pub' => %[systemServer],
|
133
134
|
'.palette' => %[palette],
|
134
135
|
}
|
135
136
|
|
@@ -465,13 +466,23 @@ end
|
|
465
466
|
|
466
467
|
class TiddlyWiki
|
467
468
|
|
468
|
-
|
469
|
+
TIDDLER2MARKUP = {
|
470
|
+
'MarkupPreHead' => 'PRE-HEAD',
|
471
|
+
'MarkupPostHead' => 'POST-HEAD',
|
472
|
+
'MarkupPreBody' => 'PRE-BODY',
|
473
|
+
'MarkupPostBody' => 'POST-BODY',
|
474
|
+
}
|
475
|
+
|
476
|
+
@@lang_re = /<html(.*?)\s+xml:lang=['"](\w\w)['"]\s+lang=['"](\w\w)['"]/ms
|
477
|
+
|
478
|
+
attr_accessor :orig_tiddlers, :tiddlers, :raw, :lang
|
469
479
|
|
470
480
|
# doesn't do much. probably should allow an empty file param
|
471
481
|
def initialize(use_pre=false)
|
472
482
|
@use_pre = use_pre
|
473
483
|
@tiddlers = []
|
474
484
|
@core_hacks = []
|
485
|
+
@lang = 'en'
|
475
486
|
end
|
476
487
|
|
477
488
|
# this should replace all the add_tiddler_from_blah methods
|
@@ -490,6 +501,46 @@ class TiddlyWiki
|
|
490
501
|
end
|
491
502
|
end
|
492
503
|
|
504
|
+
def locale2lang(raw)
|
505
|
+
#
|
506
|
+
# Inspect systemConfig tiddlers, looking for locale settings
|
507
|
+
#
|
508
|
+
locale_set_re = /config.locale\s*=/s
|
509
|
+
locale_re = /config.locale\s*=\s*['"](\w\w)['"]/ms
|
510
|
+
lang = @lang
|
511
|
+
@tiddlers.each do |t|
|
512
|
+
if t.has_tag('systemConfig')
|
513
|
+
text = t.fields['text']
|
514
|
+
if text =~ locale_set_re
|
515
|
+
matches = text.match(locale_re)
|
516
|
+
if matches
|
517
|
+
lang = matches[1];
|
518
|
+
else
|
519
|
+
raise "#{locale_set_re} matches but #{locale_re} does not in #{text}"
|
520
|
+
end
|
521
|
+
end
|
522
|
+
end
|
523
|
+
end
|
524
|
+
if lang != @lang
|
525
|
+
raw.gsub!(@@lang_re, "<html\\1 xml:lang=\"#{lang}\" lang=\"#{lang}\"")
|
526
|
+
@lang = lang
|
527
|
+
end
|
528
|
+
return raw
|
529
|
+
end
|
530
|
+
|
531
|
+
def lang_from_raw()
|
532
|
+
matches = @raw.match(@@lang_re)
|
533
|
+
if matches
|
534
|
+
if matches[2] == matches[3]
|
535
|
+
@lang = matches[2]
|
536
|
+
else
|
537
|
+
raise "#{re} found '#{matches[2]}' and '#{matches[3]}' and expected them to be equal"
|
538
|
+
end
|
539
|
+
else
|
540
|
+
raise "#{re} found no match in ${@raw}"
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
493
544
|
# initialise a TiddlyWiki from a source file
|
494
545
|
# will treat empty_file as a url if it looks like one
|
495
546
|
# note that it doesn't have to be literally empty
|
@@ -666,13 +717,27 @@ class TiddlyWiki
|
|
666
717
|
|
667
718
|
# output the TiddlyWiki file
|
668
719
|
def to_s
|
720
|
+
#
|
721
|
+
# Each Markup* tiddler must be copied to the corresponding <!-- .. -START -->
|
722
|
+
# section. It will be copied by the regular tiddlywiki save function, but
|
723
|
+
# it requires manual intervention.
|
724
|
+
#
|
725
|
+
@tiddlers.each do |t|
|
726
|
+
if TIDDLER2MARKUP[t.name]
|
727
|
+
markup = TIDDLER2MARKUP[t.name]
|
728
|
+
mstart = "<!--" + markup + "-START-->"
|
729
|
+
mend = "<!--" + markup + "-END-->"
|
730
|
+
add_core_hack(/#{mstart}.*#{mend}/m, "#{mstart}\n#{t.fields['text']}\n#{mend}")
|
731
|
+
end
|
732
|
+
end
|
669
733
|
pre_store_hacked = pre_store
|
670
734
|
post_store_hacked = post_store
|
671
735
|
@core_hacks.each do |hack|
|
672
736
|
pre_store_hacked.gsub!(hack[0],hack[1])
|
673
737
|
post_store_hacked.gsub!(hack[0],hack[1])
|
674
738
|
end
|
675
|
-
"#{pre_store_hacked}#{store_to_s}#{post_store_hacked}"
|
739
|
+
all = "#{pre_store_hacked}#{store_to_s}#{post_store_hacked}"
|
740
|
+
return locale2lang(all)
|
676
741
|
end
|
677
742
|
|
678
743
|
# output just the contents of the store
|
data/lib/tiddlywiki_cp.rb
CHANGED
@@ -158,6 +158,20 @@ module TiddlywikiCp
|
|
158
158
|
opts.separator ""
|
159
159
|
opts.separator " #{cmd} -a A B C tiddlywiki.html"
|
160
160
|
opts.separator " copy all tiddlers found in the A B and C directories to tiddlywiki.html"
|
161
|
+
opts.separator ""
|
162
|
+
opts.separator "MarkupPreHead, MarkupPostHead, MarkupPreBody, MarkupPostBody tiddlers:"
|
163
|
+
opts.separator ""
|
164
|
+
opts.separator " When copying to a tiddlywiki file, the content of these tiddlers "
|
165
|
+
opts.separator " are copied to the corresponding HTML zones."
|
166
|
+
opts.separator ""
|
167
|
+
opts.separator "translations, i18n, l10n, linguo:"
|
168
|
+
opts.separator ""
|
169
|
+
opts.separator " If a translation plugin such as the one found at "
|
170
|
+
opts.separator " http://trac.tiddlywiki.org/wiki/Translations"
|
171
|
+
opts.separator " is present, the tiddlywiki to which tiddlers are copied"
|
172
|
+
opts.separator " will have its lang and xml:lang attributes updated."
|
173
|
+
opts.separator " Saving the tiddlywiki manually does the same."
|
174
|
+
opts.separator ""
|
161
175
|
|
162
176
|
end
|
163
177
|
opts.parse!(argv)
|
@@ -347,6 +361,7 @@ module TiddlywikiCp
|
|
347
361
|
tiddlywiki.raw = read_uri(uri)
|
348
362
|
tiddlywiki.instance_eval do
|
349
363
|
use_pre_from_raw
|
364
|
+
lang_from_raw
|
350
365
|
@tiddlers = tiddlywiki.tiddler_divs.map do |tiddler_div|
|
351
366
|
Tiddler.new.from_div(tiddler_div, @use_pre)
|
352
367
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
var version = {title: "TiddlyWiki", major: 2, minor: 3, revision: 0, date: new Date("Dec 4, 2007"), extensions: {}};
|
data/test/test_tiddlywiki_cp.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright (C) 2007 Loic Dachary <loic@dachary.org>
|
2
|
+
# Copyright (C) 2007, 2008 Loic Dachary <loic@dachary.org>
|
3
3
|
#
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
@@ -35,6 +35,60 @@ end
|
|
35
35
|
class TestTiddlywikiCp < Test::Unit::TestCase
|
36
36
|
include TiddlyBase
|
37
37
|
|
38
|
+
def test_lang_from_raw
|
39
|
+
r = TiddlyWiki.new
|
40
|
+
assert_equal('en', r.lang)
|
41
|
+
#
|
42
|
+
# The regexp does not match
|
43
|
+
#
|
44
|
+
r.raw = ''
|
45
|
+
exception = assert_raise RuntimeError do
|
46
|
+
r.lang_from_raw
|
47
|
+
end
|
48
|
+
assert_match(/no match/, exception.message)
|
49
|
+
#
|
50
|
+
# lang are inconsistent
|
51
|
+
#
|
52
|
+
r.raw = '<html xml:lang="en" lang="fr"'
|
53
|
+
exception = assert_raise RuntimeError do
|
54
|
+
r.lang_from_raw
|
55
|
+
end
|
56
|
+
assert_match(/'en' and 'fr'/, exception.message)
|
57
|
+
#
|
58
|
+
# success
|
59
|
+
#
|
60
|
+
r.raw = '<html xml:lang="fr" lang="fr"'
|
61
|
+
r.lang_from_raw
|
62
|
+
assert_equal('fr', r.lang)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_locale2lang
|
66
|
+
r = TiddlyWiki.new
|
67
|
+
r.add_tiddler_from({ 'tiddler' => 'fakefrench',
|
68
|
+
'tags' => ['systemConfig'],
|
69
|
+
'text' => 'config.locale = "fr"' })
|
70
|
+
raw = r.locale2lang('<html a="f" xml:lang="en" lang="en" ')
|
71
|
+
assert_match(/a="f" xml:lang="fr" lang="fr"/, raw)
|
72
|
+
#
|
73
|
+
# weird config.locale throw exceptions
|
74
|
+
#
|
75
|
+
r.get_tiddler('fakefrench').fields['text'] = 'config.locale = "f" + "r"';
|
76
|
+
exception = assert_raise RuntimeError do
|
77
|
+
r.locale2lang('')
|
78
|
+
end
|
79
|
+
assert_match(/matches but/, exception.message)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_locale
|
83
|
+
t = TiddlyWikiCp.new
|
84
|
+
uri = "#{this_dir(__FILE__)}/content/universe.html"
|
85
|
+
tw = t.uri2tiddlywiki("#{uri}")
|
86
|
+
tw.add_tiddler_from({ 'tiddler' => 'fakefrench',
|
87
|
+
'tags' => ['systemConfig'],
|
88
|
+
'text' => 'config.locale = "fr"' })
|
89
|
+
assert_match(/lang="fr"/s, tw.to_s)
|
90
|
+
end
|
91
|
+
|
38
92
|
def test_main
|
39
93
|
t = TiddlyWikiCp.new
|
40
94
|
a = "#{this_dir(__FILE__)}/content/a" # existing file without .div
|
@@ -311,6 +365,7 @@ class TestTiddlywikiCp < Test::Unit::TestCase
|
|
311
365
|
|
312
366
|
def test_tiddlywiki?
|
313
367
|
t = TiddlyWikiCp.new
|
368
|
+
assert(t.tiddlywiki?("#{this_dir(__FILE__)}/content/tiddly_version_2_3.txt"))
|
314
369
|
assert(t.tiddlywiki?("#{this_dir(__FILE__)}/content/tiddly_version_2_2.txt"))
|
315
370
|
assert(t.tiddlywiki?("#{this_dir(__FILE__)}/content/tiddly_version_2_1.txt"))
|
316
371
|
assert_equal(nil, t.tiddlywiki?("#{this_dir(__FILE__)}/content/html_entities.html"))
|
@@ -355,12 +410,23 @@ class TestTiddlywikiCp < Test::Unit::TestCase
|
|
355
410
|
t.tiddler2file(j, "spit/c")
|
356
411
|
t.uri2tiddler(j).fields['text'] = 'NONE'
|
357
412
|
t.file2tiddler("spit/c", j)
|
358
|
-
assert_match(/lightBoxTitle {padding:0px/, original)
|
413
|
+
assert_match(/lightBoxTitle \{padding:0px/, original)
|
359
414
|
transformed = t.uri2tiddler(j).text
|
360
415
|
assert_match(/TiddlyLightBoxStyles=\"/, original)
|
361
416
|
assert_equal(original, transformed)
|
362
417
|
end
|
363
418
|
|
419
|
+
def test_file2markuptiddler
|
420
|
+
t = TiddlyWikiCp.new
|
421
|
+
uri = "#{this_dir(__FILE__)}/content/universe.html"
|
422
|
+
tw = t.uri2tiddlywiki("#{uri}")
|
423
|
+
TiddlyWiki::TIDDLER2MARKUP.each_pair do |tiddler, markup|
|
424
|
+
mark = "XXX#{tiddler}XXX"
|
425
|
+
tw.add_tiddler_from({ 'tiddler' => tiddler, 'text' => mark})
|
426
|
+
assert_match(/#{markup}-START.*#{mark}.*#{markup}-END/sm, tw.to_s)
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
364
430
|
def test_tiddler2directory
|
365
431
|
t = TiddlyWikiCp.new
|
366
432
|
t.tiddler2directory("#{this_dir(__FILE__)}/content/universe.html#Implementation", "spit")
|
@@ -1,7 +1,92 @@
|
|
1
1
|
{{{
|
2
|
-
changeset:
|
2
|
+
changeset: 77:5e92b7ebcd70
|
3
3
|
tag: tip
|
4
4
|
user: root@dachary.org
|
5
|
+
date: Fri Apr 04 14:17:09 2008 +0000
|
6
|
+
summary: update plugin name
|
7
|
+
|
8
|
+
changeset: 76:b1a11d62dce4
|
9
|
+
user: root@dachary.org
|
10
|
+
date: Fri Apr 04 14:04:08 2008 +0000
|
11
|
+
summary: upgrade website to tw-2.3 and newer davplugin
|
12
|
+
|
13
|
+
changeset: 75:fb74e9bc08d4
|
14
|
+
user: root@dachary.org
|
15
|
+
date: Fri Apr 04 13:42:01 2008 +0000
|
16
|
+
summary: update documentation
|
17
|
+
|
18
|
+
changeset: 74:0dc051395239
|
19
|
+
user: root@dachary.org
|
20
|
+
date: Fri Apr 04 13:36:13 2008 +0000
|
21
|
+
summary: update documentation for 0.5.0
|
22
|
+
|
23
|
+
changeset: 73:dddb2fc4bbca
|
24
|
+
user: root@dachary.org
|
25
|
+
date: Fri Apr 04 13:01:52 2008 +0000
|
26
|
+
summary: 0.5.0 release ready
|
27
|
+
|
28
|
+
changeset: 72:7290595266bb
|
29
|
+
user: root@dachary.org
|
30
|
+
date: Fri Apr 04 12:59:23 2008 +0000
|
31
|
+
summary: documentation for lang support
|
32
|
+
|
33
|
+
changeset: 71:86e046e659af
|
34
|
+
user: root@dachary.org
|
35
|
+
date: Fri Apr 04 12:52:12 2008 +0000
|
36
|
+
summary: test file for tw 2.3
|
37
|
+
|
38
|
+
changeset: 70:301346066b75
|
39
|
+
user: root@dachary.org
|
40
|
+
date: Fri Apr 04 10:36:24 2008 +0000
|
41
|
+
summary: update lang tags
|
42
|
+
|
43
|
+
changeset: 69:7c7f3d279c28
|
44
|
+
user: root@dachary.org
|
45
|
+
date: Fri Apr 04 07:11:49 2008 +0000
|
46
|
+
summary: test tw-2.3 version detection
|
47
|
+
|
48
|
+
changeset: 68:e635348a3352
|
49
|
+
user: root@dachary.org
|
50
|
+
date: Thu Apr 03 15:43:32 2008 +0000
|
51
|
+
summary: generate index.html with website_generate target
|
52
|
+
|
53
|
+
changeset: 67:dd3534267e3c
|
54
|
+
user: root@dachary.org
|
55
|
+
date: Thu Apr 03 15:36:56 2008 +0000
|
56
|
+
summary: copy Markup* tiddlers to the corresponding zone in the tiddlywiki
|
57
|
+
|
58
|
+
changeset: 66:740b082f235a
|
59
|
+
user: loic@dachary.org
|
60
|
+
date: Thu Apr 03 09:29:57 2008 +0000
|
61
|
+
summary: apt-get install ruby-elisp
|
62
|
+
|
63
|
+
changeset: 65:47688556400d
|
64
|
+
user: root@dachary.org
|
65
|
+
date: Thu Apr 03 09:29:16 2008 +0000
|
66
|
+
summary: bump to version 0.5.0
|
67
|
+
|
68
|
+
changeset: 64:3544bb17985c
|
69
|
+
user: root@dachary.org
|
70
|
+
date: Thu Apr 03 08:58:43 2008 +0000
|
71
|
+
summary: fix invalid regexp including {
|
72
|
+
|
73
|
+
changeset: 63:13476d79f633
|
74
|
+
user: root@dachary.org
|
75
|
+
date: Thu Apr 03 08:44:20 2008 +0000
|
76
|
+
summary: update SimonBaird work local copy
|
77
|
+
|
78
|
+
changeset: 62:dfdfb30ccb97
|
79
|
+
user: root@dachary.org
|
80
|
+
date: Mon Mar 31 21:08:17 2008 +0000
|
81
|
+
summary: sync with SimonBaird version : systemServer replaces contentPublisher
|
82
|
+
|
83
|
+
changeset: 61:73d453e23b5d
|
84
|
+
user: root@dachary.org
|
85
|
+
date: Sun Mar 30 21:29:40 2008 +0000
|
86
|
+
summary: release information and web site
|
87
|
+
|
88
|
+
changeset: 60:4177e4981005
|
89
|
+
user: root@dachary.org
|
5
90
|
date: Sun Mar 30 21:18:27 2008 +0000
|
6
91
|
summary: remove extra SimonBaird files
|
7
92
|
|
@@ -1,2 +1,2 @@
|
|
1
|
-
Introduction
|
2
|
-
Usage
|
1
|
+
[[Introduction]]
|
2
|
+
[[Usage]]
|
@@ -1,12 +1,30 @@
|
|
1
1
|
a ruby gem (http://rubyforge.org/projects/tiddlywikicp/) providing a library and a command line interface to copy [[tiddlywiki|http://tiddlywiki.com/]] tiddlers to files and vice versa.
|
2
2
|
|
3
|
+
Installation : gem install tiddlywiki_cp
|
4
|
+
|
3
5
|
Development is discussed at irc.freenode.net#tiddlywiki
|
4
6
|
|
5
7
|
This tiddlywiki was created using the following commands:
|
8
|
+
* copy an empty tiddlywiki to a local file
|
9
|
+
{{{
|
10
|
+
tiddlywiki_cp http://tiddlywiki.com/empty.html website/index.html
|
11
|
+
}}}
|
12
|
+
* copy and install a plugin
|
13
|
+
{{{
|
14
|
+
tiddlywiki_cp 'http://garden.dachary.org/#WebDavPlugin' website/index.html
|
15
|
+
}}}
|
16
|
+
* copy all tiddlers to a directory
|
6
17
|
{{{
|
7
|
-
|
18
|
+
mkdir website/files
|
8
19
|
tiddlywiki_cp -a website/index.html website/files
|
9
|
-
|
10
|
-
|
20
|
+
}}}
|
21
|
+
* use regular shell commands to create or update files
|
22
|
+
{{{
|
23
|
+
( echo '{{''{' ; RUBYLIB=lib ruby bin/tiddlywiki_cp --help ; echo '}}''}' ) > website/files/Usage.tiddler
|
24
|
+
( echo '{{''{' ; hg log ; echo '}}''}' ) > website/files/ChangeLog.tiddler
|
25
|
+
}}}
|
26
|
+
* copy all tiddlers in a directory into a tiddlywiki, updating existing ones and adding new ones
|
27
|
+
{{{
|
28
|
+
cd website ; RUBYLIB=../lib ruby ../bin/tiddlywiki_cp -a files index.html
|
11
29
|
}}}
|
12
30
|
Loic Dachary <mailto:loic@dachary.org>
|
data/website/files/Usage.tiddler
CHANGED
@@ -52,4 +52,18 @@ Examples:
|
|
52
52
|
|
53
53
|
tiddlywiki_cp -a A B C tiddlywiki.html
|
54
54
|
copy all tiddlers found in the A B and C directories to tiddlywiki.html
|
55
|
+
|
56
|
+
MarkupPreHead, MarkupPostHead, MarkupPreBody, MarkupPostBody tiddlers:
|
57
|
+
|
58
|
+
When copying to a tiddlywiki file, the content of these tiddlers
|
59
|
+
are copied to the corresponding HTML zones.
|
60
|
+
|
61
|
+
translations, i18n, l10n, linguo:
|
62
|
+
|
63
|
+
If a translation plugin such as the one found at
|
64
|
+
http://trac.tiddlywiki.org/wiki/Translations
|
65
|
+
is present, the tiddlywiki to which tiddlers are copied
|
66
|
+
will have its lang and xml:lang attributes updated.
|
67
|
+
Saving the tiddlywiki manually does the same.
|
68
|
+
|
55
69
|
}}}
|