📚معرفی و شروع سریع

Highlight.js کدهای داخل صفحه را به‌صورت خودکار شناسایی و رنگ‌آمیزی می‌کند. کافیست کد را داخل <pre><code> بگذارید، یک تم CSS و فایل JS را اضافه کنید و hljs.highlightAll() را صدا بزنید.

<!-- HTML — در head: یک تم -->
<link rel="stylesheet" href="styles/github-dark.min.css">

<!-- کد شما -->
<pre><code class="language-js">
const x = 10;
console.log(x);
</code></pre>

<!-- در انتهای body -->
<script src="highlight.min.js"></script>
<script>hljs.highlightAll();</script>
▶ دمو: ساده‌ترین رنگ‌آمیزی
// اولین مثال Highlight.js
const message = "سلام دنیا!";
function greet(name) {
  return `${message} ${name}`;
}
console.log(greet("HubGit"));
ⓘ نکته: نام کلاس می‌تواند language-js، lang-js یا حتی فقط js باشد. اگر کلاسی ندهید، Highlight.js خودش زبان را حدس می‌زند.

highlightAll و خودکار

hljs.highlightAll() همهٔ بلوک‌های <pre><code> صفحه را یک‌جا رنگ‌آمیزی می‌کند. معمولاً بعد از بارگذاری DOM صدا زده می‌شود.

// رنگ‌آمیزی همهٔ بلوک‌های کد در صفحه
document.addEventListener('DOMContentLoaded', () => {
  hljs.highlightAll();
});

// محتوای جدید (Ajax/SPA)؟ دوباره صدا بزنید
function loadContent(html) {
  container.innerHTML = html;
  hljs.highlightAll();   // بلوک‌های جدید هم رنگ می‌شوند
}
▶ دمو: چند زبان مختلف کنار هم
# Python
def factorial(n):
    return 1 if n == 0 else n * factorial(n - 1)
print(factorial(5))
/* CSS */
.btn {
  background: #88ce02;
  border-radius: 8px;
  transition: all .2s;
}
⚠ هشدار: اگر یک عنصر را دو بار highlight کنید خطا می‌دهد. برای محتوای داینامیک از hljs.highlightElement(el) روی عنصر تازه استفاده کنید (بخش ۵).

🎨تم‌ها (Themes)

ظاهر رنگ‌آمیزی فقط با تعویض فایل CSS تم تغییر می‌کند — کد JS دست نمی‌خورد. Highlight.js بیش از ۲۵۰ تم رسمی دارد (github، monokai، atom-one-dark و ...).

// فقط لینک CSS را عوض کنید:
<link href="styles/github-dark.min.css">   // تیره
<link href="styles/github.min.css">        // روشن
▶ دمو زنده: تعویض تم را امتحان کنید
// با دکمه‌های بالا تم را عوض کنید
async function fetchUser(id) {
  const res = await fetch(`/api/users/${id}`);
  if (!res.ok) throw new Error('خطا!');
  return res.json();
}
💡 ترفند: برای حالت تیره/روشن خودکار می‌توانید دو لینک تم بگذارید و با media="(prefers-color-scheme: dark)" آن‌ها را سوییچ کنید.

🌐زبان مشخص

برای دقت بیشتر، زبان را صریح با کلاس language-xxx تعیین کنید. این از حدس اشتباه جلوگیری می‌کند و سریع‌تر هم هست.

<!-- زبان صریح -->
<pre><code class="language-json">...</code></pre>
<pre><code class="language-bash">...</code></pre>

// جلوگیری از رنگ‌آمیزی یک بلوک:
<code class="nohighlight">...</code>
▶ دمو: JSON و Bash با زبان صریح
{
  "name": "hubgit",
  "version": "1.0.0",
  "offline": true,
  "libraries": 30
}
# نصب و اجرا
npm install highlight.js
node server.js --port 3000

🔎highlightElement

برای رنگ‌آمیزی فقط یک عنصر مشخص (مثلاً بلوکی که تازه به DOM اضافه کرده‌اید) از hljs.highlightElement() استفاده کنید.

const el = document.querySelector('#myCode');
hljs.highlightElement(el);

// مثال: تولید بلوک کد به‌صورت داینامیک
const pre = document.createElement('pre');
pre.innerHTML = '<code class="language-js">let a = 1;</code>';
box.appendChild(pre);
hljs.highlightElement(pre.querySelector('code'));
▶ دمو: تولید و رنگ‌آمیزی داینامیک

📝highlight() رشته‌ای

اگر کد را به‌صورت رشته دارید و خروجی HTML رنگ‌آمیزی‌شده می‌خواهید (بدون درج مستقیم در DOM)، از hljs.highlight() استفاده کنید.

const code = 'const x = [1, 2, 3].map(n => n * 2);';

const result = hljs.highlight(code, { language: 'javascript' });

result.value;     // رشتهٔ HTML رنگ‌آمیزی‌شده
result.language;  // 'javascript'
result.relevance; // امتیاز اطمینان

// درج در صفحه:
output.innerHTML = result.value;
▶ دمو زنده: کد بنویسید، فوری رنگ شود

🤖تشخیص خودکار زبان

وقتی زبان را نمی‌دانید، hljs.highlightAuto() آن را حدس می‌زند و امتیاز اطمینان (relevance) برمی‌گرداند.

const result = hljs.highlightAuto('SELECT * FROM users WHERE id = 1;');

result.language;        // 'sql'
result.relevance;       // امتیاز زبان برتر
result.secondBest;      // حدس دوم

// محدود کردن زبان‌های حدس برای دقت بیشتر
hljs.highlightAuto(code, ['js', 'python', 'sql']);
▶ دمو زنده: زبان را حدس بزن

زبان تشخیص داده‌شده:

🔢شماره خط و کپی کد

Highlight.js به‌صورت پیش‌فرض شماره خط ندارد، اما با کمی کد می‌توان آن را افزود. دکمهٔ «کپی» هم بسیار رایج است.

// دکمهٔ کپی ساده
function copyCode(btn) {
  const code = btn.parentElement.querySelector('code').innerText;
  navigator.clipboard.writeText(code);
  btn.textContent = '✓ کپی شد';
}
▶ دمو: کد با دکمهٔ کپی و شماره خط
const greet = (name) => {
  const hour = new Date().getHours();
  const time = hour < 12 ? 'صبح' : 'عصر';
  return `${time} بخیر، ${name}!`;
};
💡 افزونه: برای شماره خط حرفه‌ای، پلاگین رسمی highlightjs-line-numbers.js هم وجود دارد. در این دمو از یک پیاده‌سازی سبک سفارشی استفاده شده است.

تنظیمات و configure

با hljs.configure() رفتار کلی را قبل از رنگ‌آمیزی تنظیم کنید.

hljs.configure({
  cssSelector:   'pre code',    // کدام عناصر هدف باشند
  languages:     ['js', 'python', 'css'],  // محدود کردن تشخیص خودکار
  ignoreUnescapedHTML: false,  // هشدار HTML خام
  throwUnescapedHTML:  false
});

// ثبت زبان دلخواه (اگر فقط هسته را بارگذاری کرده‌اید)
hljs.registerLanguage('js', javascriptLang);

// نام مستعار برای زبان
hljs.registerAliases(['node'], { languageName: 'javascript' });
متد / گزینهکاربرد
highlightAll()رنگ‌آمیزی همهٔ بلوک‌های صفحه
highlightElement(el)رنگ‌آمیزی یک عنصر مشخص
highlight(code, opt)رنگ‌آمیزی رشته با زبان معین
highlightAuto(code)تشخیص خودکار زبان + رنگ
configure(opt)تنظیمات سراسری
registerLanguage()افزودن زبان جدید
listLanguages()فهرست زبان‌های ثبت‌شده

🔥الگوهای رایج

وبلاگ / مستندات

متداول‌ترین کاربرد: رنگ‌آمیزی نمونه‌کدها در مقالات فنی. فقط highlightAll() بعد از رندر محتوا کافی است.

بلوک کد قابل کپی (کامل)

<!-- ساختار آمادهٔ کپی -->
<div class="code-card">
  <button class="copy-btn" onclick="copyCode(this)">کپی</button>
  <pre><code class="language-js">...</code></pre>
</div>

راهنمای API زنده

▶ دمو: نمونهٔ مستندات API
// GET /api/posts
fetch('/api/posts', {
  headers: { 'Authorization': 'Bearer ' + token }
})
  .then(r => r.json())
  .then(posts => posts.forEach(renderPost))
  .catch(err => console.error('خطا:', err));

📄 جمع‌بندی سریع

می‌خواهم...راه‌حل
همه کدهاhljs.highlightAll()
یک بلوکhljs.highlightElement(el)
از رشتهhljs.highlight(code, {language})
زبان نامعلومhljs.highlightAuto(code)
تغییر ظاهرتعویض فایل CSS تم
💡 کارایی: برای صفحات با کد زیاد، زبان را صریح مشخص کنید و با configure({languages}) تشخیص خودکار را محدود کنید تا سریع‌تر شود.

🚀زمین بازی کد (Playground)

کد را در تب HTML داخل <pre><code> بگذار و با Highlight.js رنگ‌آمیزی‌اش کن. زبان و تم را تغییر بده و ▶ اجرا را بزن. نسخهٔ ۱۱.۹.۰ با تم github-dark آفلاین بارگذاری می‌شود.