crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Алгоритм адаптации Qt документации...
ViGOur
  опции профиля:
сообщение 20.12.2007, 14:32
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Возьмем к примеру класс QString, по идее основная масса исправлений приходится на описание функций.

Возникает вопрос, какой алгоритм однозначно без ошибок поменяет английское описание на русское, когда есть и то и то, но русское немного устаревшее, вроде того, что меньше функций. Или добавлено совсем чуть-чуть дополнительного текста.

Разметка примерно такая:
Английский вариант
<h3 class="fn"><a name="QString"></a>QString::QString ()</h3>
<p>Constructs a null string. Null strings are also empty.</p>
<p>See also <a href="qstring.php#isEmpty">isEmpty</a>().</p>

<h3 class="fn"><a name="QString-2"></a>QString::QString ( const <a href="qchar.php">QChar</a> * <i>unicode</i>, int <i>size</i> )</h3>
<p>Constructs a string initialized with the first <i>size</i> characters of the <a href="qchar.php">QChar</a> array <i>unicode</i>.</p>
<p><a href="qstring.php">QString</a> makes a deep copy of the string data.</p>

<h3 class="fn"><a name="QString-3"></a>QString::QString ( <a href="qchar.php">QChar</a> <i>ch</i> )</h3>
<p>Constructs a string of size 1 containing the character <i>ch</i>.</p>


Русский вариант:
<h3 class="fn"><a name="QString"></a>QString::QString ()</h3>
<p>Создает нулевую строку. Нулевая строка всегда пустая.</p>
<p>См. также <a href="qstring.php#isEmpty">isEmpty</a>().</p>

<h3 class="fn"><a name="QString-2"></a>QString::QString ( const <a href="qchar.php">QChar</a> * <i>unicode</i>, int <i>size</i> )</h3>
<p>Создает строку инициализированную первыми <i>size</i> символов массива <a href="qchar.php">QChar</a> <i>unicode</i>.</p>
<p><a href="qstring.html">QString</a> производит глубокое копирование информации строки.</p>

<h3 class="fn"><a name="QString-3"></a>QString::QString ( <a href="qchar.php">QChar</a> <i>ch</i> )</h3>
<p>Создает строку длиной 1 содержащую символ <i>ch</i>.</p>


Сообщение отредактировал ViGOur - 20.12.2007, 14:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Tonal
  опции профиля:
сообщение 4.1.2008, 23:54
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Не надо регекспы. Там все файлы в формате xhtml - нормально парсяться любым xml парсером.
Все описания функции/свойства находяться на одном уровне.
Всегда начинаются с тага <h3 class="fn">
его первый ребёнок - пустой якорь, например <a name="checkable-prop"></a>
Дальше идём по братьям до следующего подобного <h3 class="fn">, или до пустого <p />, за которым сразу <address>.

Вот код на python для выдёргивания:
from BeautifulSoup import BeautifulStoneSoup, Tag

def get_soup(f_name):
  content = file(f_name).read().replace(
    '<?xml version="1.0" encoding="iso-8859-1"?>',
    '<?xml version="1.0" encoding="windows-1251"?>', 1)
  return BeautifulStoneSoup(content)
            
def get_all_func(soup):
  def is_func(tag):
    return (
      isinstance(tag, Tag) and tag.name == 'h3' and
      dict(tag.attrs).get('class') == 'fn')

  def is_stop(tag):
    if not (isinstance(tag, Tag) and tag.name == 'p'):
      return False
    child = tag.contents[0]
    return isinstance(child, Tag) and child.name == 'address'

  funcs = []
  for tag in soup.findAll('h3', **{'class': 'fn'}):
    tags = [tag]
    funcs.append((tag.a['name'], tags))
    tag = tag.nextSibling
    while tag and not (is_func(tag) or is_stop(tag)):
      tags.append(tag)
      tag = tag.nextSibling
  return funcs

def test()
  funcs = get_all_func(get_soup(r'4.1.0\qabstractbutton.html'))
  for func in funcs:
    print '@', func[0]
    for dscr in func[1]:
      print dscr

test()

Собственно, осталось нарисовать алгоритм слияния - он тоже довольно прост...

Но есть одно маленькое но:
Что, если в новой версии поменялось описание функции, или, например её аргументы?
Тогда, при пакетной конвертации оно неглядя замениться старым вариантом, что не есть хорошо.

Напрашивается полуавтоматный конвертор, который бы давал возможность просматривать описания перев их заменой и даже править по ходу.

Мне кажется, вполне можне нарисовать на основе приведённого алгоритма
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


14 чел. читают эту тему (гостей: 14, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.12.2024, 8:11