Google翻訳の翻訳元テキストボックスにコピペした時改行を整形するブックマークレット
書籍や論文などが書かれたPDFから英文をコピペすると、文中に存在するPDFの改行もコピペされるので、 Google翻訳が改行位置を文の区切りと判断し、妙な結果がでることがある。
手直ししてるとめんどくさいので、自動で修正を行うブックマークレットを作ってみた。
javascript:(function(){var textarea_source = document.getElementById('source'); textarea_source.addEventListener('paste', function(){setTimeout(function(){var text = textarea_source.value; var new_text = text.replace(/[\n\r]+/g, ' ').replace(/(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?|!)\s/g, '\n\n'); textarea_source.value = new_text;}, 1000)})}());
ブックマークレット起動後、Google翻訳の翻訳元テキストボックスに英文をペーストして1秒経つと、全改行を空白で置換後、文区切りとなるピリオドっぽいところに改行を2つ挿入する。 待機秒数を早めたい場合は、1000のところを各環境に応じて調節する。
Chromium 62.0.3202.75(Official Build)Built on Ubuntu で動作確認。
正規表現の後戻りを使うので、1年半くらい前から更新していないChromeだと動かないです。
正規表現はPython - RegEx for splitting text into sentences (sentence-tokenizing) - Stack Overflowを使わせていただきました。
他に文末扱いしたい記号があれば、最後の肯定後戻りに追加すれば動くかと。 たまにへんてこなとこで切れるが、そのためだけにNLTKのPunktSentenceTokenizerを移植する気にはなれない.......
DVWAでOSコマンドインジェクション
注入つながりで、SQLインジェクションの次はOSコマンドインジェクションを試す。
続きを読むDVWAでブラインドSQLインジェクションを試す
つづいた。タイトルのまんまです。
続きを読むDVWAでSQLインジェクションを試す
タイトルのまんま。
このくらいなら有名ですし、どんな手順で学べばよいかウォームアップになるので。
SVGのプロパティがつかえない時はnamaspaceが設定されているか確認する
こんなHTML(一部分)があって
<div id="svg_wrapper"></div>
動的にSVG要素を用意していた
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); var poly = document.createElementNS('http://www.w3.org/2000/svg', 'polygon'); // 中略 svg.appendChild(poly); var svg_wrapper = document.getElementById('svg_wrapper'); svg_wrapper.appendChild(svg);
使っているある外部ライブラリに、SVGを構成する文字列を渡すメソッドがあった。
こんな感じに。
extarnal_module.func(svg_wrapper.innerHTML);
ところが処理中に、SVGのpoints属性がないためエラー、とのこと。 内部では渡した文字列をDOMparserでDOMに変換して作業してる模様。
なにがダメだったかというと名前空間が定義されてなかったから。 文字列からSVG要素であるDOMに変換するには事前にルートSVG要素で名前空間を定義してないと、ただのHTMLないしはXMLと解釈されてしまう。
雑にユーティリティ関数作って対処
var createElementSVG = function () { var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); svg.setAttributeNS(null, 'version', '1.1'); return svg; };
createElementNSからつくったDOMは、ルートSVGタグの名前空間がどうであれ、
そのメソッドの第一引数に渡した名前空間が適用されるためSVGに関わる属性が使える。
あっちでつかえてこっちで使えなかったため、何が原因かわかるのに1日溶かしてしまった。
ああ、情けない。