std::string と std::wstring の相互変換

c++ で std::string と std::wstring (ワイド文字列版) を相互に変換するコードです

プロトタイプ宣言

#include <string>
std::wstring s2ws(const std::string& str);
std::string ws2s(const std::wstring& wstr);

実装

#include <string>
#include <codecvt>

std::wstring s2ws(const std::string& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> x;
    return x.from_bytes(str);
}

std::string ws2s(const std::wstring& wstr)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> x;
    return x.to_bytes(wstr);
}

emacs でHTMLのコーディングを自動チェックする方法

emacs で HTMLのコーディングチェックを行う方法です

  • flycheck を使います
  • HTMLの解析ツールは htmllint を使います
    • tidy より htmllint の方が使い勝手が良いように思います

手順1: htmllint のインストール

npm で htmllint-cli をインストールします

ひとまず適当なディレクトリ path/to を用意して,その下にインストールする場合は

$ cd path/to
$ npm install  htmllint-cli

とします

インストールに成功すると path/to/bin/htmllint という実行ファイルが出来ます

手順2: htmllint の動作確認

htmllint を実際に動かしてみます

チェックしたい HTML があるディレクトリに移動して, htmllint の設定ファイル .htmllintrc を作成します

$  cd hogehoge
$  path/to/bin/htmllint init
$ ls -la .htmllint 

.htmlintrc というファイルが生成されます

設定に関する詳細は

あたりが参考になります


ひとまずデフォルトの .htmllintrc で HTMLファイルをチェックしてみます

$ path/to/htmllint  index.html
index.html: line 13, col 11, the `title` attribute is not double quoted
index.html: line 23, col 13, attribute value contains an unescaped angle bracket: >
[htmllint] found 2 errors out of 1 files

という感じで,13行目,23業目にエラーがあるよ,とチェック結果を出力してくれます

設定: emacs のflycheck のインストール

次に emacs 側の設定です

まず flycheck を設定します

use-packageが使えるようになっていれば,最低限必要な設定はこれだけです

(use-package flycheck
  :ensure t
  :init (global-flycheck-mode))

設定: flycheck 経由で htmllint を使う設定

最後に flycheck に htmllint を登録します

    (flycheck-define-checker html-htmllint
      "A HTML syntax and style checker using htmllint."
      :command ("path/to/htmllint" source)
      :standard-input t
      :error-patterns ((error line-start (file-name) ": line " line ", col " column ", " (message) line-end)) 
      :modes (web-mode))
    (add-to-list 'flycheck-checkers 'html-htmllint)
    (flycheck-add-mode 'html-htmllint 'web-mode)

これで

  • path/to/htmllint を flycheck に登録.名前は html-htmllint
  • web-mode で html-htmllint を使うように登録

しています

使い方

HTMLファイルを web-mode で開くだけです

あとは自動で構文チェックが走り,flycheckが逐次エラーを出してくれるようになります.

htmllint-cli は,カレントディレクトリから上流に遡って .htmllintrc を探す仕様なので,プロジェクトのルートディレクトリに .htmllintrc を配置して,プロジェクトごとにコーディング規則を切り替える,ということが簡単に出来ます.便利です