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

1.1       paf         1: /**    @page String String
                      2: 
1.2     ! paf         3: В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item], 
        !             4: каждый помнит язык, на котором написан фрагмент.
        !             5: Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN),
        !             6: а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql] 
        !             7: считаются испачканными(String::Untaint_lang ::UL_TAINTED), 
        !             8: при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык.
        !             9: Строку могут записать в Request.wcontext, задав ей язык. 
        !            10: При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED], 
        !            11: а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык".
        !            12: скажем
1.1       paf        13: @verbatim
                     14: ^table:sql{insert into news (title) values ('$form:title')]
                     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), при этом будет все фрагменты строки
        !            23: насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку.
        !            24: Такое используется, например, для работы с именами файлов:
1.1       paf        25: @verbatim
                     26: ^table:load[$form:file_name]
                     27: @endverbatim
1.2     ! paf        28: здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME,
        !            29: при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах.
1.1       paf        30: 
1.2     ! paf        31: Обычным языком вывода является String::Untaint_lang::UL_USER_HTML, 
        !            32: исключение составляет CGI скрипт, который запускают вне веб-сервера,
        !            33: в этом случае используется язык UL_AS_IS.
1.1       paf        34: 
                     35: */

E-mail: