пятница, 16 октября 2009 г.

SaveTiddlerToFilePlugin и кирилица

«Будем бить через дымоход.»

Есть такая вещь, т. с. сама в себе — TiddlyWiki. Раза четыре к ней «подъезжал», но как то не складывалось (видимо сильно влияла разметка MediaWiki - а у Тиддли она весьма отличается от «старшего брата»). Писать здесь как это круто или убого (и все такое) не буду — до меня написано множество дифирамб… Я лучше постепенно буду рассказывать о том, что накопал :-) Сразу оговорюсь, что все изыскания проводились под Виндами (отсюда и специфика этих самых изысканий)


Начну, пожалуй, с плагина SaveTiddlerToFilePlugin — сохранение исходника текущего тидлера в файл (взята версия плагина 1.1.0). Вещь сама по себе хороша, но… при сохранении тидлера с кириллическим именем и этим же содержимым, получаем откровенную лабуду: имя файла явно из области UTF8 (что под M$ не воспринимается), а содержимое файла — нечто вроде убиенного Unicode.


Собственно правка заключается в следующем: имя файла конвертим из UTF8 в Unicode, а содержимое наоборот - из Unicode в UTF8. Т.е. в методе go вместо строки:

var msg=saveFile(target,store.getTiddlerText(tid))?cms.okmsg:cms.failmsg;

пишем

target=convertUTF8ToUnicode(target);
var msg=saveFile(target,convertUnicodeToUTF8(store.getTiddlerText(tid)))?cms.okmsg:cms.failmsg;

Теперь и овцы сыты и волки…


…поработав с этой модификацией понял, что сохраненные голые сорцы тидлеров не есть гуд. Иногда хочется иметь полный антураж.

Ok. Едем дальше. Добавим возможность сохранения полнофункционального тидлера — обернем исходный текст тидлера в html-обертку. Формат тидлера в обертке такой:

<div title="Название тидлера"
modifier="Модификатор"
created="Когда создан"
modified="Когда можифицирован"
tags="Тэги"
changecount="Сколько раз модифицирован">
<pre>
Исходный текст тидлера
</pre>
</div>

Для начала организуем возможность включать/отключать эту фичу (через меню tweak). Для этого добавим в начало (после строки определения версии) вот такой код:

if(config.options.chkSaveFullTiddler == undefined)
config.options.chkSaveFullTiddler = false;
if(config.optionsDesc.chkSaveFullTiddler == undefined)
config.optionsDesc.chkSaveFullTiddler ="Макрос saveTiddlerToFile будет сохранять tiddler в html-обертке";

Снова идем к строке, где вызывается функция saveFile и переписываем строки вот так:

if(config.options.chkSaveFullTiddler)
savedtiddlertext=store.getSaver().externalizeTiddler(store,store.getTiddler(tid));
else
savedtiddlertext=store.getTiddlerText(tid);
savedtiddlertext=convertUnicodeToUTF8(savedtiddlertext);
var msg=saveFile(target,savedtiddlertext)?cms.okmsg:cms.failmsg;

Фсе. В сухом остатке имеем:
  1. кодировка сохраняемых тидлеров корректна (как имя файла, так и содержимое);

  2. сохранять тидлеры можно в двух вариантах — plain-текстом или в html-обертке.

3 комментария:

Сергей комментирует...

Еще за полтора года чего-нить интересного для TW накопал? Я использую MPTW http://mptw.tiddlyspot.com/ и это круто

skirda комментирует...

Интересного?
Хмм... разве что тема "как влудить тидлер вне интерфейса" (из скрипта или ком.строки... напрямую в файл, минуя "традиционное" редактирование :-))

skirda комментирует...

Кстати, а где можно прочитать про отличия mptw от "традиционно"?

Отправить комментарий