Diff for /parser3/src/doc/string.dox between versions 1.2 and 1.5

version 1.2, 2001/05/07 13:29:56 version 1.5, 2003/07/24 11:31:20
Line 1 Line 1
 /**     @page String String  /**     @page String String
   
 В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item],   В памяти строки[String] хранятся в виде букв, и списка фрагментов[String::Fragment] язык фрагмента+его длина.
 каждый помнит язык, на котором написан фрагмент.  Фрагменты, полученные из stdout скриптов считаются чистыми(String::Language ::L_CLEAN),
 Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN),  а от пользователя - из stderr скриптов, из environment, из form, с диска[table:load] или из sql сервера[table:sql] 
 а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql]   считаются испачканными(String::Language ::UL_TAINTED), 
 считаются испачканными(String::Untaint_lang ::UL_TAINTED),   при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят языки своих фрагментов.
 при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык.  Строку могут записать в Request::wcontext, задав ей язык. 
 Строку могут записать в Request.wcontext, задав ей язык.   При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[L_TAINTED], 
 При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED],   
 а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык".  а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык".
 скажем  скажем
 @verbatim  @verbatim
 ^table:sql{insert into news (title) values ('$form:title')]  ^void:sql{insert into news (title) values ('$form:title')]
 @endverbatim  @endverbatim
 при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang],  при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang],
 и при записи[Request::write_assign_lang] UL_TAINTED строки из $form:title фрагмента параметра  и при записи[Request::write_assign_lang] L_TAINTED строки из $form:title фрагмента параметра
 метода sql, находящегося в кавычках, получает язык UL_SQL.  метода sql, находящегося в кавычках, получает язык L_SQL.
   
 String можно преобразовать в обычную С-строку, используя String::cstr().  String можно преобразовать в обычную С-строку, используя String::cstr().
 При этом будут учтены языки фрагментов и произведены соответствующие вычищения.  Если задать String::cstr(String::L_UNSPECIFIED), то
 Также можно воспользоваться String::cstr(String::Untaint_lang), при этом будет все фрагменты строки  при преобразовании будут учтены языки фрагментов и произведены соответствующие вычищения.
 насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку.  Также можно воспользоваться String::cstr(String::Language) [по-умолчанию =L_AS_IS], 
 Такое используется, например, для работы с именами файлов:  при этом будет все фрагменты строки насильно будут считаться написанными на этом языке 
   безотносительно к указанному во фрагменте языку.
   Такое используется, например, для работы с именами файлов 
   [ВНИМАНИЕ: никогда и нигде не используйте эту конструкцию, если вам дороги ваши секретные файлы, 
   используется только для примера]:
 @verbatim  @verbatim
 ^table:load[$form:file_name]  $file[^table::load[$form:file_name]]
 @endverbatim  @endverbatim
 здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME,  здесь при обычной обработке $form:file_name вышел бы L_HTML|L_OPTIMIZE_BIT, а нужен L_FILE_SPEC,
 при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах.  при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах.
   
 Обычным языком вывода является String::Untaint_lang::UL_USER_HTML,   Обычным языком вывода является String::Language::L_HTML|String::Language::L_OPTIMIZE_BIT, 
 исключение составляет CGI скрипт, который запускают вне веб-сервера,  исключение составляет CGI скрипт, который запускают вне веб-сервера,
 в этом случае используется язык UL_AS_IS.  в этом случае используется язык String::Language::L_AS_IS.
   
 */  
   
   В фрагментах, язык которых помечен как OPTIMIZED (String::Language::L_OPTIMIZE_BIT), 
   при преобразовании в строку String::cstr  будут оптимизированы whitespace символы: 
   из нескольких идущих подряд символов будет оставлен первый, остальные в результат не попадут.
   
   При работе с char* считается, что он никогда не может быть 0.
   */

Removed from v.1.2  
changed lines
  Added in v.1.5


E-mail: