Jump to content

Digest October

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Спец-символы в LUA


Mesqalito
 Share

Recommended Posts

А именно: как вставить перенос строки? Пробовал \r\n, но не работает. Пробовал <br> - тоже не работает)

Кусок кода примерно такой:

Code:
desc = userMods.ToWString("News\r\n<br>" .. userMods.FromWString(news) .. "Description\n" .. userMods.FromWString(desc))

Это модификация к GuildGui1b, файл ScriptGuildGui1b.lua, после строки 552. Хочу сделать тултип, в котором было бы описание гильдии и новость дня(т.к. сейчас новость вообще никаким способом нельзя посмотреть - она обрезается даже в офф. гилд-манагере).

Link to comment
Share on other sites

Я так понимаю, SetMultiline() и SetWrapText() отвечают за перенос текста у края контейнера, но мне нужно не это. Мне нужен перенос строки в конкретном месте.

Что это вообще за WString такой и почему он не опознает спец символы?

Link to comment
Share on other sites

Guest Carnifex

try this:

Code:
desc = userMods.ToWString("<html>News<br>" .. userMods.FromWString(news) .. "Description\n" .. userMods.FromWString(desc).."</html>")
Link to comment
Share on other sites

Carnifex, it doesn't work, as predicted.

Тем не менее, я нашел решение, хотя и осознаю, что это костыль:). Просто вставить в месте нужного переноса строку из 200 пробелов(которая по длине наверняка не влезет в контейнер). По причине мне неведомой эта строка не будет переноситься на вторую, а просто уйдет за экран, а на новой строке будет уже первый печатный символ.

Code:
desc = userMods.ToWString("NEWS:" .. 

"                                                                                                                                                                                                " ..

userMods.FromWString(news) ..

"                                                                                                                                                                                                " ..

"DESCRIPTION:" .. 

"                                                                                                                                                                                                " ..

userMods.FromWString(desc))

Link to comment
Share on other sites

Guest Carnifex

But it works in the tooltips of items ingame, and i thought, that are also WStrings.

(In our bad localisation you can sometimes see the html-code of the tooltips, because the gms make mistakes with the html-tags and there you can see the <br/>-tag to).

But if it work, you must start with <html> and end with </html> (try this with multiline set true)

Link to comment
Share on other sites

Эм, а если так?

Code:
desc = userMods.ToWString(

    string.format(

        "NEWS:\n%s\nDESCRIPTION:\n%s",

        userMods.FromWString(news),

        userMods.FromWString(desc)

    )

)

Link to comment
Share on other sites

Carnifex говорит, ему приходилось видеть в игре <br/>. Предлагает попробовать <br/>, при том, что весь текст нужно обернуть в <html> и </html>, и выставить multiline true.

Имхо, стоит попробовать.

Link to comment
Share on other sites

Все это замечательно работет, если писать в лог (Mods.txt)

С TextView, куда походу и надо выводить, не прокатывает

ЗЫ. Может проще править не строчку, а сам файл ресурса? Куда там пишется она. Сделать 2 TextView вместо 1

Link to comment
Share on other sites

Разница только в использовании string.format вместо конкатенации, но на выходе все равно получается тот же string со спец-символами, которые при конвертировании в WString куда-то теряются.

Ниже писали, возможно, это проблема именно контейнера. Посмотрим, что там SLA намутил с GuildGui1b и если че, буду издеваться над его версией уже :)

Link to comment
Share on other sites

Вдогонку.

Возможно ли как то определить ширину строчки?

У Нивала тултипы по ширине разные, в зависимости от текста. Они вручную выставляют или атоматом как то считается?

Link to comment
Share on other sites

А, не. Немного неправильно выразился

Как узнать (и можно ли вообще) ширину текста в TextView?

Не, конечно, можно тупо заранее посчитать количество символов в txt-шнике которые будут отображаться, потом каждый раз суммировать длину строк во всех текстовых валуях и тех символов, подставлять в формулу...

У меня не стоит ГилдГуи. Как оно себя ведет на разных разрешениях и при разных размерах шрифта? Менять каждый раз формулу?

qYHNXvkxo1NZmMC.jpg
Link to comment
Share on other sites

Quote:
Не, конечно, можно тупо заранее посчитать количество символов в txt-шнике


Так и сделано в GuildGui1b, но это ОЧЕНЬ ОЧЕНЬ приблизительный метод. Потому, что все буквы имеют разную ширину - буква щ в три раза шире буквы i. В WinAPI, например, существует специальная функция, которой указываешь строку, шрифт, размер шрифта, и она возвращает числа, ширину и высоту строки в пикселях... Сомневаюсь, что что-то такое есть в АО. Очевидно, тут дело в тегах XBD-файлов. Потому, что Lua-код, формирующий тултип, вообще не занимается такими подсчётами.

Quote:
У меня не стоит ГилдГуи. Как оно себя ведет на разных разрешениях и при разных размерах шрифта?


Да там sizeY = math.ceil (dlina/80) * 25 с огромным запасом место дано, поэтому не обрезается. А вычисление это, вообще, лишнее. Если бы знать, как выглядит XDB контейнера тултипа, то нужно просто сделать нормальный "резиновый" контейнер, и всё.

P.S. Обновление GuildGui1b уже залито :)

P.S. @Vomitus Стоит попробовать то, что предложил Carnifex несколькими постами выше. А то, его дельное предложение осталось незамеченным во вчерашней бурной дискуссии...
Он говорит, в gPotato переводчиками работают гуманитарии, которые, как и положено гуманитариям, при переводе "не замечают" html-тегов, и портят их :)) Так, в игре иногда проскакивают сообщения с "видимыми" html-тегами (в русской версии тоже иногда бывает). И Carnifex видел среди них тег </br>. Возможно, и я тоже видел </br> где-то в АО. Так что, имхо, стоит попробовать предложенный им вариант.
Link to comment
Share on other sites

Я пробовал с html тегом как и описано - теги выводятся простым текстом. Видимо, нужно(если можно) задать в контейнере тип отображения html вместо текста - может тогда что-то выйдет.

Еще раз вопрос: что собой представляет тип WString? Где можно посмотрет ьего спецификацию?

Link to comment
Share on other sites

Дело наверно все-таки не в типе строчки, а в том куда ее выводят

Quote:
Строки в формате Unicode - WSTRING. Этот тип подобен строкам с завершающим нулевым байтом, но для каждого символа предусмотрено два байта (wide characters).
Link to comment
Share on other sites

Знаю, ЗНАЮ КАК !!! =D

Говорил же, Carnifex был прав, когда говорил,что видел <br> в игре!

Хотите верьте, хотите проверьте. Переносом строк можно полюбоваться в аддоне SampleLibDnD, который приаттачен в конце первого сообщения в теме HOW-TO: LibDnD.lua (Библиотека Drag&Drop).

Конечно, контейнер должен быть помечен как Multiline. Ключевой момент - оказывается, <br> должен иметь открывающий и закрывающий теги (!), как будто это "параграф" (<p>) в HTML'е:

Code:
Строка1<br>Строка2</br><br>Строка3</br>

или, абсолютно то же самое, но выглядит аккуратнее:

Code:
<br>Строка1</br><br>Строка2</br><br>Строка3</br>

А теперь, бонус :) <p> тоже работает! Но делает бОльшие расстояния между строками, чем <br>:

Code:
<p>Строка1</p><p>Строка2</p><p>Строка3</p>
Link to comment
Share on other sites

Чет у меня не получается.

Добавил мультилайн в файл News.(WidgetTextView).xdb(подсмотрел в SampleLibDnD_2010-09-28.zip/Text.(WidgetTextView).xdb):

Code:

<?xml version="1.0" encoding="UTF-8" ?>

<WidgetTextView>

<Name>News</Name>

<Placement>

<X>

<Align>WIDGET_ALIGN_BOTH</Align>

<Pos>95</Pos>

<HighPos>95</HighPos>

</X>

<Y>

<Align>WIDGET_ALIGN_LOW</Align>

<Pos>35</Pos>

<Size>30</Size>

</Y>

</Placement>

<TextStyle>

<multiline>true</multiline>

</TextStyle>

<FormatFileRef href="News.txt" />

<reactionOnPointing>description</reactionOnPointing>

</WidgetTextView>

Содержимое такое:

Code:

userMods.ToWString("<html><p>NEWS:</p>" .. 

string.rep(" ", 400) ..

userMods.FromWString(news) ..

string.rep(" ", 400) ..

"<br>DESCRIPTION:</br>" .. 

string.rep(" ", 400) ..

userMods.FromWString(desc) ..

"</html>")

В итоге html форматирования нет, теги отображаются в чистом виде. Что я не так делаю?

PS Мучаю все тот же GuildGui1b.

Link to comment
Share on other sites

Нет нет, теги нельзя указывать в самом тексте, иначе они и будут показаны "как есть". Тут есть только два варианта:

а) Вписать теги прямо в TXT-файл,привязанный к этому WidgetTextView, как сделано во всех аддонах.

Например, в файле Description.txt:

<header alignx = "left" fontsize="13"><tip_white><rs class="class"><r name="DESC"/><br><r name="DESC2"/></br></rs></tip_white></header>

В Lua вот так:

wtDescription:SetVal( "DESC", news )

wtDescription:SetVal( "DESC2", desc )

б) Никогда не видел этого в аддонах, но формат WidgetTextView можно задать прямо из Lua, функцией SetFormat():

wtDescription:SetFormat( "<header alignx = \"left\" fontsize=\"13\"><tip_white><rs class=\"class\"><r name=\"DESC\"/></rs></tip_white></header>" )

wtDescription:SetVal( "DESC", news )

wtDescription:SetVal( "DESC2", desc )

Link to comment
Share on other sites

  • 3 weeks later...
Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use