This commit is contained in:
Kulikova Svetlana
2020-08-12 18:36:47 +03:00
parent 8560152cd4
commit b1f6bfa36d
2 changed files with 562 additions and 237 deletions

View File

@ -5,85 +5,262 @@
<meta name="calibre:cover" content="true"/> <meta name="calibre:cover" content="true"/>
<title>Cover</title> <title>Cover</title>
<style type="text/css" title="override_css"> <style type="text/css" title="override_css">
@page {padding: 0pt; margin:0pt} @page {padding: 0pt; margin:0pt}
body { text-align: left; padding:0pt; margin: 0pt; } body { text-align: left; padding:0pt; margin: 0pt; }
table { border: 1px solid black; }
th, td { border: 1px solid black; }
</style> </style>
</head> </head>
<body><h1>метоксихлор<wbr/>диэтиламино<wbr/>метил<wbr/>бутил<wbr/>амино<wbr/>акридин</h1><h1>How to Fish</h1> <body>
<section> <table>
<h2>Introduction</h2> <tr>
<p>People have been catching fish for food since before recorded history…</p> <th rowspan="2">Name</th>
</section> <th rowspan="2">ID</th>
<th colspan="2">Membership Dates</th>
<th rowspan="2">Balance</th>
</tr>
<tr>
<th>Joined</th>
<th>Canceled</th>
</tr>
<tr>
<th>Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>n/a</td>
<td>0.00</td>
</tr>
<tr>
<th>Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01013">January 13, 2011</time></td>
<td><time datetime="2017-04008">April 8, 2017</time></td>
<td>37.00</td>
</tr>
<tr>
<th>Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>n/a</td>
<td>15.00</td>
</tr>
</table>
<table>
<caption>Color names and values</caption>
<tbody>
<tr>
<th scope="col">Name</th>
<th scope="col">HEX</th>
<th scope="col">HSLa</th>
<th scope="col">RGBa</th>
</tr>
<tr>
<th scope="row">Teal</th>
<td><code>#51F6F6</code></td>
<td><code>hsla(180, 90%, 64%, 1)</code></td>
<td><code>rgba(81, 246, 246, 1)</code></td>
</tr>
<tr>
<th scope="row">Goldenrod</th>
<td><code>#F6BC57</code></td>
<td><code>hsla(38, 90%, 65%, 1)</code></td>
<td><code>rgba(246, 188, 87, 1)</code></td>
</tr>
</tbody>
</table>
<p>Simple table with header</p>
<table>
<tr>
<th>First name</th>
<th>Last name</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
<tr>
<td>Jane</td>
<td>Doe</td>
</tr>
</table>
<section> <p>Table with thead, tfoot, and tbody</p>
<h2>Equipment</h2> <table>
<p>The first thing youll need is a fishing rod or pole that you find comfortable and is strong enough for the kind of fish youre expecting to land…</p> <tfoot>
</section>хай<ruby> <tr>
<rp>(</rp><rt>Kan</rt><rp>)</rp> <td>Footer content 1</td>
<rp>(</rp><rt>ji</rt><rp>)</rp> <td>Footer content 2</td>
</ruby>хай<progress id="file" max="100" value="70"> 70% </progress><progress id="file" max="100" value="70"> 70% </progress> </tr>
<pre> </tfoot>
- ----- <thead>
----- |----- <tr>
||----| ----|| <th>Header content 1</th>
||----- -----|| <th>Header content 2</th>
||-----| |-----|| </tr>
|| ----- ------|| </thead>
||- ----| |------|| <tbody>
||---||-- -------|| <tr>
||--|| --| |-------|| <td>Body content 1</td>
|| -|| |-- --- - --|| <td>Body content 2</td>
|| -|| --|-|--| - ---| </tr>
|---|| |-----| |-----| </tbody>
|---|| |---- |-----| </table>
|----| --- |-----|
|----- ------|
</pre><ol>
<li>Mix flour, baking powder, sugar, and salt.<ol>
<li>Fee</li>
<li>Fi</li>
<li>Fo</li>
<li>Fum</li>
</ol></li>
<li>In another bowl, mix eggs, milk, and oil.</li>
<li>Stir both mixtures together.<ul>
<li>Blue cheese</li>
<li>Feta</li>
</ul></li>
<li>Fill muffin tray 3/4 full.</li>
<li>Bake for 20 minutes.</li>
</ol><nav><a href="1.html">Чебурашка</a> | <a href="2.html">Гена</a> |
<a href="3.html">Шапокляк</a> | <a href="4.html">Лариска</a></nav><nav><a href="1.html">Чебурашка</a> | <a href="2.html">Гена</a> |
<a href="3.html">Шапокляк</a> | <a href="4.html">Лариска</a></nav>
<option value="value1">Значение 1</option><option value="value1">Значение 1</option><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label><input type="radio" id="mothman" name="monster"/><label for="kraken">Kraken</label>надо<hr/>надо<hr/>надо<hr/>надо<h1>Beetles</h1>надо
<h2>External morphology</h2>надо
<h3>Head</h3>надо
<h4>Mouthparts</h4>надо
<h3>Thorax</h3>надо
<h4>Prothorax</h4>надо
<h4>Pterothorax</h4>надо<fieldset><legend>Choose your favorite monster</legend>
<input type="radio" id="kraken" name="monster"/> <p>Table with colgroup</p>
<label for="kraken">Kraken</label><br/> <table>
<colgroup span="4"></colgroup>
<tr>
<th>Countries</th>
<th>Capitals</th>
<th>Population</th>
<th>Language</th>
</tr>
<tr>
<td>USA</td>
<td>Washington, D.C.</td>
<td>309 million</td>
<td>English</td>
</tr>
<tr>
<td>Sweden</td>
<td>Stockholm</td>
<td>9 million</td>
<td>Swedish</td>
</tr>
</table>
<input type="radio" id="sasquatch" name="monster"/> <p>Table with colgroup and col</p>
<label for="sasquatch">Sasquatch</label><br/> <table>
<colgroup>
<col style="background-color: #0f0"/>
<col span="2"/>
</colgroup>
<tr>
<th>Lime</th>
<th>Lemon</th>
<th>Orange</th>
</tr>
<tr>
<td>Green</td>
<td>Yellow</td>
<td>Orange</td>
</tr>
</table>
<input type="radio" id="mothman" name="monster"/> <p>Simple table with caption</p>
<label for="mothman">Mothman</label> <table>
</fieldset>контентом <em>уровня блока</em> теперь новый<dl>новый <caption>Awesome caption</caption>
<dt>Beast of Bodmin</dt>новый <tr>
<dd>A large feline inhabiting Bodmin Moor.</dd> <td>Awesome data</td>
новый </tr>
<dt>Morgawr</dt>новый </table>
<dd>A sea serpent.</dd> <h1>метоксихлор<wbr/>диэтиламино<wbr/>метил<wbr/>бутил<wbr/>амино<wbr/>акридин</h1>
новый <h1>How to Fish</h1>
<dt>Owlman</dt>новый <section>
<dd>A giant owl-like creature.</dd>новый <h2>Introduction</h2>
</dl>Каждый див<div>новый</div><div>новый</div><div>новый</div> <p>People have been catching fish for food since before recorded history…</p>
A <dfn id="def-validator">validator</dfn> is дел не новый <del>nothing</del><option value="value1">Значение 1</option>дата <data>новый?</data>код <code>push()</code> ците не новый <cite>та </cite> блэкут <blockquote>новый</blockquote>детали новые? <details><summary>Details</summary>Something small enough to escape casual notice.</details>батон <button>конечно новый</button><button>это не так!</button>бдай <bdi>тоже</bdi> бдо <bdo>не новый</bdo> Жирный <b>не новый</b> Эсайд <aside>новый</aside>Артикл <article>Новый абзац</article>Адрес <address>Новый абзац</address>Ссылка <a href="https://developer.mozilla.org/ru/">Ссылка не новый абзац</a> Всё, что находится в боди - это один абзац. И лишь <em>некоторые</em> <p>тэги</p> Этот абзац разбивают <br/>Что происходит <em>в этом потоке</em> А если я использую p, то будет новый абзац.. <p>Абзац1</p> И здесь новый.. <em>Какой в этом смысл</em> </section>
<div><em>К Дун Дару они подкрались,</em> <p>Абзац1 <em>Где юна ведьмачка скрывалась.</em> </p> Абзац2 <em>Ночью как траур черной</em> <p>Абзац3 наверное</p></div> <section>
<div>Див ничего не делает</div><div>ХА, а вот и нет!</div><div>Каждый див - это новый абзац</div> <h2>Equipment</h2>
<p>The first thing youll need is a fishing rod or pole that you find comfortable and is strong enough for the kind of fish youre expecting to land…</p>
</section>хай<ruby>
<rp>(</rp>
<rt>Kan</rt>
<rp>)</rp>
<rp>(</rp>
<rt>ji</rt>
<rp>)</rp>
</ruby>хай<progress id="file" max="100" value="70"> 70% </progress>
<progress id="file" max="100" value="70"> 70% </progress>
<pre>
- -----
----- |-----
||----| ----||
||----- -----||
||-----| |-----||
|| ----- ------||
||- ----| |------||
||---||-- -------||
||--|| --| |-------||
|| -|| |-- --- - --||
|| -|| --|-|--| - ---|
|---|| |-----| |-----|
|---|| |---- |-----|
|----| --- |-----|
|----- ------|
</pre>
<ol>
<li>Mix flour, baking powder, sugar, and salt.<ol>
<li>Fee</li>
<li>Fi</li>
<li>Fo</li>
<li>Fum</li>
</ol>
</li>
<li>In another bowl, mix eggs, milk, and oil.</li>
<li>Stir both mixtures together.<ul>
<li>Blue cheese</li>
<li>Feta</li>
</ul>
</li>
<li>Fill muffin tray 3/4 full.</li>
<li>Bake for 20 minutes.</li>
</ol>
<nav>
<a href="1.html">Чебурашка</a> | <a href="2.html">Гена</a> |
<a href="3.html">Шапокляк</a> | <a href="4.html">Лариска</a>
</nav>
<nav>
<a href="1.html">Чебурашка</a> | <a href="2.html">Гена</a> |
<a href="3.html">Шапокляк</a> | <a href="4.html">Лариска</a>
</nav>
<option value="value1">Значение 1</option>
<option value="value1">Значение 1</option>
<input type="radio" id="mothman" name="monster"/>
<label for="kraken">Kraken</label>
<input type="radio" id="mothman" name="monster"/>
<label for="kraken">Kraken</label>надо<hr/>надо<hr/>надо<hr/>надо<h1>Beetles</h1>надо
<h2>External morphology</h2>надо
<h3>Head</h3>надо
<h4>Mouthparts</h4>надо
<h3>Thorax</h3>надо
<h4>Prothorax</h4>надо
<h4>Pterothorax</h4>надо<fieldset>
<legend>Choose your favorite monster</legend>
<input type="radio" id="kraken" name="monster"/>
<label for="kraken">Kraken</label>
<br/>
<input type="radio" id="sasquatch" name="monster"/>
<label for="sasquatch">Sasquatch</label>
<br/>
<input type="radio" id="mothman" name="monster"/>
<label for="mothman">Mothman</label>
</fieldset>контентом <em>уровня блока</em> теперь новый<dl>новый
<dt>Beast of Bodmin</dt>новый
<dd>A large feline inhabiting Bodmin Moor.</dd>
новый
<dt>Morgawr</dt>новый
<dd>A sea serpent.</dd>
новый
<dt>Owlman</dt>новый
<dd>A giant owl-like creature.</dd>новый
</dl>Каждый див<div>новый</div>
<div>новый</div>
<div>новый</div>
A <dfn id="def-validator">validator</dfn> is дел не новый <del>nothing</del>
<option value="value1">Значение 1</option>дата <data>новый?</data>код <code>push()</code> ците не новый <cite>та </cite> блэкут <blockquote>новый</blockquote>детали новые? <details>
<summary>Details</summary>Something small enough to escape casual notice.</details>батон <button>конечно новый</button>
<button>это не так!</button>бдай <bdi>тоже</bdi> бдо <bdo>не новый</bdo> Жирный <b>не новый</b> Эсайд <aside>новый</aside>Артикл <article>Новый абзац</article>Адрес <address>Новый абзац</address>Ссылка <a href="https://developer.mozilla.org/ru/">Ссылка не новый абзац</a> Всё, что находится в боди - это один абзац. И лишь <em>некоторые</em>
<p>тэги</p> Этот абзац разбивают <br/>Что происходит <em>в этом потоке</em> А если я использую p, то будет новый абзац.. <p>Абзац1</p> И здесь новый.. <em>Какой в этом смысл</em>
<div>
<em>К Дун Дару они подкрались,</em>
<p>Абзац1 <em>Где юна ведьмачка скрывалась.</em>
</p> Абзац2 <em>Ночью как траур черной</em>
<p>Абзац3 наверное</p>
</div>
<div>Див ничего не делает</div>
<div>ХА, а вот и нет!</div>
<div>Каждый див - это новый абзац</div>
<div>Это безсмысленный контейнер</div> <div>Это безсмысленный контейнер</div>
<div> <div>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
@ -92,41 +269,63 @@
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j <img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j
vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA
Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc
guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16" guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16" height="14" alt="внедренная иконка папки"/>
height="14" alt="внедренная иконка папки"/>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" /> 9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot"/>
</div> </div>
<div style="text-align:center;" epub:type="cover"> <div style="text-align:center;" epub:type="cover">
<img src="image/1.png" alt="1.png" style="max-width:100%;" /> <img src="image/1.png" alt="1.png" style="max-width:100%;"/>
</div> </div>
<p>You can use <abbr title="Cascading Style Sheets">CSS</abbr> to style your <abbr title="HyperText Markup Language">HTML</abbr>.</p> <p>You can use <abbr title="Cascading Style Sheets">CSS</abbr> to style your <abbr title="HyperText Markup Language">HTML</abbr>.</p>
<p>In the computer's memory, this is stored as <bdo dir="rtl">אה, אני אוהב להיות ליד חוף הים</bdo></p> <p>In the computer's memory, this is stored as <bdo dir="rtl">אה, אני אוהב להיות ליד חוף הים</bdo>
<p><bdo dir="rtl">А <bdo>роза</bdo><bdo dir="ltr">упала</bdo> на <bdo dir="rtl">лапу</bdo> Азора</bdo></p> </p>
<p>
<bdo dir="rtl">А <bdo>роза</bdo>
<bdo dir="ltr">упала</bdo> на <bdo dir="rtl">лапу</bdo> Азора</bdo>
</p>
<p> Oer all the hilltops<br/>Is quiet now,<br/>In all the treetops<br/>Hearest thou<br/>Hardly a breath;<br/>The birds are asleep in the trees:<br/>Wait, soon like these<br/>Thou too shalt rest.</p> <p> Oer all the hilltops<br/>Is quiet now,<br/>In all the treetops<br/>Hearest thou<br/>Hardly a breath;<br/>The birds are asleep in the trees:<br/>Wait, soon like these<br/>Thou too shalt rest.</p>
<p>Use the command <kbd>help mycommand</kbd> to view documentation for the command "mycommand".</p> <p>Use the command <kbd>help mycommand</kbd> to view documentation for the command "mycommand".</p>
<p><label>Click me <input type="text"/></label></p> <p>
<label>Click me <input type="text"/>
</label>
</p>
<p>Элемент &lt;mark&gt; используется для <mark>выделения</mark> текста</p> <p>Элемент &lt;mark&gt; используется для <mark>выделения</mark> текста</p>
<p>When Dave asks HAL to open the pod bay door, HAL answers: <q>I'm sorry, Dave. I'm afraid I can't do that.</q></p> <p>When Dave asks HAL to open the pod bay door, HAL answers: <q>I'm sorry, Dave. I'm afraid I can't do that.</q>
<p><ruby><rp>(</rp><rt></rt><rp>)</rp></ruby><ruby>明日 <rp>(</rp><rt>Ashita</rt><rp>)</rp></ruby></p> </p>
<p>This is the first sentence. <small>This whole sentence is in small letters.</small></p> <p>
<p><big>Lorem</big> ipsum dolor sit amet</p> <ruby><rp>(</rp>
<rt></rt>
<rp>)</rp>
</ruby>
<ruby>明日 <rp>(</rp>
<rt>Ashita</rt>
<rp>)</rp>
</ruby>
</p>
<p>This is the first sentence. <small>This whole sentence is in small letters.</small>
</p>
<p>
<big>Lorem</big> ipsum dolor sit amet</p>
<p>Прежде чем продолжить, <strong>убедитесь, что вы надели защитные очки</strong>.</p> <p>Прежде чем продолжить, <strong>убедитесь, что вы надели защитные очки</strong>.</p>
<p>В этой статье описывается элемент для форматирования <b class="keywords">текста</b>.</p> <p>В этой статье описывается элемент для форматирования <b class="keywords">текста</b>.</p>
<p><svg viewBox="0 0 300 100" xmlns="http://www.w3.org/2000/svg" stroke="red" fill="grey"> <p>
<circle cx="50" cy="50" r="40" /> <svg viewBox="0 0 300 100" xmlns="http://www.w3.org/2000/svg" stroke="red" fill="grey">
<circle cx="150" cy="50" r="4" /> <circle cx="50" cy="50" r="40"/>
<circle cx="150" cy="50" r="4"/>
<svg viewBox="0 0 10 10" x="200" width="100"> <svg viewBox="0 0 10 10" x="200" width="100">
<circle cx="5" cy="5" r="4" /> <circle cx="5" cy="5" r="4"/>
</svg> </svg>
</svg></p> </svg>
<p><svg width="20" xmlns="http://www.w3.org/2000/svg"> </p>
<p>
<svg width="20" xmlns="http://www.w3.org/2000/svg">
<rect fill="#fc0" width="20" height="20"/> <rect fill="#fc0" width="20" height="20"/>
<line stroke="black" x1="0" y1="0" x2="20" y2="20"/> <line stroke="black" x1="0" y1="0" x2="20" y2="20"/>
</svg></p> </svg>
<p><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 611.989 611.988"> </p>
<p>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 611.989 611.988">
<g> <g>
<g id="Wi-Fi"> <g id="Wi-Fi">
<g> <g>
@ -146,26 +345,46 @@ height="14" alt="внедренная иконка папки"/>
</g> </g>
</g> </g>
</g> </g>
</svg></p> </svg>
<p>Just <textarea id="story" name="story" rows="5" cols="33">It was a dark and stormy night...</textarea></p> </p>
<p>Just <textarea id="story" name="story" rows="5" cols="33">It was a dark and stormy night...</textarea>
</p>
<p>The volume of a box is <var>l</var> × <var>w</var> × <var>h</var>, where <var>l</var> represents the length, <var>w</var> the width and <var>h</var> the height of the box.</p> <p>The volume of a box is <var>l</var> × <var>w</var> × <var>h</var>, where <var>l</var> represents the length, <var>w</var> the width and <var>h</var> the height of the box.</p>
<a href="https://developer.mozilla.org/ru/" target="_blank"><img src="https://mdn.mozillademos.org/files/6851/mdn_logo.png" alt="MDN logo"/></a> <a href="https://developer.mozilla.org/ru/" target="_blank">
<img src="https://mdn.mozillademos.org/files/6851/mdn_logo.png" alt="MDN logo"/>
</a>
<a href="https://developer.mozilla.org/ru/" target="_blank" title="Rubor краснота; calor повышенная температура; tumor припухлость; dolor боль, страдания (лат.).">Ссылка</a> <a href="https://developer.mozilla.org/ru/" target="_blank" title="Rubor краснота; calor повышенная температура; tumor припухлость; dolor боль, страдания (лат.).">Ссылка</a>
<address>You can contact author at <a href="http://www.somedomain.com/contact">www.somedomain.com</a>.<br/> <address>You can contact author at <a href="http://www.somedomain.com/contact">www.somedomain.com</a>.<br/>
If you see any bugs, please <a href="mailto:webmaster@somedomain.com">contact webmaster</a>.<br/> If you see any bugs, please <a href="mailto:webmaster@somedomain.com">contact webmaster</a>.<br/>
You may also want to visit us:<br/> You may also want to visit us:<br/>
Mozilla Foundation<br/> Mozilla Foundation<br/>
1981 Landings Drive<br/> 1981 Landings Drive<br/>
Building K<br/> Building K<br/>
Mountain View, CA 94043-0801<br/> Mountain View, CA 94043-0801<br/>
USA</address> USA</address>
<article class="forecast"><h1>Weather forecast for Seattle</h1> <article class="forecast">
<article class="day-forecast"><h2>03 March 2018</h2><p>Rain.</p></article> <h1>Weather forecast for Seattle</h1>
<article class="day-forecast"><h2>04 March 2018</h2><p>Periods of rain.</p></article> <article class="day-forecast">
<article class="day-forecast"><h2>05 March 2018</h2><p>Heavy rain.</p></article></article> <h2>03 March 2018</h2>
<aside><p>The Rough-skinned Newt defends itself with a deadly neurotoxin.</p></aside> <p>Rain.</p>
<p><del>This text has been deleted</del>, here is the rest of the paragraph.</p> </article>
<del><p>This paragraph has been deleted.</p></del> <article class="day-forecast">
<h2>04 March 2018</h2>
<p>Periods of rain.</p>
</article>
<article class="day-forecast">
<h2>05 March 2018</h2>
<p>Heavy rain.</p>
</article>
</article>
<aside>
<p>The Rough-skinned Newt defends itself with a deadly neurotoxin.</p>
</aside>
<p>
<del>This text has been deleted</del>, here is the rest of the paragraph.</p>
<del>
<p>This paragraph has been deleted.</p>
</del>
<ul> <ul>
<li>Milk</li> <li>Milk</li>
<li>Cheese<ul> <li>Cheese<ul>

