eXeL@B —› Программирование —› Перенос строк |
Посл.ответ | Сообщение |
|
Создано: 09 августа 2010 11:33 · Личное сообщение · #1 |
|
Создано: 09 августа 2010 11:55 · Поправил: Coderess · Личное сообщение · #2 |
|
Создано: 09 августа 2010 12:36 · Личное сообщение · #3 |
|
Создано: 09 августа 2010 15:02 · Личное сообщение · #4 Coderess чтоб было понятнее -пишу с нуля на асме под текстовый режим вот есть у меня строка допустим длиной 11 символов (9 букв и 2 символа конца строки) пусть есть окно шириной 10 символов в которое я вывожу этот текст если я вывожу побайтно, то эта строка займет две линейки - первую целиком и один символ второй (остальное добиваю пробелами) если же фильтровать эти два байта - то как ??? - как организовать объединение двух строк разделенных EOL и как разбить строку на две Coderess пишет: Пока не(конец_файла) { пока не(конец_строки) { читаем строку; } } у меня несколько по другому - читаю небольшой текстовый файл целиком в буфер курсор связывается со смещением относительно начала буфера если применять побайтный подход, то все более менее решается, но некрасиво - два байта с ероглифами портят картину если фильтровать EOL то как на него навести курсор чтобы удалить ??? |
|
Создано: 09 августа 2010 15:25 · Поправил: HandMill · Личное сообщение · #5 Rockphorr пишет: под текстовый режим если мне не изменяет память - вы обычно пишите для консольного режима(если текстовый и консольный это одно и тоже - прошу прощения) Azur1d пишет: Тоже не понял вопроса. Перенос строки не отображается, так что какая разница что и где разрывает его? Я так понял ТС желает отображать символ "0x0A" в том случае если последующий символ не равен "0x0D" и ширина виджета позволяет произвести вместить в себе отображение этого символа. Rockphorr пишет: если я вывожу побайтно, то эта строка займет две линейки - первую целиком и один символ второй (остальное добиваю пробелами) если же фильтровать эти два байта - то как ??? Ну допустим вот такой алгоритм: Code:
----- все багрепорты - в личные сообщения |
|
Создано: 09 августа 2010 15:44 · Личное сообщение · #6 Rockphorr Тоже не понимающий, что надо смотреть не на 0x0D, 0x0A, а только и исключительно на 0x0A. Т.к. 0x0D это не фича виндовых редакторов, а символ перевода каретки на начало строки. Не знаю зачем виндовые редакторы ее суют постоянно, но мой совет опираться только на байт на 0x0A , конечно если он не экранирован |
|
Создано: 09 августа 2010 16:05 · Поправил: Rockphorr · Личное сообщение · #7 Azur1d пишет: Тоже не понял вопроса. Перенос строки не отображается, так что какая разница что и где разрывает его? проблема в том как навести курсор на символ EOL (безразлично один это байт или 2) чтоб например его удалить я только что посмотрел в нотепаде - он подлец позволяет поставить курсор до символа и после а так как в текстовом режиме такой вкусности нету то остается добавить справа поле в 1 символ, куда будет заходить курсор в случае когда строка превышает ширину виджета на 2 символа eol |
|
Создано: 09 августа 2010 16:14 · Поправил: Rockphorr · Личное сообщение · #8 HandMill пишет: # if(((i+1)<=iFileLen)&&(*cANSIstring[i+1]!=0x0D)) // Если счётчик последующего символа не превышает # // размер файла и последующий символ не равен 0x0D # { # // измеряем ширину виджета и длинну строки (в пикселах или как вашей душе угодно) # // если не вмещается - тогда увеличиваем счётчик строк и выводим следующий символ с новой строки # } # else # // нормально отображаем символ ветка иначе меня смущает - какже мы "// нормально отображаем символ [/i]" если находимся за пределами буфера ??? ЗЫ: давайте возьмем паузу - я приведу свои наработки в читаемый вид и тогда продолжим предметно |
|
Создано: 09 августа 2010 16:24 · Поправил: HandMill · Личное сообщение · #9 Code:
[i]Rockphorr пишет: ЗЫ: давайте возьмем паузу - я приведу свои наработки в читаемый вид и тогда продолжим предметно давайте ----- все багрепорты - в личные сообщения |
|
Создано: 09 августа 2010 16:48 · Личное сообщение · #10 Я опять нифига не понял - зачем тебе отборажать LF/CR ? Rockphorr пишет: а так как в текстовом режиме такой вкусности нету то остается добавить справа поле в 1 символ, куда будет заходить курсор в случае когда строка превышает ширину виджета на 2 символа eol А в текстовом режиме есть другая вкусность - BackSpace удаляет символ слева от курсора, Delete удаляет символ под курсором. sys_dev пишет: 0x0D это не фича виндовых редакторов, а символ перевода каретки на начало строки. Не знаю зачем виндовые редакторы ее суют постоянно Потому что 0x0A - это всего лишь line feed - перевод курсора на строку вниз с сохранением позиции, чтобы вернуть курсор в начало строки используется дополнительно carriage return. Да, в зависимости от реализации достаточно одного символа, но этот подход гарантированно правильный. |
|
Создано: 09 августа 2010 20:57 · Личное сообщение · #11 |
|
Создано: 09 августа 2010 21:02 · Личное сообщение · #12 |
|
Создано: 10 августа 2010 08:19 · Личное сообщение · #13 |
|
Создано: 10 августа 2010 10:55 · Личное сообщение · #14 |
|
Создано: 11 августа 2010 02:51 · Личное сообщение · #15 Vamit пишет: Только, вообще-то правильно наоборот - 0D 0A А мож он под мак пишет По проблеме - может просто вообще не отображать (имеется ввиду не заменять на пробел итп), просто при нажатии на del находясь перед переводом или backspace находясь после него, "убирать" разрыв строк. В случае когда он на границе (я так понимаю там wordwrap у виджета) при первом нажатии "ничего не делать", а дальше символы тереть. |
|
Создано: 11 августа 2010 14:32 · Поправил: Rockphorr · Личное сообщение · #16 Вот более предметно некрасивое побайтное решение, еще не полное - сролинг глючит в атаче фрагмент исходника и скомпилированный exe с int 3 в том же месте где она стоит в фрагменте исходника с нетерпением жду конструктивной критики http://www.exelab.ru/f/action=vthread&forum=12&topic=15903 &page=-1#14 Code:
|
|
Создано: 11 августа 2010 14:37 · Личное сообщение · #17 Zorn пишет: может просто вообще не отображать (имеется ввиду не заменять на пробел итп), просто при нажатии на del находясь перед переводом или backspace находясь после него, "убирать" разрыв строк. В случае когда он на границе (я так понимаю там wordwrap у виджета) при первом нажатии "ничего не делать", а дальше символы тереть. вы б описали вашу логику перемещения курсора с учетом скролинга в виде алгоритма |
|
Создано: 12 августа 2010 19:50 · Поправил: Isaev · Личное сообщение · #18 |
|
Создано: 13 августа 2010 09:06 · Поправил: Rockphorr · Личное сообщение · #19 |
|
Создано: 13 августа 2010 09:45 · Личное сообщение · #20 |
|
Создано: 13 августа 2010 11:11 · Личное сообщение · #21 Vamit если вы про демку то там скролинг в зачаточном состоянии - к курсору добавляются величины кратные ширине вот фрагмент уже приведенного кода отвечающего за скролл Code:
|
|
Создано: 16 августа 2010 16:03 · Личное сообщение · #22 кодил все выходные - в результате скролинг вперед начал работать сносно - к курсору добавляются величины кратные ширине (ну или просто ширина линии текста) - при выходе за границу отображаемого фрагмента автоматически рассчитывается сколько строк надо прокрутить, единственная заморочка, в том если ширина большая а строки короткие то одно нажатие вниз приводит к сдвигу сразу на несколько строк, что не совсем адекватно с точки зрения юзера завтра выложу |
|
Создано: 23 августа 2010 09:37 · Личное сообщение · #23 |
|
Создано: 20 ноября 2010 19:56 · Личное сообщение · #24 |
|
Создано: 16 мая 2012 11:55 · Личное сообщение · #25 |
|
Создано: 16 мая 2012 13:31 · Поправил: Alchemistry · Личное сообщение · #26 |
|
Создано: 16 мая 2012 16:34 · Поправил: Rockphorr · Личное сообщение · #27 |
eXeL@B —› Программирование —› Перенос строк |