Оставить заявку

Вопросы и ответы

Внимание! У нас сбои с почтовым сервером! Если не пришло письмо о регистрации или смене пароля напишите нам на info@techwriters.ru! 
@twriters
 obmen_soobsheniyami.pngчат для технических писателей в Telegram

 Зарегистрируйтесь
   RSS
Вопросы и ответы
 
Раз уж создали тему, то надо начинать задавать/отвечать на вопросы  :D
Страницы: Пред. 1 2 3 След.
Ответы
 
Идея ясна, но вы не находите, что это слишком сложное решение для простановки текущей даты? Может быть, есть способ попроще? Хотя бы чтобы не было этапа замены маски ##TODAY## на параметр today_for_tech_writer_1, а чтобы параметр можно было сразу вставить в текст?
 
Не нахожу, это вполне адекватное решение. Быстро сделал и забыл.
Цитата
tech_writer_1 пишет:
чтобы параметр можно было сразу вставить в текст?
А где взять параметр, как и куда его вставить?  Параметр должен как-то вычисляться и куда-то подставляться.
Вы наверное представляете картину, когда один человек в одном файле в одном редакторе подставляет один раз одну дату, иначе я не представляю как программа/скрипт может понять какую дату куда подставить, какая-либо метка все равно нужна.
Вы же не картинку с часами вставляете, а дату/время, на момент публикации документа, независимо от даты создания файла. То есть сегодня это одна дата, после перепубликации документа это будет другая дата.

Этапа поиска и замены маски на переменную не миновать никак. Средствами XSLT это тоже можно сделать, но встявлять код в каждый xsl-файл, отвечающий за преобразования элементов не практично. Можно по аналогии создать код, который будет вычислять дату в момент XSL-преобразований, но xsl-шаблону также нужен будет либо тег, либо маска (метка), которую заменять на вычисленную дату.

##TODAY## - это пример. На его месте может быть <day>TODAY</day> или <today/>
Изменено: ''ADVANCED'' - 26.06.2013 15:32:40
 
А если вам нужно подставлять текущую дату напрямую в текст, то это вопросы к вашему редактору, независимо от dita, xslt или чего-то еще.
 
А вот если вы работаете в команде, то как обучить всех тех. писателей этому механизму? Нужно вводить правила, как будет объявляться дата - <day>TODAY</day> или <today/> или ##TODAY##? А если захочется изменить формат вывода даты, для этого надо создавать отдельную метку?
 
Команда на то и команда, а не стадо, чтобы по одним правилам работать. Вы даже в ворде без единых правил мало чего наработаете, только если не будете оформлять все по умолчанию "как настроено".

Изменять формат можно разными способами. Тегами/метками наверно не правильно, т.к. придется менять все топики. Проще изменить/добавить параметр в ANT-скрипте. Если формат один, то использовать один сценарий, если второй, то второй соответственно. Сценарий обработки файлов вы пишете один раз для множества файлов и при появлении новых требований вы можете его изменить/дополнить или клонировать с незначительными изменениями.
 
''ADVANCED'',
решила до конца разобраться с вашим примером. Уточните пожалуйста, куда именно надо вставлять таски tstamp и replace. Попробовала сделать так:
Код
<project name="my_pdf" default="map2pdf" basedir=".">
  
  <!-- dita.dir should point to the toolkit's root directory -->
  <property name="dita.dir" location="D:\Work\Tests\DITA\DITA-OT1.7.5"/>
    
  <target name="map2pdf">
   <ant antfile="${dita.dir}${file.separator}build.xml">
      <!-- please refer to the toolkit's document for supported parameters, and 
           specify them base on your needs -->
      <property name="args.input" location="samples\hierarchy.ditamap"/>
      <property name="args.gen.task.lbl" value="YES"/>
     <property name="args.rellinks" value="nofamily"/>
     <property name="output.dir" location="out"/>
      <property name="transtype" value="pdf"/>  
    </ant>
   <tstamp>
   <fo rmat property="current_date" pattern="dd-mm-yyyy"/>
   </tstamp> 
   <replace file="samples\hierarchy.ditamap" token="##TODAY##" value="${current_date}" /> 
  </target>
</project>


Добавила в один из топиков текст ##TODAY##. В конечном pdf отображается этот же текст, не заменённый.
 
Нужно использовать build.xml, из которого вызывается таргет init. У вас это файл D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml

В самом начале файла идут строки импорта <import file="******.xml"></import>. В конце этого списка добавляете строку <import file="test_build.xml"></import>

Создаете свой файл test_build.xml, в нем создаете таргет target name="test_replace". В таргете прописываете получение параметра tstamp, а потом замену replace. Все по порядку.

При этом  <target name="init"> из первого билд-файла должен быть изменент на <target name="init" depends="test_replace"> и пробуете.

