рдпрд╣ рд▓реЗрдЦ "
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
рдЬрд╣рд╛рдВ:
- emcc - gcc рдпрд╛ clang рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдКрдкрд░ рджреЗрдЦреЗрдВ);
- -O2 рдЕрдиреБрдХреВрд▓рди рдзреНрд╡рдЬ рд╣реИред LLVM рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрддрд░ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ (рдЙрдиреНрдирдд рдореЛрдб рдореЗрдВ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ;
- рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ
- -o рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк xmllint.test.js рдлрд╝рд╛рдЗрд▓ рд╣реИред рдкреНрд░рддреНрдпрдп "рдЬреЗрдПрд╕" рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ;
- --embed-file - emcc рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдорд╛рдирдХ stdio рдХреЙрд▓ (fopen, fread, рдЖрджрд┐) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдВред рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред
рднрд╛рдЧ 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';
};
рдЗрд╕ рд▓рд┐рдкрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рдореЙрдбреНрдпреВрд▓ - рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдЕрдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
- рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓.рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рдореЙрдбреНрдпреВрд▓ ['рдирд╛рдо']ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреНрд▓реЛрдЬрд░ рдирд╛рдо рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
- рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ Module.preRun рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ, рдЬреЛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред PreRun рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо API ( Emscripten FileSystem API ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ (test.xml рдФрд░ test.xsd) рдХреЗ рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЙрдбреНрдпреВрд▓ ['xml'] рдФрд░ рдореЙрдбреНрдпреВрд▓ [these xsd]] рдкрд░ рд╕реЗрдЯ рд╣реИред рдЗрди рдЪрд░реЛрдВ рдореЗрдВ XML рдФрд░ XML рд╕реНрдХреАрдорд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ intArrayFromString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рддрд░реНрдХ - рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╕реВрдЪреА рдХреЗ рдмрд░рд╛рдмрд░ред рддрд░реНрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдереЗред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ test.xml рдФрд░ test.xsd рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред
- рдЬрдм рдХреЛрдб stdio рд╕реЗ рдХрд┐рд╕реА рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ Module.print рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдмрдлрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓реЗрдВ 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 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред