Форматирование для отображения исходного кода на веб-странице - PullRequest
5 голосов
/ 24 января 2010

Я работаю над программой командной строки Markdown, и я хотел бы отформатировать блоки исходного кода в выводе html немного лучше, чем простой <pre><code>.....

Мои критерии:

  1. Я хочу, чтобы номера строк отображались перед каждой строкой
  2. Я хочу, чтобы сам код можно было выбирать, чтобы я мог копировать только код (а не номера строк) в буфер обмена

Я пытался использовать DIV, поскольку таблицы, кажется, плохо форматируются, но я открыт для всего.

Что я пробовал:

  • Таблица с одной строкой, ячейка 1 представляла собой блок номера строки с предварительно отформатированным кодом, а ячейка 2 - исходный код. Проблема: первый столбец с номерами строк неизменно занимал много места (автонастройка ширины кажется запутанной)
  • Таблица с несколькими строками, такая же проблема, как у таблицы с 1 строкой
  • DIV, я просто не могу заставить DIV планировать так, как я хочу их

Может кто-нибудь дать мне указатель на то, как получить то, что я хочу?

Вот пример (с очевидным ограничением, которое я использую Markdown, чтобы показать пример здесь):

01 |  Source code line 1
02 |  Source code line 2
03 |  Last line of source code

Теперь, если я нажму и выберу первую строку и перетащу вниз на несколько строк, я не хочу, чтобы выборка включала столбец с номером строки, иначе это было бы легко.

Итак, есть указатели?

Одна дополнительная функция, которая мне не нужна, заключается в том, что если я сделаю окно слишком узким, чтобы содержать исходный код, мне не нужно его разбивать на две строки. Единственный способ понять, как эта функция будет работать, - это отформатировать каждую строку по отдельности, а не по каждому столбцу в отдельности, чтобы номера строк также корректировались в своем положении при разрыве строки. Поскольку я хочу иметь возможность копировать только исходный код, я полагаю, что вместо этого мне нужно отформатировать каждый столбец.

Вот что я пробовал:

<html><body>
<style>
.lines
{
    background-color: #c0c0ff;
    border-left: 1px solid black;
    border-top: 1px solid black;
    border-bottom: 1px solid black;
    float: left;
    border-right: 1px solid #a0a0a0;
    margin-left: 20px;
    padding-left: 2px;
    padding-right: 2px;
}
.code
{
    background-color: #c0c0ff;
    border-top: 1px solid black;
    border-bottom: 1px solid black;
    float: left;
    padding-left: 2px;
}
</style>

<pre class='lines'><code>01
02
03
 SELECT *
FROM TABLE
WHERE A = B

Это проблема с цветом фона, я бы хотел, чтобы цвет фона продолжался до правой части окна браузера, но вместо этого он останавливался прямо справа от кода, т.е. как то так:

+----+-------------+
| 01 | SELECT *    |
| 02 | FROM TABLE  |
| 03 | WHERE A = B |
+----+-------------+

когда я хотел бы что-то вроде этого:

+----+--------------------------------------------------------------------------+
| 01 | SELECT *                                                                 |
| 02 | FROM TABLE                                                               |
| 03 | WHERE A = B                                                              |
+----+--------------------------------------------------------------------------+

1 Ответ

4 голосов
/ 24 января 2010

Вы можете создать отдельный тег <pre> для номеров строк и использовать float: left, чтобы сделать его смежным с <pre> с источником.

РЕДАКТИРОВАТЬ : Демо
2 и РЕДАКТИРОВАТЬ : Демонстрация с полным фоном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...