tech_writer_1 пишет:
Добавила в один из топиков текст ##TODAY##. В конечном pdf отображается этот же текст, не заменённый.

В приведенном коде задан поиск ##TODAY## в файле samples\hierarchy.ditamap, так что надо либо в ditamap ставить метку, либо указывать топик.
Изменено: ''ADVANCED'' - 27.06.2013 16:39:07
 
Прямо с ходу это не рассказать. Нужно изучать синтаксис ANT и типовые сценарии. В дополнение нужно представлять что вы хотите найти и заменить. Опять же в приведенном примере сначала выполняется построение документа PDF, потом поиск метки в одном файле, а на самом деле метка в другом файле, никак не зависящем от уже готового PDF.
 
Синтаксис ANTсвязан c DITA только тем, что все преобразования, заложенные в сценариях dita выполняются ANT-ом (по умолчанию)
Дополнительно ANT-ом вы можете подготавливать текстовые файлы для последующей обработки Dit-ой. Например разово разобрать CHM на HTML и конвертнуть в Dita, чтобы потом использовать в документации. Или подключиться к БД, вытащить реальные названия объектов в системе и подставить их в документацию as is.

Подготовка может быть разной, от подстановки текущей даты в топиках, до создания новых топиков и новых временных карт из кусков других топиков и карт, например для релизов, отчетов, спецификаций и т.п. Не обязательно же обновлять каждый раз ditamap-ы в XML-редакторе, можно их генерить из ничего.
Если вы знаете языки программирования, можете использовать их, но для настройки и использования Dita не нужно быть программистом  :)
 
Я так до конца и не поняла, какую роль играет build.xml. Обычно я делала свои build-файлы попроще или запускала с build_demo.xml, и всё работало. Когда пытаюсь запустить ant с файлом build.xml, выдает ошибку.
Запускаю так:
Код
ant -f build.xml
Получаю:
Код
Unable to locate tools.jar. Expected to find it in C:\Program Files (x86)\Java\jre6\lib\tools.jar
Buildfile: D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml
BUILD FAILED
D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml:27: [DOTA001F][FATAL] "${transtype}" i
s not a recognized transformation type. Supported transformation types are docbo
ok, eclipsecontent, eclipsehelp, htmlhelp, javahelp, legacypdf, odt, pdf, pdf2,
tocjs, troff, wordrtf, xhtml.
Изменено: tech_writer_1 - 27.06.2013 17:23:19
 
ADVANCED, а не подскажите, где можно узнать про работу ANT'а в контексте DITA (чтобы можно было немного подпилить среду под себя)?Кстати, очень бы помог листинг добавленных в файлы изменений, чтобы на примере можно было понять, как применять, например, внешние объекты типа автоматической даты. Это примерно как ваше первое объяснение, только дополненное. Иначе, не разбираясь в механизмах не очень понятно где какие переменные объявляются и как они в последующем обрабатываются. Возможно есть описание алгоритмов?
Изменено: aLeks - 27.06.2013 17:31:32
 
Цитата
tech_writer_1 пишет:
Я так до конца и не поняла, какую роль играет build.xml. Обычно я делала свои build-файлы попроще или запускала с build_demo.xml, и всё работало. Когда пытаюсь запустить ant с файлом build.xml, выдает ошибку.

Главную роль. Все от него зависит, какой сценарий там записан, так и будет работать. По тексту ошибки видно, что не задан формат. Когда вы запускаете build.xml, вы должны передать обязательные параметры. В build_demo.xml наверное был прописан формат transtype, а в build.xml он не известен. Если вы не задаете формат при запуске скрипта, значит его надо прописать в самом скрипте.

Цитата
aLeks пишет:
а не подскажите, где можно узнать про работу ANT'а в контексте DITA (чтобы можно было немного подпилить среду под себя)?
В интернете можно http://ru.wikipedia.org/wiki/Apache_Ant#.D0.9E.D0.BF.D0.B8.D1.81.D0.B0.D0.BD.D0.B8.D0.B5

Цитата
aLeks пишет:
Возможно есть описание алгоритмов?
Полное собрание от разработчиков тут https://ant.apache.org/manual/tasksoverview.html, но есть еще Java-умельцы, которые что-то допиливают под свои нужды, решения также можно нагуглить. Например http://antelope.tigris.org/. На русском возможно есть, но не увлекался, т.к в большей части ничего конкретного там нет.
 
Спасибо за ссылки!
 
Где именно нужно прописать transtype?
 
Варианты:
1. <project name="yourprojectname">
<property name="transtype" value="pdf2"/>  - весь проект будет в этом формате
2. <target name="your_target">
<property name="transtype" value="pdf2"/> - только таргет публикации документа в этом формате
3. при запуске ant в командной строке (в зависимости как вы запускаете) - все проекты, которые запускаете
4. при запуске в bat-файле (или sh-скрипте) - все проекты, которые запускаете
 