View File

@ -44,7 +44,7 @@ public:
std::wstring m_sDst; // Директория назначения std::wstring m_sDst; // Директория назначения
std::wstring m_sBase; // Полный базовый адрес std::wstring m_sBase; // Полный базовый адрес
std::map<std::wstring, std::vector<std::wstring>> m_sSrcs; // Имена обрабатываемых файлов (имя файла, имя перекрестной ссылки) std::map<std::wstring, std::vector<std::wstring>> m_sSrcs; // Имена обрабатываемых файлов (имя файла, имя перекрестной ссылки)
std::map<std::wstring, std::wstring> m_mStyles; // Стили в document.xml. Хранятся как (имя тэга, его стиль) std::map<std::wstring, std::wstring> m_mStyles; // Стили в document.xml. Хранятся как (имя тэга, его стиль)
private: private:
@ -286,16 +286,18 @@ public:
// Стили по умолчанию // Стили по умолчанию
// Нормальный стиль, от которого базируются // Нормальный стиль, от которого базируются
// m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"normal\" w:default=\"1\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>"; m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"normal\" w:default=\"1\"><w:name w:val=\"Normal\"/><w:qFormat/></w:style>";
// Маркированный список // Маркированный список
// m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"li\"><w:name w:val=\"List Paragraph\"/><w:basedOn w:val=\"normal\"/><w:qFormat/><w:uiPriority w:val=\"34\"/><w:pPr><w:contextualSpacing w:val=\"true\"/><w:ind w:left=\"720\"/></w:pPr></w:style>"; m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"li\"><w:name w:val=\"List Paragraph\"/><w:basedOn w:val=\"normal\"/><w:qFormat/><w:uiPriority w:val=\"34\"/><w:pPr><w:contextualSpacing w:val=\"true\"/><w:ind w:left=\"720\"/></w:pPr></w:style>";
// Заголовки // Заголовки
// m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"h1\"><w:name w:val=\"Heading 1\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title1-c\"/><w:qFormat/><w:rPr><w:b/><w:bCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"480\"/><w:outlineLvl w:val=\"0\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h2\"><w:name w:val=\"Heading 2\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title2-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"40\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"1\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h3\"><w:name w:val=\"Heading 3\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title3-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:i/><w:iCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"36\"/><w:szCs w:val=\"36\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"2\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h4\"><w:name w:val=\"Heading 4\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title4-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:color w:val=\"232323\"/><w:sz w:val=\"32\"/><w:szCs w:val=\"32\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"3\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h5\"><w:name w:val=\"Heading 5\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title5-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:color w:val=\"444444\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"4\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h6\"><w:name w:val=\"Heading 6\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title6-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:i/><w:iCs/><w:color w:val=\"232323\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"5\"/></w:pPr></w:style><w:style w:type=\"character\" w:styleId=\"title1-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 1 Знак\"/><w:link w:val=\"title1\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"40\"/><w:szCs w:val=\"40\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title2-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 2 Знак\"/><w:link w:val=\"title2\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"34\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title3-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 3 Знак\"/><w:link w:val=\"title3\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"30\"/><w:szCs w:val=\"30\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title4-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 4 Знак\"/><w:link w:val=\"title4\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"26\"/><w:szCs w:val=\"26\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title5-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 5 Знак\"/><w:link w:val=\"title5\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"24\"/><w:szCs w:val=\"24\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title6-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 6 Знак\"/><w:link w:val=\"title6\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/></w:rPr></w:style>"; m_oStylesXml += L"<w:style w:type=\"paragraph\" w:styleId=\"h1\"><w:name w:val=\"Heading 1\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title1-c\"/><w:qFormat/><w:rPr><w:b/><w:bCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"48\"/><w:szCs w:val=\"48\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"480\"/><w:outlineLvl w:val=\"0\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h2\"><w:name w:val=\"Heading 2\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title2-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"40\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"1\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h3\"><w:name w:val=\"Heading 3\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title3-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:i/><w:iCs/><w:color w:val=\"000000\" w:themeColor=\"text1\"/><w:sz w:val=\"36\"/><w:szCs w:val=\"36\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"2\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h4\"><w:name w:val=\"Heading 4\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title4-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:color w:val=\"232323\"/><w:sz w:val=\"32\"/><w:szCs w:val=\"32\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"3\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h5\"><w:name w:val=\"Heading 5\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title5-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:b/><w:bCs/><w:color w:val=\"444444\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"4\"/></w:pPr></w:style><w:style w:type=\"paragraph\" w:styleId=\"h6\"><w:name w:val=\"Heading 6\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"title6-c\"/><w:qFormat/><w:unhideWhenUsed/><w:rPr><w:i/><w:iCs/><w:color w:val=\"232323\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:pPr><w:keepLines/><w:keepNext/><w:spacing w:after=\"0\" w:before=\"200\"/><w:outlineLvl w:val=\"5\"/></w:pPr></w:style><w:style w:type=\"character\" w:styleId=\"title1-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 1 Знак\"/><w:link w:val=\"title1\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"40\"/><w:szCs w:val=\"40\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title2-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 2 Знак\"/><w:link w:val=\"title2\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"34\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title3-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 3 Знак\"/><w:link w:val=\"title3\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:sz w:val=\"30\"/><w:szCs w:val=\"30\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title4-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 4 Знак\"/><w:link w:val=\"title4\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"26\"/><w:szCs w:val=\"26\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title5-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 5 Знак\"/><w:link w:val=\"title5\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"24\"/><w:szCs w:val=\"24\"/></w:rPr></w:style><w:style w:type=\"character\" w:styleId=\"title6-c\" w:customStyle=\"1\"><w:name w:val=\"Заголовок 6 Знак\"/><w:link w:val=\"title6\"/><w:uiPriority w:val=\"9\"/><w:rPr><w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\" w:eastAsia=\"Arial\"/><w:b/><w:bCs/><w:sz w:val=\"22\"/><w:szCs w:val=\"22\"/></w:rPr></w:style>";
// Текст: p, div // Текст: p, div
// m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"section-p-c\" w:customStyle=\"1\"><w:name w:val=\"Paragraph_character\"/><w:link w:val=\"p\"/></w:style><w:style w:type=\"paragraph\" w:styleId=\"p\" w:customStyle=\"1\"><w:name w:val=\"Paragraph\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"section-p-c\"/><w:qFormat/><w:pPr><w:ind w:firstLine=\"567\"/><w:jc w:val=\"both\"/></w:pPr></w:style>"; m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"section-p-c\" w:customStyle=\"1\"><w:name w:val=\"Paragraph_character\"/><w:link w:val=\"p\"/></w:style><w:style w:type=\"paragraph\" w:styleId=\"p\" w:customStyle=\"1\"><w:name w:val=\"Paragraph\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"section-p-c\"/><w:qFormat/><w:pPr><w:ind w:firstLine=\"567\"/><w:jc w:val=\"both\"/></w:pPr></w:style>";
// m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"section-p-c\" w:customStyle=\"1\"><w:name w:val=\"Paragraph_character\"/><w:link w:val=\"div\"/></w:style><w:style w:type=\"paragraph\" w:styleId=\"div\" w:customStyle=\"1\"><w:name w:val=\"Paragraph\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"section-p-c\"/><w:qFormat/><w:pPr><w:ind w:firstLine=\"567\"/><w:jc w:val=\"both\"/></w:pPr></w:style>"; m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"section-p-c\" w:customStyle=\"1\"><w:name w:val=\"Paragraph_character\"/><w:link w:val=\"div\"/></w:style><w:style w:type=\"paragraph\" w:styleId=\"div\" w:customStyle=\"1\"><w:name w:val=\"Paragraph\"/><w:basedOn w:val=\"normal\"/><w:link w:val=\"section-p-c\"/><w:qFormat/><w:pPr><w:ind w:firstLine=\"567\"/><w:jc w:val=\"both\"/></w:pPr></w:style>";
// Ссылки // Ссылка
// m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"a\"><w:name w:val=\"Hyperlink\"/><w:uiPriority w:val=\"99\"/><w:unhideWhenUsed/><w:rPr><w:color w:val=\"0563C1\" w:themeColor=\"hyperlink\"/><w:u w:val=\"single\"/></w:rPr></w:style>"; m_oStylesXml += L"<w:style w:type=\"character\" w:styleId=\"a\"><w:name w:val=\"Hyperlink\"/><w:uiPriority w:val=\"99\"/><w:unhideWhenUsed/><w:rPr><w:color w:val=\"0563C1\" w:themeColor=\"hyperlink\"/><w:u w:val=\"single\"/></w:rPr></w:style>";
// Таблица
m_oStylesXml += L"<w:style w:type=\"table\" w:default=\"1\" w:styleId=\"table-based\"><w:name w:val=\"Normal Table\"/><w:uiPriority w:val=\"99\"/><w:semiHidden/><w:unhideWhenUsed/><w:tblPr><w:tblInd w:w=\"0\" w:type=\"dxa\"/><w:tblCellMar><w:top w:w=\"0\" w:type=\"dxa\"/><w:left w:w=\"108\" w:type=\"dxa\"/><w:bottom w:w=\"0\" w:type=\"dxa\"/><w:right w:w=\"108\" w:type=\"dxa\"/></w:tblCellMar></w:tblPr></w:style><w:style w:type=\"table\" w:styleId=\"table\"><w:name w:val=\"Table Grid\"/><w:basedOn w:val=\"table-based\"/><w:uiPriority w:val=\"59\"/><w:pPr><w:spacing w:lineRule=\"auto\" w:line=\"240\" w:after=\"0\"/></w:pPr><w:tblPr><w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/><w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/><w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/><w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/><w:insideH w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/><w:insideV w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"000000\"/></w:tblBorders></w:tblPr></w:style>";
} }
bool readSrc(const std::wstring& sFileName) bool readSrc(const std::wstring& sFileName)
@ -451,7 +453,7 @@ public:
private: private:
std::vector<NSCSS::CNode> GetSubClass(std::vector<NSCSS::CNode>& sSelectors) std::vector<NSCSS::CNode> GetSubClass(const std::vector<NSCSS::CNode>& sSelectors)
{ {
std::vector<NSCSS::CNode> sSubClass(sSelectors); std::vector<NSCSS::CNode> sSubClass(sSelectors);
@ -534,11 +536,11 @@ private:
} }
m_oDocXml += L"<w:p>"; m_oDocXml += L"<w:p>";
readStream(sSelectors, L"", false, oLi, bWasP); readStream(&m_oDocXml, sSelectors, L"", false, oLi, bWasP);
m_oDocXml += L"</w:p>"; m_oDocXml += L"</w:p>";
} }
void readStream(std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP) void readStream(NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP)
{ {
if(m_oLightReader.IsEmptyNode()) if(m_oLightReader.IsEmptyNode())
return; return;
@ -546,47 +548,45 @@ private:
int nDeath = m_oLightReader.GetDepth(); int nDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode2(nDeath)) while(m_oLightReader.ReadNextSiblingNode2(nDeath))
{ {
std::vector<NSCSS::CNode> sSubClass = GetSubClass(sSelectors); std::vector<NSCSS::CNode> sSubClass = GetSubClass(sSelectors);
std::wstring sName = m_oLightReader.GetName(); std::wstring sName = m_oLightReader.GetName();
if(sName == L"#text") if(sName == L"#text")
{ {
if(bWasP) if(bWasP)
{ {
m_oDocXml += L"<w:pPr><w:pStyle w:val=\""; *oXml += L"<w:pPr><w:pStyle w:val=\"";
m_oDocXml += getStyle(sSubClass); *oXml += getStyle(sSubClass);
m_oDocXml += L"\"/></w:pPr>"; *oXml += L"\"/></w:pPr>";
} }
std::wstring sText = m_oLightReader.GetText(); std::wstring sText = m_oLightReader.GetText();
if(bBdo) if(bBdo)
std::reverse(sText.begin(), sText.end()); std::reverse(sText.begin(), sText.end());
m_oDocXml += L"<w:r><w:rPr>"; *oXml += L"<w:r><w:rPr>";
m_oDocXml += sRStyle; *oXml += sRStyle;
m_oDocXml += L"</w:rPr><w:t xml:space=\"preserve\">"; *oXml += L"</w:rPr><w:t xml:space=\"preserve\">";
m_oDocXml.WriteEncodeXmlString(sText); (*oXml).WriteEncodeXmlString(sText);
m_oDocXml += L"</w:t></w:r>"; *oXml += L"</w:t></w:r>";
bWasP = false; bWasP = false;
} }
// Ссылки // Ссылки
else if(sName == L"a") else if(sName == L"a")
readLink(sSubClass, sRStyle, bBdo, oLi, bWasP); readLink(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
// Абревиатура, реализована как сноски // Абревиатура, реализована как сноски
else if(sName == L"abbr") else if(sName == L"abbr")
readAbbr(sSubClass, sRStyle, bBdo, oLi, bWasP); readAbbr(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
// Адрес // Адрес
else if(sName == L"address") else if(sName == L"address")
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
@ -597,30 +597,27 @@ private:
// Контейнер // Контейнер
// Заголовок скрытой информации // Заголовок скрытой информации
// ... // ...
else if(sName == L"article" || sName == L"aside" || sName == L"blockquote" || sName == L"details" || sName == L"div" || else if(sName == L"article" || sName == L"header" || sName == L"div" || sName == L"blockquote" || sName == L"main" ||
sName == L"summary" || sName == L"dl" || sName == L"filedset" || sName == L"figure" || sName == L"figcaption" || sName == L"summary" || sName == L"footer" || sName == L"nav" || sName == L"figcaption" || sName == L"form" ||
sName == L"footer" || sName == L"form" || sName == L"header" || sName == L"p" || sName == L"main" || sName == L"details" || sName == L"option" || sName == L"pre" || sName == L"fieldset" || sName == L"p" ||
sName == L"nav" || sName == L"pre" || sName == L"section" || sName == L"option") sName == L"section" || sName == L"figure" || sName == L"dl" || sName == L"aside" )
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
//m_oDocXml += L"<w:pPr><w:pStyle w:val=\""; readStream(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
//m_oDocXml += sName;
//m_oDocXml += L"\"/></w:pPr>";
readStream(sSubClass, sRStyle, bBdo, oLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
// Полужирный текст // Полужирный текст
// Акцентированный текст // Акцентированный текст
else if(sName == L"b" || sName == L"strong") else if(sName == L"b" || sName == L"strong")
readStream(sSubClass, sRStyle + L"<w:b/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:b/>", bBdo, oLi, bWasP);
// Направление текста // Направление текста
else if(sName == L"bdo") else if(sName == L"bdo")
{ {
@ -631,21 +628,24 @@ private:
m_oLightReader.MoveToElement(); m_oLightReader.MoveToElement();
if(sDir == L"rtl") if(sDir == L"rtl")
readStream(sSubClass, sRStyle, true, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, true, oLi, bWasP);
else else
readStream(sSubClass, sRStyle, false, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, false, oLi, bWasP);
} }
// Отмена направления текста // Отмена направления текста
else if(sName == L"bdi") else if(sName == L"bdi")
readStream(sSubClass, sRStyle, false, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, false, oLi, bWasP);
// Увеличивает размер шрифта // Увеличивает размер шрифта
else if(sName == L"big") else if(sName == L"big")
readStream(sSubClass, sRStyle + L"<w:sz w:val=\"26\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:sz w:val=\"26\"/>", bBdo, oLi, bWasP);
// Перенос строки // Перенос строки
else if(sName == L"br") else if(sName == L"br")
{ {
m_oDocXml += L"<w:r><w:br/></w:r>"; if(!bWasP)
bWasP = false; {
*oXml += L"</w:p><w:p>";
bWasP = true;
}
} }
// Цитата, обычно выделяется курсивом // Цитата, обычно выделяется курсивом
// Новый термин, обычно выделяется курсивом // Новый термин, обычно выделяется курсивом
@ -653,27 +653,27 @@ private:
// Курсивный текст // Курсивный текст
// Переменная, обычно выделяется курсивом // Переменная, обычно выделяется курсивом
else if(sName == L"cite" || sName == L"dfn" || sName == L"em" || sName == L"i" || sName == L"var") else if(sName == L"cite" || sName == L"dfn" || sName == L"em" || sName == L"i" || sName == L"var")
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP);
// Код // Код
// Моноширинный шрифт, например, Consolas // Моноширинный шрифт, например, Consolas
// Результат скрипта // Результат скрипта
else if(sName == L"code" || sName == L"kbd" || sName == L"samp") else if(sName == L"code" || sName == L"kbd" || sName == L"samp")
readStream(sSubClass, sRStyle + L"<w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\"/>", bBdo, oLi, bWasP);
// Зачеркнутый текст // Зачеркнутый текст
else if(sName == L"del" || sName == L"s") else if(sName == L"del" || sName == L"s")
readStream(sSubClass, sRStyle + L"<w:strike/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:strike/>", bBdo, oLi, bWasP);
// Заголовок // Заголовок
else if(sName == L"h1" || sName == L"h2" || sName == L"h3" || sName == L"h4" || sName == L"h5" || sName == L"h6") else if(sName == L"h1" || sName == L"h2" || sName == L"h3" || sName == L"h4" || sName == L"h5" || sName == L"h6")
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
readStream(sSubClass, sRStyle, bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
@ -682,109 +682,215 @@ private:
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
m_oDocXml += L"<w:pPr><w:pBdr><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr></w:p><w:p>"; *oXml += L"<w:pPr><w:pBdr><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr></w:p><w:p>";
bWasP = true; bWasP = true;
} }
// Картинки // Картинки
else if(sName == L"img") else if(sName == L"img")
{ {
readImage(); readImage(oXml);
bWasP = false; bWasP = false;
} }
// Подчеркнутый // Подчеркнутый
else if(sName == L"ins") else if(sName == L"ins")
readStream(sSubClass, sRStyle + L"<w:u w:val=\"single\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:u w:val=\"single\"/>", bBdo, oLi, bWasP);
// Выделенный текст, обычно выделяется желтым // Выделенный текст, обычно выделяется желтым
else if(sName == L"mark") else if(sName == L"mark")
readStream(sSubClass, sRStyle + L"<w:highlight w:val=\"yellow\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:highlight w:val=\"yellow\"/>", bBdo, oLi, bWasP);
// Математическая формула
else if(sName == L"math")
{
}
// Меню // Меню
// Маркированный список // Маркированный список
else if(sName == L"menu" || sName == L"ul") else if(sName == L"menu" || sName == L"ul")
readLi(sSubClass, sRStyle, bBdo, oLi, bWasP, true); readLi(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP, true);
// Нумерованный список // Нумерованный список
else if(sName == L"ol") else if(sName == L"ol")
readLi(sSubClass, sRStyle, bBdo, oLi, bWasP, false); readLi(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP, false);
// Цитата, выделенная кавычками, обычно выделяется курсивом // Цитата, выделенная кавычками, обычно выделяется курсивом
else if(sName == L"q") else if(sName == L"q")
{ {
m_oDocXml += L"<w:r><w:t xml:space=\"preserve\">&quot;</w:t></w:r>"; *oXml += L"<w:r><w:t xml:space=\"preserve\">&quot;</w:t></w:r>";
readStream(sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:i/>", bBdo, oLi, bWasP);
m_oDocXml += L"<w:r><w:t xml:space=\"preserve\">&quot;</w:t></w:r>"; *oXml += L"<w:r><w:t xml:space=\"preserve\">&quot;</w:t></w:r>";
bWasP = false; bWasP = false;
} }
// Текст верхнего регистра // Текст верхнего регистра
else if(sName == L"rt" || sName == L"sup") else if(sName == L"rt" || sName == L"sup")
readStream(sSubClass, sRStyle + L"<w:vertAlign w:val=\"superscript\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:vertAlign w:val=\"superscript\"/>", bBdo, oLi, bWasP);
// Уменьшает размер шрифта // Уменьшает размер шрифта
else if(sName == L"small") else if(sName == L"small")
readStream(sSubClass, sRStyle + L"<w:sz w:val=\"18\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:sz w:val=\"18\"/>", bBdo, oLi, bWasP);
// Текст нижнего регистра // Текст нижнего регистра
else if(sName == L"sub") else if(sName == L"sub")
readStream(sSubClass, sRStyle + L"<w:vertAlign w:val=\"subscript\"/>", bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle + L"<w:vertAlign w:val=\"subscript\"/>", bBdo, oLi, bWasP);
// Векторная картинка // Векторная картинка
else if(sName == L"svg") else if(sName == L"svg")
{ {
readSVG(); readSVG(oXml);
bWasP = false; bWasP = false;
} }
// Таблицы // Таблицы
else if(sName == L"table") else if(sName == L"table")
{ {
*oXml += L"</w:p>";
readTable(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
*oXml += L"<w:p>";
bWasP = true;
} }
// Текст с границами // Текст с границами
else if(sName == L"textarea") else if(sName == L"textarea")
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
m_oDocXml += L"<w:pPr><w:pBdr><w:left w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:top w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:right w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr>"; *oXml += L"<w:pPr><w:pBdr><w:left w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:top w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:right w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/><w:bottom w:val=\"single\" w:color=\"000000\" w:sz=\"8\" w:space=\"0\"/></w:pBdr></w:pPr>";
readStream(sSubClass, sRStyle, bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
// Игнорируется // Игнорируется
else if(sName == L"rp" || sName == L"script" || sName == L"template" || sName == L"wbr" || sName == L"area" || sName == L"audio" || else if(sName == L"template" || sName == L"canvas" || sName == L"video" || sName == L"math" || sName == L"rp" ||
sName == L"video" || sName == L"canvas" || sName == L"command" || sName == L"map" || sName == L"embed" || sName == L"command" || sName == L"iframe" || sName == L"embed" || sName == L"area" || sName == L"map" ||
sName == L"iframe" || sName == L"keygen") sName == L"keygen" || sName == L"script" || sName == L"audio" || sName == L"wbr" )
continue; continue;
// Без нового абзаца // Без нового абзаца
else if(sName == L"button" || sName == L"data" || sName == L"label" || sName == L"audio" || sName == L"time" || sName == L"span" || else if(sName == L"datalist" || sName == L"button" || sName == L"label" || sName == L"data" || sName == L"object" ||
sName == L"datalist" || sName == L"input" || sName == L"select" || sName == L"noscript" || sName == L"select" || sName == L"input" || sName == L"time" || sName == L"output" ||
sName == L"meter" || sName == L"noscript" || sName == L"object" || sName == L"progress" || sName == L"hgroup" || sName == L"meter" || sName == L"span" || sName == L"audio" ||
sName == L"hgroup" || sName == L"output" || sName == L"progress" || sName == L"ruby") sName == L"ruby")
readStream(sSubClass, sRStyle, bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
else else
{ {
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
readStream(sSubClass, sRStyle, bBdo, oLi, bWasP); readStream(oXml, sSubClass, sRStyle, bBdo, oLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
} }
} }
void readLi (std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP, bool bType) int readTr (NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP, std::map<size_t, size_t>& mTable)
{
int nGridCol = 0;
int nDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode(nDeath))
{
std::wstring sName = m_oLightReader.GetName();
// tr - строки в таблице
if(sName != L"tr")
continue;
if(m_oLightReader.IsEmptyNode())
continue;
int nTCol = 0;
*oXml += L"<w:tr>";
int nTrDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode(nTrDeath))
{
std::wstring sColspan = L"";
std::wstring sRowspan = L"";
while(m_oLightReader.MoveToNextAttribute())
{
if(m_oLightReader.GetName() == L"colspan")
sColspan = m_oLightReader.GetText();
else if(m_oLightReader.GetName() == L"rowspan")
sRowspan = m_oLightReader.GetText();
}
m_oLightReader.MoveToElement();
*oXml += L"<w:tc><w:tcPr><w:textDirection w:val=\"lrTb\"/><w:noWrap w:val=\"false\"/>";
if(!sColspan.empty())
{
*oXml += L"<w:gridSpan w:val=\"";
*oXml += sColspan;
*oXml += L"\"/>";
}
*oXml += L"</w:tcPr><w:p>";
if(++nTCol > nGridCol)
nGridCol = nTCol;
// Читаем th. Ячейка заголовка таблицы. Выравнивание посередине. Выделяется полужирным
if(m_oLightReader.GetName() == L"th")
{
*oXml += L"<w:pPr><w:jc w:val=\"center\"/></w:pPr>";
bWasP = true;
readStream(oXml, sSelectors, sRStyle + L"<w:b/>", bBdo, oLi, bWasP);
}
// Читаем td. Ячейка таблицы. Выравнивание вправо
else if(m_oLightReader.GetName() == L"td")
{
*oXml += L"<w:pPr><w:jc w:val=\"right\"/></w:pPr>";
readStream(oXml, sSelectors, sRStyle, bBdo, oLi, bWasP);
}
*oXml += L"</w:p></w:tc>";
}
*oXml += L"</w:tr>";
}
return nGridCol;
}
void readTable (NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP)
{
if(m_oLightReader.IsEmptyNode())
return;
// Стиль таблицы
*oXml += L"<w:tbl><w:tblPr><w:tblStyle w:val=\"table\"/><w:tblW w:w=\"0\" w:type=\"auto\"/><w:tblLayout w:type=\"fixed\"/></w:tblPr>";
NSStringUtils::CStringBuilder oHead;
NSStringUtils::CStringBuilder oBody;
NSStringUtils::CStringBuilder oFoot;
int nGridCol = 0;
int nDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode(nDeath))
{
int n = 0;
std::map<size_t, size_t> mTable;
std::wstring sName = m_oLightReader.GetName();
if(sName == L"thead")
n = readTr(&oHead, sSelectors, sRStyle, bBdo, oLi, bWasP, mTable);
else if(sName == L"tbody")
n = readTr(&oBody, sSelectors, sRStyle, bBdo, oLi, bWasP, mTable);
else if(sName == L"tfoot")
n = readTr(&oFoot, sSelectors, sRStyle, bBdo, oLi, bWasP, mTable);
if(n > nGridCol)
nGridCol = n;
}
// Размеры таблицы
std::wstring sGridCol = L"";
if(nGridCol != 0)
sGridCol = std::to_wstring((int)(9570.0 / (double)nGridCol));
*oXml += L"<w:tblGrid>";
for(int i = 0; i < nGridCol; i++)
{
*oXml += L"<w:gridCol w:w=\"";
*oXml += sGridCol;
*oXml += L"\"/>";
}
*oXml += L"</w:tblGrid>";
// Конец таблицы
*oXml += oHead.GetData();
*oXml += oBody.GetData();
*oXml += oFoot.GetData();
*oXml += L"</w:tbl>";
// Пустая строка после таблицы, чтобы следующий текст не приклеивался
*oXml += L"<w:p></w:p>";
}
void readLi (NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP, bool bType)
{ {
if(m_oLightReader.IsEmptyNode()) if(m_oLightReader.IsEmptyNode())
return; return;
@ -796,28 +902,28 @@ private:
continue; continue;
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
CLi oSubLi; CLi oSubLi;
oSubLi.bNeedLi = true; oSubLi.bNeedLi = true;
oSubLi.nLevelLi = oLi.nLevelLi + 1; oSubLi.nLevelLi = oLi.nLevelLi + 1;
oSubLi.bType = bType; oSubLi.bType = bType;
m_oDocXml += L"<w:pPr><w:pStyle w:val=\"li\"/><w:numPr><w:ilvl w:val=\""; *oXml += L"<w:pPr><w:pStyle w:val=\"li\"/><w:numPr><w:ilvl w:val=\"";
m_oDocXml += std::to_wstring(oSubLi.nLevelLi); *oXml += std::to_wstring(oSubLi.nLevelLi);
m_oDocXml += L"\"/><w:numId w:val=\""; *oXml += L"\"/><w:numId w:val=\"";
m_oDocXml += (oSubLi.bType ? L"1" : L"2"); *oXml += (oSubLi.bType ? L"1" : L"2");
m_oDocXml += L"\"/></w:numPr></w:pPr>"; *oXml += L"\"/></w:numPr></w:pPr>";
readStream(sSelectors, sRStyle, bBdo, oSubLi, bWasP); readStream(oXml, sSelectors, sRStyle, bBdo, oSubLi, bWasP);
if(!bWasP) if(!bWasP)
{ {
m_oDocXml += L"</w:p><w:p>"; *oXml += L"</w:p><w:p>";
bWasP = true; bWasP = true;
} }
} }
} }
void readAbbr (std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP) void readAbbr (NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP)
{ {
std::wstring sNote = L""; std::wstring sNote = L"";
while(m_oLightReader.MoveToNextAttribute()) while(m_oLightReader.MoveToNextAttribute())
@ -825,11 +931,11 @@ private:
sNote = m_oLightReader.GetText(); sNote = m_oLightReader.GetText();
m_oLightReader.MoveToElement(); m_oLightReader.MoveToElement();
readStream(sSelectors, sRStyle, bBdo, oLi, bWasP); readStream(oXml, sSelectors, sRStyle, bBdo, oLi, bWasP);
m_oDocXml += L"<w:r><w:rPr><w:rStyle w:val=\"footnote\"/></w:rPr><w:footnoteReference w:id=\""; *oXml += L"<w:r><w:rPr><w:rStyle w:val=\"footnote\"/></w:rPr><w:footnoteReference w:id=\"";
m_oDocXml += std::to_wstring(m_nFootnoteId); *oXml += std::to_wstring(m_nFootnoteId);
m_oDocXml += L"\"/></w:r>"; *oXml += L"\"/></w:r>";
m_oNoteXml += L"<w:footnote w:id=\""; m_oNoteXml += L"<w:footnote w:id=\"";
m_oNoteXml += std::to_wstring(m_nFootnoteId++); m_oNoteXml += std::to_wstring(m_nFootnoteId++);
@ -838,7 +944,7 @@ private:
m_oNoteXml += L"</w:t></w:r></w:p></w:footnote>"; m_oNoteXml += L"</w:t></w:r></w:p></w:footnote>";
} }
void readLink (std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP) void readLink (NSStringUtils::CStringBuilder* oXml, const std::vector<NSCSS::CNode>& sSelectors, std::wstring sRStyle, bool bBdo, const CLi& oLi, bool& bWasP)
{ {
std::wstring sRef = L""; std::wstring sRef = L"";
std::wstring sTitle = L""; std::wstring sTitle = L"";
@ -879,7 +985,7 @@ private:
// Перекрестная ссылка внутри файла // Перекрестная ссылка внутри файла
if(bCross) if(bCross)
m_oDocXml += L"<w:hyperlink w:tooltip=\"Current Document\" w:anchor=\"cHyp"; *oXml += L"<w:hyperlink w:tooltip=\"Current Document\" w:anchor=\"cHyp";
// Внешняя ссылка // Внешняя ссылка
else else
{ {
@ -891,18 +997,18 @@ private:
m_oDocXmlRels += L"\" TargetMode=\"External\"/>"; m_oDocXmlRels += L"\" TargetMode=\"External\"/>";
// Пишем в document.xml // Пишем в document.xml
m_oDocXml += L"<w:hyperlink w:tooltip=\""; *oXml += L"<w:hyperlink w:tooltip=\"";
m_oDocXml += sTitle; *oXml += sTitle;
m_oDocXml += L"\" r:id=\"rHyp"; *oXml += L"\" r:id=\"rHyp";
} }
m_oDocXml += std::to_wstring(m_nHyperlinkId++); *oXml += std::to_wstring(m_nHyperlinkId++);
m_oDocXml += L"\">"; *oXml += L"\">";
bWasP = false; bWasP = false;
readStream(sSelectors, sRStyle += L"<w:rStyle w:val=\"a\"/>", bBdo, oLi, bWasP); readStream(oXml, sSelectors, sRStyle += L"<w:rStyle w:val=\"a\"/>", bBdo, oLi, bWasP);
m_oDocXml += L"</w:hyperlink>"; *oXml += L"</w:hyperlink>";
} }
void readImage() void readImage (NSStringUtils::CStringBuilder* oXml)
{ {
while(m_oLightReader.MoveToNextAttribute()) while(m_oLightReader.MoveToNextAttribute())
{ {
@ -953,12 +1059,12 @@ private:
} }
if(bRes) if(bRes)
ImageRels(sImageId, L"i" + sImageName); ImageRels(oXml, sImageId, L"i" + sImageName);
} }
m_oLightReader.MoveToElement(); m_oLightReader.MoveToElement();
} }
void ImageRels(const std::wstring& sImageId, const std::wstring& sImageName) void ImageRels (NSStringUtils::CStringBuilder* oXml, const std::wstring& sImageId, const std::wstring& sImageName)
{ {
m_nImageId++; m_nImageId++;
// Прописать рельсы // Прописать рельсы
@ -996,25 +1102,25 @@ private:
} }
// Пишем в document.xml // Пишем в document.xml
m_oDocXml += L"<w:r><w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\""; *oXml += L"<w:r><w:drawing><wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\"><wp:extent cx=\"";
m_oDocXml += std::to_wstring(nWx); *oXml += std::to_wstring(nWx);
m_oDocXml += L"\" cy=\""; *oXml += L"\" cy=\"";
m_oDocXml += std::to_wstring(nHy); *oXml += std::to_wstring(nHy);
m_oDocXml += L"\"/><wp:docPr id=\""; *oXml += L"\"/><wp:docPr id=\"";
m_oDocXml += sImageId; *oXml += sImageId;
m_oDocXml += L"\" name=\"\"/><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\""; *oXml += L"\" name=\"\"/><a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:nvPicPr><pic:cNvPr id=\"";
m_oDocXml += sImageId; *oXml += sImageId;
m_oDocXml += L"\" name=\"\"/><pic:cNvPicPr></pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"rPic"; *oXml += L"\" name=\"\"/><pic:cNvPicPr></pic:cNvPicPr></pic:nvPicPr><pic:blipFill><a:blip r:embed=\"rPic";
m_oDocXml += sImageId; *oXml += sImageId;
m_oDocXml += L"\"/><a:stretch/></pic:blipFill><pic:spPr bwMode=\"auto\"><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\""; *oXml += L"\"/><a:stretch/></pic:blipFill><pic:spPr bwMode=\"auto\"><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"";
m_oDocXml += std::to_wstring(nWx); *oXml += std::to_wstring(nWx);
m_oDocXml += L"\" cy=\""; *oXml += L"\" cy=\"";
m_oDocXml += std::to_wstring(nHy); *oXml += std::to_wstring(nHy);
m_oDocXml += L"\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>"; *oXml += L"\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>";
} }
void readSVG() void readSVG (NSStringUtils::CStringBuilder* oXml)
{ {
// Сохранить как .svg картинку // Сохранить как .svg картинку
NSStringUtils::CStringBuilder oSVG; NSStringUtils::CStringBuilder oSVG;
@ -1081,7 +1187,7 @@ private:
pMetafile->Release(); pMetafile->Release();
pFonts->Release(); pFonts->Release();
ImageRels(sImageId, sImageId + L".png"); ImageRels(oXml, sImageId, sImageId + L".png");
} }
std::wstring content() std::wstring content()