With a previous post, I had some trouble with the code-formatting in BlogEngine.NET. I didn't have time to investigate, so I quickly fixed it with some inline styling. But planning to post some more code in the future, I decided to look into it today. Quickly I found my problem: I had forgotten to put the language into the code-element. So in that particular case I added ':js' and it all worked fine.
Now I had code-formatting working, but I wasn't very pleased with the results. Having looked at the code, I found the options for adding line-numbers and alternating line-styles. A first issue was that the line-numbers didn't align correctly. I thought it would be a minor styling issue. But then, adding more lines of code, my whole page layout got messed up. After a quick look at the code I found the problem: an alternating row is started with a p-tag, but is ended with a div-tag. This is fixed with a small modification as demonstrated below:
Another thing I noticed, was that the tabs or spaces in front of a line didn't show. This happens because browsers render multiple spaces as a single space. The code formatter changes a tab into a number of spaces, which I decided to change as follows:
- In the same SourceFormat.cs, locate the following line (almost at the top of the method):
sb.Replace("\t", string.Empty.PadRight(_tabSpaces));
- Replace it with the following code:
StringBuilder tabSpaces = new StringBuilder();
for (int tabIndex = 0; tabIndex < _tabSpaces; tabIndex++)
{
tabSpaces.Append(" ");
}
sb.Replace("\t", tabSpaces.ToString());
- Again, save the changes and upload the file
This only correctly replaces tabs in the code, not spaces. I guess a better solution would be to leave the original Replace, and then replace all leading spaces with . But that's for another time ;-).