W końcu ruszyłem swoje cztery litery (a w zasadzie dwie moje ręce) i napisałem skrypt, który koloruje składnię kilku języków programowania, takich jak: C++, Libre Office BASIC, PHP oraz html. Samego skryptu nie publikuję bo raz, że trochę nad nim posiedziałem a dwa, że jest on zoptymalizowany pod moją stronę.
Kolorowanie składni kodu napisanego w C++
Poniżej zamieszczam przykładowy kod źródłowy prostego programu, aby pokazać, jak mój skrypt koloruje kod napisany w tym języku:
// Kod programu liczącego liczbę <b>π</b> z zadanym odchyleniem maksymalnym z wykorzystaniem wzoru Leibniz-a
#define _USE_MATH_DEFINES
#include <math.h>
#include <stdlib.h>
#include <iostream>
int main()
{
double pi = 0;
int n = 1;
double prec = 0;
std::cout<<"Maksymalne odchylenie:";
std::cin>>prec;
while(abs(pi - M_PI) > prec){
pi += 4 * (n % 2 == 0? -1.0: 1.0) / (2 * n - 1);
printf("%.12f %.12f %i
",pi,abs(pi - M_PI),n);
n++;
}
getchar();
getchar();
return 0;
}
// Skrypt do tworzenia wykresów słupkowych
// Strona domowa: http://obliczeniowo.com.pl/?id=165---skrypt-klasy-tworzacej-wykres-slupkowy
header('Content-type: image/png');
class cValue{
public $v;
public $color;
public $color2;
public $color3;
public $name;
public function __construct($v, $color, $color2, $color3, $name){
$this->v = $v;
$this->color = $color;
$this->color2 = $color2;
$this->color3 = $color3;
$this->name = $name;
}
}
Function SetColor(k as double, w as double)
Dim document as object
Dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args2(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "BackgroundColor"
args(0).Value = Int(255 * w / k) * 256 * 256 + Int(255 - 255 * w / k) * 256
dispatcher.executeDispatch(document, ".uno:BackgroundColor","",0,args())
End Function
Sub Generator
Dim document as object
Dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "ToPoint"
args(0).Value = "$B$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args())
Dim i as integer
Dim j as integer
For j = 1 To 10
For i = 1 To 10
Dim str as string
Dim w as double
w = rnd()
str = w
args(0).Name = "StringName"
args(0).Value = str
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args())
SetColor(1, w)
dispatcher.ExecuteDispatch(document, ".uno:GoDown", "" , 0 ,Array())
Next i
For i = 1 To 10
dispatcher.ExecuteDispatch(document, ".uno:GoUp", "", 0, Array())
Next i
dispatcher.ExecuteDispatch(document, ".uno:GoRight", "", 0, Array())
Next j
End Sub