<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12567&amp;type=atom" />
	<updated>2017-03-27T08:34:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12567</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114277#p114277" />
			<content type="html"><![CDATA[<p>Работает сие чудо так. Выделяем текст скрипта, нажимаем Alt+Shift+A. Выскакивает окно ввода со сгенерированным из заголовка окна текстом. В заголовке окна отображается папка сохранения и параметры сохранения. Если имя файла уже есть - окно вылазит снова. Такие же сочетания есть для батников, регфайлов и можно дописать для чего угодно.<br />Я в основном пользуюсь для простого текста. Есть скажем тест на старых страницах Lib.ru с фиксированной длиной строки и пробелами в начале абзаца. Вместо того, чтобы править регулярками в редакторе, нажали сочетание клавиш и получили готовый текст, который можно засунуть в читалку или куда еще. Копируете текст из pdf или djvu. Качество текстового слоя обычно очень посредственное (да и обычного невычитанного текста в сети очень много) - по сочетанию клавиш получили вполне сносный текст, в котором осталось руками удалить жесткие переносы. Имеете вы какой-нибудь часто используемый сайт, имеющий идиотские рекламные или контекстные вставки, или добавляемые при копировании хвосты &quot;Читать далее на...&quot; написали простую функцию обработки текста, вписали ее в функцию скрипта - не видите всех этих радостей и так оно вам хорошо.<br />Мне казалось, и тут уже говорили, таких прилад должно быть в сети множество. Это просто довольно универсальный вариант, который можно допиливать как угодно, приспосабливая к меняющимся обстоятельствам.</p>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2017-03-27T08:34:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114277#p114277</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114262#p114262" />
			<content type="html"><![CDATA[<p>Значит мы расшифровываем одинаково, но по разному понимаем смысл оптического распознавания <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />.<br />Вспомнил, что <strong>The Gray Cardinal</strong> выкладывал скрипт для этой цели:<br /><a href="http://forum.script-coding.com/viewtopic.php?id=2577">http://forum.script-coding.com/viewtopic.php?id=2577</a></p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2017-03-26T19:37:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114262#p114262</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114258#p114258" />
			<content type="html"><![CDATA[<p>Как работает это сие чудо?</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2017-03-26T19:05:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114258#p114258</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114253#p114253" />
			<content type="html"><![CDATA[<p>Напишите хоть какие кнопки нажимать, что при этом должно происходить.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-03-26T18:26:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114253#p114253</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114250#p114250" />
			<content type="html"><![CDATA[<p><strong>ypppu</strong><br />Поправил описание. С примерами сложно: кажется, тут и так все ясно.<br /><strong>stealzy</strong><br />Формально, оптическое распознавание текста.</p>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2017-03-26T17:21:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114250#p114250</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114247#p114247" />
			<content type="html"><![CDATA[<p>Как понять &quot;для получения по горячим клавишам готовых скриптов, батников, регфайлов или текстовых файлов из выделенного текста&quot;? И нужно описание с примером использования.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-03-26T16:34:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114247#p114247</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114243#p114243" />
			<content type="html"><![CDATA[<p>Имелась ввиду шелуха, остающаяся после распознавания в невычитанном тексте: двойные запятые неправильные интервалы вокруг знаков, косяки с кавычками и пр.. В сети этого валом. Все это не исправляет, да и не может исправлять, но какой-то необходимый минимум - да.</p>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2017-03-26T15:36:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114243#p114243</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Копирование выделенного текста в скрипт или текстовый файл]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114223#p114223" />
			<content type="html"><![CDATA[<p>Срипт механизирует получение готовых скриптов, батников, регфайлов и текстовых файлов из выделенного текста по нажатию горячих клавиш. Цель - получить возможно быстро при необходимости обработанный файл, по возможности не требующий дополнительных операций. Незатейливое изделие, которое может быть легко расширено при возникновении каких-то новых специфических нужд. <br /></p><ul><li><p>Для каждого типа и соответствующей клавиши задаются папка сохранения и кодировка.</p></li><li><p>В начало текста добавляется адрес страницы, при необходимости закомментированный.</p></li><li><p>Имя файла берется либо из заголовка страницы, либо из первых двух непустых страниц текста. В появляющемся окне его можно отредактировать.</p></li><li><p>Секундное зажатие горячей клавиши позволяет открыть файл в дефолтном приложении или заданном редакторе .</p></li><li><p>Можно задать ограничение на максимальное число последовательных пустых строк в скопированном тексте.</p></li><li><p>В текстовых файлах возможно так же автоматическое удаление переносов и OCR-чистка текста (исправление интервалов вокруг знаков препинания и скобок, удаление парных знаков и пр.). Вообще же для постобработки возможно подключение любой последовательности функций обработки текста, находящихся в скрипте или библиотеках.</p></li><li><p>Для каждого типа файлов ведется отдельный лог. Записи содержат имя файла, заголовок активного окна, адрес и начальный фрагмент текста.</p></li></ul><div class="codebox"><pre><code>
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance, force
Menu Tray, Icon, shell32.dll, 27
SetTitleMatchMode 2
SetTitleMatchMode Slow

/*
http://forum.script-coding.com/viewtopic.php?pid=114223#p114223
Скрипт для копирования выделенного текста в скрипт или текстовый файл
*/

key:=&quot;LAlt&quot; ; кнопка, зажатие которой заставляет текст открыться в редакторе (иначе выводится сообщение подтверждения)
max_length:=120 ; ограничение длины имени файла
max_emptystr:=2 ; ограничение числа последовательных пустых строк по умолчанию
def_editor:=&quot;notepad.exe&quot; ; путь к редактору по умолчанию
def_manager:=&quot;explorer.exe&quot; ; путь к файловому менеджеру для открытия папки сохранения
logpath:=&quot;Logs&quot; ; папка логов
fr:=20 ; число слов в начальных фрагментах логов
no_add:=&quot;SciTE4AutoHotkey|SumatraPDF|AkelPad|SynWrite|TextMaker|WinDjView|PDF-XChange Viewer&quot; ; фрагменты заголовков окон, в которых не производится копирование адреса, разделенные &quot;|&quot; (в основном следует добавлять приложения, в которых сочетание Ctrl+L может произвести нежелательные изменения в интерфейсе или выделенном тексте)
return

!+F1::Run &quot;%def_editor%&quot; &quot;%f_path%&quot; ; Alt+Shift+F1 - открытие последнего файла	
!+F2::Run &quot;%def_manager%&quot; &quot;%f_folder%&quot; ; Alt+Shift+F2 - открытие последней папки

!+1::SaveText(&quot;_Textfiles&quot;,,,,1) ; Alt+Shift+1 - текстовый файл с названием из заголовка окна
!+2::SaveText(&quot;_Textfiles&quot;,1,,,1) ; Alt+Shift+2 - текстовый файл с названием из двух первых непустых строк
!+3::SaveText(&quot;_Textfiles&quot;,,,,2) ; Alt+Shift+3 - текстовый файл с названием из заголовка окна и удалением жестких переносов
!+4::SaveText(&quot;_Print&quot;,,,,&quot;DropCap,OCR&quot;,1) ; Alt+Shift+4 - текстовый файл для печати

!+vk41::SaveText(&quot;_AHK&quot;,,&quot;ahk&quot;,,,,&quot;;&quot;,1) ; Alt+Shift+A - юникодный ahk-скрипт с названием из заголовка окна
!+vk42::SaveText(&quot;_BAT&quot;,,&quot;bat&quot;,&quot;cp866&quot;,,,&quot;rem&quot;,2) ; Alt+Shift+B - батник
!+vk52::SaveText(&quot;_REG&quot;,,&quot;reg&quot;,&quot;utf-16&quot;,,,&quot;;&quot;,2) ; Alt+Shift+R - регфайл

SaveText(folder,title=0,ext=&quot;txt&quot;,enc=&quot;utf-8&quot;,format=0,max_empty=&quot;&quot;,comment=&quot;url: &quot;,editor=0)
/*
	folder - папка сохранения (абсолютный или относительный пути)
	title - название файла
		0 - из заголовка окна
		1 - из первых двух непустых строк
	ext - расширение
	enc - кодировка
	format - обработка текста
		0 - отсутствует
		1 - чистка OCR
		2 - чистка OCR плюс удаление жестких переносов (как на старых страницах Lib.ru)
	Вместо цифр сюда может быть вписана последовательность имен функций обработки текста, разделенных запятыми. Значение &quot;RDel,OCR&quot; приводит к тому же результату, что и равное 2.
	max_empty - максимальное число последовательных пустых строк в сохраненном тексте
	comment - коментарий для добавления адреса страницы
		0 - адрес не копируется и не добавляется
	editor - редактор для открытия текста
		0 - ассоциированный
		1 - редактор по умолчанию (как для ahk-файлов)
		2 - прописанный в настройках
*/
{
	global
	KeyWait	% key, T0.9
	e:=Errorlevel
	KeyWait	Shift, T1
	сlipboard_old:=Clipboard, add:=add2:=&quot;&quot;
	WinGetActiveTitle t
	ClipBoard:=&quot;&quot;
	Send ^{vk43}
	ClipWait 2
	If !clip:=Trim(Clipboard)
	{
		MsgBox, 262160, , Ничего не скопировано!, 1.5
		Clipboard:=сlip_old
		return
	}	
	If (clip~=&quot;^https?://\S+$&quot;)
	{
		MsgBox, 262160, , Фокус на адресной строке!, 1.5
		return
	}
	If (!(t~=&quot;(&quot; no_add &quot;)&quot;) &amp;&amp; comment!=0)
			add:=CopyAddress()
	If add
		add2:=add &quot;`r`n&quot;, add:=comment &quot; &quot; add &quot;`r`n&quot;		
	If !title
		f_name:=Trim(RegExReplace(t,&quot; - [^-]+$&quot;))
	else
	{
		n:=0, f_name:=&quot;&quot;
		Loop parse, clip, `n, `r
		{
			RegExMatch(A_LoopField,&quot;m)^( |-|_|\*|#)+$&quot;,sep)
			If (!A_LoopField || sep)
				continue
			f_name.=A_LoopField &quot; &quot;, n+=1
			If (n=2)
				break
		}
		StringTrimRight f_name, f_name, 1
	}
	If StrLen(f_name)&gt;max_length
	{
		f_name:=SubStr(f_name,1,max_length)
		StringGetPos sp, f_name,% &quot; &quot;, 1
		f_name:=SubStr(f_name,1,sp)
	}
	f_name:=FirstUppercase(ValidName(f_name))
	If format=2
		clip:=RDel(clip)
	If format in 1,2
		clip:=OCR(clip)
	else If format
		Loop Parse, format, CSV
			clip:=%A_LoopField%(clip)
	If !max_empty
		max_empty:=max_emptystr
	clip:=MaxEmptyString(clip,max_empty)
	mes:=&quot;Введите имя файла без расширения:&quot;
	Input:
	InputBox f_name, % &quot;Папка: &quot; folder &quot;, расширение: &quot; ext &quot;, кодировка: &quot; enc &quot;, формат &quot; format, % mes, , 800, 120 , , , , ,% f_name
	If Errorlevel
	{
		Clipboard:=сlip_old
		return
	}
	f_path:=folder &quot;\&quot; f_name &quot;.&quot; ext
	If FileExist(f_path)
	{
		mes:=&quot;Имя файла существует!&quot;
		goto Input
	}
	FileCreateDir % folder
	FileAppend % add . clip,% f_path,% enc
	If Errorlevel
	{
		MsgBox, 262160, , Ошибка сохранения!, 1.5
		Clipboard:=сlip_old
		return
	}
	FileGetSize size, % f_path
	clip:=RegExReplace(clip,&quot;\R&quot;,&quot; &quot;)
	StringGetPos pos, clip, % &quot; &quot;, L%fr%
	StringLeft clip2, clip, % pos
	FileCreateDir % logpath
	SplitPath f_path, name
	FileAppend % &quot;`r`n`r`n`r`n&quot; A_DD &quot;.&quot; A_MM &quot;.&quot; A_YYYY &quot;  &quot; A_Hour &quot;:&quot; A_Min &quot;  &quot; name &quot;`r`n&quot; t &quot;`r`n&quot; add2 . clip2 &quot;(...)&quot;, % logpath &quot;\&quot; ext &quot;.log&quot;
	If e
	{
		If !editor
			Run &quot;%f_path%&quot;
		else If editor=1
			Run edit &quot;%f_path%&quot;
		else
			Run &quot;%def_editor%&quot; &quot;%f_path%&quot;
	}
	else
		MsgBox 262208, , % &quot;Сохранено в:`n&quot; f_path &quot;`nРазмер &quot; size &quot; B&quot;, 1.5
	SplitPath f_path, , f_folder
	Clipboard:=сlip_old
	return
}

CopyAddress(e=0)
{
	Clipboard:=&quot;&quot;
	Send ^{vk4C}
	Sleep 300
	Send ^{Ins}
	ClipWait 0.5
	If !Clipboard~=&quot;^htt(p|s)://\S+$&quot;
		Clipboard:=&quot;&quot;
	If (!Clipboard &amp;&amp; e)
		MsgBox, 262160, , Адрес недоступен!, 1
	return Trim(Clipboard)
}

FirstUppercase(t)
{
	StringLeft n, t, 1
	StringTrimLeft k, t, 1
	StringUpper n, n
	return n . k
}

MaxEmptyString(text,max)
{
	text:=RegExReplace(text,&quot;m)[ \t]+$&quot;)
	Loop % max+1
		n.=&quot;`r`n&quot;
	return RegExReplace(text,&quot;\R{&quot; max+2 &quot;,}&quot;,n)
}

ValidName(n,r=&quot;&quot;) ; r - замена пробелов
{
	n:=RegExReplace(n,&quot;(:|;|,|\.|\*|\?|\\|/|&lt;|&gt;|&quot;&quot;)&quot;,&quot; &quot;)
	n:=RegExReplace(n,&quot;\s+&quot;,&quot; &quot;)
	StringReplace n, n, |, -, All
	If r
		StringReplace n, n, % &quot; &quot;, % r, All
	return Trim(n)
}

;---------------------------------------
OCR(t)
{
	t:=RegExReplace(t,&quot;(\.|,|:|;)\K(,|:|;)&quot;) ; парные знаки
	t:=RegExReplace(t,&quot; {1,3}(?=(\.|,|:|;|!|\?|\)|]|}))&quot;) ; пробелы до знаков препинания
	t:=RegExReplace(t,&quot;(\[|\{|\()\K\s{1,3}&quot;) ; пробелы после скобок
	t:=RegExReplace(t,&quot;\.\K (?=\.)&quot;) ; пробелы меж точек
	t:=RegExReplace(t,&quot;\.(?!(\d|\.| ))&quot;,&quot;. &quot;) ; пробелы после точек
	t:=RegExReplace(t,&quot;,\.?(?!(\d| ))&quot;,&quot;, &quot;) ; пробелы после запятых
	t:=RegExReplace(t,&quot;m) {1,}$&quot;) ; пробелы в конце строк
	t:=RegExReplace(t,&quot;\S\K {2,3}(?=\S)&quot;,&quot; &quot;) ; лишние пробелы
	t:=RegExReplace(t,&quot;(:|;|!|\?)(?!(\d| |!|\?))&quot;,&quot;$1 &quot;) ; пробелы после знаков
	t:=RegExReplace(t,&quot;&#039;&#039;&quot;,&quot;&quot;&quot;&quot;)	; кавычки двойным апострофом
	return t
}

RDel(t) ; удаление жестких переносов
{
	return RegExReplace(t,&quot;\R(?!( {4,10}|\t|\R))&quot;,&quot; &quot;)
}

DropCap(t) ; исправление буквиц, занимающих отдельную строку
{
return RegExReplace(t,&quot;\R[A-ZЁЦУКЕНГШЩЗХФЫВАПРОЛДЖЭЯЧСМИТБЮ]\K\R&quot;)
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2017-03-26T13:12:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114223#p114223</id>
		</entry>
</feed>
