В этой статье речь пойдёт о подсветке примеров кода AVR Ассемблера на страницах сайта с использованием технологии Prism.
Так как подсветка кода AVR Ассемблера в Prism ещё не была реализована, пришлось немного поработать. Сначала мы создали файл prism-asmavr.js. Основная работа свелась к созданию 2-x паттернов, один со списком команд AVR Assembler-а, а другой - со списком регистров микроконтроллеров AVR. Причём, за полноту этих паттернов я не ручаюсь, добавили всё что понадобилось на данный момент.
Prism.languages.asmAVR = {
'comment': /;.*/,
'directive': {
pattern: /\.\w+(?= )/,
alias: 'keyword'
},
'string': /(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,
'opcode': {
pattern: /\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|EOR|ICALL|IJMP|IN|INC|FMUL|FMULS|FMULSU|JMP|LD|LDI|LDS|LPM|LSL|LSR|MOV|MOVW|MUL|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|ST|STS|SUB|SUBI|SWAP|TST|WDR)\b/i,
alias: 'property'
},
'hexnumber': {
pattern: /#?\$[\da-f]{2,4}\b/i,
alias: 'string'
},
'binarynumber': {
pattern: /#?%[01]+\b/,
alias: 'string'
},
'decimalnumber': {
pattern: /#?\b\d+\b/,
alias: 'string'
},
'register': {
pattern: /\b(?:X|XH|XL|Y|YH|YL|Z|ZH|ZL|R0|R1|R2|R3|R4|R5|R6|R7|R8|R9|R10|R11|R12|R13|R14|R15|R16|R17|R18|R19|R20|R21|R22|R23|R24|R25|R26|R27|R28|R29|R30|R31|UDR0|UBRR0L|UBRR0H|UCSR0C|UCSR0B|UCSR0A|TWAMR|TWCR|TWDR|TWAR|TWSR|TWBR|ASSR|OCR2B|OCR2A|TCNT2|TCCR2B|TCCR2A|OCR1BL|OCR1BH|OCR1AL|OCR1AH|ICR1L|ICR1H|TCNT1L|TCNT1H|TCCR1C|TCCR1B|TCCR1A|DIDR1|DIDR0|ADMUX|ADCSRB|ADCSRA|ADCH|ADCL|TIMSK2|TIMSK1|TIMSK0|PCMSK1|PCMSK2|PCMSK0|EICRA|PCICR|OSCCAL|PRR|CLKPR|WDTCSR|SREG|SPL|SPH|SPMCSR|MCUCR|MCUSR|SMCR|ACSR|SPDR|SPSR|SPCR|GPIOR2|GPIOR1|OCR0B|OCR0A|TCNT0|TCCR0B|TCCR0A|GTCCR|EEARH|EEARL|EEDR|EECR|GPIOR0|EIMSK|EIFR|PCIFR|TIFR2|TIFR1|TIFR0|PORTD|DDRD|PIND|PORTC|DDRC|PINC|PORTB|DDRB|PINB)\b/i,
alias: 'variable'
}
};
Файл 1. prism-asmavr.js
Следующий js файл был получен с помощью команды:
npm run build
Утилита npm сжимает JavaScript файлы, удаляя из них все пробелы и переводы строки, вытягивая весь код в одну строчку.
Prism.languages.asmavr={comment:/;.*/,directive:{pattern:/\.\w+(?= )/,alias:"keyword"},string:/(["'`])(?:\\.|(?!\1)[^\\\r\n])*\1/,opcode:{pattern:/\b(?:ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|ADC|ADD|ADIW|AND|ANDI|ASR|BCLR|BLD|BRBC|BRBS|BRCC|BRCS|BREQ|BRGE|BRHC|BRHS|BRID|BRIE|BRLO|BRLT|BRMI|BRNE|BRPL|BRSH|BRTC|BRTS|BRVC|BRVS|BSET|BST|CALL|CBI|CBR|CLC|CLH|CLI|CLN|CLR|CLS|CLT|CLV|CLZ|COM|CP|CPC|CPI|CPSE|DEC|EOR|ICALL|IJMP|IN|INC|FMUL|FMULS|FMULSU|JMP|LD|LDI|LDS|LPM|LSL|LSR|MOV|MOVW|MUL|NEG|NOP|OR|ORI|OUT|POP|PUSH|RCALL|RET|RETI|RJMP|ROL|ROR|SBC|SBCI|SBI|SBIC|SBIS|SBIW|SBR|SBRC|SBRS|SEC|SEH|SEI|SEN|SER|SES|SET|SEV|SEZ|SLEEP|ST|STS|SUB|SUBI|SWAP|TST|WDR)\b/i,alias:"property"},hexnumber:{pattern:/#?\$[\da-f]{2,4}\b/i,alias:"string"},binarynumber:{pattern:/#?%[01]+\b/,alias:"string"},decimalnumber:{pattern:/#?\b\d+\b/,alias:"string"},register:{pattern:/\b(?:X|XH|XL|Y|YH|YL|Z|ZH|ZL|R0|R1|R2|R3|R4|R5|R6|R7|R8|R9|R10|R11|R12|R13|R14|R15|R16|R17|R18|R19|R20|R21|R22|R23|R24|R25|R26|R27|R28|R29|R30|R31|UDR0|UBRR0L|UBRR0H|UCSR0C|UCSR0B|UCSR0A|TWAMR|TWCR|TWDR|TWAR|TWSR|TWBR|ASSR|OCR2B|OCR2A|TCNT2|TCCR2B|TCCR2A|OCR1BL|OCR1BH|OCR1AL|OCR1AH|ICR1L|ICR1H|TCNT1L|TCNT1H|TCCR1C|TCCR1B|TCCR1A|DIDR1|DIDR0|ADMUX|ADCSRB|ADCSRA|ADCH|ADCL|TIMSK2|TIMSK1|TIMSK0|PCMSK1|PCMSK2|PCMSK0|EICRA|PCICR|OSCCAL|PRR|CLKPR|WDTCSR|SREG|SPL|SPH|SPMCSR|MCUCR|MCUSR|SMCR|ACSR|SPDR|SPSR|SPCR|GPIOR2|GPIOR1|OCR0B|OCR0A|TCNT0|TCCR0B|TCCR0A|GTCCR|EEARH|EEARL|EEDR|EECR|GPIOR0|EIMSK|EIFR|PCIFR|TIFR2|TIFR1|TIFR0|PORTD|DDRD|PIND|PORTC|DDRC|PINC|PORTB|DDRB|PINB)\b/i,alias:"variable"}};
Файл 2. prism-asmavr.mini.js
Из файла 2 мы скопировали весь код и добавили в конец файла prism.js в шаблон нашего сайта.