рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реА / рд╕реА ++ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреЛрд░реНрдЯрд┐рдВрдЧ (xml.js)

рдпрд╣ рд▓реЗрдЦ " HOWTO: рдкреЛрд░реНрдЯ рдП C / C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯреВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (xml.js) " (рд▓реЗрдЦрдХ: azakai ) рд▓реЗрдЦ рдХрд╛ рдЕрджреНрдпрддрди рдЕрдиреБрд╡рд╛рдж рд╣реИред рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рд╕реА / рд╕реА ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ lzma.js рдФрд░ sql.js. рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ, рд╡рд╣ libxml рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C / C ++ рдХреЛрдб рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ XML рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкреВрд░рд╛ рдХреНрд░рдо рд╣реИ рдЬреЛ Ubuntu 12.04 рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ libxml рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдереЗред рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдИрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред

рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ Emscripten рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


Emscripten рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ LLVM рдмрд╛рдЗрдЯрдХреЛрдб рд╕реЗ рдПрдХ рд╕рдВрдХрд▓рдХ рд╣реИред C / C ++ рдХреЛрдб рдХреЛ рдХреНрд▓реЗрдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LLVM рдмрд╛рдпрдЯреЗрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рдХрдВрдкрд╛рдЗрд▓рд░ рднреА рд╣реИрдВред рдмрд╛рдЗрдЯрдХреЛрдб-рдЖрдзрд╛рд░рд┐рдд рдИрд╕реНрдореИрдкреНрдЯреЗрди рдЙрдкрдпреБрдХреНрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ред рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбреВрдо рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ред

Emscripten рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: emconfigure - рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ ред/configure; emmake - рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд░рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛; emcc - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ LLVM рд╕рдВрдХрд▓рдХ;

рддреЛ, рдЖрдЗрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░реЗрдВред

Clang + llvm рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (> = 3.0):
wget llvm.org/releases/3.0/clang+llvm-3.0-i386-linux-Ubuntu-11_10.tar.gz
рдЯреЗрд░ xfv рдХреНрд▓реИрдВрдЧ + llvm-3.0-i386-linux-Ubuntu-11_10.tar.gz

рдиреЛрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред (> = 0.5.5):
sudo apt-get install рдиреЛрдбрдЬ

Emscripten рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЙрддрд╛рд░реЗрдВ:
git рдХреНрд▓реЛрди рдХреНрд▓реЛрди git: //github.com/kripken/emscripten.git
рд╕реАрдбреА emscripten

рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ:
../clang+llvm-3.0-i386-linux-Ubuntu-11_10/bin/clang рдкрд░реАрдХреНрд╖рдг / hello_world.cpp
./a.out
>> рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!

рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ:
рдиреЛрдб рдкрд░реАрдХреНрд╖рдг / hello_world.js
>> рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ ' ~ / .emscripten ' рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рд░ emcc рдЪрд▓рд╛рдПрдБ:
./emcc

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдХреНрд▓реИрдВрдЧ + llvm рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рд╕рд╛рде рд╣реА рдИрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
EMSCRIPTEN_ROOT = os.path.expanduser (' ~ / path / emscripten ') # рдпрд╣ emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ
LLVM_ROOT = os.path.expanduser (' ~ / path / clang + llvm-3.0-i386-linux-Ubuntu-11_10 / bin ')

рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ emcc рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ ' emcc: no input files ' рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛:
./emcc
>> emcc: рдХреЛрдИ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ

рдЕрдм рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ emcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ hello_wolrd.cpp рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
./emcc рдкрд░реАрдХреНрд╖рдг / hello_world.cpp
рдиреЛрдб a.out.js
>> рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛

рднрд╛рдЧ 1: рд╕рдВрдХрд▓рди рд╕реА / рд╕реА ++ рд╕реНрд░реЛрдд


рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рд╣реИред

