Skip to content

gdamjan/convertor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Опис на проблемот

Во годините кога компјутерите генерално не знаеле да работат со кирилица, IT секторот во Македонија проблемот го решиле со креирање на специјални фонтови во кои латичните букви биле цртани со соодветните кирилични знаци. Така на пример R било Р, V било В, Y било Ѕ, Q било Љ и така натаму. Бидејќи латиницата има помалку букви од кирилицата, некои додатни букви биле ставени на други знаци: { било Ш, } било Ѓ, итн.

Самата содржина, што се однесувало до компјутерите, била на латиница, но таквиот документ прикажан или испечатен со соодветниот фонт изгледал како напишан на кирилица.

Но ова квази-решение создава многу други проблеми со обработка на податоците. Неколку примери, програмите за обработка на текст го третирале сврзникот „и“ како латично „i“, па автоматски го менувале во големо I (според англискиот правопис). Понатаму, програмите не ги третираат Ш (т.е. {) и сличните како букви, туку како знаци, па не функционира автоматската поделба на зборовите на крајот од реченицата.

Суштината на овие проблеми е дека информацијата за содржината дека е напишана со кирилица се губи во моментот кога информацијата за фонтот е недостапна.

Секоја автоматска обработка или индексирање и пребарување на текстот драстично се усложнува.

Потребата за ова квази-решение е одамна надмината со појавата на оперативните системи кои имаат подршка за Unicode и со употребата на Unicode (UTF-8) во сите нови стандарди за формати на документи, и во програмите за складирање и обработка на податоци. Но, за жал и до ден денес сеуште ќе најдеме документи пишувани во вакви специфични (таканаречени YUSCII) фонтови, а и сеуште се пишуваат.

Со помош на овој програм можеме да ги конвертираме документите напишани со фонтови, во документи со правилна Unicode кирилица.

Анализа на ODF документ

Една ODF датотека е всушност zip архива во која се наоѓаат неколку посебни датотеки, меѓу кои: самата содржина на документот (content.xml); сликите и други слични прилози; и датотеки со мета-информации за самиот документ.

Логиката на програмот е:

  • прво, да ги најде сите дефинирани стилови во документот кои користат некој од проблематичните фонтови, и да ги смени стиловите да користат нормален фонт (според зададена релација);
  • второ, да ја најде содржината која ги користи овие стилови и да ја конвертира содржината од yuscii во utf-8.

Главни од интерес на програмов се styles.xml и content.xml, бидејќи и двете датотеки можат да содржат стилови за содржината. Стилови можат да наследуваат карактеристики од други стилови, па и тоа треба да се има предвид.

Структурата на content.xml упростено изгледа вака:

  <document-content>
    <automatic-styles>
      <style name="P1">
         <text-properties font-name="MAC C Swiss">
      ...
      <style name="P2" parent-name="P1">
    </automatic-styles>
    <body>
     <text>
       <p style-name="P1">jas sum glupa kirilica</p>
       <p>јас сум ок кирилица <span "P1>glupa<span></p>
       ...
     </text>
    </body>
  </document-content>

[http://en.wikipedia.org/wiki/OpenDocument_technical_specification]

Quick analysis code

pretty_print = lambda el: lxml.etree.tostring(el, pretty_print=True)
find = lxml.etree.XPath("//b")
tree = lxml.etree.parse(io.BytesIO(xml))
root = tree.getroot()
nsmap = root.nsmap
tree.xpath('.//style:font-face', namespaces=nsmap)
tree.xpath('.//style:text-properties', namespaces=nsmap)

Some XPaths:

  • //style:style[style:text-properties[@style:font-name|@style:font-name-complex]]
  • /office:document-content/office:body/office:text

Инсталација

uv sync
uv run convertor

Резултатот би требало да биде нешто како:

usage: convertor [-h] FILE [FILE ...]

Convert Open Document Format (ODF) files from YUSCII to UTF-8. For each file `FILE.odt' it will create a converted `FILE-NEW.odt' in
the same directory.

positional arguments:
  FILE        file(s) to convert

options:
  -h, --help  show this help message and exit

Docker / podman

podman build . -t convertor
podman run --rm -it -p 8000:8000 convertor

(замени podman со docker, ако само тоа имаш)

About

Intelligent yuscii to unicode convertor for ODT files

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages