সি ++ তে ত্রিগ্রাফ ক্রমগুলির উদ্দেশ্য?


127

সি ++ 'অনুসারে 03 স্ট্যান্ডার্ড 2.3 / 1:

অন্য কোনও প্রক্রিয়াজাতকরণ হওয়ার আগে, নিম্নোক্ত তিনটি অক্ষরের একটিতে ("ট্রিগ্রফ সিকোয়েন্সগুলি") প্রতিটি ঘটনাকে সারণি 1 এ নির্দেশিত একক অক্ষর দ্বারা প্রতিস্থাপন করা হয়েছে।

----------------------------------------------------------------------------
| trigraph | replacement | trigraph | replacement | trigraph | replacement |
----------------------------------------------------------------------------
| ??=      | #           | ??(      | [           | ??<      | {           |
| ??/      | \           | ??)      | ]           | ??>      | }           |
| ??’      | ˆ           | ??!      | |           | ??-      | ˜           |
----------------------------------------------------------------------------

বাস্তব জীবনে এর মানে হল যে কোডটি printf( "What??!\n" );মুদ্রণের ফলাফল করবে What|কারণ ??!এটি একটি ট্রাইগ্রাফ ক্রম যা |চরিত্রের সাথে প্রতিস্থাপন করা হয়েছিল ।

আমার প্রশ্নটি ট্রাইগ্রাফ ব্যবহারের উদ্দেশ্য কী? ট্রাইগ্রাফ ব্যবহার করার কি কোনও ব্যবহারিক সুবিধা রয়েছে?

ইউপিডি : উত্তরে উল্লেখ করা হয়েছিল যে কিছু ইউরোপীয় কীবোর্ডগুলিতে সমস্ত বিরামচিহ্ন থাকে না, তাই ইউএস-বহির্ভূত প্রোগ্রামারদের প্রতিদিনের জীবনে ট্রাইগ্রাফ ব্যবহার করতে হয়?

ইউপিডি 2 : ভিজ্যুয়াল স্টুডিও 2010 টি ট্রিগ্রাফ সমর্থনটি ডিফল্টরূপে বন্ধ করে দিয়েছে।


কিছু বিরামচিহ্নগুলি ইউরোপীয় কীবোর্ডগুলিতে পৌঁছানো আরও শক্ত (এমন বিষয় যে কোনও প্রোগ্রামার দ্রুত টাইপ করার জন্য মার্কিন লেআউটটি ব্যবহার করে) যেখানে বিরামচিহ্নগুলি পুরোপুরি অনুপস্থিত রয়েছে এমন কোনও জায়গাটি এখনও দেখেনি - সম্ভবত স্ল্যাভিক ভাষার জন্য?
পিটারচেন

2
এটি ঘটতে পারে যে কয়েকটি টার্মিনাল এবং / অথবা ভার্চুয়ালাইজেশন আপনাকে কিছু অক্ষরে সহজে অ্যাক্সেস করতে দেয় না। আমার অভিজ্ঞতায় মূল অপরাধী হ'ল টিলডে।
ফ্রান্সেস্কো

1
এটি আমার ডি-ডেডকিজ কীবোর্ডে টাইপ করা, # ফিরে আসার পরের কী, "" AltGr "+" ß "(0 এর পাশে), ^" ^ "+" ^ "(ডেডকিসের কারণে; 1 এর পরের) , [হ'ল "AltGr" + "8",] হ'ল "AltGr" + "9", | "AltGr" + "<", "" AltGr "+" 7 ",} হ'ল" AltGr "+" 0 ", এবং" "~" + "dead" (ডেডিকেসের কারণে, ঠিক উপরে #)। সুতরাং সত্যিই কোন বড় চুক্তি। আমার আঙ্গুলগুলি নিজের মতো করে এই সংযুক্তিগুলি টাইপ করার মতো :-D
ননচিপ

1
আমি ভেবেছিলাম, কম্পিউটারে যে কাজ করছি তার অনুসারে দুটি কীবোর্ড লেআউট থাকা এবং সেগুলি পরিবর্তন করা স্বাভাবিক। এটি মধ্য ইউরোপ অঞ্চলে সাধারণ উপায়। এই ট্রিগারগুলি ব্যবহার করা বেশ চতুর। আমি এটি আদর্শ থেকে সরানোর জন্য ভোট দেব
ভিএক্স

উত্তর:


97

এই প্রশ্নটি (ঘনিষ্ঠভাবে সম্পর্কিত ডিজিট্রাফগুলি সম্পর্কে) এর উত্তর রয়েছে।

এটি সিএসএক্সের 64৪ character অক্ষর সেটগুলিতে সি সিনট্যাক্সের সমস্ত অক্ষর রাখে না, তাই কী-বোর্ড এবং ডিসপ্লে সহ এমন কিছু সিস্টেম রয়েছে যা অক্ষরগুলির সাথে ডিল করতে পারে না (যদিও আমি কল্পনা করি যে এগুলি বেশ বিরল imagine আজকাল)।

সাধারণভাবে, এগুলি ব্যবহার করার দরকার নেই, তবে আপনি যে সমস্যার মধ্যে পড়েছিলেন সে জন্য আপনাকে তাদের সম্পর্কে জানতে হবে। ত্রিগ্রাফগুলি হ'ল ' ?' চরিত্রটির একটি পালানোর ক্রম রয়েছে:

'\?'

সুতরাং কয়েকটি উদাহরণ যা আপনি নিজের উদাহরণটি এড়াতে পারবেন তা হ'ল:

 printf( "What?\?!\n" ); 

 printf( "What?" "?!\n" ); 

তবে আপনার মনে রাখতে হবে আপনি দু'টি টাইপ করার সময়? ' যে অক্ষরগুলি আপনি সম্ভবত একটি ট্রিগ্রাফ শুরু করছেন (এবং এটি অবশ্যই আমি কখনই ভাবছি না)।

অনুশীলনে, ট্রিগ্রাফ এবং ডিগ্রাফগুলি এমন একটি জিনিস যা আমি দিনের বেলা ভিত্তিতে মোটেই উদ্বিগ্ন নই। তবে তাদের সম্পর্কে আপনার সচেতন হওয়া উচিত কারণ প্রতি দু'বছর পরে একবার আপনি তাদের সাথে সম্পর্কিত একটি বাগের মধ্যে চলে যাবেন (এবং আপনি বাকি দিনটি তাদের অস্তিত্বকে অভিশাপ দিয়ে ব্যয় করবেন)। এটি ভাল লাগবে যখন সংকলকগণ যখন ট্রাইগ্রাফ বা ডিজিট্রাফ জুড়ে আসে তখন সতর্ক করার জন্য (বা ত্রুটি) কনফিগার করা যায়, তাই আমি জানতে পারি যে আমার কিছু জেনে শুনে জানা উচিত।

এবং কেবল সম্পূর্ণতার জন্য, ডিগ্রাফগুলি টোকেন হিসাবে প্রসেস করা হওয়ায় এটি খুব কম বিপজ্জনক, সুতরাং একটি স্ট্রিং আক্ষরিক অভ্যন্তরে একটি চিত্রচিত্র একটি ডিজিট্রাফ হিসাবে ব্যাখ্যা করবে না।

সি / সি ++ প্রোগ্রামগুলিতে বিরামচিহ্ন সহ বিভিন্ন মজাদার উপর একটি দুর্দান্ত শিক্ষার জন্য (ট্রাইগ্রাফ বাগ সহ যে আমার চুল বাইরে টানতে চাইবে), হার্ব সটারের জিওটডাব্লু # 86 নিবন্ধটি একবার দেখুন


সংযোজন:

দেখে মনে হচ্ছে জিসিসি ডিফল্টরূপে ট্রিগলগুলি প্রক্রিয়া করবে না (এবং সম্পর্কে সতর্ক করবে)। অন্য কয়েকটি সংকলকের কাছে ট্রাইগ্রাফ সমর্থন বন্ধ করার বিকল্প রয়েছে (উদাহরণস্বরূপ আইবিএম এর)। মাইক্রোসফ্ট VS2008 এ একটি সতর্কতা (C4837) সমর্থন করা শুরু করেছে যা অবশ্যই স্পষ্টভাবে সক্ষম করতে হবে (-ওয়াল বা কিছু ব্যবহার করে)।


সি এর সাথে সামঞ্জস্যতা একমাত্র কারণ? আধুনিক সি ++ প্রোগ্রামগুলিতে কি তাদের সাথে দেখা করা সম্ভব?
কিরিল ভি লিয়াদভিনস্কি

হ্যাঁ, সি ++ পাশাপাশি ট্রিিগ্রাফ এবং ডিগ্রাফগুলি সমর্থন করে।
মাইকেল বুড়

4
যেমনটি আমি স্মরণ করি, কমপক্ষে একটি সংকলক (জি ++?) ব্যবহার করেছি তার জন্য ট্রিগ্রাফ এবং ডিগ্রাফ অনুবাদ করার আগে একটি স্পষ্ট কমান্ড লাইন বিকল্প প্রয়োজন, অন্যথায় একটি সতর্কতা দেওয়া হয়েছে তবে বিকল্প নেই।
কেটিসি

1
@ জ্লাএএপ - আমার ব্যক্তিগতভাবে কখনও ট্রাইগ্রাফের প্রয়োজন হয়নি, তবে দুর্ভাগ্যক্রমে সংকলকগণ তাদের সাথে কোড প্রক্রিয়াকরণ করবেন, সুতরাং আপনাকে তাদের সম্পর্কে সচেতন হওয়া প্রয়োজন (দুর্ঘটনাজনিত ব্যবহার এড়াতে)। এছাড়াও, যদি আপনি অন্য কোথাও থেকে কোড পান তবে আপনি তাদের উদ্দেশ্যমূলক ব্যবহার করতে পারেন, তবে এটি অত্যন্ত অস্বাভাবিক হবে। আমি মনে করি আমি 20+ বছরে একবার ইচ্ছাকৃতভাবে ব্যবহৃত ট্রিগ্রাফগুলিতে প্রবেশ করেছি (এটি কোনও আইবিএম মেইনফ্রেমের জন্য কিছু কোড ছিল)।
মাইকেল বুড়

1
বিস্ময়কর জিনিসগুলি করার জন্য মন্তব্যগুলিতে ট্রিগারগুলি প্রসারিত করা হলে এটি সত্যই আমার স্নায়ুতে আসে।
জোশুয়া

23

বাচ্চারা আজ! :-)

হ্যাঁ, বিদেশী সরঞ্জাম যেমন আইবিএম 3270 টার্মিনাল। 3270 এর আছে, যদি আমার মনে থাকে তবে কোনও কোঁকড়া ধনুর্বন্ধনী! আপনি যদি কোনও আইবিএম মিনি / মেইনফ্রেমে সি লিখতে চান তবে আপনাকে প্রতিটি ব্লকের সীমানার জন্য ক্ষতিকারক ট্রিগ্রেফ ব্যবহার করতে হবে। সৌভাগ্যক্রমে, কিছু আইবিএম মিনিটকম্পিউটার সুবিধাগুলি অনুকরণ করার জন্য আমাকে কেবল সি তে সফ্টওয়্যার লিখতে হয়েছিল, সি সফ্টওয়্যারটি আসলে লিখতে হয়নি , সিস্টেম / 36 এ ।

"পি" কী এর পাশে দেখুন:

কীবোর্ড

হুম। বলা কঠিন. "ক্যারেজ রিটার্ন" এর পাশের একটি অতিরিক্ত বোতাম রয়েছে এবং আমার এটি পিছনের দিকে থাকতে পারে: সম্ভবত এটি "[" / "]" জুটি হারিয়েছিল। যে কোনও হারে, সি-লিখতে চাইলে এই কীবোর্ডটি আপনাকে শোকাহত করবে

এছাড়াও, এই টার্মিনালগুলি EBCDIC প্রদর্শন করে, আইবিএমের "নেটিভ" মেইনফ্রেম চরিত্র সেট, ASCII নয় (ধন্যবাদ, পাভেল মিনায়েভ, অনুস্মারকটির জন্য)।

অন্যদিকে, জিএনইউ সি নির্দেশকের মতো বলেছেন: "আপনার এই মস্তিষ্কের ক্ষতির দরকার নেই।" জিসিসি সংকলক এই "বৈশিষ্ট্য "টিকে ডিফল্টরূপে অক্ষম করে।


1
কীবোর্ডে একটি রিসেট বোতাম আছে। সেটা খুবই ভালো! অদ্ভুত যে যদিও প্রথমে আমার দৃষ্টি আকর্ষণ করেছে।
l46kok

10
যে কেউ ইবিসিডিক মেশিনে সি ++ 17 ব্যবহার করতে চায়, তাকে নেফ্রোফিলিয়ার জন্য জেল করা উচিত।
এসএফ

যদি না একটি প্ল্যাটফর্ম কোন অক্ষর আছে এ সব ISO646 ঐ ছাড়া অন্য সবকিছু trigraphs সঙ্গে সম্পন্ন করতে পারে হতে পারে, যে প্রতি বাস্তবায়ন হয় একটি ব্যাকস্ল্যাশ বা অন্য কোনো চরিত্র হিসেবে সি অক্ষরসমষ্ঠিতে নয় সংজ্ঞায়িত এমন পদ্ধতির মাধ্যমে এটি করা "মেটা" চরিত্রটি, স্ট্যান্ডার্ডে ব্যাকস্ল্যাশের সমস্ত রেফারেন্সগুলিকে "মেটা" দিয়ে প্রতিস্থাপন করুন এবং আইএস -৪ character6-তে নেই এমন সি অক্ষর সংস্থার কোনও সদস্যের জন্য ব্যাকস্ল্যাশ / মেটা পলায়ন যুক্ত করুন?
সুপারক্যাট

22

The C++ Programming Languageবিশেষ সংস্করণ থেকে , পৃষ্ঠা 829

হওয়া ASCII বিশেষ অক্ষর [, ], {, }, |, এবং\ অক্ষর সেট আইএসও দ্বারা বর্ণানুক্রমিক হিসাবে মনোনীত অবস্থানের ব্যাপৃত। বেশিরভাগ ইউরোপীয় জাতীয় আইএসও -৪6 character অক্ষর সেটগুলিতে, এই অবস্থানগুলি ইংরেজী বর্ণমালায় পাওয়া যায় না এমন অক্ষরের দ্বারা দখল করা হয়।

সত্যিকারের আদর্শ ন্যূনতম অক্ষর সেটটি ব্যবহার করে জাতীয় অক্ষরগুলি একটি বহনযোগ্য উপায়ে প্রকাশ করার অনুমতি দেওয়ার জন্য ট্রিগারগুলির একটি সেট সরবরাহ করা হয়। এটি প্রোগ্রামগুলির আদান-প্রদানের জন্য দরকারী হতে পারে তবে প্রোগ্রামগুলি পড়া লোকের পক্ষে সহজ করে না। স্বাভাবিকভাবেই, এই সমস্যার দীর্ঘমেয়াদী সমাধান হল সি ++ প্রোগ্রামারদের এমন সরঞ্জাম পাওয়া যা তাদের মাতৃভাষা এবং সি ++ উভয়ই সমর্থন করে। দুর্ভাগ্যক্রমে, এটি কারও জন্য অপরিহার্য বলে মনে হয় এবং নতুন সরঞ্জামের প্রবর্তন হতাশাজনকভাবে ধীর প্রক্রিয়া হতে পারে।


7
"নতুন সরঞ্জামের প্রবর্তন হতাশাজনকভাবে ধীর প্রক্রিয়া হতে পারে"। বিশেষত প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলিকে মানীকরণের দ্রুত এবং বেদনাদায়ক প্রক্রিয়াটির সাথে তুলনা করুন।
jforberg

4
এটি যদি কীবোর্ড বিন্যাসগুলির জন্য একটি ক্লডজ হয় তবে মজার বিষয় হল টাইপিংয়ের জন্য যেমন ট্রাইগ্রাফ নেই `, যা ইতালীয় এবং অন্যান্য কয়েকটি কীবোর্ড বিন্যাস থেকে অনুপস্থিত
ব্যাডপ

15

এগুলি এমন সিস্টেমে ব্যবহারের জন্য যা সি ++ এর বেসিক ক্যারেক্টার সেটে কিছু অক্ষরের অভাব রয়েছে। বলা বাহুল্য, এই জাতীয় সিস্টেমগুলি অত্যন্ত বিরল।


2
এর অর্থ কি এই যে আমি এগুলিকে কখনই বাস্তব জীবনে ব্যবহার করব না?
কিরিল ভি লিয়াদভিনস্কি

1
আপনি কোন দেশে বাস করেন? সমস্ত ভাষার জন্য সমস্ত কীবোর্ডে প্রয়োজনীয় কীগুলি নেই।
ডেভিড থর্নলে

2
হ্যাঁ, তবে আপনার যদি অস্তিত্বের বিষয়ে সচেতন হওয়ার প্রয়োজন হয় তবে যদি কেউ স্ট্রিং আক্ষরিক হয়ে যায়, তখন অপ্রত্যাশিত ফলাফলের কারণ হয়।
সিবি বেইলি

4
@ ডেভিড থর্নলি: বেশিরভাগ আধুনিক সিস্টেমগুলি প্রচলিত স্থানে না থাকলে বা টাইপ করার জন্য একটি সংশোধক ক্রম প্রয়োজন হলেও এমনকি সি ++ এর সমস্ত মৌলিক চরিত্রগুলিকে সমর্থন করে। ত্রিগ্রাফগুলি কেবলমাত্র সিস্টেমের উত্স কোডে বজায় রাখা দরকার যেখানে সিস্টেম অক্ষর সেটটিতে অক্ষরটি আসলে প্রতিনিধিত্ব করা যায় না। আমি এখনও বজায় রেখেছি যে এই ধরনের সিস্টেমগুলি অত্যন্ত বিরল।
সিবি বেইলি

9

সি ++ 0 এক্স-এ অপসারণের জন্য ত্রিগ্রাফগুলি প্রস্তাব করা হয়েছে। এটি বলেছিল, তাদের সমর্থনে এখনও দৃ strong় যুক্তি রয়েছে বলে মনে হচ্ছে - সি ++ কমিটির কাগজ এন 2910 দেখুন যা এটি আলোচনা করে। স্পষ্টতই, EBCDIC একটি প্রধান দুর্গ যেখানে তাদের প্রয়োজন।


হ্যাঁ, "বিদেশী ভাষা"! :-)
রোবপ্রোগ

তারা "গ্রাহকের প্রতিক্রিয়ার অভ্যন্তরীণ সমীক্ষার ফলাফল" ব্যতীত সত্যই বেশি কিছু বলে না, তবে আহা। আমি অবাক হয়েছি যে ইবিসিডিআইসি এখনও ব্যাপকভাবে ব্যবহারের মধ্যে রয়েছে (এবং এই সিস্টেমগুলি সি ++ 0 এক্স সংকলক ব্যবহারের প্রত্যাশা করে)
পিটারচেন

5

আমি পিসি তে চালানো / সংকলন / ডিবাগ করার জন্য মেইনফ্রেম থেকে পিএল / 1 প্রোগ্রাম রূপান্তর করতে 90 এর দশকের গোড়ার দিকে ব্যবহার করা ট্রাইগ্রাফ দেখেছি।

তারা পি.এল / আই থেকে সি সংকলক ব্যবহার করে পিসিতে পিএল / আই সম্পাদনা করে ছুঁড়ে মারছিল এবং তারা চাইছিল যে কোডটি মেনফ্রেমে ফিরে গেলে কোঁকড়া ধনুর্বন্ধনী সমর্থন করে না। আমি প্রস্তাব দিয়েছিলাম যে তারা ম্যাক্রোগুলির মতো ব্যবহার করতে পারে

#def BEGIN {    
#def END }  

বা বন্ধুত্বপূর্ণ পিএল / আই বিকল্প হিসাবে

#def BEGIN ??<
#def END ??>

এবং যদি তারা সত্যিই অভিনবতা পেতে চায় তবে তারা চেষ্টা করতে পারে

#ifdef MAINFRAME
    #def BEGIN ??<
    #def END ??>
#else
    #def BEGIN {    
    #def END }  
#endif

এবং তারপরে প্রোগ্রামটি দেখে মনে হবে এটি প্যাসকেলে লেখা হয়েছিল। তারা কেবল আমার দিকে মজার দিকে তাকিয়েছিল এবং সারা দিন আমার সাথে কথা বলত না। আমার মনে হয় না আমি তাদের দোষ দিই। :)

ত্রি-গ্রাফগুলি না করে কী প্রচেষ্টা নিহত হয়েছিল, এটি প্ল্যাটফর্মগুলির মধ্যে আইও সিস্টেমের পার্থক্য ছিল। পিসিতে ফাইল খোলা মেনফ্রেমের চেয়ে অনেক আলাদা ছিল এটি উভয় একই কোড চলমান রাখতে অনেকগুলি ক্লডেজ উপস্থাপন করত।


পিএল / 1 = আইবিএম এর সংস্করণ সি (আরও কম)। আমার মন্তব্য দেখুন: আইবিএম টার্মিনালের কোনও '{' / '}' কী নেই :-( এগুলির মধ্যে একটির উপরে সি [++] লিখতে খুব কঠিন, অন্যথায়
রোবপ্রোগ

3

প্রাথমিকভাবে কারণ সি স্ট্যান্ডার্ড 1989 সালে তাদের আবার পরিচয় করিয়ে দিয়েছিল, যখন কিছু মেশিনে মানচিত্রকে ট্রাইগ্রাফ করে এমন চরিত্রগুলির উপস্থিতি নিয়ে সমস্যা ছিল। ১৯৯৯ সালে সি ++ স্ট্যান্ডার্ড প্রকাশের পরে ত্রিগ্রাফের প্রয়োজনীয়তা খুব বেশি ছিল না। এগুলি সি-তে একটি মশাল; তারা সি ++ তে ঠিক যতটা ওয়ার্ট। তাদের প্রয়োজন ছিল - বিশেষত ইংরাজী-ভাষী বিশ্বের বাইরে - এ কারণেই এগুলি সি-তে যুক্ত করা হয়েছিল


1
আমি সবসময় সন্দেহ করেছিলাম যে আইবিএম ইংরেজি বলতে পারে না :-)
রোবপ্রোগ

3

কিছু ইউরোপীয় কীবোর্ডগুলিতে ইউএস কীবোর্ডগুলির সমস্ত বিরামচিহ্নগুলি নেই (না?), কারণ তাদের অস্বাভাবিক বর্ণমালা অক্ষরের জন্য কীগুলি দরকার ছিল। সুতরাং উদাহরণস্বরূপ (এটি তৈরি করা), সুইডিশ কীবোর্ডে কো-কোঁকড়া বন্ধনী ছিল এমন A-রিং থাকবে।

এই ব্যবহারকারীদের থাকার জন্য, ট্রিগ্রাফগুলি কেবলমাত্র সর্বাধিক সাধারণ ASCII অক্ষর ব্যবহার করে বিরামচিহ্নগুলিতে প্রবেশের একটি উপায়।


4
ত্রিগ্রাফগুলি আসলে ডেটা এন্ট্রি সম্পর্কে নয় (তারা কোডটি বেশ অপঠনযোগ্য করে তোলে), তারা এমন সিস্টেম সম্পর্কে আরও বেশি যা আসলে প্রয়োজনীয় অক্ষর রাখে না। যদি কোনও সিস্টেম চরিত্রটি রেকর্ড করতে ও প্রদর্শন করতে পারে - কী সিকোয়েন্সের মতো ট্রিগ্রাফ টাইপ করা প্রয়োজন - উত্সতে ট্রিগ্রাফের অনুক্রমটি ধরে রাখা না আরও সহজ।
সিবি বেইলি

2

এগুলি বেশিরভাগ historicalতিহাসিক কারণে রয়েছে। আজকাল, বেশিরভাগ ভাষার বেশিরভাগ আধুনিক কীবোর্ডগুলি সমস্ত অক্ষরগুলিতে অ্যাক্সেসের অনুমতি দেয় তবে কিছু ইউরোপীয় কীবোর্ডে এটি একসময় সমস্যা হয়ে উঠত। এই কারণেই ট্রাইগ্রাফগুলি আবিষ্কার করা হয়েছিল।

আপনি যদি জানেন না যে তারা কীসের জন্য আছেন তবে আপনার সেগুলি ব্যবহার করা উচিত নয়।

তাদের সম্পর্কে সচেতন হওয়া এখনও ভাল, যদিও আপনি দুর্ঘটনাক্রমে এবং অজান্তেই আপনার কোডটিতে একটি ব্যবহার করতে পারেন in

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.