parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Вариант пообыстрее и с обрезкой html

Sikoz 22.02.2011 10:53

@wisetrim[str;len;match][locals]
^if(^str.length[]>$len){
#что считать концом. оставьте только точку и будут резаться предложения
$breakers[^s2h[,+.+:+!+ +;+]]
#убираем html? Сильно замедляет.
^if(def $match){$str[^str.match[(<[^^>])([^^>]*>|^$)][ig]{}]}
$str1[^str.left($len)]
#зачем работать со всем текстом, если максимальная длина слова - 23 буквы?
$str2[^str.mid($len;23)]
$sadd[]
^for[i](0;23){$tmp[^str2.mid($i;1)]^if(def $breakers.$tmp){^break[]}{$sadd[${sadd}$tmp]}}
$preresult[${str1}$sadd]
#об успешной обрезке сообщаем многоточием
^if(^preresult.length[]<^str.length[]){$multipoint[...]}
$result[${preresult}$multipoint]

}{$result[$str]}

#вместо так и не реализованного ^hash::create[string]
@s2h[str;div;def0][locals;result]
^if(!def $div){$div[ ]}^if(!def $def0){$def0(1)}
^if($str is hash){$result[$str]}{
$tmp[^str.split[$div;v]]
$tmph[^tmp.menu{^if(def $tmp.piece){$.[$tmp.piece]($def0)}}]
$result[^if($tmph is hash){$tmph}{^hash::create[]}]
}