1 и 2 способ: теперь выдает

Код
BUILD FAILED
D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml:45: The following error occurred while
 executing this line:
D:\Work\Tests\DITA\DITA-OT1.7.5\plugins\org.dita.base\build_init.xml:241: [DOTA0
02F][FATAL] Input file is not specified, or is specified using the wrong paramet
er. 

3 и 4 неясно - в каком виде писать параметр.
 
Цитата
tech_writer_1 пишет:
Buildfile: D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml
BUILD FAILED
D:\Work\Tests\DITA\DITA-OT1.7.5\build.xml:27: [DOTA001F][FATAL] "${transtype}" i
s not a recognized transformation type. Supported transformation types are docbo
ok, eclipsecontent, eclipsehelp, htmlhelp, javahelp, legacypdf, odt, pdf, pdf2,
tocjs, troff, wordrtf, xhtml.
Откройте строку 27 и напишите там pdf2.
Изменено: ''ADVANCED'' - 01.07.2013 13:06:23
 
в строке 27 наблюдаю:

Код
<dita-ot-fail id="DOTA001F"> 
а выражение ${transtype} встречается в файле много раз
 
Цитата
tech_writer_1 пишет:
а выражение ${transtype} встречается в файле много раз
Это нормально. Один раз где-то задано значение переменной, которое подставляется много раз где нужно. Вам нужно найти где оно задается и переопределить. Посмотрите изза чего возникла ошибка в строке 241 во втором случае. Не имея файлов не представляю как помочь.

Цитата
tech_writer_1 пишет:
Попробовала сделать так:
Код
 <project name="my_pdf" default="map2pdf" basedir=".">
  
  <!-- dita.dir should point to the toolkit's root directory -->
  <property name="dita.dir" location="D:\Work\Tests\DITA\DITA-OT1.7.5"/>
    
  <target name="map2pdf">
   <ant antfile="${dita.dir}${file.separator}build.xml">
      <!-- please refer to the toolkit's document for supported parameters, and 
           specify them base on your needs -->
      <property name="args.input" location="samples\hierarchy.ditamap"/>
      <property name="args.gen.task.lbl" value="YES"/>
     <property name="args.rellinks" value="nofamily"/>
     <property name="output.dir" location="out"/>
      <property name="transtype" value="pdf"/>  
    </ant>
   <tstamp>
   <fo rmat property="current_date" pattern="dd-mm-yyyy"/>
   </tstamp> 
   <replace file="samples\hierarchy.ditamap" token="##TODAY##" value="${current_date}" /> 
  </target>
</project> 
У вас же тут был задан transtype.
 
Цитата
''ADVANCED'' пишет:
1. <project name="yourprojectname">
<property name="transtype" value="pdf2"/> - весь проект будет в этом формате
<property name="transtype" value="pdf"/>
 
Разобралась  :)  
Задала все проперти в таргете в build.xml (раньше просто не были заданы исходные файлы  :)  ).
Реализовала замену метки на дату в одном файле, работает. Дальше буду разбираться с ant сама, большое спасибо за помощь.
Изменено: tech_writer_1 - 01.07.2013 14:08:22
 
Цитата
tech_writer_1 пишет:
Разобралась
Ну классно!
 
Цитата
tech_writer_1 пишет:
3 и 4 неясно - в каком виде писать параметр.
А как вы запускаете build.xml ? Из командной строки или bat-файлом?
 
Из командной строки:

Код
ant -f build.xml 
 
Цитата
tech_writer_1 пишет:
Идея ясна, но вы не находите, что это слишком сложное решение для простановки текущей даты?
Это было простое решение. Вот решения для простановки последней даты текущего месяца для  шапок и подвалов типа "Утверждаю":


