2013-09-05 6 views
5

Ci sono molti evidenziatori di sintassi, ma qualcosa che non ho visto è uno che supporta l'evidenziazione delle stringhe di query!Evidenziazione della sintassi javascript o PHP delle stringhe di query?

Sto cercando qualcosa da usare quando si documenta la mia API e essendo ben API ci sono molte stringhe di query coinvolte. così. Quali sono gli evidenziatori di sintassi javascript o PHP che supportano le stringhe di query?

Ho esaminato Google code prettify, highlight.js, prismjs e pochi altri, ma nessuno di loro sembrano essere in grado di evidenziare questo:

/oauth/authorize?client_id=wG2X7q1qz74zdSbgiFkyL5JFOeloQwg2opfrPfaJ&response_type=code&redirect_uri=https%3A%2F%2Fmyapplication.com%2Foauth&scope=account%2Ccompetition%2Cvideos&state=d41d8cd98f00b204e9800998ecf8427e 

Che dovrebbe evidenziare tutte le chiavi su un colore, e tutti i valori in un altro con la & = essere di nuovo un colore diverso ... qualcosa come:? '?' enter image description here

+1

Damned buona domanda. –

+1

... Ho dovuto documentare lo stesso e non avrei mai nemmeno pensato di chiedere ... In effetti, perché Chrome/Firefox non codifica l'intera barra degli indirizzi? Simile, ma non la stessa richiesta: https://bug184074.bugzilla.mozilla.org/attachment.cgi?id=143118 –

risposta

1

per quanto mi riguarda tutti i personaggi come, '&' e '=' dovrebbe essere sostituito in nam es/valori in un URL corretto. Questo rende super facile da analizzare.

Allora perché non inventare qualcosa per conto proprio:

function parseQuery(query){ 
    parsed = query.split('?'); 
    if (parsed.length > 1) { 
     parsed[1] = parsed[1].split('&'); 
     for(i in parsed[1]) { 
      parsed[1][i] = parsed[1][i].split('='); 
     } 
    } 
    retStr = '<span class="path">' + parsed[0] + '</span>'; 
    if (parsed.length > 1) { 
     retStr += '<span class="qm">?</span>'; 
     first = true; 
     for(i in parsed[1]) { 
      if (first) { 
       first = false; 
      } else { 
       retStr += '<span class="amp">&</span>'; 
      } 
      retStr += '<span class="name">' + parsed[1][i][0] + '</span>'; 
      if (parsed[1][i].length > 1) { 
       retStr += '<span class="eq">=</span>' + 
       '<span class="value">' + parsed[1][i][1] + '</span>'; 
      } 
      if (parsed[1][i].length > 2) { 
       for (var j = 2; j < parsed[1][i].length; j++) { 
         retStr += '<span class="eq">=</span>'; 
         retStr += '<span class="error">' + parsed[1][i][j] + '</span>'; 
       } 
      } 
     } 
    } 
    if (parsed.length > 2) { 
     for (var i = 2; i < parsed.length; i++) { 
       retStr += '<span class="qm">?</span>'; 
       retStr += '<span class="error">' + parsed[i] + '</span>'; 
     } 
    } 
    return retStr; 
} 

http://jsfiddle.net/YqrpV/1/

+0

Come cambieresti questo per supportare l'evidenziazione su più righe per motivi di formattazione? come in http://jsfiddle.net/YqrpV/2/ – Hailwood

+1

cambiato b.innerHTML in b.textContent quando si ottiene e sembra che funzioni bene ora. parseQuery opera su una stringa e innerHTML sta passando & http://jsfiddle.net/YqrpV/3/ – fsw

+0

Double awesome; Avevo provato innerText ma non funzionava, non sapevo di textContent! – Hailwood