рд╣рдо рднрдВрдбрд╛рд░ рдФрд░ рд╕рдВрдХрд▓рди рд╕реЗ libxml рдЙрддрд╛рд░ рджреЗрддреЗ рд╣реИрдВ:
git рдХреНрд▓реЛрди рдХреНрд▓реЛрди git: //git.gnome.org/libxml2
рд╕реАрдбреА libxml2
git рдЪреЗрдХрдЖрдЙрдЯ v2.7.8
CC = ~ / path / clang + llvm-3.0-i386-linux-Ubuntu-11_10 / / clang ./autogen.sh --without-debug --without-ftp --without-http --without-python - рдмрд┐рдирд╛-рд░реЗрдЧреЗрдХреНрд╕рдкреНрд╕ - рд╡рд┐рдердЖрдЙрдЯ-рдереНрд░реЗрдбреНрд╕ - рд╡рд┐рдердЖрдЙрдЯ-рдореЙрдбреНрдпреВрд▓
рдореЗрдХрдЕрдк

Libxml рдореЗрдВ xml рд╕реНрдХреАрдорд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xmllint рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдореВрд▓ рдФрд░ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред Xmllint рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
$ред / xmllint --noout --schema test.xsd test.xml
>> test.xml рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ test.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ xmllint рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рднрд╛рдЧ 2: рд╡рд┐рдиреНрдпрд╛рд╕


рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
~ / рдкрд╛рде / рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди / рдЗрдордХреЙрдиреНрдлрд╝рд┐рдЧрд░ ./autogen.sh --without-debug --without-ftp --without-http --without-python --without-regexps -without-threads --without-рдореЙрдбреНрдпреВрд▓

emconfigure рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ ./configure gcc рдпрд╛ рдХреНрд▓реИрдВрдЧ рдХреЗ рдмрдЬрд╛рдп emcc рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ (рдЬреЛ рдореВрд▓ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ) рд╕рд╣рд┐рдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рдгрд╛рдо (рдЭрдВрдбреЗ рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдХрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP рдФрд░ FTP рд╕рдорд░реНрдердиред рд╣рдо рдХреЗрд╡рд▓ xml- рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреЛрдб рдЖрдХрд╛рд░ рдореЗрдВ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдПрдбрд┐рдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╡реЗ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛ рдиреНрдпреВрд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдЧреНрд▓рд┐рдмрдХ рдХреА рдирд╣реАрдВ)ред

рднрд╛рдЧ 3: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
~ / рдкрде / рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди / рдПрдореНрдореЗрдХ рдореЗрдХ

