Advertisement
Guest User

Untitled

a guest
Nov 20th, 2011
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var str = '<p><a href="http://www.dk-kogebogen.dk/opskrifts-service/dagens_opskrift.php?personer=1">http://www.dk-kogebogen.dk/..</a></p><p><u><a href="http://www.google.dk/ig"><em>test</em></a></u></p><p><strong><s>nyt</s></strong></p>';
  2.  
  3. function NES_convertHTMLToBB(text) {
  4.     function parse() {
  5.         function parseTag(tag) {
  6.             // tag = '<tag attr=value attr2=value2>' (u.s.w. med attr'erne)
  7.             // eller '<tag>'
  8.             var tagmatch = /^<([a-z]+)>/.exec(tag);
  9.             // Har attr, else har ikke
  10.             if (tagmatch == null) {
  11.                 var tag2 = tag.substr(tag.indexOf(' ') + 1).substr(0, tag.length - 1),
  12.                     regmatch, tagattrs = {},
  13.                     tagreg = /([^= ]+)="([^"]+)"/g;
  14.                 while (regmatch = tagreg.exec(tag2)) {
  15.                     tagattrs[regmatch[1]] = regmatch[2];
  16.                 }
  17.                 return {
  18.                     tag: /^<([a-z]+) /.exec(tag)[1],
  19.                     attr: tagattrs
  20.                 }
  21.             } else {
  22.                 return {
  23.                     tag: tagmatch[1],
  24.                     attr: null
  25.                 }
  26.             }
  27.         }
  28.        
  29.         while (true) {
  30.             // Hvis nået slutningen
  31.             if (i >= len)
  32.                 return;
  33.            
  34.             s = text.substr(i);
  35.             l = s.indexOf('<');
  36.            
  37.             // Hvis løbet tør for HTML
  38.             if (l === -1) {
  39.                 t += s;
  40.                 return;
  41.             }
  42.            
  43.             t += text.substr(i, l);
  44.             i += s.indexOf('>') + 1;
  45.            
  46.             // Hvis nået et end-tag, else hvis nået et start-tag
  47.             if (s.substr(l + 1, 1) === '/') {
  48.                 // quote-halløj kommer her
  49.                 return;
  50.             } else {
  51.                 //console.log('start-tag: ' + s.substr(l));
  52.                 var obj = parseTag(s.substr(l, s.indexOf('>') + 1));
  53.                 switch (obj.tag) {
  54.                     case 'strong':
  55.                         t += '[b]';
  56.                         parse();
  57.                         t += '[/b]'
  58.                         break;
  59.                     case 'u':
  60.                         t += '[u]';
  61.                         parse();
  62.                         t += '[/u]'
  63.                         break;
  64.                     case 'em':
  65.                         t += '[i]';
  66.                         parse();
  67.                         t += '[/i]'
  68.                         break;
  69.                     case 's':
  70.                         t += '[s]';
  71.                         parse();
  72.                         t += '[/s]'
  73.                         break;
  74.                     case 'a':
  75.                         switch (obj.attr.data) {
  76.                             case 'NES_img':
  77.                                 t += '[url=' + obj.attr.href + ']' + obj.attr.href + ' (billede)[/url]';
  78.                                 i += 4;
  79.                                 break;
  80.                             case 'NES_ref':
  81.                                 t += obj.attr.href;
  82.                                 i += s.indexOf('>') + 1; // Ja, to gange!
  83.                                 break;
  84.                             default:
  85.                                 // Normal a, enten som [url] eller en url uden [url]
  86.                                 // url uden [url] bliver konverteret til en [url], men det er ikke svært at lave den rigtigt
  87.                                 t += '[url=' + obj.attr.href + ']';
  88.                                 parse();
  89.                                 t += '[/url]';
  90.                                 break;
  91.                         }
  92.                         break;
  93.                     default:
  94.                         console.log('NES: Parse fejlede. Data:');
  95.                         console.log(obj);
  96.                         return;
  97.                 }
  98.             }
  99.         }
  100.     }
  101.    
  102.     text = text.replace(/<\/p><p>/g, '\n\n').replace(/<\/p>|<p>/g, '').replace(/<img [^>]+>/g, '');
  103.     var t = '', // parsed text
  104.         i = 0,  // position i text
  105.         l = 0,  // position af '<' i s
  106.         s = '', // text.substr(i) aka bid af tekst, som arbejdes med
  107.         len = text.length;
  108.     // |--------- text ---------|
  109.     //              |-- s --|<   (s stopper ved den første '<')
  110.     // 0            i      i+l   (position set fra text)
  111.     //              0       l    (position set fra s)
  112.     // Længden af s er derfor i+l-i = l (medtager ikke '<')
  113.     parse();
  114.     return t;
  115. }
  116.  
  117. NES_convertHTMLToBB(str);
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement