home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / RichText.ycp < prev    next >
Text File  |  2006-11-29  |  3KB  |  134 lines

  1. /**
  2.  * File:    modules/RichText.ycp
  3.  * Package:    yast2
  4.  * Summary:    Rich text manipulation routines
  5.  * Authors:    Michal Svec <msvec@suse.cz>
  6.  *        Stano Visnovsky <visnov@suse.cz>
  7.  * Flags:    Stable
  8.  *
  9.  * $Id: RichText.ycp 31242 2006-06-01 12:59:16Z locilka $
  10.  */
  11.  
  12. {
  13.  
  14. module "RichText";
  15. textdomain "base";
  16. import "String";
  17.  
  18. define string DropWS(string text) ``{
  19.     list<string> filteredlist = splitstring(text, "\n    ");
  20.     return String::CutBlanks(mergestring(filteredlist, " "));
  21. }
  22.  
  23. /**
  24.  * Convert a richtext string into a formatted plain text.
  25.  * @param richtext the text to be converted
  26.  * @return the converted text
  27.  */
  28. global define string Rich2Plain (string richtext) ``{
  29.     y2debug("richtext=%1", richtext);
  30.  
  31.     list<string> lparts = splitstring(DropWS(richtext), "<");
  32.     y2debug("lparts=%1", lparts);
  33.  
  34.     /* Am I in <LI>? */
  35.     boolean inli = false;
  36.  
  37.     /* Indentation level */
  38.     integer indents = 0;
  39.  
  40.     string result = "";
  41.     foreach (string lpart, lparts, ``{
  42.     integer s = find( lpart, ">" );
  43.     string tag = tolower(substring( lpart, 0, s ));
  44.  
  45.     /**** Handle tags *****/
  46.  
  47.     /* BR */
  48.     if( tag == "br" ) {
  49.         result = result + "\n";
  50.     }
  51.     /* P */
  52.     else if( tag == "p" ) {
  53.         result = result + "\n";
  54.     }
  55.     /* UL */
  56.     else if( tag == "ul" ) {
  57.         inli = true;
  58.         indents = indents + 1;
  59.     }
  60.     /* /UL */
  61.     else if( tag == "/ul" ) {
  62.         if(inli && indents == 1) result = result + "\n";
  63.         indents = indents - 1;
  64.         inli = false;
  65.     }
  66.     /* LI */
  67.     else if( tag == "li" ) {
  68.         if(inli) result = result + "\n";
  69.         inli = true;
  70.     }
  71.     /* /LI */
  72.     else if( tag == "/li" ) {
  73.         inli = false;
  74.         result = result + "\n";
  75.     }
  76.  
  77.     /**** Add the text *****/
  78.  
  79.     if(s != -1) lpart = String::CutBlanks(substring(lpart, s+1));
  80.     if(regexpmatch(lpart, "^[ \n    ]*$")) return;
  81.     if(lpart == " ") return;
  82.  
  83.     if(lpart != "" && inli) {
  84.         integer i = 1;
  85.         while(i < indents) {
  86.         result = result + "  ";
  87.         i = i + 1;
  88.         }
  89.         lpart = "* " + lpart;
  90.     }
  91.     // result = result + "[" + lpart + "]";
  92.     result = result + lpart;
  93.     });
  94.     result = String::CutBlanks(result);
  95.     if((size(result) > 0) && (substring(result, size(result)-1) != "\n"))
  96.     result = result + "\n";
  97.  
  98.     y2debug(result);
  99.     return result;
  100. }
  101.  
  102. /**
  103.  * Parse provided text and see if it contains richtext
  104.  * @param file file path
  105.  * @return symbol
  106.  */
  107. global symbol DetectRichText(string file )
  108. {
  109.     string text = "";
  110.  
  111.     if (SCR::Read(.target.size, file) > 0)
  112.     {
  113.         text = (string)SCR::Read(.target.string,  file );
  114.     }
  115.     else 
  116.     {
  117.         return `error;
  118.     }
  119.  
  120.     if (text == "")
  121.     {
  122.         return `empty;
  123.     }
  124.  
  125.     if (regexpmatch(text, "</.*>")) {
  126.         return `richtext;
  127.     } else {
  128.         return `plaintext;
  129.     }
  130. }
  131.  
  132. /* EOF */
  133. }
  134.