Код
<target name="finder.date-month">
                            <echo message="Отчетный месяц = ${buildtemp.file.month}" />
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="01" />
                                          <then>
                                             <property name="Day-Month" value="31 января"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="января"/>
                                             <property name="Only-Month-ImP" value="Январь"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="02" />
                                          <then>
                                             <property name="Day-Month" value="28 февраля"/>
                                             <property name="Only-Day-Month" value="28"/>
                                             <property name="Only-Month" value="февраля"/>
                                             <property name="Only-Month-ImP" value="Февраль"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="03" />
                                          <then>
                                             <property name="Day-Month" value="31 марта"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="марта"/>
                                             <property name="Only-Month-ImP" value="Март"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="04" />
                                          <then>
                                             <property name="Day-Month" value="30 апреля"/>
                                             <property name="Only-Day-Month" value="30"/>
                                             <property name="Only-Month" value="апреля"/>
                                             <property name="Only-Month-ImP" value="Апрель"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="05" />
                                          <then>
                                             <property name="Day-Month" value="31 мая"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="мая"/>
                                             <property name="Only-Month-ImP" value="Май"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="06" />
                                          <then>
                                             <property name="Day-Month" value="30 июня"/>
                                             <property name="Only-Day-Month" value="30"/>
                                             <property name="Only-Month" value="июня"/>
                                             <property name="Only-Month-ImP" value="Июнь"/>
                                          </then>
                                    </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="07" />
                                          <then>
                                             <property name="Day-Month" value="31 июля"/>
                                              <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="июля"/>
                                             <property name="Only-Month-ImP" value="Июль"/>
                                         </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="08" />
                                          <then>
                                             <property name="Day-Month" value="31 августа"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="августа"/>
                                             <property name="Only-Month-ImP" value="Август"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="09" />
                                          <then>
                                             <property name="Day-Month" value="30 сентября"/>
                                             <property name="Only-Day-Month" value="30"/>
                                             <property name="Only-Month" value="сентября"/>
                                             <property name="Only-Month-ImP" value="Сентябрь"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="10" />
                                          <then>
                                             <property name="Day-Month" value="31 октября"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="октября"/>
                                             <property name="Only-Month-ImP" value="Октябрь"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="11" />
                                          <then>
                                             <property name="Day-Month" value="30 ноября"/>
                                             <property name="Only-Day-Month" value="30"/>
                                             <property name="Only-Month" value="ноября"/>
                                             <property name="Only-Month-ImP" value="Ноябрь"/>
                                          </then>
                                   </if>
                                   <if>
                                       <equals arg1="${buildtemp.file.month}" arg2="12" />
                                          <then>
                                             <property name="Day-Month" value="31 декабря"/>
                                             <property name="Only-Day-Month" value="31"/>
                                             <property name="Only-Month" value="декабря"/>
                                             <property name="Only-Month-ImP" value="Декабрь"/>
                                          </then>
                                   </if>

  <echo> Day-Month = ${Day-Month}</echo>
  <echo> Only-Day-Month = ${Only-Day-Month}</echo>
  <echo> Only-Month = ${Only-Month}</echo>
  <echo> Only-Month-ImP = ${Only-Month-ImP}</echo>


<replace dir="${buildtemp.file.month}_tmp" value="${Day-Month} ${this-Year} г.">
  <replacetoken>##LastDay##</replacetoken>
</replace>
<echo message="Нашли все маски ##LastDay## и поставили значение ${Day-Month} ${this-Year} г."/>

Перед этим таргетом выполняется другой, который определяет порядковый номер месяца:


Код
<target name="poisk-month" description="Определение номера отчетного месяца">
        <for param="file">
                    <path>
                        <fileset dir="${basedir}">
                                <include name="**/**/RT-corrector.xml"/>
                        </fileset>
                    </path>

                    <sequential>

                       <propertyregex override="yes" property="otchetny.mesyats" input="@{file}" regexp="(.*)tz_(.*)\\(\d{2})\\([A-Z]{2})-corrector.xml" replace="\3"/>
                         <echo message="Отчетный месяц = ${otchetny.mesyats}" />
                            <copy failonerror="true" todir="${otchetny.mesyats}_tmp\parts" verbose="true">
                                  <fileset dir="${dogovor.dir}\_blank"/>
                            </copy>
                            <copy todir="${otchetny.mesyats}_tmp_xml">
                                  <fileset dir="${otchetny.mesyats}"/>
                            </copy>
                              <echo message="В директорию ${otchetny.mesyats}_tmp_xml скопированы части" />
                            <move file="${otchetny.mesyats}_tmp_xml\RT-corrector.xml" tofile="${otchetny.mesyats}_tmp_xml\RT-99999-${correct.time}.xml"/>



                            <antcall target="get-one-row">
                              <param name="buildtemp.file.month" value="${otchetny.mesyats}" />
                            </antcall>
                            <antcall target="temp2dita">
                              <param name="buildtemp.file.month" value="${otchetny.mesyats}" />
                            </antcall>
                            <antcall target="dita2publicformat">
                              <param name="buildtemp.file.month" value="${otchetny.mesyats}" />
                            </antcall>
                            <!--antcall target="clean-tmp-folders">
                              <param name="buildtemp.file.month" value="${otchetny.mesyats}" />
                            </antcall-->
                     </sequential>
                 </for>
                            <antcall target="stage-techzad">
                              <param name="buildtemp.file.month" value="${otchetny.mesyats}" />
                            </antcall>
                            <!--antcall target="clean-out-folders"/-->
                            <antcall target="send-mail"/>
</target>
Страницы: Пред. 1 2 3 След.
Читают тему

Рейтинг@Mail.ru