Emmake emconfigure рдХреЗ рд╕рдорд╛рди рд╣реИ: рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рднреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдИрдореЗрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рджреЗрд╢реА рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рд╣реИ (рдЗрд╕реЗ рдмреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рднрд╛рдЧ 4: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рдирд╛


xmllint xmllint.o рдФрд░ libxml2.a рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рд▓рд┐рдВрдХрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ (рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдорд╕реАрд╕реА рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП libxml2.a рд╕реНрдерд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓рд┐рдмрд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ (рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдереЛрдбрд╝рд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрджрд┐ рдЖрдк libz.a рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрдЧреА рдЬрдм рдЖрдк gzopen рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ libz.a рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╕реАрдбреА ~ / рдкрде
wget zlib.net/zlib-1.2.7.tar.gz
tar xfv zlib-1.2.7.tar.gz
рд╕реАрдбреА рдЬрд╝реНрд▓рд┐рдм-1.2.7
~ / рдкрде / emscripten / emconfigure ./configure --static
~ / рдкрде / рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди / рдПрдореНрдореЗрдХ рдореЗрдХ

рдЕрдм рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕реАрдбреА ~ / рдкрде / libxml2
~ / path / emscripten / emcc -O2 xmllint.o .libs / libxml2.a ../zlib-1.2.7/libz.a -o xmllint.test.js-embed-file test.xml --embed-file test.xsd

рдЬрд╣рд╛рдВ:


рднрд╛рдЧ 5: рдкрд░реАрдХреНрд╖рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ


рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП Node.js, SpiderMonkey рдпрд╛ V8 рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдиреЛрдб xmllint.test.js --noout --schema test.xsd test.xml
>> test.xml рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ

рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдк xml рд╕реНрдХреАрдорд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ, рддреЛ xmllint рдХреЛ рдЙрдирдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдорд╣рддреНрд╡рдкреВрд░реНрдг : рджреЗрд╢реА рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд░реНрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рднрд╛рдЧ 6: рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ


рдлрд┐рд▓рд╣рд╛рд▓, рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рд╕реА рднреА XML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдкрд╣рд▓реА рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде emcc --pre-js рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрд╣ рдЙрддреНрдкрдиреНрди рдХреЛрдб (рдХреНрд░рдорд╢рдГ, рдмрд╛рдж рдХреЗ рдмрд╛рдж) рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА --pre-js рдХреЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕рд╣реА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреНрдпрд╛рдЧ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ --pre-js рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
  рдореЙрдбреНрдпреВрд▓ ['рдкреВрд░реНрд╡'] = рдлрд╝рдВрдХреНрд╢рди () {
     FS.createDataFile (
       '/'
       'Test.xml',
       рдореЙрдбреНрдпреВрд▓ ['intArrayFromString'] (рдореЙрдбреНрдпреВрд▓ ['xml'])
       рд╕рдЪ рд╣реИ,
       true);
     FS.createDataFile (
       '/'
       'Test.xsd',
       рдореЙрдбреНрдпреВрд▓ ['intArrayFromString'] (рдореЙрдбреНрдпреВрд▓ ['рд╕реНрдХреАрдорд╛'])
       рд╕рдЪ рд╣реИ,
       true);
   };
   рдореЙрдбреНрдпреВрд▓ ['рддрд░реНрдХ'] = ['- noout', '--schema', 'test.xsd', 'test.xml'];
   рдореЙрдбреНрдпреВрд▓ ['рд╡рд╛рдкрд╕реА'] = '';
   рдореЙрдбреНрдпреВрд▓ ['рдкреНрд░рд┐рдВрдЯ'] = рдлрд╝рдВрдХреНрд╢рди (рдкрд╛рда) {
     рдореЙрдбреНрдпреВрд▓ ['рд╡рд╛рдкрд╕реА'] + = рдкрд╛рда + '\ n';
   }; 

рдЗрд╕ рд▓рд┐рдкрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓реЗрдВ test.xml рдФрд░ test.xsd рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА, рдФрд░ рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдо рдмрдлрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:
~ / рдкрд╛рде / рдИрдорд╕реНрдХреНрд░рд┐рдкреНрдЯреАрди / рдИрдореЗрдХ -O2 xmllint.o .libs / libxml2.a ../zlib-1.2.7/libz.a -o xmllint.raw.js-pre-js pre.js

рд╕рдВрдХрд▓рди рдХрдорд╛рдВрдб рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, pre.js. рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --pre-js рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, xmllint.raw.js рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рдЫреЛрдЯрд╛ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯреЗрдВ:
  рдлрд╝рдВрдХреНрд╢рди рд╡реИрд▓рд┐рдбреЗрдЯрдПрдХреНрд╕рдПрдордПрд▓ (xml, рд╕реНрдХреАрдорд╛) {
     var рдореЙрдбреНрдпреВрд▓ = {
       xml: xml,
       рд╕реНрдХреАрдорд╛: рд╕реНрдХреАрдорд╛
     };
     {{{GENERATED_CODE}}}
     рд╡рд╛рдкрд╕реА рдореЙрдбреНрдпреВрд▓ред
   } 

GENERATED_CODE рдХреЛ рд╕рдВрдХрд▓рди рдкрд░рд┐рдгрд╛рдо (xmllint.raw.js) рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрд▓рд┐рдбреЗрдЯрдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рдВрдХреНрд╢рди xml рдФрд░ рд╕реНрдХреАрдорд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ test.xml рдФрд░ test.xsd рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╣реЛред рдЙрддреНрдкрдиреНрди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рд╕рддреНрдпрд╛рдкрди рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред

рд╡рд╣ рд╕рдм рд╣реИ! xml.js рдХрд╛ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдмрд╕ js рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ xml рдФрд░ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде validateXML рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

Source: https://habr.com/ru/post/In143583/


All Articles