Здравствуйте, Yachtsman, Вы писали:
R>>Насколько я знаю, нет. А для чего ее понадобилось описывать? Может, эта схема и нам пригодится? Y>Вообще, для валидации статей... Хочу попробовать написать клиента для их написания... Для общего, т.с. развития...
Искусственный интеллект на RSDN! Вы задаете тему статьи, а клиент RSDN@Article пишет статью заданного объёма для вас! Нет больше проблем с материалом в журнал!
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>В Висте не ставится падает где-то ближе к концу. В офисе 2007 как-то странно работает панелька
А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом...
Здравствуйте, Sheridan, Вы писали:
S>А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом...
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
VD>Ну, я вообще-то и в донтете, и в студии, и ком разбираюсь довольно хорошо. Естественно, сборки Any CPU. Правда, в них есть микроскопический объем платформно-зависимого кода. В нем, конечно, возможна ошибка. Но в любом случае они не должны были бы приводить к тому что сборку нельзя загрузить. Должны были бы быть рантайм-ылеты.
VD>Как, кстати, выглядят проблемы с шаблоном в 64-битном Офисе? Говорит, что не может создать объект?
SGH>>Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка.
VD>Я в курсе. Если заглянуть в список моих статей, то можно заметить, что 10 лет назад я плотно занимался КОМ-ом.
Прошу прощения, если мои предположения оказались чересчур тривиальными.
SGH>>32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
VD>Приложение дотнетное. Потому и не понятно, почему не работает. Возможно проблемы с регистрацией. Регистрация делается встроенным студийным инсталлятором (из VS 2008). У сборки просто установлено свойство Register установлено в vsdrpCOM. Что он там делает я не знаю.
SGH>>Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
VD>Возможно.
VD>Как посмотреть HKEY_CLASSES_ROOT для 64-битных комовских сборок?
VD>ЗЫ
VD>Со своей стороны хочу попробовать описанные здесь действия. Есть проблема связанная с выбором версии дотнета вордовским процессом. Возможно причина именно в ней, а не в 64-битности.
VD>Так же прошу как можно боле подробно описать симптомы возникающие в 64-битном ворде.
Я смог запустить Ваш код на 64-битном ворде. Проблема не в дотнет-сборке, она, действительно, работает прозрачно и на 32- и на 64-битной платформе. Проблема и не в выборе версии дотнета. Вашу рекомендацию (здесь
) я попробовал ещё до того, как написать сюда первое сообщение.
Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Здравствуйте, orangy, Вы писали:
O>Искусственный интеллект на RSDN! Вы задаете тему статьи, а клиент RSDN@Article пишет статью заданного объёма для вас!
Здравствуйте, Odi$$ey, Вы писали:
OE>в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml
Поправочка: в xml его тоже не будет, его сгенерирует XSLT в финальном HTML.
__W>>иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
При генерации локального HTML вообще ставятся абсолютные пути к рисункам (определяется по каталогу установки шаблона). Они верны только для этого компьютера. Но локальный HTML нужен только для просмотра сгенерированной статьи. На сайте будут другие пути.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
VD>Офторп: Вообще-то МС сам не рекомендует ставить 64-ый офис (прямо в инсталляторе).
VD>Проблема в том, что наше расширение, по идее, не должно зависеть от битности офиса. Оно написано на дотнете и ВБА. Но, почему-то, я уже слышу третий отклик о том, что оно не работает под 64-битным офисом. Причем у меня нет идей как понять, что не так. Там COM. А он не прозрачен до чертиков.
VD>Попытаюсь поставить себе (еще раз) 64-битный офис и пошаманить. Но обещать ничего не могу.
Я, конечно, в дотнете не силён, но попробую помочь предположениями.
Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка. 32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
Здравствуйте, kochetkov.vladimir, Вы писали:
VD>>Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
KV>.\snippets\WordToRsdnMlConverter\Setup\Setup.vdproj — это оно? Я со встроенным в студию деплоем не работал, но, на первый взгляд, перетащить это на Wix — не проблема, давай сделаю (с учетом этого обсуждения по поводу реестра)?
Здравствуйте, Виталий Брусенцев!
Я обнаружил глюк. Если в тексте статьи последний текст имеет стиль Code (например, С++), то процедура создания XML зависает.
Скачал дистрибутив месяца полтора назад.
Здравствуйте, Constructor, Вы писали:
C>Я обнаружил глюк. Если в тексте статьи последний текст имеет стиль Code (например, С++), то процедура создания XML зависает. C>Скачал дистрибутив месяца полтора назад.
Да, этот глюк известен. Сейчас готовлю новую версию шаблона, в ней он устранен.
При попытке воспользоваться сабжем на WinXP SP1 Eng + Office 2000 SP3 Eng Ворд стабильно рушится, если попытаться пометить текст как "Code -> C++". Остальные стили применяются к тексту абсолютно нормально. Настройки Ворда практически не отличаются от тех, что создаются при установке — только отключена проверка грмматики "на лету" (орфорграфия проверяется, установлено ORFO 2000). На Win2000 SP4 Eng + Office 97 SP2 Eng все в порядке (правда, ORFO 5.0).
WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
WinXP SP1 Eng + Office XP Pro Eng — ситуация аналогичная.
Если кому-то удавалось воспользоваться "Шаблоном для верстки..." под ХРюшей — буду очень признатен за деление опытом.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>WinXP SP1 Eng + Office 97 SP Eng — то же самое (Ворд рушится при попытке пометить текст как код на любом из предлашаемых языков). Снос ORFO и отключение проверки орфографии/грамматики не помогает. Запуск Ворда в режиме совместимости с W2K также не дает положительного результата.
Все чудесатее и чудесатее...
Как именно рушится Ворд — выдает какое-либо сообщение об ошибке или с AV?
Попробуй запустить вот такой файлик test.js (просто дабл-кликом в Explorer):
WScript.Echo("Version: "+
ScriptEngineMajorVersion()+"."+ScriptEngineMinorVersion());
var text = "int main(){ return 0; }";
var colorer = new ActiveXObject("RSDN.CodeColorer");
WScript.Echo(colorer.TranslateCode(text, "C/C++"));
и сообщи о результатах, плиз.
... Live as if you were to die tomorrow. Learn as if you were to live forever. -- M.K. Gandhi
Здравствуйте, retalik, Вы писали:
R>Все чудесатее и чудесатее...
В жизни всегда есть место празднику...
R>Как именно рушится Ворд — выдает какое-либо сообщение об ошибке или с AV?
AV и предложение послать report в Редмонд. Одним из первых имен в логе, который предлагается отослать, является ole32.dll.
R>Попробуй запустить вот такой файлик test.js (просто дабл-кликом в Explorer):
А из FARа можно?
Вот результат:
1-й message box:
---------------------------
Windows Script Host
---------------------------
Version: 5.6
---------------------------
OK
---------------------------
2-й message box:
---------------------------
Windows Script Host
---------------------------
<kw>int</kw> main(){ <kw>return</kw> 0; }
---------------------------
OK
---------------------------
Здравствуйте, HeaveN, Вы писали:
HN>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>WinXP SP1 Eng + Office XP Pro Eng — ситуация аналогичная.
HN>У меня работает без вопросов. Инсталлировал и все. Правда офис русский.
Что забавно: даже под Win98 SE Eng + Office 97 SP2 Eng — и то работает! А под ХРюшей не хочет. Кстати, тот MSXML, который живет под W2K, маркирован как 3.0 SP3 (file version 8.30.9926.0), а тот, что под ХРюшей — как 3.0 SP4 (file version 8.40.9419.0).
Здравствуйте, Yachtsman, Вы писали:
Y>А существует ли в природе XML схема статьи? Больно не хочется ее самому описывать...
Насколько я знаю, нет. А для чего ее понадобилось описывать? Может, эта схема и нам пригодится?
При попытке генерации XML / HTML версий статьи появляется диалоговое окно с индикатором прогресса, но по окончанию работы ни XML, ни HTML версии статьи в папке не появляется. Причем для другой статьи эти файлы генеряться без проблем.
Re[2]: Ошибка при генерации XML / HTML версий статьи
Здравствуйте, yury.fedorov, Вы писали:
YF>При попытке генерации XML / HTML версий статьи появляется диалоговое окно с индикатором прогресса, но по окончанию работы ни XML, ни HTML версии статьи в папке не появляется. Причем для другой статьи эти файлы генеряться без проблем.
Пришлите мне архив с .doc-файлом — попробую разобраться.
На работе — Win XP SP1 + Office 2003 + RSDN Author Pack 1.6, дома — такая же конфигурация.
На работе все работает, дома — зависает при попытке отформатировать текст. Причем в любой формат кроме Manual. Кроме того, зависает при выборе пункта Language from list. Ваш тест — test.js — выдал первый диалог "Version: 5.6", а второй "<kw>int</kw> main(){ <kw>return</kw> 0; }" только через минуту или две. Что делать, кто виноват?..
Здравствуйте, nzeemin, Вы писали:
N>На работе — Win XP SP1 + Office 2003 + RSDN Author Pack 1.6, дома — такая же конфигурация. N>На работе все работает, дома — зависает при попытке отформатировать текст. Причем в любой формат кроме Manual. Кроме того, зависает при выборе пункта Language from list. Ваш тест — test.js — выдал первый диалог "Version: 5.6", а второй "<kw>int</kw> main(){ <kw>return</kw> 0; }" только через минуту или две. Что делать, кто виноват?..
Проблема с Windows Scripting Host, похоже.
Никакой анти-спайвары не установлено? Я установил MS AntiSpyware, так столкнулся с тем, что выполнение скриптов блокируется.
Здравствуйте, retalik, Вы писали:
R>Проблема с Windows Scripting Host, похоже. R>Никакой анти-спайвары не установлено? Я установил MS AntiSpyware, так столкнулся с тем, что выполнение скриптов блокируется.
Похоже на последствия установленного, а потом снесённого AVP.
Лечится
1. Не могу найти каким образом вставлять исходный код в статью, чтобы он разворачивался
и сворачивался плюсиком, как показано в примере данной статьи для IDL.
При изучении HTML кода видно, что задействована функция "JavaScript" — ToggleCode().
Что надо указать в Word документе, чтобы ее заюзать?
2. При вставке гиперссылок хотелось бы использовать такие рисуночки, как <IMG src="/images/extA.gif" ...
Что надо сделать в Word, чтобы их подключить?
Где посмотреть весь спектр смайликов, имеющихся на сайте?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, __WaterFall__, Вы писали:
__W>1. Не могу найти каким образом вставлять исходный код в статью, чтобы он разворачивался __W> и сворачивался плюсиком, как показано в примере данной статьи для IDL.
Надо перед исходником поместить заголовок со стилем Name и начать его с "+" или "-".
__W>2. При вставке гиперссылок хотелось бы использовать такие рисуночки, как <IMG src="/images/extA.gif" ... __W> Что надо сделать в Word, чтобы их подключить?
Надо в свойствах гиперссылки, в поле "примечание", поместить текст "ext" или "file". См. документацию.
__W> Где посмотреть весь спектр смайликов, имеющихся на сайте?
Статьи тут не при чем, смайлики только на форуме (практически все есть в форме ввода сообщения).
Спасибо за советы Витилий,
R>Надо перед исходником поместить заголовок со стилем Name и начать его с "+" или "-".
стиль Name я вчера пробовал, но был вечер, видно я доку читал очень быстро, вот "+" и "-" поставить не догадался, как-то пропустил. Сегодня в доке явно вижу, как ясно и понятно написано, вчера (пивом клянусь) этого не было
R>Надо в свойствах гиперссылки, в поле "примечание", поместить текст "ext" или "file". См. документацию.
всё-равно не понял как писать это "примечание", даже после прочтения доки, например я хочу на какое-нибудь слово сделать абсолютныю ссылку + повесить картинку т.е. например <A href="http://www.my-site.com"><IMG src="http://www.rsdn.ru/images/fileA.gif" border="0" width="28" height="11" align="absmiddle">нажмите сюда пожалуйста</A>. Как это объянить word-у? ну написал я "ext" в поле "примечание", а как к ней приклеить fileA.gif?
R>Статьи тут не при чем, смайлики только на форуме (практически все есть в форме ввода сообщения).
Я не правильно выразился, я имел ввиду не смайлики, а маленькие рисуночки — атрибуты для ссылок <A href= ...
как например <IMG src="/images/extA.gif" ... <IMG src="/images/fileA.gif" ...
Я их наблюдаю в других статьях, стильно. (т.е. список картинок из папки 'images' меня и интересует).
Я так понимаю, что где-то в word-е в атрибутах ссылки надо ставить абсолютные ссылки-атрибуты,
<IMG src="http://www.rsdn.ru/images/fileA.gif" , иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
R>А какую статью Вы пишете?
Я пока не хотел бы называть тему публично, вероятно из-за суеверности, чтобы не сорваться на более насущные дела по дому. Это всё-таки будет моя первая статья для RSDN. Занимает много времени, уже неделю пишу по-вечерам. Дальше должно быть легче. Если закончу, то вы об этом очень скоро узнаете (я её собираюсь выслать на рецензирование).
Скорее всего это будет жанр алгоритмы/математика, хотя там есть небольшой уклон в сторону hardware. Сейчас пишу soft для статьи.
У меня ещё есть 1 вопрос, если я в статью хочу вставить небольшой графический пример, показывающий работу описываемых алгоритмов, могу ли я написать процедурку (например на "JavaScript") и вставить прямо в середину статьи?
или может оформить как отдельный файл htm и сделать ссылку? Как это правильно делается?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, __WaterFall__, Вы писали:
__W>Как это объянить word-у? ну написал я "ext" в поле "примечание", а как к ней приклеить fileA.gif?
в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml
__W>Я так понимаю, что где-то в word-е в атрибутах ссылки надо ставить абсолютные ссылки-атрибуты,
нет
__W>иначе при открытии локально сгенерированного htm картинки не будут найдены? Или скачать к себе в папку нужные gif?
да, заведи в корне диска каталог images с нужными рисунками, тогда увидишь и локально
со списком рисуночков понятно (chmA.gif extA.gif fileA.gif ls.gif ls1.gif ls2.gif)
OE>>в ворде ты рисунок не увимдишь, его "приклеит" конвертор в xml R>Поправочка: в xml его тоже не будет, его сгенерирует XSLT в финальном HTML.
спасибо, как я понял механизм такой
— в xml попадает type="ext"
— в html попадает абсолютный путь <IMG src="C:/Program Files/RSDN/Authoring Pack/Authoring/images/extA.gif"
— при выкладывании на RSDN абсолютный путь киляется
R>При генерации локального HTML вообще ставятся абсолютные пути к рисункам (определяется по каталогу установки шаблона). Они верны только для этого компьютера. Но локальный HTML нужен только для просмотра сгенерированной статьи. На сайте будут другие пути.
+ вопрос:
если я также захочу выложить html, например на свой сайт, мне надо пропатчить html, т.е. поубирать абсолютные пути?
может есть такая опция при генерации? (или скопировать в папку к статье всю папку Authoring и поставить в
свойствах путь к XSL = .\ (я попробовал — получим почти как на сайте <IMG src="./images/extA.gif")?
или все-таки самому писать конвертор?...)
есть второй способ скачать html статью с RSDN, (при условии, если ее опубликуют
мне так никто и не ответил на вопрос, можно ли в word документ вставлять сырой html код, например на "JavaScript"?
from __python__ import paradigma
from __future__ import generators
from __waterfall__ import power
Здравствуйте, adontz, Вы писали:
S>>А я и не удивлен. Новые версии софта МС всегда требуют переделки более-менее серьезных вещей, связанных с этим софтом... A>Карфаген должен быть разрушен?
Уже почти собрал обратно
Function FormatRange(content As Range, Format As Boolean, Optional code As Boolean) As String
Dim h As Hyperlink, s As String, Text As String
Dim r As Range, shape As InlineShape, iCode As Integer
Set r = CopyRange(content)
ReplaceText r, "&", "&"
ReplaceText r, "<", "<"
ReplaceText r, ">", ">"
ReplaceText r, "^l", "<BR/>"If Format Then
If Not code Then
Dim temp As Range
Do While r.Hyperlinks.Count > 0
Set h = r.Hyperlinks(1)
Text = h.Range.Text
s = "<A href=""" & Escape(h.address) & """"If h.ScreenTip <> ""Then s = s & " type=""" & h.ScreenTip & """"
s = s & ">" & Text & "</A>"Set temp = h.Range.Duplicate
h.Delete
temp.Text = s
Loop
Do While r.InlineShapes.Count > 0
Set shape = r.InlineShapes(0)
Text = ProcessInlineShape(shape)
Set temp = shape.Range.Duplicate
shape.Delete
temp.Text = Text
Loop
End If
ReplaceFormat
If code Then ReplaceCode content
End If
Set r = CopyRange(content)
FormatRange = Replace(r.Text, vbCr, IIf(code, vbCrLf, ""))
End Function
Падает в выделенном месте 0 элемента нет. Есть 1. Надо или 0 поменять на 1 или заменить do while на for each (покрайней мере у меня прокатило).
Здравствуйте, AndrewVK, Вы писали:
ДА>>их можно и всегда подсвечивать AVK>А можно и никогда не подсвечивать, что будет не хуже.
А бог с ним , но себе я переделал
Здравствуйте, Sheridan, Вы писали:
A>>Карфаген должен быть разрушен? S>Ну еще скажи что я неправ. Достаточно прочитать ветку с корня.
Ну вот если почитать исправиления Дьяченко Александра, то статнет ясно что скрипт с самого начала был не ахти как корректно написан
А вообще твоё утверждение не вполне верно потому что
Там где обратную совместимость общают, она есть. Программы написанные для Windows 2000, запускаются и на ХР и на 2003
Там где её не обещают, её искать не надо. Программы для .Net Frameword 1.1 зачастую не корректно работают на .Net Framework 2.0
Здравствуйте, adontz, Вы писали:
A>>>Карфаген должен быть разрушен? S>>Ну еще скажи что я неправ. Достаточно прочитать ветку с корня. A>Ну вот если почитать исправиления Дьяченко Александра, то статнет ясно что скрипт с самого начала был не ахти как корректно написан
Добавлена поддержка MS Office 2007
Инсталлятор совместим с Windows Vista
Устранено ложное срабатывание некоторых антивирусов
Исправлена ошибка при создании Unicode-версии xml
Название таблицы (подпись) Поддерживается. Для этого сразу после таблицы вставьте абзац со стилем "Name" и текстом названия.
Таблица 1. Поддержка таблиц в шаблоне RSDN Article
Собственно, вопрос — а почему после? Общепринято таблицы (как и код) именовывать ДО...
У меня есть статья в формате этого шаблона. Она уже публиковалась в RSDN Magazine.
Так вот если ее пытаться преобразовать в HTML в Word 2007, то происходят ошибки.
В Word 2003 все работает. Пробовал как версию 1.6, так и 1.7.
Могу предоставить файл со статьей для повторения ошибки.
Евгений Рыжков
ООО "СиПроВер"
Re: Шаблон для верстки статей RSDN - список с кодом
День добрый.
Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
Спасибо.
Здравствуйте, Andrew S, Вы писали:
AS>Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
текущая версия шаблона тут бессильна, надо просто нумеровать вручную, без OL
Очень неудобно, что в шаблоне нет автоматической нумерации заголовков, то есть абзацев стилей PART, SECTION, SUBSECTION — приходится нумеровать вручную, что при учете постоянных изменений статьи (перекомпоновки) заставляет уделять этому лишнее внимание и время.
Стандартная нумерация MS Word отражается некорректно в генерируемый XML, а стиль OL для нумерации заголовков не подходит — выше обсуждали про прерывание OL другими стилями. С другой стороны, а зачем нам вообще нумерация заголовков в XML? XML имеет иерархическую структуру, а потому шаблон XSL-преобразования может спокойно вычислить номер любого заголовка проанализировав XML-дерево на этапе построения HTML.
Решение (то, чем могу помочь я)
В принципе, автоматическую нумерацию заголовков и проставление номеров в содержании я сделал: изменил в articles.xsl соответствующие шаблоны PART, SECTION, SUBSECTION. Скорее всего сделал не очень красиво, можно было всю логику нумерации вынести всего в один шаблон (собственно — HEADER). Просто лень было сильно заморачиваться, сделал copy-paste-ом. В цитировании выделил внесенные изменения.
Решение (то, что может сделать скорее всего только автор)
И все бы хорошо, но при внесении описанных выше изменений в шаблон articles.xsl заголовки всех старых статьей, в которых авторы мучались и расставляли нумерацию вручную, будут пронумерованы дважды, то есть увидим автоматический номер и далее текст ручной нумерации. Посему у меня просьба-предложение автору темы:Сделать настройку в свойствах документа "Автоматически нумеровать заголовки" — кнопка true/false. Она должна быть по умолчанию сброшена, но если выставлена, то в XML-документ должен быть сгенерирован, к примеру, такой элемент ARTICLE/AUTO-NUMBERING-HEADER.
Внести в XSL-преобразование статьи указанные выше мною изменения, обернув их в <xsl:if test="ARTICLE/AUTO-NUMBERING-HEADER">...</xsl:if> — и в RSDN Authoring Pack, и на сайт.
По возможности все же вынести всю логику формирования номера заголовка в шаблон HEADER.И вуаля! И волки сыты, и овцы целы: старые статьи, пронумерованные вручную, и новые, пронумерованные автоматически, будут отображаться корректно.
Изменения по-моему плевые, не должны отнять и часа. Виталий, если у вас есть время, сделайте, пожалуйста, авторам RSDN хорошо!
Re[3]: Шаблон для верстки статей RSDN - список с кодом
AS>>Такой вопрос — имеется список (OL), хочется в его элементы вставить блоки кода. Как это дело правильно оформляется в документе? При использовании параграфов, естественно, ломается нумерация в результирующем xml.
OE>текущая версия шаблона тут бессильна, надо просто нумеровать вручную, без OL
К сожалению, это не решит проблемы целиком — форматирование все-равно будет испорчено.
Сравним.
Правильный вариант: text1
code1
text1
text2
code2
text2
То, что получается "вручную":
1. text1
code1
text1
2. text1
code1
text1
Очевидным образом, это совсем не то, что хочется видеть И это при том, что в сообщении нужное форматирование поддерживается без проблем.
Не проще нумерованный список заменить секциями (заголовок H5)? А по поводу того, чтобы они автоматически нумеровались давайте пинать автора (см. Автоматическая нумерация заголовоков
R>Не проще нумерованный список заменить секциями (заголовок H5)? А по поводу того, чтобы они автоматически нумеровались давайте пинать автора (см. Автоматическая нумерация заголовоков
Как его можно заменить секциями? Форматирование (отступы) различается.
А вот как раз автоматическая нумерация заголовков мне особо не нужна — если посмотреть статьи на рсдн, это редко где используется (если вообще где-то используется), и нужность такой фичи "в целом" мне лично представляется довольно сомнительной. Тем более, что правильная нумерация — многоуровневая, и сделать ее а-ля ворд довольно сложно, и нужно это в основном для сложных и формальных документов, к коим статьи никоим образом не относятся.
Здравствуйте, Andrew S, Вы писали:
AS> Как его можно заменить секциями? Форматирование (отступы) различается.
И ладно, главное логически показать, что SECTIONs — есть перечисление элементов, которые входят в PART (ну или SUBSECTIONs в SECTION) и нумеруются в порядке следования. Если не рюшечки, а ехать — одно и тоже.
AS>А вот как раз автоматическая нумерация заголовков мне особо не нужна
Предложение было сделать в качестве опциональной функциональности, по умолчанию отключенной.
AS>если посмотреть статьи на рсдн, это редко где используется (если вообще где-то используется)
Используется, неоднократно. И будет активно использоваться, если процесс автоматизировать: как сейчас — неудобно, потому и не пользуются.
AS>и нужность такой фичи "в целом" мне лично представляется довольно сомнительной.
Посмотрите любую серьезную книгу.
Как минимум, как ссылаться из одной главы на другую: "информацию см. в главе "Вот такое вот название главы" или как стандарт ссылок (изображения, таблицы и т.п.) "см. главу 2.1"?
AS>Тем более, что правильная нумерация — многоуровневая, и сделать ее а-ля ворд довольно сложно
Гм... почему сложно-то? Я уже сделал, см. изменения сделанные мною в вашем XSL-преобразовании по той же ссылке: сделал так, чтобы все работало при условии "ничего не ломая". А многоуровневость действительно не нужна, для этого вам придется переделать всю структуру вашего XML-формата. Что при этом делать со старыми статьями, а?
AS>и нужно это в основном для сложных и формальных документов, к коим статьи никоим образом не относятся.
Не согласен. Статьи на этом ресурсе достаточно сложные и формальные документы.
PS Сделайте, плиз, там же работы совсем ничего...
Re[7]: Шаблон для верстки статей RSDN - список с кодом
AS>> Как его можно заменить секциями? Форматирование (отступы) различается. R>И ладно, главное логически показать, что SECTIONs — есть перечисление элементов, которые входят в PART (ну или SUBSECTIONs в SECTION) и нумеруются в порядке следования. Если не рюшечки, а ехать — одно и тоже.
Заголовок и перечисление — _логически_ разные элементы. Период. По остальному — я свое мнение уже изложил, второй раз писАть то же самое смысла не вижу — все-равно решать команде RSDN, нужно им это или нет.
Здравствуйте, rsn81, Вы писали:
R>PS Сделайте, плиз, там же работы совсем ничего...
Блин, принял вас за автора темы.
Как всегда понимаю все по-своему, надо спать больше 4 часов в день, пожалуй.
Function InitRsdnMlAutomation() As Boolean
If rsdnML Is Nothing Then Set rsdnML = CreateObject("RsdnMlAutomation")If rsdnML Is Nothing Then
MsgBox"Не удается создать объекта RsdnMlAutomation. Переустановите 'RSDN Authoring Pack'"
InitRsdnMlAutomation = False
Else
InitRsdnMlAutomation = True
End If
End Function
FDS>Function InitRsdnMlAutomation() As Boolean
FDS> If rsdnML Is Nothing Then Set rsdnML = CreateObject("RsdnMlAutomation")
FDS> If rsdnML Is Nothing Then
FDS> MsgBox"Не удается создать объекта RsdnMlAutomation. Переустановите 'RSDN Authoring Pack'"
FDS> InitRsdnMlAutomation = False
FDS> Else
FDS> InitRsdnMlAutomation = True
FDS> End If
FDS>End Function
FDS>
Скорее всего одно из следующих:
1. Слишком высокий уровень защиты не дающий создать ком-объект. Нужно в настройках понизить уровень безопасности до среднего. Тогда будет даваться предупреждение, но объекты загрузить будет можно. На вопрос нужно ответить положительно.
2. На машине несколько фрэймворков и ворд не может выбрать конкретный. Подобрее смотри здесь
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FDSC, Вы писали:
VD>4. Word 64-битный. Тут только установка 32-битного ворда поможет.
VD>Если ни один варианта не поможет, будем думать дальше.
Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Здравствуйте, SGHouse, Вы писали:
SGH>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, FDSC, Вы писали:
VD>>4. Word 64-битный. Тут только установка 32-битного ворда поможет.
VD>>Если ни один варианта не поможет, будем думать дальше.
SGH>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Сорри, ошибся в названии — authority pack -> Authoring Pack.
Здравствуйте, SGHouse, Вы писали:
SGH>Прошу прощения, а можно доработать authority pack для поддержки 64-битной OS и офиса? Как-то это перебор, ставить параллельно с 64-битным ещё и 32-битный офис только лишь для написания статьи на rsdn. Или поднимать виртуалку с 32-битной системой...
Офторп: Вообще-то МС сам не рекомендует ставить 64-ый офис (прямо в инсталляторе).
Проблема в том, что наше расширение, по идее, не должно зависеть от битности офиса. Оно написано на дотнете и ВБА. Но, почему-то, я уже слышу третий отклик о том, что оно не работает под 64-битным офисом. Причем у меня нет идей как понять, что не так. Там COM. А он не прозрачен до чертиков.
Попытаюсь поставить себе (еще раз) 64-битный офис и пошаманить. Но обещать ничего не могу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, SGHouse, Вы писали:
SGH>Хотя дотнет проекты по натуре кросс-платформенны, но почему-то у меня в Visual Studio 2008 в настройках C#-проекта в разделе "построение" есть такая интересная опция "конечная платформа"... И там можно выбрать "Any CPU", "x32", "x64". Собственно, первый вопросец: у Вас проект собирается под Any CPU?
Ну, я вообще-то и в донтете, и в студии, и ком разбираюсь довольно хорошо. Естественно, сборки Any CPU. Правда, в них есть микроскопический объем платформно-зависимого кода. В нем, конечно, возможна ошибка. Но в любом случае они не должны были бы приводить к тому что сборку нельзя загрузить. Должны были бы быть рантайм-ылеты.
Как, кстати, выглядят проблемы с шаблоном в 64-битном Офисе? Говорит, что не может создать объект?
SGH>Есть несколько типов COM-объектов, один из них — это inproc. По сути это обыкновенная dll'ка.
Я в курсе. Если заглянуть в список моих статей, то можно заметить, что 10 лет назад я плотно занимался КОМ-ом.
SGH>32-разрядную dll-ку можно подгрузить только 32-разрядный процесс, а 64-разрядную — в, соответственно, 64-разрядный. А потому в 64-разрядной OS в том, что относится к регистрации COM-компонентов, есть две, дублирующие друг друга, ветви реестра. Если приложение 32-разрядное, то при вызове COM-библиотеки ему "подставляется" один вариант ветви, а если 64-разрядное — другой. И получается ошибка "не могу создать ActiveX компонент".
Приложение дотнетное. Потому и не понятно, почему не работает. Возможно проблемы с регистрацией. Регистрация делается встроенным студийным инсталлятором (из VS 2008). У сборки просто установлено свойство Register установлено в vsdrpCOM. Что он там делает я не знаю.
SGH>Могу предположить следующее: Ваша dll регистрируется как inproc-сервер в COM-ветви для 32-разрядных приложений. А 64-разрядный MS Word, выполняя макрос и пытаясь создать соответствующий COM-объект, обращается к 64-разрядной COM-ветви реестра.
Возможно.
Как посмотреть HKEY_CLASSES_ROOT для 64-битных комовских сборок?
Здравствуйте, SGHouse, Вы писали:
SGH>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Спасибо за помощь!
В ближайшее время постараюсь описать ситуацию в статье, а потом попробую придумать что-то, чтобы инсталлятор правильно регистрировал КОМ-объекты в реестре. Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
Хотелось бы еще попросить проверить корректность работы самой интеграции в 64-битном окружении (так как она не тестировалась).
Попробуйте сгенерировать ХМЛ (нажать соответствующую кнопку в тулбаре) с ошибками. При этом должно появиться окно со списком ошибок. Далее попробуйте изменить размеры этого окна. Дело в том, что там используется хак. Окна форм в ворде не ресайзятся. Я использовал SetWindowLong(hwnd, GWL_STYLE, L2 :> IntPtr); для того чтобы можно было изменять их размеры. Причем код там не тривиальный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, SGHouse, Вы писали:
SGH>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Боюсь, что придется переходить с инсталлятор встроенного в студию на Wix.
.\snippets\WordToRsdnMlConverter\Setup\Setup.vdproj — это оно? Я со встроенным в студию деплоем не работал, но, на первый взгляд, перетащить это на Wix — не проблема, давай сделаю (с учетом этого обсуждения по поводу реестра)?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, SGHouse, Вы писали:
SGH>>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
VD>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
В каком формате? Наверное, regedit.exe? Экспорт в аттаче. Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Здравствуйте, SGHouse, Вы писали:
SGH>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, SGHouse, Вы писали:
SGH>>>Проблема в регистрации. Подробно про маппинг ветвей реестра я нашёл здесь. В деталях ситуация следующая. Я поставил AuthoringPack "just for me", и он зарегистрировал свой ProgId в ветви HKCU\Software\Classes\RsdnMlAutomation. CLSID {xxx}, указанный там, ссылается на HKCU\Software\Classes\Wow6432Node\CLSID\{xxx}, что объясняется информацией, приведённой по ссылке выше. Получается, что 32-битное приложение, обращаясь к HKCU\Software\Classes\CLSID\{xxx} в реальности обращается в ...\Wow6432Node\... (маппинг делается OS) и получает весь блок информации этого CLSID'а. А 64-битное приложение обращается к реальной ветви HKCU\Software\Classes\CLSID\, а там CLSID'а {xxx} нет. В итоге, просто скопировав этот ключ из HKCU\Software\Classes\Wow6432Node\CLSID\ в HKCU\Software\Classes\CLSID\ я получил нормально работающий AuthoringPack.
VD>>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
SGH>В каком формате? Наверное, regedit.exe? Экспорт в аттаче. Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Если аттач не прикрепился, вот, на всякий случай, содержимое. Благо, оно небольшое.
Здравствуйте, SGHouse, Вы писали:
VD>>Кстати, сделайте, пожалуйста, экспорт этой (этих) веток в формате regex.exe. Чтобы другие могли им воспользоваться пока не решим проблем с инсталлятором.
SGH>В каком формате? Наверное, regedit.exe? Экспорт в аттаче.
В каком еще атаче? Это же форум.
SGH>Однако нужно помнить, это пути там к установке получаются жёстко прописанными. Кто ставит в другую директорию, работать не будет. Кроме того деинсталляции для этого "хака" нет.
Это, я думаю, должно быть понятно тем кто захочет использовать этот скрипт.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.