Annotation of parser3/src/doc/string.dox, revision 1.4.22.1

1.1       paf         1: /**    @page String String
                      2: 
1.4.22.1! paf         3: В памяти строки[String] хранятся в виде букв, и списка фрагментов[String::Fragment] язык фрагмента+его длина.
        !             4: Фрагменты, полученные из stdout скриптов считаются чистыми(String::Language ::L_CLEAN),
1.3       paf         5: а от пользователя - из stderr скриптов, из environment, из form, с диска[table:load] или из sql сервера[table:sql] 
1.4.22.1! paf         6: считаются испачканными(String::Language ::UL_TAINTED), 
        !             7: при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят языки своих фрагментов.
1.3       paf         8: Строку могут записать в Request::wcontext, задав ей язык. 
1.4.22.1! paf         9: При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[L_TAINTED], 
1.2       paf        10: а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык".
                     11: скажем
1.1       paf        12: @verbatim
1.3       paf        13: ^void:sql{insert into news (title) values ('$form:title')]
1.1       paf        14: @endverbatim
1.2       paf        15: при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang],
1.4.22.1! paf        16: и при записи[Request::write_assign_lang] L_TAINTED строки из $form:title фрагмента параметра
        !            17: метода sql, находящегося в кавычках, получает язык L_SQL.
1.1       paf        18: 
1.2       paf        19: String можно преобразовать в обычную С-строку, используя String::cstr().
1.4.22.1! paf        20: Если задать String::cstr(String::L_UNSPECIFIED), то
        !            21: при преобразовании будут учтены языки фрагментов и произведены соответствующие вычищения.
        !            22: Также можно воспользоваться String::cstr(String::Language) [по-умолчанию =L_AS_IS], 
        !            23: при этом будет все фрагменты строки насильно будут считаться написанными на этом языке 
        !            24: безотносительно к указанному во фрагменте языку.
1.3       paf        25: Такое используется, например, для работы с именами файлов 
                     26: [ВНИМАНИЕ: никогда и нигде не используйте эту конструкцию, если вам дороги ваши секретные файлы, 
                     27: используется только для примера]:
1.1       paf        28: @verbatim
1.3       paf        29: $file[^table::load[$form:file_name]]
1.1       paf        30: @endverbatim
1.4.22.1! paf        31: здесь при обычной обработке $form:file_name вышел бы L_HTML|L_OPTIMIZE_BIT, а нужен L_FILE_SPEC,
1.2       paf        32: при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах.
1.1       paf        33: 
1.4.22.1! paf        34: Обычным языком вывода является String::Language::L_HTML|String::Language::L_OPTIMIZE_BIT, 
1.2       paf        35: исключение составляет CGI скрипт, который запускают вне веб-сервера,
1.4.22.1! paf        36: в этом случае используется язык String::Language::L_AS_IS.
1.3       paf        37: 
1.4.22.1! paf        38: В фрагментах, язык которых помечен как OPTIMIZED (String::Language::L_OPTIMIZE_BIT), 
        !            39: при преобразовании в строку String::cstr  будут оптимизированы whitespace символы: 
        !            40: из нескольких идущих подряд символов будет оставлен первый, остальные в результат не попадут.
        !            41: */

E-mail: