Diff for /parser3/src/doc/string.dox between versions 1.1 and 1.7

version 1.1, 2001/05/03 15:05:20 version 1.7, 2012/09/12 14:30:59
Line 1 Line 1
 /**     @page String String  /**     @page String String
   
 В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item],   In memory strings [String] are stored as letters [actually, cord objects from libgd cord library, see cord.h file] 
 каждый помнит язык, на котором написан фрагмент.  plus list of fragments [String::Languages] which contain language of fragment+it's length.
 Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN),  
 а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql]   Fragments that are received from stdout of scripts are considered clean(String::Language ::L_CLEAN),
 считаются испачканными(String::Untaint_lang ::UL_TAINTED),   but those from visitor - from stderr of scripts, from environment, from forms,
 при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык.  from dist [table:load] or from sql server [table:sql] are considered tainted(String::Language::L_TAINTED),
 Строку могут записать в Request.wcontext, задав ей язык.   when string involved in different operations, it can be split, but all resulting parts 
 При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED],   still remember languages of their fragments.
 а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык".  String can be written to Request::wcontext, then part of fragments can change their language. 
 скажем  Language is set to those fragments, which were not in particular language, but just tainted[L_TAINTED], 
   they become "dirty, but we need what to do to make them clean, that is we know their language".
   Say,
 @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],  when parameter of sql is processed, with help of Temp_lang 
 и при записи[Request::write_assign_lang] UL_TAINTED строки из $form:title фрагмента параметра  we set "current language" [Request::flang], and when string got written [Request::write_assign_lang] 
 метода sql, находящегося в кавычках, получает язык UL_SQL.  L_TAINTED string from $form:title part of parameter of sql-method, the one in apostrophes, got assigned an L_SQL language.
   
 String можно преобразовать в обычную С-строку, используя String::cstr().  String can be converted to normal string using String::cstr().
 При этом будут учтены языки фрагментов и произведены соответствующие вычищения.  If it is called with this parameter String::cstr(String::L_UNSPECIFIED) then
 Также можно воспользоваться String::cstr(String::Untaint_lang), при этом будет все фрагменты строки  when it will be converted, fragment languages would be taken into consideration, and 
 насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку.  corresponding cleansing performed.
 Такое используется, например, для работы с именами файлов:  Particular language can also be specified String::cstr(String::Language) [by default =L_AS_IS], 
   then all string fragments would forcibly considered to be in that language, 
   regardles of the language inside fragment.
   
   This is used, for instance, in work with file names
   [ATTENTION: never ever use this construction if you care about your secret files,
   it is used only as an example]:
 @verbatim  @verbatim
 ^table:load[$form:file_name]  $file[^table::load[$form:file_name]]
 @endverbatim  @endverbatim
 здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME,  here with normal $form:file_name processing would be L_HTML|L_OPTIMIZE_BIT, while we need L_FILE_SPEC,
 при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах.  and it would be stupid everywhere to do like we do in table:sql, insisting on {} parameters.
   
   Usual language of output is String::Language::L_HTML|String::Language::L_OPTIMIZE_BIT, 
   exception is CGI script, which got started outside of web-server,
   in that case language String::Language::L_AS_IS is used.
   
 Обычным языком вывода является String::Untaint_lang::UL_USER_HTML,   In fragments where language is marked as OPTIMIZED (String::Language::L_OPTIMIZE_BIT), 
 исключение составляет CGI скрипт, который запускают вне веб-сервера,  when they are converted into string String::cstr white spaces would be optimized:
 в этом случае используется язык UL_AS_IS.  out of several consequent characters would be left only first, others would be wiped off the result.
   
 */  
   
   When code works with char* it is assumed it is can never be 0.
   k
   */

Removed from v.1.1  
changed lines
  Added in v.1.7


E-mail: