Встраивание текста в AS2, например HEREDOC или CDATA

Я загружаю текстовый файл в строковую переменную с помощью LoadVars (). Для окончательной версии кода я хочу иметь возможность поместить этот текст как часть кода ActionScript и назначить его строке вместо загрузки из внешнего файла.

Что-то вроде синтаксиса HEREDOC в PHP или CDATA в AS3 (http://dougmccune.com/blog/2007/05/15/multi-line-strings-in-actionscript-3/)

Быстрые и грязные решения, которые я нашел, - это поместить текст в текстовый объект в мувиклипе, а затем получить значение, но мне это не нравится

Кстати: текст многострочный и может включать одинарные и двойные кавычки.

Спасибо!


person Cristian    schedule 21.04.2011    source источник
comment
Я не понимаю, почему вы не можете использовать CDATA ...   -  person Kodiak    schedule 21.04.2011
comment
Не знаете, как это сделать в AS2, вы можете привести мне пример?   -  person Cristian    schedule 21.04.2011
comment
Ой, извините ... AS2 был частью вашего вопроса, который мой мозг отказывался вычислять ...   -  person Kodiak    schedule 22.04.2011
comment
Перейдите на AS3. На самом деле бессмысленно больше что-либо разрабатывать в AS2. Возьмите на себя инициативу, научитесь этому и усвойте   -  person The_asMan    schedule 22.04.2011
comment
Спасибо за очень полезный комментарий. К сожалению, нет времени перестраивать все в AS3 (включая код, который не принадлежит вам), когда вам нужно выполнить поставку за неделю.   -  person Cristian    schedule 22.04.2011


Ответы (3)


Я думаю, что в AS2 единственный способ сделать это грязным. В AS3 можно встраивать ресурсы с помощью тега Embed, но, насколько мне известно, не в AS2.

Если это окончательная версия, и это означает, что вы больше не хотите редактировать текст, вы можете экранировать символы и использовать \ n в качестве разрыва строки.

var str = "\'one\' \"two\"\nthree";
trace(str);

выходы:

'one' "two"
three

Теперь просто скопируйте текст в свой любимый текстовый редактор и измените все 'и "на \' и \", а также перенос строки на \ n.

person anemgyenge    schedule 21.04.2011
comment
Это было первое решение, которое пришло мне в голову, но оно мне понравилось даже меньше, чем копирование / вставка в текстовый объект. Кстати: текст длинный (50k +), так что это создаст очень длинную строку. И было бы труднее редактировать каждый раз, когда что-то нужно поправить. Спасибо, в любом случае! - person Cristian; 22.04.2011
comment
Без проблем. Вы сказали о последней версии кода - это означает, что вы не хотите изменять текст. Кроме того, независимо от длины вашего текста, это единственное решение для вставки текста в скрипте в качестве переменной. И так, как вы этого хотели. - person anemgyenge; 22.04.2011
comment
Это финал на моей стороне, но не на стороне клиентов. Они все еще могут захотеть что-то подправить после того, как я доставлю. Поэтому я ищу решение, которое можно было бы легко изменить в случае необходимости. Пока лучшее, что я придумал, - это поместить его в текстовый объект, что является неприятным приемом, но работает. Но я подумал, что можно сделать что-то вроде heredoc, что было бы намного лучше. К сожалению, это невозможно. - person Cristian; 22.04.2011
comment
Я понимаю. Если клиенты справятся с этим, ваше решение будет лучшим. Особенно, если они не программисты и не сценаристы. Они могут видеть весь текст в текстовом поле и редактировать его. Почему так важно встраивать во флеш-память текст размером 50К, особенно если он меняется? Нет возможности загрузить из внешнего файла? - person anemgyenge; 22.04.2011
comment
Им нужен один SWF-файл, содержащий все это. Кстати: большое спасибо, что нашли время ответить :) - person Cristian; 22.04.2011

Кристиан, решение anemgyenge работает, когда вы понимаете, что это одна строка. Его можно выбрать и заменить с помощью простой операции.

Не редактируйте документ в редакторе кода. Отредактируйте документ в редакторе документов и создайте процесс, который преобразует его в длинную строку (скажем, запустив его с помощью быстрого сценария PHP). Возьмите преобразованную струну и вставьте ее поверх старой. При необходимости повторите.

Это далеко не идеально с точки зрения долгосрочного управления, особенно если обслуживание кода передается без передачи парсера, но это позволяет обойти некоторые из ваших проблем с обслуживанием.

person LetMyPeopleCode    schedule 13.06.2011
comment
Привет, Грег, спасибо. Я использовал решение, описанное в вопросе (размещение текста во фрагменте ролика), и это помогло. С этого момента собираюсь использовать AS3 (пока другой клиент не потребует AS2). Ваше здоровье! - person Cristian; 14.06.2011

Используйте новую пару кавычек в каждой строке и добавьте пробел в качестве разделителя слов:

var foo = "Example of string " +
"spanning multiple lines " +
"using heredoc syntax."

Есть проект, который может помочь добавить частичную поддержку E4X в ActionScript 2:

А также проект, который добавляет поддержку E4X в Haxe, который может компилироваться для цели JavaScript:

person Community    schedule 19.01.2013