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

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

E-mail: